deepclause-sdk 0.0.88 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +418 -914
- package/dist/agent.d.ts +19 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +221 -4
- package/dist/agent.js.map +1 -1
- package/dist/cli/config.d.ts +323 -176
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +146 -188
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/index.d.ts +3 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +61 -425
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/login.d.ts +29 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +184 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/readline.d.ts +6 -0
- package/dist/cli/readline.d.ts.map +1 -0
- package/dist/cli/readline.js +15 -0
- package/dist/cli/readline.js.map +1 -0
- package/dist/cli/repl-bin.d.ts +9 -0
- package/dist/cli/repl-bin.d.ts.map +1 -0
- package/dist/cli/repl-bin.js +16 -0
- package/dist/cli/repl-bin.js.map +1 -0
- package/dist/cli/repl.d.ts +191 -0
- package/dist/cli/repl.d.ts.map +1 -0
- package/dist/cli/repl.js +1232 -0
- package/dist/cli/repl.js.map +1 -0
- package/dist/cli/run.d.ts +17 -18
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +196 -183
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/set-backend.d.ts +53 -0
- package/dist/cli/set-backend.d.ts.map +1 -0
- package/dist/cli/set-backend.js +259 -0
- package/dist/cli/set-backend.js.map +1 -0
- package/dist/cli/visualize.d.ts +38 -0
- package/dist/cli/visualize.d.ts.map +1 -0
- package/dist/cli/visualize.js +125 -0
- package/dist/cli/visualize.js.map +1 -0
- package/dist/compiler.d.ts +5 -52
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +4 -768
- package/dist/compiler.js.map +1 -1
- package/dist/index.d.ts +29 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -2
- package/dist/index.js.map +1 -1
- package/dist/judge/index.d.ts +9 -0
- package/dist/judge/index.d.ts.map +1 -0
- package/dist/judge/index.js +6 -0
- package/dist/judge/index.js.map +1 -0
- package/dist/judge/jev.d.ts +21 -0
- package/dist/judge/jev.d.ts.map +1 -0
- package/dist/judge/jev.js +218 -0
- package/dist/judge/jev.js.map +1 -0
- package/dist/judge/llm.d.ts +23 -0
- package/dist/judge/llm.d.ts.map +1 -0
- package/dist/judge/llm.js +120 -0
- package/dist/judge/llm.js.map +1 -0
- package/dist/judge/marshal.d.ts +26 -0
- package/dist/judge/marshal.d.ts.map +1 -0
- package/dist/judge/marshal.js +266 -0
- package/dist/judge/marshal.js.map +1 -0
- package/dist/judge/mock.d.ts +28 -0
- package/dist/judge/mock.d.ts.map +1 -0
- package/dist/judge/mock.js +98 -0
- package/dist/judge/mock.js.map +1 -0
- package/dist/judge/types.d.ts +95 -0
- package/dist/judge/types.d.ts.map +1 -0
- package/dist/judge/types.js +23 -0
- package/dist/judge/types.js.map +1 -0
- package/dist/prolog/bridge.d.ts +5 -1
- package/dist/prolog/bridge.d.ts.map +1 -1
- package/dist/prolog/bridge.js +29 -1
- package/dist/prolog/bridge.js.map +1 -1
- package/dist/prolog-src/deepclause_analysis.pl +10 -2
- package/dist/prolog-src/deepclause_mi.pl +2522 -118
- package/dist/repl/agent.d.ts +72 -0
- package/dist/repl/agent.d.ts.map +1 -0
- package/dist/repl/agent.js +366 -0
- package/dist/repl/agent.js.map +1 -0
- package/dist/repl/auth.d.ts +45 -0
- package/dist/repl/auth.d.ts.map +1 -0
- package/dist/repl/auth.js +116 -0
- package/dist/repl/auth.js.map +1 -0
- package/dist/repl/backend.d.ts +290 -0
- package/dist/repl/backend.d.ts.map +1 -0
- package/dist/repl/backend.js +370 -0
- package/dist/repl/backend.js.map +1 -0
- package/dist/repl/compaction.d.ts +122 -0
- package/dist/repl/compaction.d.ts.map +1 -0
- package/dist/repl/compaction.js +318 -0
- package/dist/repl/compaction.js.map +1 -0
- package/dist/repl/export.d.ts +30 -0
- package/dist/repl/export.d.ts.map +1 -0
- package/dist/repl/export.js +23 -0
- package/dist/repl/export.js.map +1 -0
- package/dist/repl/frames.d.ts +21 -0
- package/dist/repl/frames.d.ts.map +1 -0
- package/dist/repl/frames.js +79 -0
- package/dist/repl/frames.js.map +1 -0
- package/dist/repl/harness-tools.d.ts +74 -0
- package/dist/repl/harness-tools.d.ts.map +1 -0
- package/dist/repl/harness-tools.js +121 -0
- package/dist/repl/harness-tools.js.map +1 -0
- package/dist/repl/highlight.d.ts +30 -0
- package/dist/repl/highlight.d.ts.map +1 -0
- package/dist/repl/highlight.js +285 -0
- package/dist/repl/highlight.js.map +1 -0
- package/dist/repl/history.d.ts +234 -0
- package/dist/repl/history.d.ts.map +1 -0
- package/dist/repl/history.js +661 -0
- package/dist/repl/history.js.map +1 -0
- package/dist/repl/index.d.ts +120 -0
- package/dist/repl/index.d.ts.map +1 -0
- package/dist/repl/index.js +107 -0
- package/dist/repl/index.js.map +1 -0
- package/dist/repl/judge.d.ts +51 -0
- package/dist/repl/judge.d.ts.map +1 -0
- package/dist/repl/judge.js +58 -0
- package/dist/repl/judge.js.map +1 -0
- package/dist/repl/markdown.d.ts +25 -0
- package/dist/repl/markdown.d.ts.map +1 -0
- package/dist/repl/markdown.js +103 -0
- package/dist/repl/markdown.js.map +1 -0
- package/dist/repl/picker.d.ts +34 -0
- package/dist/repl/picker.d.ts.map +1 -0
- package/dist/repl/picker.js +81 -0
- package/dist/repl/picker.js.map +1 -0
- package/dist/repl/project-context.d.ts +16 -0
- package/dist/repl/project-context.d.ts.map +1 -0
- package/dist/repl/project-context.js +23 -0
- package/dist/repl/project-context.js.map +1 -0
- package/dist/repl/render.d.ts +160 -0
- package/dist/repl/render.d.ts.map +1 -0
- package/dist/repl/render.js +715 -0
- package/dist/repl/render.js.map +1 -0
- package/dist/repl/session.d.ts +356 -0
- package/dist/repl/session.d.ts.map +1 -0
- package/dist/repl/session.js +1275 -0
- package/dist/repl/session.js.map +1 -0
- package/dist/repl/status.d.ts +100 -0
- package/dist/repl/status.d.ts.map +1 -0
- package/dist/repl/status.js +218 -0
- package/dist/repl/status.js.map +1 -0
- package/dist/repl/tools.d.ts +53 -0
- package/dist/repl/tools.d.ts.map +1 -0
- package/dist/repl/tools.js +307 -0
- package/dist/repl/tools.js.map +1 -0
- package/dist/repl/toolset.d.ts +32 -0
- package/dist/repl/toolset.d.ts.map +1 -0
- package/dist/repl/toolset.js +82 -0
- package/dist/repl/toolset.js.map +1 -0
- package/dist/repl/tui/editor.d.ts +17 -0
- package/dist/repl/tui/editor.d.ts.map +1 -0
- package/dist/repl/tui/editor.js +39 -0
- package/dist/repl/tui/editor.js.map +1 -0
- package/dist/repl/tui/status-bar.d.ts +26 -0
- package/dist/repl/tui/status-bar.d.ts.map +1 -0
- package/dist/repl/tui/status-bar.js +47 -0
- package/dist/repl/tui/status-bar.js.map +1 -0
- package/dist/repl/tui/theme.d.ts +30 -0
- package/dist/repl/tui/theme.d.ts.map +1 -0
- package/dist/repl/tui/theme.js +81 -0
- package/dist/repl/tui/theme.js.map +1 -0
- package/dist/repl/tui/transcript.d.ts +39 -0
- package/dist/repl/tui/transcript.d.ts.map +1 -0
- package/dist/repl/tui/transcript.js +123 -0
- package/dist/repl/tui/transcript.js.map +1 -0
- package/dist/runner.d.ts +145 -13
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +600 -282
- package/dist/runner.js.map +1 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +56 -32
- package/dist/sdk.js.map +1 -1
- package/dist/system/assets/docs/AGENT_PROMPT.md +1373 -0
- package/dist/system/assets/docs/DML_AUTHORING.md +195 -0
- package/dist/system/assets/docs/DML_REFERENCE.md +393 -72
- package/dist/system/assets/docs/HARNESS_EXAMPLES.md +172 -0
- package/dist/system/assets/docs/HARNESS_PATTERNS.md +562 -0
- package/dist/system/assets/docs/META_PROMPT.md +68 -0
- package/dist/system/assets/docs/PROLOG_SNIPPETS.md +117 -0
- package/dist/system/assets/index.d.ts +9 -17
- package/dist/system/assets/index.d.ts.map +1 -1
- package/dist/system/assets/index.js +26 -85
- package/dist/system/assets/index.js.map +1 -1
- package/dist/system/runtime/agentvm-manager.d.ts +9 -2
- package/dist/system/runtime/agentvm-manager.d.ts.map +1 -1
- package/dist/system/runtime/agentvm-manager.js +70 -44
- package/dist/system/runtime/agentvm-manager.js.map +1 -1
- package/dist/system/runtime/media.d.ts +23 -0
- package/dist/system/runtime/media.d.ts.map +1 -0
- package/dist/system/runtime/media.js +55 -0
- package/dist/system/runtime/media.js.map +1 -0
- package/dist/system/runtime/shell-limits.d.ts +21 -0
- package/dist/system/runtime/shell-limits.d.ts.map +1 -0
- package/dist/system/runtime/shell-limits.js +39 -0
- package/dist/system/runtime/shell-limits.js.map +1 -0
- package/dist/system/runtime/shell-manager.d.ts +8 -3
- package/dist/system/runtime/shell-manager.d.ts.map +1 -1
- package/dist/system/runtime/shell-manager.js +56 -39
- package/dist/system/runtime/shell-manager.js.map +1 -1
- package/dist/system/runtime/shell-tool-events.js +5 -0
- package/dist/system/runtime/shell-tool-events.js.map +1 -1
- package/dist/system/runtime/token-usage.d.ts +2 -0
- package/dist/system/runtime/token-usage.d.ts.map +1 -1
- package/dist/system/runtime/token-usage.js +7 -0
- package/dist/system/runtime/token-usage.js.map +1 -1
- package/dist/tools.d.ts +3 -21
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +14 -168
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +149 -118
- package/dist/types.d.ts.map +1 -1
- package/dist/validate.d.ts +19 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +338 -0
- package/dist/validate.js.map +1 -0
- package/dist/visualize/index.d.ts +52 -0
- package/dist/visualize/index.d.ts.map +1 -0
- package/dist/visualize/index.js +189 -0
- package/dist/visualize/index.js.map +1 -0
- package/package.json +17 -15
- package/src/prolog-src/deepclause_analysis.pl +10 -2
- package/src/prolog-src/deepclause_mi.pl +2522 -118
- package/dist/cli/commands.d.ts +0 -42
- package/dist/cli/commands.d.ts.map +0 -1
- package/dist/cli/commands.js +0 -246
- package/dist/cli/commands.js.map +0 -1
- package/dist/cli/compile.d.ts +0 -99
- package/dist/cli/compile.d.ts.map +0 -1
- package/dist/cli/compile.js +0 -363
- package/dist/cli/compile.js.map +0 -1
- package/dist/cli/default-skills.d.ts +0 -10
- package/dist/cli/default-skills.d.ts.map +0 -1
- package/dist/cli/default-skills.js +0 -206
- package/dist/cli/default-skills.js.map +0 -1
- package/dist/cli/interactive.d.ts +0 -2
- package/dist/cli/interactive.d.ts.map +0 -1
- package/dist/cli/interactive.js +0 -20
- package/dist/cli/interactive.js.map +0 -1
- package/dist/cli/mcp.d.ts +0 -56
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/mcp.js +0 -138
- package/dist/cli/mcp.js.map +0 -1
- package/dist/cli/prompt.d.ts +0 -2
- package/dist/cli/prompt.d.ts.map +0 -1
- package/dist/cli/prompt.js +0 -2
- package/dist/cli/prompt.js.map +0 -1
- package/dist/cli/search.d.ts +0 -19
- package/dist/cli/search.d.ts.map +0 -1
- package/dist/cli/search.js +0 -189
- package/dist/cli/search.js.map +0 -1
- package/dist/cli/tool-args.d.ts +0 -2
- package/dist/cli/tool-args.d.ts.map +0 -1
- package/dist/cli/tool-args.js +0 -39
- package/dist/cli/tool-args.js.map +0 -1
- package/dist/cli/tools.d.ts +0 -36
- package/dist/cli/tools.d.ts.map +0 -1
- package/dist/cli/tools.js +0 -229
- package/dist/cli/tools.js.map +0 -1
- package/dist/cli/tui/index.d.ts +0 -22
- package/dist/cli/tui/index.d.ts.map +0 -1
- package/dist/cli/tui/index.js +0 -29
- package/dist/cli/tui/index.js.map +0 -1
- package/dist/cli/tui.d.ts +0 -167
- package/dist/cli/tui.d.ts.map +0 -1
- package/dist/cli/tui.js +0 -5228
- package/dist/cli/tui.js.map +0 -1
- package/dist/compiler_prompt.d.ts +0 -20
- package/dist/compiler_prompt.d.ts.map +0 -1
- package/dist/compiler_prompt.js +0 -870
- package/dist/compiler_prompt.js.map +0 -1
- package/dist/deepclause-cli.skill +0 -0
- package/dist/prolog-src/deepclause_mi.pl.bak +0 -570
- package/dist/system/assets/compactors/default-memory-compactor.dml +0 -6
- package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +0 -105
- package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +0 -700
- package/dist/system/assets/docs/TUI.md +0 -150
- package/dist/system/assets/recipes/deepclause-coding-workflow/SKILL.md +0 -100
- package/dist/system/assets/skills/conductor.dml +0 -76
- package/dist/system/assets/skills/deep-planner.dml +0 -412
- package/dist/system/assets/skills/plan.dml +0 -429
- package/dist/system/assets/skills/security-planner.dml +0 -337
- package/dist/system/assets/skills/skill-creator.dml +0 -187
- package/dist/system/runtime/catalog-recipes.d.ts +0 -24
- package/dist/system/runtime/catalog-recipes.d.ts.map +0 -1
- package/dist/system/runtime/catalog-recipes.js +0 -273
- package/dist/system/runtime/catalog-recipes.js.map +0 -1
- package/dist/system/runtime/catalog-skills.d.ts +0 -50
- package/dist/system/runtime/catalog-skills.d.ts.map +0 -1
- package/dist/system/runtime/catalog-skills.js +0 -152
- package/dist/system/runtime/catalog-skills.js.map +0 -1
- package/dist/system/runtime/conductor.d.ts +0 -105
- package/dist/system/runtime/conductor.d.ts.map +0 -1
- package/dist/system/runtime/conductor.js +0 -732
- package/dist/system/runtime/conductor.js.map +0 -1
- package/dist/system/runtime/console-capture.d.ts +0 -9
- package/dist/system/runtime/console-capture.d.ts.map +0 -1
- package/dist/system/runtime/console-capture.js +0 -67
- package/dist/system/runtime/console-capture.js.map +0 -1
- package/dist/system/runtime/dml-executor.d.ts +0 -52
- package/dist/system/runtime/dml-executor.d.ts.map +0 -1
- package/dist/system/runtime/dml-executor.js +0 -203
- package/dist/system/runtime/dml-executor.js.map +0 -1
- package/dist/system/runtime/runtime-tools.d.ts +0 -31
- package/dist/system/runtime/runtime-tools.d.ts.map +0 -1
- package/dist/system/runtime/runtime-tools.js +0 -312
- package/dist/system/runtime/runtime-tools.js.map +0 -1
- package/dist/system/runtime/skill-creator.d.ts +0 -38
- package/dist/system/runtime/skill-creator.d.ts.map +0 -1
- package/dist/system/runtime/skill-creator.js +0 -763
- package/dist/system/runtime/skill-creator.js.map +0 -1
- package/src/prolog-src/deepclause_mi.pl.bak +0 -570
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Common Prolog/DML snippets (tested)
|
|
2
|
+
|
|
3
|
+
Tested against the bundled SWI-Prolog. These are **glue**, not the shape of a
|
|
4
|
+
skill: use a snippet to bind or check a value between `task/N` steps, not to
|
|
5
|
+
write a Prolog algorithm. Prefer a `task/N`/`prompt/N` step when the
|
|
6
|
+
transformation is open-ended (`DML_AUTHORING.md` §0).
|
|
7
|
+
`Y` is the output; `>>` introduces a yall lambda.
|
|
8
|
+
|
|
9
|
+
## Strings
|
|
10
|
+
|
|
11
|
+
| Task | Snippet | Result |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Split on a separator | `split_string("a,b,,c", ",", "", L)` | `[a,b,'',c]` |
|
|
14
|
+
| Join | `atomic_list_concat([a,b,c], "-", S)` | `a-b-c` |
|
|
15
|
+
| Join (strings) | `atomics_to_string([a,b,c], "-", S)` | `a-b-c` |
|
|
16
|
+
| Lower / upper | `string_lower("AbC", L)` / `string_upper("AbC", U)` | `abc` / `ABC` |
|
|
17
|
+
| Atom case | `downcase_atom('ABC', L)` / `upcase_atom('abc', U)` | `abc` / `ABC` |
|
|
18
|
+
| Collapse whitespace | `normalize_space(string(T), " a b ")` | `a b` |
|
|
19
|
+
| Build a string | `format(string(S), "~w/~w", [A, B])` | `a/b` |
|
|
20
|
+
| Number <-> string | `number_string(42, S)` / `atom_number("42", N)` | `"42"` / `42` |
|
|
21
|
+
| Substring test | `sub_string(S, _, _, _, "needle")` | true |
|
|
22
|
+
| Substring test (atom) | `sub_atom(A, _, _, _, needle)` | true |
|
|
23
|
+
| Concat | `string_concat("a", "b", S)` | `ab` |
|
|
24
|
+
| Char list | `string_chars("abc", L)` | `[a,b,c]` |
|
|
25
|
+
| JSON string -> dict | `atom_json_dict('{"a":[1,2]}', D, []), get_dict(a, D, A)` | `[1,2]` |
|
|
26
|
+
|
|
27
|
+
In `task/`, `output/`, `answer/` description strings, `{Var}` interpolates the
|
|
28
|
+
bound value; in `format/3` use `~w`.
|
|
29
|
+
|
|
30
|
+
## Regex (SWI PCRE — verified behavior)
|
|
31
|
+
|
|
32
|
+
| Task | Snippet | Result |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| Match test | `re_match("^[a-z]+[0-9]+$", S)` | true/false |
|
|
35
|
+
| Match with options | `re_match("(?i)hello", S, [])` | true (case-insensitive) |
|
|
36
|
+
| Capture groups | `re_matchsub("(?<user>[a-z]+)-(?<id>[0-9]+)", S, M, []), get_dict(id, M, Id)` | dict `_{0:..., user:..., id:...}` |
|
|
37
|
+
| Replace (first match) | `re_replace("[0-9]+", "#", "a1b22c333", R)` | `a#b22c333` |
|
|
38
|
+
| Collect every match | `re_foldl([M,Acc,[M|Acc]]>>true, "[0-9]+", "a1b22c333", [], L, []), reverse(L, Ms)` | `[_{0:"1"},_{0:"22"},_{0:"333"}]` |
|
|
39
|
+
|
|
40
|
+
Notes: `re_replace/4` here replaces only the **first** match — collect all matches
|
|
41
|
+
with `re_foldl/6` (or loop) to replace every one. `re_match/3` takes an options
|
|
42
|
+
list, not a capture variable; use `re_matchsub/4` to capture groups. Prefix a
|
|
43
|
+
pattern with `(?i)` for case-insensitive matching.
|
|
44
|
+
|
|
45
|
+
## Wildcards (`wildcard_match/2`)
|
|
46
|
+
|
|
47
|
+
| Pattern | Example | Result |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `*` any run | `wildcard_match("*.dml", "skill.dml")` | true |
|
|
50
|
+
| `?` one char | `wildcard_match("a?c", "abc")` | true |
|
|
51
|
+
| `[a-z]` class | `wildcard_match("[a-z]*", "abc")` | true |
|
|
52
|
+
| `{a,b}` alternation | `wildcard_match("{a,b}*", "bzz")` | true |
|
|
53
|
+
|
|
54
|
+
## Lists
|
|
55
|
+
|
|
56
|
+
| Task | Snippet | Result |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| Membership | `member(X, [1,2,3])` | enumerates |
|
|
59
|
+
| Concatenate | `append([1,2], [3], L)` | `[1,2,3]` |
|
|
60
|
+
| Length | `length([a,b,c], N)` | `3` |
|
|
61
|
+
| Enumerate range | `numlist(1, 5, L)` | `[1,2,3,4,5]` |
|
|
62
|
+
| Collect | `findall(X, between(1,3,X), L)` | `[1,2,3]` |
|
|
63
|
+
| Map | `maplist([X,Y]>>(Y is X*X), [1,2,3], L)` | `[1,4,9]` |
|
|
64
|
+
| Filter (keep) | `include([X]>>(0 is X mod 2), [1,2,3,4], L)` | `[2,4]` |
|
|
65
|
+
| Filter (drop) | `exclude([X]>>(0 is X mod 2), [1,2,3,4], L)` | `[1,3]` |
|
|
66
|
+
| Fold | `foldl([X,A0,A]>>(A is A0+X), [1,2,3], 0, S)` | `6` |
|
|
67
|
+
| Sum / min / max | `sum_list([1,2,3], S)` / `min_list/2` / `max_list/2` / `max_member/2` | `6` |
|
|
68
|
+
| Aggregate | `aggregate_all(sum(X), member(X,[1,2,3]), S)` | `6` |
|
|
69
|
+
| Count | `aggregate_all(count, between(1,5,_), N)` | `5` |
|
|
70
|
+
| Sort + dedupe | `sort([3,1,2,1], L)` | `[1,2,3]` |
|
|
71
|
+
| Stable sort | `msort([3,1,2], L)` | `[1,2,3]` |
|
|
72
|
+
| Sort by value (pairs) | `sort(2, @>=, [a-1,b-3,c-2], L)` | `[b-3,c-2,a-1]` |
|
|
73
|
+
| Key sort (stable) | `keysort([b-2,a-1,c-2], L)` | `[a-1,b-2,c-2]` |
|
|
74
|
+
| Dedupe | `list_to_set([a,b,a,c], L)` | `[a,b,c]` |
|
|
75
|
+
| Set difference | `subtract([1,2,3,4], [2], L)` | `[1,3,4]` |
|
|
76
|
+
| Intersection / union | `intersection([1,2,3],[2,3,4],L)` / `union([1,2],[2,3],L)` | `[2,3]` / `[1,2,3]` |
|
|
77
|
+
| Partition | `partition([X]>>(0 is X mod 2), [1,2,3,4], E, O)` | `E=[2,4], O=[1,3]` |
|
|
78
|
+
| Index (0-based) | `nth0(1, [a,b,c], E)` | `b` |
|
|
79
|
+
| Last | `last([a,b,c], E)` | `c` |
|
|
80
|
+
| Group by key | `group_pairs_by_key([a-1,a-2,b-3], G)` | `[a-[1,2], b-[3]]` |
|
|
81
|
+
|
|
82
|
+
`sort/4`'s first argument is the **argument position** to sort on (here `2` =
|
|
83
|
+
the value in each `Key-Value`), not a sort mode.
|
|
84
|
+
|
|
85
|
+
## Dicts and data
|
|
86
|
+
|
|
87
|
+
| Task | Snippet |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Read a field | `D = point{x:1,y:2}, get_dict(x, D, X)` |
|
|
90
|
+
| Keys | `dict_keys(a{x:1,y:2}, K)` → `[x,y]` |
|
|
91
|
+
| Add/replace a field | `put_dict(score, a{name:"n"}, 9, D2)` |
|
|
92
|
+
|
|
93
|
+
## Numbers and time
|
|
94
|
+
|
|
95
|
+
| Task | Snippet |
|
|
96
|
+
|---|---|
|
|
97
|
+
| Range (generator) | `between(1, 6, N)` |
|
|
98
|
+
| Random int in range | `random_between(1, 6, N)` |
|
|
99
|
+
| Epoch seconds | `get_time(T)` |
|
|
100
|
+
| Broken-down time | `get_time(T), stamp_date_time(T, DT, local)` |
|
|
101
|
+
| Format a time | `format_time(string(S), "%Y-%m-%d", 1700000000)` → `2023-11-15` |
|
|
102
|
+
|
|
103
|
+
## Things that bite
|
|
104
|
+
|
|
105
|
+
- `re_replace/4` replaces only the **first** match (verified); use `re_foldl/6`
|
|
106
|
+
to collect all matches.
|
|
107
|
+
- `re_match/3` takes an options list; use `re_matchsub/4` for capture groups.
|
|
108
|
+
- `sort/4`'s first argument is the argument position, not a mode.
|
|
109
|
+
- A top-level `:- use_module(library(clpfd)).` is required before `#=`/`ins`.
|
|
110
|
+
- Untrusted data (URLs, file contents, user text) goes through files/stdin,
|
|
111
|
+
never interpolated into a shell command.
|
|
112
|
+
- `{Var}` interpolates **only** in `task/N`/`prompt/N` descriptions; use
|
|
113
|
+
`format/3` (`~w`/`~q`/`~s`) everywhere else. A string literal escapes `\n`,
|
|
114
|
+
`\"`, `\\`; a quoted atom doubles `'` (`'it''s'`).
|
|
115
|
+
- Building a command: single-quote known paths/flags, pass data via files/stdin,
|
|
116
|
+
never splice untrusted text in. Write foreign code to a file (quoted heredoc
|
|
117
|
+
`<<'EOF'`) rather than embedding it in a DML string.
|
|
@@ -1,26 +1,18 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export type
|
|
3
|
-
export type SystemCompactorAssetName = 'default-session-compactor' | 'default-loop-compactor';
|
|
4
|
-
export type WorkspaceDocAssetName = 'tui' | 'dml-reference';
|
|
1
|
+
export type SystemPromptAssetName = 'task';
|
|
2
|
+
export type WorkspaceDocAssetName = 'dml-reference' | 'dml-authoring' | 'harness-examples' | 'harness-patterns' | 'prolog-snippets';
|
|
5
3
|
interface SystemAssetLookupOptions {
|
|
6
4
|
workspaceRoot?: string;
|
|
7
5
|
workspacePath?: string;
|
|
8
6
|
}
|
|
9
|
-
export declare function getSystemSkillAssetPath(name: SystemSkillAssetName): string;
|
|
10
7
|
export declare function getSystemPromptAssetPath(name: SystemPromptAssetName): string;
|
|
11
|
-
export declare function getSystemCompactorAssetPath(name: SystemCompactorAssetName): string;
|
|
12
8
|
export declare function getWorkspaceDocAssetPath(name: WorkspaceDocAssetName): string;
|
|
13
|
-
|
|
14
|
-
export declare function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
skillCreatorPrompt: string;
|
|
21
|
-
taskPrompt: string;
|
|
22
|
-
};
|
|
23
|
-
export declare function readSystemSkillAsset(name: SystemSkillAssetName, options?: SystemAssetLookupOptions): Promise<string>;
|
|
9
|
+
/** Bundled authoring-agent system prompt (`AGENT_PROMPT.md`). */
|
|
10
|
+
export declare function getAgentPromptAssetPath(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Read the authoring-agent system prompt, preferring a workspace override at
|
|
13
|
+
* `.deepclause/system/AGENT_PROMPT.md` over the bundled asset.
|
|
14
|
+
*/
|
|
15
|
+
export declare function readAgentPromptAsset(options?: SystemAssetLookupOptions): Promise<string>;
|
|
24
16
|
export declare function readSystemPromptAsset(name: SystemPromptAssetName, options?: SystemAssetLookupOptions): Promise<string>;
|
|
25
17
|
export {};
|
|
26
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/system/assets/index.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/system/assets/index.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,qBAAqB,GAC7B,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,CAAC;AAOtB,UAAU,wBAAwB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AASD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAE5E;AAkBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAE5E;AAED,iEAAiE;AACjE,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC,CAUlG;AAkDD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,qBAAqB,EAC3B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -4,68 +4,53 @@ import { dirname, join, resolve } from 'path';
|
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
6
|
const __dirname = dirname(__filename);
|
|
7
|
-
const SKILLS_DIR = join(__dirname, 'skills');
|
|
8
|
-
const COMPACTORS_DIR = join(__dirname, 'compactors');
|
|
9
7
|
const DOCS_DIR = join(__dirname, 'docs');
|
|
10
|
-
const RECIPES_DIR = join(__dirname, 'recipes');
|
|
11
8
|
const SYSTEM_OVERRIDE_DIR = '.deepclause/system';
|
|
12
|
-
function getSystemSkillFileName(name) {
|
|
13
|
-
switch (name) {
|
|
14
|
-
case 'conductor':
|
|
15
|
-
return 'conductor.dml';
|
|
16
|
-
case 'skill-creator':
|
|
17
|
-
return 'skill-creator.dml';
|
|
18
|
-
case 'plan':
|
|
19
|
-
return 'plan.dml';
|
|
20
|
-
case 'deep-planner':
|
|
21
|
-
return 'deep-planner.dml';
|
|
22
|
-
case 'security-planner':
|
|
23
|
-
return 'security-planner.dml';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
9
|
function getSystemPromptFileName(name) {
|
|
27
10
|
switch (name) {
|
|
28
|
-
case 'conductor':
|
|
29
|
-
return 'CONDUCTOR_PROMPT.md';
|
|
30
|
-
case 'skill-creator':
|
|
31
|
-
return 'DML_COMPILER_PROMPT.md';
|
|
32
11
|
case 'task':
|
|
33
12
|
return 'TASK_PROMPT.md';
|
|
34
13
|
}
|
|
35
14
|
}
|
|
36
|
-
function getSystemCompactorFileName(name) {
|
|
37
|
-
switch (name) {
|
|
38
|
-
case 'default-session-compactor':
|
|
39
|
-
return 'default-session-compactor.dml';
|
|
40
|
-
case 'default-loop-compactor':
|
|
41
|
-
return 'default-loop-compactor.dml';
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
export function getSystemSkillAssetPath(name) {
|
|
45
|
-
return join(SKILLS_DIR, getSystemSkillFileName(name));
|
|
46
|
-
}
|
|
47
15
|
export function getSystemPromptAssetPath(name) {
|
|
48
16
|
return join(DOCS_DIR, getSystemPromptFileName(name));
|
|
49
17
|
}
|
|
50
|
-
export function getSystemCompactorAssetPath(name) {
|
|
51
|
-
return join(COMPACTORS_DIR, getSystemCompactorFileName(name));
|
|
52
|
-
}
|
|
53
18
|
function getWorkspaceDocFileName(name) {
|
|
54
19
|
switch (name) {
|
|
55
|
-
case 'tui':
|
|
56
|
-
return 'TUI.md';
|
|
57
20
|
case 'dml-reference':
|
|
58
21
|
return 'DML_REFERENCE.md';
|
|
22
|
+
case 'dml-authoring':
|
|
23
|
+
return 'DML_AUTHORING.md';
|
|
24
|
+
case 'harness-examples':
|
|
25
|
+
return 'HARNESS_EXAMPLES.md';
|
|
26
|
+
case 'harness-patterns':
|
|
27
|
+
return 'HARNESS_PATTERNS.md';
|
|
28
|
+
case 'prolog-snippets':
|
|
29
|
+
return 'PROLOG_SNIPPETS.md';
|
|
59
30
|
}
|
|
60
31
|
}
|
|
61
32
|
export function getWorkspaceDocAssetPath(name) {
|
|
62
33
|
return join(DOCS_DIR, getWorkspaceDocFileName(name));
|
|
63
34
|
}
|
|
64
|
-
|
|
65
|
-
|
|
35
|
+
/** Bundled authoring-agent system prompt (`AGENT_PROMPT.md`). */
|
|
36
|
+
export function getAgentPromptAssetPath() {
|
|
37
|
+
return join(DOCS_DIR, 'AGENT_PROMPT.md');
|
|
66
38
|
}
|
|
67
|
-
|
|
68
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Read the authoring-agent system prompt, preferring a workspace override at
|
|
41
|
+
* `.deepclause/system/AGENT_PROMPT.md` over the bundled asset.
|
|
42
|
+
*/
|
|
43
|
+
export async function readAgentPromptAsset(options = {}) {
|
|
44
|
+
const overridePath = findWorkspaceOverridePathSync('AGENT_PROMPT.md', options);
|
|
45
|
+
if (overridePath) {
|
|
46
|
+
try {
|
|
47
|
+
return await readFile(overridePath, 'utf8');
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Fall through to the bundled asset.
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return readFile(getAgentPromptAssetPath(), 'utf8');
|
|
69
54
|
}
|
|
70
55
|
function getWorkspaceOverridePath(workspaceRoot, fileName) {
|
|
71
56
|
return join(workspaceRoot, SYSTEM_OVERRIDE_DIR, fileName);
|
|
@@ -91,19 +76,6 @@ function findWorkspaceOverridePathSync(fileName, options = {}) {
|
|
|
91
76
|
}
|
|
92
77
|
return null;
|
|
93
78
|
}
|
|
94
|
-
async function resolveSystemSkillAssetPath(name, options = {}) {
|
|
95
|
-
const overridePath = findWorkspaceOverridePathSync(getSystemSkillFileName(name), options);
|
|
96
|
-
if (overridePath) {
|
|
97
|
-
try {
|
|
98
|
-
await access(overridePath);
|
|
99
|
-
return overridePath;
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
// Fall back to the packaged asset when no workspace override exists.
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return getSystemSkillAssetPath(name);
|
|
106
|
-
}
|
|
107
79
|
async function resolveSystemPromptAssetPath(name, options = {}) {
|
|
108
80
|
const overridePath = findWorkspaceOverridePathSync(getSystemPromptFileName(name), options);
|
|
109
81
|
if (overridePath) {
|
|
@@ -117,37 +89,6 @@ async function resolveSystemPromptAssetPath(name, options = {}) {
|
|
|
117
89
|
}
|
|
118
90
|
return getSystemPromptAssetPath(name);
|
|
119
91
|
}
|
|
120
|
-
function resolveSystemSkillAssetPathSync(name, workspaceRoot) {
|
|
121
|
-
if (workspaceRoot) {
|
|
122
|
-
const overridePath = getWorkspaceOverridePath(workspaceRoot, getSystemSkillFileName(name));
|
|
123
|
-
if (existsSync(overridePath)) {
|
|
124
|
-
return overridePath;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return getSystemSkillAssetPath(name);
|
|
128
|
-
}
|
|
129
|
-
function resolveSystemPromptAssetPathSync(name, workspaceRoot) {
|
|
130
|
-
if (workspaceRoot) {
|
|
131
|
-
const overridePath = getWorkspaceOverridePath(workspaceRoot, getSystemPromptFileName(name));
|
|
132
|
-
if (existsSync(overridePath)) {
|
|
133
|
-
return overridePath;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return getSystemPromptAssetPath(name);
|
|
137
|
-
}
|
|
138
|
-
export function getSystemAssetSourcePaths(workspaceRoot) {
|
|
139
|
-
return {
|
|
140
|
-
conductorDml: resolveSystemSkillAssetPathSync('conductor', workspaceRoot),
|
|
141
|
-
conductorPrompt: resolveSystemPromptAssetPathSync('conductor', workspaceRoot),
|
|
142
|
-
planDml: resolveSystemSkillAssetPathSync('plan', workspaceRoot),
|
|
143
|
-
skillCreatorDml: resolveSystemSkillAssetPathSync('skill-creator', workspaceRoot),
|
|
144
|
-
skillCreatorPrompt: resolveSystemPromptAssetPathSync('skill-creator', workspaceRoot),
|
|
145
|
-
taskPrompt: resolveSystemPromptAssetPathSync('task', workspaceRoot),
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
export async function readSystemSkillAsset(name, options = {}) {
|
|
149
|
-
return readFile(await resolveSystemSkillAssetPath(name, options), 'utf8');
|
|
150
|
-
}
|
|
151
92
|
export async function readSystemPromptAsset(name, options = {}) {
|
|
152
93
|
return readFile(await resolveSystemPromptAssetPath(name, options), 'utf8');
|
|
153
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/system/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/system/assets/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,12 @@ export interface ShellExecResult {
|
|
|
7
7
|
pid?: number;
|
|
8
8
|
backend: 'host' | 'sandbox';
|
|
9
9
|
backendLabel?: string;
|
|
10
|
+
/** Wall-clock duration of the command, in milliseconds. */
|
|
11
|
+
timeMs: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ShellExecOptions {
|
|
14
|
+
/** Wall-clock timeout in ms; overrides `DC_HOST_SHELL_TIMEOUT_MS`. 0 disables. */
|
|
15
|
+
timeoutMs?: number;
|
|
10
16
|
}
|
|
11
17
|
export interface ShellExecStartEvent {
|
|
12
18
|
command: string;
|
|
@@ -39,10 +45,11 @@ export interface ShellExecObserver {
|
|
|
39
45
|
export declare class AgentVMManager {
|
|
40
46
|
private readonly workspacePath;
|
|
41
47
|
private readonly network;
|
|
48
|
+
private readonly defaultTimeoutMs?;
|
|
42
49
|
private vm;
|
|
43
50
|
readonly kind: "sandbox";
|
|
44
|
-
constructor(workspacePath: string, network: boolean);
|
|
45
|
-
exec(command: string, signal?: AbortSignal, observer?: ShellExecObserver): Promise<ShellExecResult>;
|
|
51
|
+
constructor(workspacePath: string, network: boolean, defaultTimeoutMs?: number | undefined);
|
|
52
|
+
exec(command: string, signal?: AbortSignal, observer?: ShellExecObserver, options?: ShellExecOptions): Promise<ShellExecResult>;
|
|
46
53
|
dispose(): Promise<void>;
|
|
47
54
|
private getVM;
|
|
48
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentvm-manager.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/agentvm-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agentvm-manager.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/agentvm-manager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9C;AAED,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IANpC,OAAO,CAAC,EAAE,CAAwB;IAClC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;gBAGhB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,OAAO,EAChB,gBAAgB,CAAC,EAAE,MAAM,YAAA;IAGtC,IAAI,CACR,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC;IAyGrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAOhB,KAAK;CAepB"}
|
|
@@ -1,66 +1,87 @@
|
|
|
1
|
+
import { resolveShellTimeoutMs } from './shell-limits.js';
|
|
1
2
|
let AgentVMClass = null;
|
|
2
3
|
export class AgentVMManager {
|
|
3
4
|
workspacePath;
|
|
4
5
|
network;
|
|
6
|
+
defaultTimeoutMs;
|
|
5
7
|
vm = null;
|
|
6
8
|
kind = 'sandbox';
|
|
7
|
-
constructor(workspacePath, network) {
|
|
9
|
+
constructor(workspacePath, network, defaultTimeoutMs) {
|
|
8
10
|
this.workspacePath = workspacePath;
|
|
9
11
|
this.network = network;
|
|
12
|
+
this.defaultTimeoutMs = defaultTimeoutMs;
|
|
10
13
|
}
|
|
11
|
-
async exec(command, signal, observer) {
|
|
14
|
+
async exec(command, signal, observer, options) {
|
|
12
15
|
if (signal?.aborted) {
|
|
13
16
|
throw abortError(signal.reason);
|
|
14
17
|
}
|
|
18
|
+
const startedAt = Date.now();
|
|
19
|
+
const timeoutMs = resolveShellTimeoutMs(options?.timeoutMs ?? this.defaultTimeoutMs);
|
|
15
20
|
const vm = await this.getVM();
|
|
16
21
|
observer?.onStart?.({ command, backend: this.kind, backendLabel: 'sandbox[agentvm]' });
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
let timedOut = false;
|
|
23
|
+
const result = await new Promise((resolve, reject) => {
|
|
24
|
+
let settled = false;
|
|
25
|
+
let timer = null;
|
|
26
|
+
const cleanup = () => {
|
|
27
|
+
signal?.removeEventListener('abort', onAbort);
|
|
28
|
+
if (timer) {
|
|
29
|
+
clearTimeout(timer);
|
|
30
|
+
timer = null;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const finishResolve = (value) => {
|
|
34
|
+
if (settled)
|
|
35
|
+
return;
|
|
36
|
+
settled = true;
|
|
37
|
+
cleanup();
|
|
38
|
+
resolve(value);
|
|
39
|
+
};
|
|
40
|
+
const finishReject = (error) => {
|
|
41
|
+
if (settled)
|
|
42
|
+
return;
|
|
43
|
+
settled = true;
|
|
44
|
+
cleanup();
|
|
45
|
+
reject(error);
|
|
46
|
+
};
|
|
47
|
+
const onAbort = () => {
|
|
48
|
+
void this.dispose().catch(() => { });
|
|
49
|
+
finishReject(abortError(signal?.reason));
|
|
50
|
+
};
|
|
51
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
52
|
+
if (timeoutMs > 0) {
|
|
53
|
+
timer = setTimeout(() => {
|
|
54
|
+
if (settled || signal?.aborted)
|
|
22
55
|
return;
|
|
23
|
-
|
|
24
|
-
settled = true;
|
|
25
|
-
cleanup();
|
|
26
|
-
resolve(value);
|
|
27
|
-
};
|
|
28
|
-
const finishReject = (error) => {
|
|
29
|
-
if (settled) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
settled = true;
|
|
33
|
-
cleanup();
|
|
34
|
-
reject(error);
|
|
35
|
-
};
|
|
36
|
-
const cleanup = () => {
|
|
37
|
-
signal.removeEventListener('abort', onAbort);
|
|
38
|
-
};
|
|
39
|
-
const onAbort = () => {
|
|
56
|
+
timedOut = true;
|
|
40
57
|
void this.dispose().catch(() => { });
|
|
58
|
+
finishResolve({
|
|
59
|
+
stdout: '',
|
|
60
|
+
stderr: `Command timed out after ${timeoutMs}ms`,
|
|
61
|
+
exitCode: 124,
|
|
62
|
+
});
|
|
63
|
+
}, timeoutMs);
|
|
64
|
+
timer.unref?.();
|
|
65
|
+
}
|
|
66
|
+
void vm.exec(command)
|
|
67
|
+
.then((value) => {
|
|
68
|
+
if (signal?.aborted) {
|
|
41
69
|
finishReject(abortError(signal.reason));
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.then((value) => {
|
|
46
|
-
if (signal.aborted) {
|
|
47
|
-
finishReject(abortError(signal.reason));
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
finishResolve(value);
|
|
51
|
-
})
|
|
52
|
-
.catch((error) => {
|
|
53
|
-
if (signal.aborted) {
|
|
54
|
-
finishReject(abortError(signal.reason));
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
finishReject(error);
|
|
58
|
-
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
finishResolve(value);
|
|
59
73
|
})
|
|
60
|
-
|
|
74
|
+
.catch((error) => {
|
|
75
|
+
if (signal?.aborted) {
|
|
76
|
+
finishReject(abortError(signal.reason));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
finishReject(error);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
61
82
|
const stdout = result.stdout ?? '';
|
|
62
83
|
const stderr = result.stderr ?? '';
|
|
63
|
-
const exitCode = result.exitCode ?? 0;
|
|
84
|
+
const exitCode = timedOut ? 124 : (result.exitCode ?? 0);
|
|
64
85
|
const execResult = {
|
|
65
86
|
success: exitCode === 0,
|
|
66
87
|
stdout,
|
|
@@ -68,7 +89,12 @@ export class AgentVMManager {
|
|
|
68
89
|
exitCode,
|
|
69
90
|
backend: this.kind,
|
|
70
91
|
backendLabel: 'sandbox[agentvm]',
|
|
71
|
-
summary:
|
|
92
|
+
summary: timedOut
|
|
93
|
+
? `Command timed out after ${timeoutMs}ms`
|
|
94
|
+
: exitCode === 0
|
|
95
|
+
? 'Command completed successfully'
|
|
96
|
+
: (stderr || `Command failed with exit code ${exitCode}`),
|
|
97
|
+
timeMs: Date.now() - startedAt,
|
|
72
98
|
};
|
|
73
99
|
if (stdout) {
|
|
74
100
|
observer?.onStdout?.({ command, chunk: stdout, backend: this.kind, backendLabel: execResult.backendLabel });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentvm-manager.js","sourceRoot":"","sources":["../../../src/system/runtime/agentvm-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agentvm-manager.js","sourceRoot":"","sources":["../../../src/system/runtime/agentvm-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media references → resolved bytes.
|
|
3
|
+
*
|
|
4
|
+
* Media are workspace files. DML and conversation memory carry only
|
|
5
|
+
* `media(Path, Mime)`; the host resolves them to base64 when a model call needs
|
|
6
|
+
* the bytes. See `docs/DML_MEDIA.md`.
|
|
7
|
+
*/
|
|
8
|
+
import type { LLMBackendMedia, MediaRef } from '../../types.js';
|
|
9
|
+
/** Mime types DML may reference (and that pi accepts as image input). */
|
|
10
|
+
export declare const MEDIA_MIME_BY_EXT: Record<string, string>;
|
|
11
|
+
export declare const DEFAULT_MEDIA_MAX_BYTES: number;
|
|
12
|
+
/** Mime for a media path, or undefined when the extension is not allowed. */
|
|
13
|
+
export declare function mimeForMediaPath(file: string): string | undefined;
|
|
14
|
+
/** Resolve a workspace-relative media path, rejecting traversal/absolute paths. */
|
|
15
|
+
export declare function resolveMediaPath(workspacePath: string, relPath: string): string;
|
|
16
|
+
export interface ReadMediaOptions {
|
|
17
|
+
maxBytes?: number;
|
|
18
|
+
}
|
|
19
|
+
/** Read one media reference into base64, enforcing the size cap. */
|
|
20
|
+
export declare function resolveMediaRef(workspacePath: string, ref: MediaRef, options?: ReadMediaOptions): Promise<LLMBackendMedia>;
|
|
21
|
+
/** Read a list of media references (missing entries resolve to nothing). */
|
|
22
|
+
export declare function resolveMediaRefs(workspacePath: string, refs: MediaRef[] | undefined, options?: ReadMediaOptions): Promise<LLMBackendMedia[]>;
|
|
23
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/media.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AAExD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAU/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oEAAoE;AACpE,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAED,4EAA4E;AAC5E,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,EAC5B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CAO5B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media references → resolved bytes.
|
|
3
|
+
*
|
|
4
|
+
* Media are workspace files. DML and conversation memory carry only
|
|
5
|
+
* `media(Path, Mime)`; the host resolves them to base64 when a model call needs
|
|
6
|
+
* the bytes. See `docs/DML_MEDIA.md`.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs/promises';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
/** Mime types DML may reference (and that pi accepts as image input). */
|
|
11
|
+
export const MEDIA_MIME_BY_EXT = {
|
|
12
|
+
'.png': 'image/png',
|
|
13
|
+
'.jpg': 'image/jpeg',
|
|
14
|
+
'.jpeg': 'image/jpeg',
|
|
15
|
+
'.gif': 'image/gif',
|
|
16
|
+
'.webp': 'image/webp',
|
|
17
|
+
};
|
|
18
|
+
export const DEFAULT_MEDIA_MAX_BYTES = 10 * 1024 * 1024;
|
|
19
|
+
/** Mime for a media path, or undefined when the extension is not allowed. */
|
|
20
|
+
export function mimeForMediaPath(file) {
|
|
21
|
+
return MEDIA_MIME_BY_EXT[path.extname(file).toLowerCase()];
|
|
22
|
+
}
|
|
23
|
+
/** Resolve a workspace-relative media path, rejecting traversal/absolute paths. */
|
|
24
|
+
export function resolveMediaPath(workspacePath, relPath) {
|
|
25
|
+
const workspace = path.resolve(workspacePath);
|
|
26
|
+
if (path.isAbsolute(relPath)) {
|
|
27
|
+
throw new Error(`media path must be workspace-relative: ${relPath}`);
|
|
28
|
+
}
|
|
29
|
+
const abs = path.resolve(workspace, relPath);
|
|
30
|
+
if (abs !== workspace && !abs.startsWith(workspace + path.sep)) {
|
|
31
|
+
throw new Error(`media path escapes the workspace: ${relPath}`);
|
|
32
|
+
}
|
|
33
|
+
return abs;
|
|
34
|
+
}
|
|
35
|
+
/** Read one media reference into base64, enforcing the size cap. */
|
|
36
|
+
export async function resolveMediaRef(workspacePath, ref, options = {}) {
|
|
37
|
+
const maxBytes = options.maxBytes ?? DEFAULT_MEDIA_MAX_BYTES;
|
|
38
|
+
const abs = resolveMediaPath(workspacePath, ref.path);
|
|
39
|
+
const data = await fs.readFile(abs);
|
|
40
|
+
if (data.byteLength > maxBytes) {
|
|
41
|
+
throw new Error(`media exceeds ${maxBytes} bytes: ${ref.path}`);
|
|
42
|
+
}
|
|
43
|
+
return { mimeType: ref.mimeType, data: data.toString('base64') };
|
|
44
|
+
}
|
|
45
|
+
/** Read a list of media references (missing entries resolve to nothing). */
|
|
46
|
+
export async function resolveMediaRefs(workspacePath, refs, options = {}) {
|
|
47
|
+
if (!refs || refs.length === 0)
|
|
48
|
+
return [];
|
|
49
|
+
const out = [];
|
|
50
|
+
for (const ref of refs) {
|
|
51
|
+
out.push(await resolveMediaRef(workspacePath, ref, options));
|
|
52
|
+
}
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/system/runtime/media.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,yEAAyE;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAExD,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,aAAqB,EAAE,OAAe;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAMD,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,GAAa,EACb,UAA4B,EAAE;IAE9B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,uBAAuB,CAAC;IAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,UAAU,GAAG,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAqB,EACrB,IAA4B,EAC5B,UAA4B,EAAE;IAE9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|