skillscript-runtime 0.2.7 → 0.2.9

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/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  *A language for agents to write themselves in.*
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/skillscript-runtime.svg)](https://www.npmjs.com/package/skillscript-runtime)
6
- [![tests](https://img.shields.io/badge/tests-614%2F614-green)](#)
6
+ [![tests](https://img.shields.io/badge/tests-634%2F634-green)](#)
7
7
  [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
8
8
  [![status](https://img.shields.io/badge/status-pre--1.0-orange)](#status)
9
9
 
@@ -114,7 +114,7 @@ Every skillscript skill is one of three shapes, determined by the relationship t
114
114
  | **Augmenting** | a frontier agent's reasoning context, immediately at session start or wake | Session-start briefings, alerts, prepared context |
115
115
  | **Template** | a frontier agent's execution loop, as a prompt the agent runs itself | Reusable recipes the agent fetches and follows |
116
116
 
117
- The kinds compose. A Headless monitor fires on cron, evaluates a condition, and routes into an Augmenting skill that wakes an agent with context, which itself references a Template skill for the agent to execute. See the [Language Reference](https://github.com/sshwarts/skillscript-runtime/blob/main/docs/language-reference.md) §1 for the full taxonomy.
117
+ The kinds compose. A Headless monitor fires on cron, evaluates a condition, and routes into an Augmenting skill that wakes an agent with context, which itself references a Template skill for the agent to execute. See the [Language Reference](https://github.com/sshwarts/skillscript/blob/main/docs/language-reference.md) §1 for the full taxonomy.
118
118
 
119
119
  ### Waking agents
120
120
 
@@ -259,9 +259,9 @@ Each example is annotated with the language pattern it demonstrates. Authored fr
259
259
 
260
260
  ## Status
261
261
 
262
- **v0.2.7** — pre-1.0, breaking changes expected. The language is stable enough to author production skills; the surrounding tooling (CLI, dashboard, MCP server contract) may evolve before v1.0.
262
+ **v0.2.9** — pre-1.0, breaking changes expected. The language is stable enough to author production skills; the surrounding tooling (CLI, dashboard, MCP server contract) may evolve before v1.0.
263
263
 
264
- Test coverage: 614/614 passing. Narrow-core LOC under the 5000/20-file ceiling per ERD.
264
+ Test coverage: 634/634 passing. Narrow-core LOC under the 5000/20-file ceiling per ERD.
265
265
 
266
266
  What's coming next:
267
267
  - AgentConnector reference adapters — bundled implementations for tmux pane / TTY-injection / file-watch / webhook substrates so adopters can plug `prompt-context:` / `template:` deliveries into real receivers without writing their own connector first
package/dist/cli.js CHANGED
@@ -30,7 +30,7 @@ const MEMORY_DB = join(HOME_DIR, "memory.db");
30
30
  const EXAMPLES_DIR = join(HOME_DIR, "examples");
31
31
  const PLUGINS_DIR = join(HOME_DIR, "plugins");
32
32
  const TRACE_DIR = join(HOME_DIR, "traces");
33
- const VERSION = "0.2.7";
33
+ const VERSION = "0.2.9";
34
34
  const COMMAND_HELP = {
35
35
  init: {
36
36
  description: "Scaffold ~/.skillscript/ tree + bundled example",
@@ -0,0 +1,57 @@
1
+ import { type ExecuteContext, type ExecuteResult } from "./runtime.js";
2
+ import type { SkillStore } from "./connectors/types.js";
3
+ export declare class RecursionDepthExceededError extends Error {
4
+ readonly chain: ReadonlyArray<string>;
5
+ readonly limit: number;
6
+ constructor(chain: ReadonlyArray<string>, limit: number);
7
+ }
8
+ export declare class SkillNotFoundForCompositionError extends Error {
9
+ readonly skillName: string;
10
+ constructor(skillName: string);
11
+ }
12
+ export interface ExecuteSkillOpts {
13
+ /** SkillStore for the child-skill lookup. Defaults to `registry.getSkillStore("primary")`. */
14
+ skillStore?: SkillStore;
15
+ /** Override or extend the parent's ExecuteContext (mechanical, agentId, registry, etc.). */
16
+ ctx: ExecuteContext;
17
+ /** Diagnostic chain of skill names already in flight; used for the recursion-error message. */
18
+ chain?: ReadonlyArray<string>;
19
+ }
20
+ export interface ExecuteSkillResult {
21
+ skill_name: string;
22
+ final_vars: Record<string, unknown>;
23
+ transcript: string[];
24
+ outputs: Record<string, unknown>;
25
+ errors: ExecuteResult["errors"];
26
+ target_order: string[];
27
+ }
28
+ /**
29
+ * Load + compile + execute a skill by name. Used by both the public
30
+ * `execute_skill` MCP tool and the in-skill `$ execute_skill` op
31
+ * intercept. Throws structured errors that the caller surfaces as
32
+ * either MCP error responses or op-error records.
33
+ */
34
+ export declare function executeSkillByName(skillName: string, inputs: Record<string, string>, opts: ExecuteSkillOpts): Promise<ExecuteSkillResult>;
35
+ /**
36
+ * In-skill `$ execute_skill` op handler. Extracted from runtime.ts to
37
+ * keep that module's LOC under the ERD §1 narrow-core ceiling.
38
+ * Returns the child skill's result for binding to `$(VAR)`. Throws on
39
+ * malformed args, recursion overflow, or missing skill — the caller
40
+ * (the `$` op dispatcher) wraps with `makeOpError`.
41
+ *
42
+ * Two syntaxes for child-skill inputs are supported (v0.2.9 fix):
43
+ *
44
+ * Style 1 — bare kwargs (natural skill grammar):
45
+ * $ execute_skill skill_name="child" WHO="$(NAME)" -> R
46
+ *
47
+ * Style 2 — explicit `inputs={...}` JSON object (MCP-call parity):
48
+ * $ execute_skill skill_name="child" inputs={"WHO": "$(NAME)"} -> R
49
+ *
50
+ * Style 2 was silently dropped in v0.2.8: the `$` op parses kwargs as
51
+ * flat strings, so `inputs={...}` arrived as the literal JSON string,
52
+ * was passed to the child as a kwarg named `inputs`, and the child
53
+ * (which doesn't declare `inputs` as a variable) ignored it. Per
54
+ * Perry's thread `64445b4f`.
55
+ */
56
+ export declare function dispatchExecuteSkillIntercept(args: Record<string, unknown>, targetName: string, ctx: ExecuteContext): Promise<ExecuteSkillResult>;
57
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAW,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,qBAAa,2BAA4B,SAAQ,KAAK;aACxB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;aAAkB,KAAK,EAAE,MAAM;gBAA3D,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,EAAkB,KAAK,EAAE,MAAM;CAOxF;AAED,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAI9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,4FAA4F;IAC5F,GAAG,EAAE,cAAc,CAAC;IACpB,+FAA+F;IAC/F,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAyC7B;AAUD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAU7B"}
@@ -0,0 +1,151 @@
1
+ // Public composition primitive (v0.2.8). Wraps the runtime's compile +
2
+ // execute pipeline behind a single function callable two ways:
3
+ //
4
+ // 1. From outside the runtime — `execute_skill` MCP tool handler in
5
+ // `mcp-server.ts` delegates here.
6
+ // 2. From inside a skill body — the `$` op handler in `runtime.ts`
7
+ // intercepts the literal tool name `execute_skill` (when no MCP
8
+ // connector is explicitly specified) and dispatches here, so
9
+ // skills can compose without requiring an MCP connector to be
10
+ // wired by the operator. Closes the gap Perry surfaced in thread
11
+ // `45c167bc`: prior to this, the only "invoke another skill" path
12
+ // was AMP's private `amp_execute_skill`.
13
+ //
14
+ // Recursion guard: each call increments `ctx.recursionDepth`. Throws a
15
+ // structured `RecursionDepthExceededError` when depth crosses
16
+ // `ctx.maxRecursionDepth` (default 10). The same execution context
17
+ // propagates `mechanical: true` through the whole sub-graph so a
18
+ // TestFlight preview at the parent never accidentally fires real ops
19
+ // in a child.
20
+ import { compile } from "./compile.js";
21
+ import { execute } from "./runtime.js";
22
+ const DEFAULT_MAX_RECURSION_DEPTH = 10;
23
+ export class RecursionDepthExceededError extends Error {
24
+ chain;
25
+ limit;
26
+ constructor(chain, limit) {
27
+ super(`execute_skill recursion depth exceeded (limit ${limit}). Chain: ${chain.join(" → ")}. ` +
28
+ `Likely an infinite-loop in skill composition; check for a child skill that calls back into a parent.`);
29
+ this.chain = chain;
30
+ this.limit = limit;
31
+ this.name = "RecursionDepthExceededError";
32
+ }
33
+ }
34
+ export class SkillNotFoundForCompositionError extends Error {
35
+ skillName;
36
+ constructor(skillName) {
37
+ super(`execute_skill: skill '${skillName}' not found in SkillStore`);
38
+ this.skillName = skillName;
39
+ this.name = "SkillNotFoundForCompositionError";
40
+ }
41
+ }
42
+ /**
43
+ * Load + compile + execute a skill by name. Used by both the public
44
+ * `execute_skill` MCP tool and the in-skill `$ execute_skill` op
45
+ * intercept. Throws structured errors that the caller surfaces as
46
+ * either MCP error responses or op-error records.
47
+ */
48
+ export async function executeSkillByName(skillName, inputs, opts) {
49
+ const { ctx, chain = [] } = opts;
50
+ const depth = (ctx.recursionDepth ?? 0) + 1;
51
+ const limit = ctx.maxRecursionDepth ?? DEFAULT_MAX_RECURSION_DEPTH;
52
+ if (depth > limit) {
53
+ throw new RecursionDepthExceededError([...chain, skillName], limit);
54
+ }
55
+ const skillStore = opts.skillStore ?? resolveSkillStore(ctx.registry);
56
+ let loaded;
57
+ try {
58
+ loaded = await skillStore.load(skillName);
59
+ }
60
+ catch {
61
+ throw new SkillNotFoundForCompositionError(skillName);
62
+ }
63
+ const compiled = await compile(loaded.source, { inputs, skillStore });
64
+ // Propagate the parent context with the depth incremented and the
65
+ // child chain extended. Mechanical mode carries through unchanged.
66
+ const childCtx = {
67
+ ...ctx,
68
+ recursionDepth: depth,
69
+ maxRecursionDepth: limit,
70
+ };
71
+ const result = await execute(compiled.parsed, compiled.resolvedVariables, compiled.targetOrder, childCtx);
72
+ return {
73
+ skill_name: compiled.skillName ?? skillName,
74
+ final_vars: result.finalVars,
75
+ transcript: result.emissions,
76
+ outputs: result.outputs,
77
+ errors: result.errors,
78
+ target_order: compiled.targetOrder,
79
+ };
80
+ }
81
+ function resolveSkillStore(registry) {
82
+ if (registry.hasSkillStore("primary"))
83
+ return registry.getSkillStore("primary");
84
+ throw new Error("execute_skill requires a SkillStore registered as 'primary' in the runtime registry. " +
85
+ "Wire one via `bootstrap()` or `registry.registerSkillStore('primary', ...)`.");
86
+ }
87
+ /**
88
+ * In-skill `$ execute_skill` op handler. Extracted from runtime.ts to
89
+ * keep that module's LOC under the ERD §1 narrow-core ceiling.
90
+ * Returns the child skill's result for binding to `$(VAR)`. Throws on
91
+ * malformed args, recursion overflow, or missing skill — the caller
92
+ * (the `$` op dispatcher) wraps with `makeOpError`.
93
+ *
94
+ * Two syntaxes for child-skill inputs are supported (v0.2.9 fix):
95
+ *
96
+ * Style 1 — bare kwargs (natural skill grammar):
97
+ * $ execute_skill skill_name="child" WHO="$(NAME)" -> R
98
+ *
99
+ * Style 2 — explicit `inputs={...}` JSON object (MCP-call parity):
100
+ * $ execute_skill skill_name="child" inputs={"WHO": "$(NAME)"} -> R
101
+ *
102
+ * Style 2 was silently dropped in v0.2.8: the `$` op parses kwargs as
103
+ * flat strings, so `inputs={...}` arrived as the literal JSON string,
104
+ * was passed to the child as a kwarg named `inputs`, and the child
105
+ * (which doesn't declare `inputs` as a variable) ignored it. Per
106
+ * Perry's thread `64445b4f`.
107
+ */
108
+ export async function dispatchExecuteSkillIntercept(args, targetName, ctx) {
109
+ const childSkillName = typeof args["skill_name"] === "string" ? args["skill_name"] : "";
110
+ if (childSkillName === "") {
111
+ throw new Error(`\`$ execute_skill\` op missing required \`skill_name\` arg (target '${targetName}').`);
112
+ }
113
+ const childInputs = extractChildInputs(args);
114
+ return executeSkillByName(childSkillName, childInputs, {
115
+ ctx,
116
+ chain: [`target:${targetName}`],
117
+ });
118
+ }
119
+ function extractChildInputs(args) {
120
+ const out = {};
121
+ // Style 2 first — if `inputs` kwarg parses as a JSON object, unpack it
122
+ // into the inputs map. Symmetric with the MCP-call form.
123
+ const rawInputs = args["inputs"];
124
+ if (typeof rawInputs === "string") {
125
+ try {
126
+ const parsed = JSON.parse(rawInputs);
127
+ if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
128
+ for (const [k, v] of Object.entries(parsed)) {
129
+ out[k] = String(v);
130
+ }
131
+ }
132
+ }
133
+ catch {
134
+ /* not JSON — fall through; `inputs` was a bare string kwarg, not a JSON object */
135
+ }
136
+ }
137
+ else if (rawInputs !== null && typeof rawInputs === "object" && !Array.isArray(rawInputs)) {
138
+ for (const [k, v] of Object.entries(rawInputs)) {
139
+ out[k] = String(v);
140
+ }
141
+ }
142
+ // Style 1 — bare kwargs become inputs directly. `inputs` and `skill_name`
143
+ // are handled separately so they don't leak into the child's variable scope.
144
+ for (const [k, v] of Object.entries(args)) {
145
+ if (k === "skill_name" || k === "inputs")
146
+ continue;
147
+ out[k] = String(v);
148
+ }
149
+ return out;
150
+ }
151
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registry } from "./connectors/registry.js";
2
+ export declare function helpResponse(topic: string | null, runtimeVersion: string, registry?: Registry): Record<string, unknown>;
3
+ //# sourceMappingURL=help-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-content.d.ts","sourceRoot":"","sources":["../src/help-content.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAyZzD,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,QAAQ,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB"}