diff --git a/README.md b/README.md index 9767152..90dbfd3 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ A second execution path is being built: an arrow-first translator that compiles AgentScript into [Sibyl](https://github.com/vinodhalaharvi/sibyl) DAGs for durable, Temporal-backed execution. The design is documented in [`docs/dsl-to-sibyl-translator.md`](docs/dsl-to-sibyl-translator.md); the -translator code is under `internal/agentscript/script/`. The existing +translator code is under `pkg/script/`. The existing in-process runtime continues to serve as the fast "memory" backend. ## Project Structure @@ -366,7 +366,7 @@ go test ./... go test -race ./... # A single package -go test ./internal/agentscript/script/... +go test ./pkg/script/... ``` CI (GitHub Actions) runs `go mod tidy`, `go vet -structtag=false`, `gofmt`, diff --git a/cmd/agentscript-run/main.go b/cmd/agentscript-run/main.go index 2396bd4..15be0aa 100644 --- a/cmd/agentscript-run/main.go +++ b/cmd/agentscript-run/main.go @@ -30,7 +30,7 @@ import ( sibyl "github.com/vinodhalaharvi/sibyl/agent" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script" + "github.com/vinodhalaharvi/agentscript/pkg/script" ) func main() { diff --git a/docs/dsl-to-sibyl-translator.md b/docs/dsl-to-sibyl-translator.md index b6d6740..2810c97 100644 --- a/docs/dsl-to-sibyl-translator.md +++ b/docs/dsl-to-sibyl-translator.md @@ -1,6 +1,6 @@ # AgentScript → Sibyl: DSL Translator Design Memo -**Status:** Partially implemented. Parse and Resolve are merged; Lower → Submit and the CLI are in progress. See "Implementation status" below. +**Status:** Translator MVP complete. The full pipeline (Parse → Resolve → Lower → Finalize → Validate → Submit) is merged and importable at `pkg/script/`; `echo` runs end-to-end against Sibyl's `PlanWorkflow`. See "Implementation status" below. **Companion repo:** [vinodhalaharvi/sibyl](https://github.com/vinodhalaharvi/sibyl) (the execution layer) **Implements against:** Sibyl's `agents.WithOAuth` behavior, `ConvergeWorkflow`, `ToolAgentArrow`, `SupervisorWorkflow`, and the existing DAG execution model. @@ -12,17 +12,25 @@ The translator is being built in slices (see §14). Current state: | Phase | Arrow | Status | |-------|-------|--------| -| Parse | `Arrow[Source, AST]` | **Merged** — `internal/agentscript/script/parse.go` | -| Resolve | `Arrow[AST, ResolvedAST]` | **Merged** — `internal/agentscript/script/resolve.go` + `registry/` | -| Lower | `Arrow[ResolvedAST, DAGFragment]` | Pending | -| Finalize | `Arrow[DAGFragment, sibyl.DAG]` | Pending | -| Validate | `Arrow[sibyl.DAG, sibyl.DAG]` | Pending | -| Submit | `Arrow[sibyl.DAG, WorkflowHandle]` | Pending | +| Parse | `Arrow[Source, AST]` | **Merged** — `pkg/script/parse.go` | +| Resolve | `Arrow[AST, ResolvedAST]` | **Merged** — `pkg/script/resolve.go` + `registry/` | +| Lower | `Arrow[ResolvedAST, Lowered]` | **Merged** — `pkg/script/lower.go` | +| Finalize | `Arrow[Lowered, sibyl.Plan]` | **Merged** — `pkg/script/lower.go` | +| Validate | `Arrow[sibyl.Plan, sibyl.Plan]` | **Merged** — `pkg/script/lower.go` | +| Submit | `Arrow[sibyl.Plan, WorkflowHandle]` | **Merged** — `pkg/script/submit.go` | + +The full pipeline (`Compile` = Parse..Validate, `Run` = Compile + Submit) +is in `pkg/script/submit.go`, importable from outside the module. The +lowering target is Sibyl's serializable `Plan` (a DAG of named-activity +references) executed by the generic `PlanWorkflow` — not the removed +in-process closure DAG. The first builtin, `echo`, binds to Sibyl's +`Echo` activity; the `agentscript-run` CLI compiles a `.as` file to a +Plan (`--dry-run` to print it, otherwise submit to a Temporal worker). On the Sibyl side, the convergence-primitive arrows this memo depends on (`ConvergeArrow`, `SupervisorArrow`; `ToolAgentArrow` already existed) are -merged. The sections below describe the full design; phases marked Pending -above are specified but not yet built. +merged, as are the serializable `Plan`, `PlanWorkflow`, and `Echo` +activity the translator lowers into. --- diff --git a/internal/agentscript/script/ast/ast.go b/pkg/script/ast/ast.go similarity index 100% rename from internal/agentscript/script/ast/ast.go rename to pkg/script/ast/ast.go diff --git a/internal/agentscript/script/builtins.go b/pkg/script/builtins.go similarity index 94% rename from internal/agentscript/script/builtins.go rename to pkg/script/builtins.go index 1fec008..d8a643b 100644 --- a/internal/agentscript/script/builtins.go +++ b/pkg/script/builtins.go @@ -12,7 +12,7 @@ package script import ( sibyl "github.com/vinodhalaharvi/sibyl/agent" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" ) // EchoSpec is the BuiltinSpec for the echo builtin. It takes one diff --git a/internal/agentscript/script/lower.go b/pkg/script/lower.go similarity index 97% rename from internal/agentscript/script/lower.go rename to pkg/script/lower.go index 14dc24e..835ae19 100644 --- a/internal/agentscript/script/lower.go +++ b/pkg/script/lower.go @@ -28,8 +28,8 @@ import ( sibyl "github.com/vinodhalaharvi/sibyl/agent" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/resolved" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script/resolved" ) // fragment is a partial plan under construction. Nodes accumulate as the diff --git a/internal/agentscript/script/lower_test.go b/pkg/script/lower_test.go similarity index 97% rename from internal/agentscript/script/lower_test.go rename to pkg/script/lower_test.go index 0728506..dd9b9bd 100644 --- a/internal/agentscript/script/lower_test.go +++ b/pkg/script/lower_test.go @@ -6,8 +6,8 @@ import ( sibyl "github.com/vinodhalaharvi/sibyl/agent" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" ) // compile is a helper: source → Plan via the full Compile pipeline using diff --git a/internal/agentscript/script/parse.go b/pkg/script/parse.go similarity index 98% rename from internal/agentscript/script/parse.go rename to pkg/script/parse.go index 7547fec..5465c28 100644 --- a/internal/agentscript/script/parse.go +++ b/pkg/script/parse.go @@ -25,7 +25,7 @@ import ( "github.com/alecthomas/participle/v2" "github.com/alecthomas/participle/v2/lexer" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" ) // === Parse arrow =========================================================== diff --git a/internal/agentscript/script/parse_test.go b/pkg/script/parse_test.go similarity index 98% rename from internal/agentscript/script/parse_test.go rename to pkg/script/parse_test.go index 746a8ab..53781f2 100644 --- a/internal/agentscript/script/parse_test.go +++ b/pkg/script/parse_test.go @@ -6,8 +6,8 @@ import ( "strings" "testing" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" ) // === Helpers =============================================================== diff --git a/internal/agentscript/script/registry/registry.go b/pkg/script/registry/registry.go similarity index 100% rename from internal/agentscript/script/registry/registry.go rename to pkg/script/registry/registry.go diff --git a/internal/agentscript/script/registry/registry_test.go b/pkg/script/registry/registry_test.go similarity index 97% rename from internal/agentscript/script/registry/registry_test.go rename to pkg/script/registry/registry_test.go index 3cfeeec..44e4333 100644 --- a/internal/agentscript/script/registry/registry_test.go +++ b/pkg/script/registry/registry_test.go @@ -3,7 +3,7 @@ package registry_test import ( "testing" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" ) func echoSpec() registry.BuiltinSpec { diff --git a/internal/agentscript/script/resolve.go b/pkg/script/resolve.go similarity index 96% rename from internal/agentscript/script/resolve.go rename to pkg/script/resolve.go index 7426bd6..fc9b295 100644 --- a/internal/agentscript/script/resolve.go +++ b/pkg/script/resolve.go @@ -17,9 +17,9 @@ import ( "fmt" "strings" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/resolved" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/resolved" ) // Resolve binds an AST to a Registry, producing a ResolvedAST. Because diff --git a/internal/agentscript/script/resolve_test.go b/pkg/script/resolve_test.go similarity index 96% rename from internal/agentscript/script/resolve_test.go rename to pkg/script/resolve_test.go index 8c29821..b87d695 100644 --- a/internal/agentscript/script/resolve_test.go +++ b/pkg/script/resolve_test.go @@ -5,10 +5,10 @@ import ( "errors" "testing" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/resolved" + "github.com/vinodhalaharvi/agentscript/pkg/script" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/resolved" ) // === Test registry helpers ================================================= diff --git a/internal/agentscript/script/resolved/resolved.go b/pkg/script/resolved/resolved.go similarity index 90% rename from internal/agentscript/script/resolved/resolved.go rename to pkg/script/resolved/resolved.go index 56a445f..9da3a8e 100644 --- a/internal/agentscript/script/resolved/resolved.go +++ b/pkg/script/resolved/resolved.go @@ -9,8 +9,8 @@ package resolved import ( - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/ast" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/ast" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" ) // AST is a fully resolved program: a list of resolved blocks. diff --git a/internal/agentscript/script/source.go b/pkg/script/source.go similarity index 100% rename from internal/agentscript/script/source.go rename to pkg/script/source.go diff --git a/internal/agentscript/script/submit.go b/pkg/script/submit.go similarity index 97% rename from internal/agentscript/script/submit.go rename to pkg/script/submit.go index e14f2ae..bdc2c92 100644 --- a/internal/agentscript/script/submit.go +++ b/pkg/script/submit.go @@ -19,7 +19,7 @@ import ( sibyl "github.com/vinodhalaharvi/sibyl/agent" - "github.com/vinodhalaharvi/agentscript/internal/agentscript/script/registry" + "github.com/vinodhalaharvi/agentscript/pkg/script/registry" ) // Compile runs Parse >>> Resolve >>> Lower >>> Finalize >>> Validate,