skillscript-runtime 0.8.0 → 0.9.6

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.
Files changed (90) hide show
  1. package/dist/approval.d.ts +99 -0
  2. package/dist/approval.d.ts.map +1 -0
  3. package/dist/approval.js +224 -0
  4. package/dist/approval.js.map +1 -0
  5. package/dist/bootstrap.d.ts +21 -1
  6. package/dist/bootstrap.d.ts.map +1 -1
  7. package/dist/bootstrap.js +19 -5
  8. package/dist/bootstrap.js.map +1 -1
  9. package/dist/compile.d.ts.map +1 -1
  10. package/dist/compile.js +9 -1
  11. package/dist/compile.js.map +1 -1
  12. package/dist/composition.d.ts +29 -0
  13. package/dist/composition.d.ts.map +1 -1
  14. package/dist/composition.js +62 -1
  15. package/dist/composition.js.map +1 -1
  16. package/dist/connectors/agent-noop.d.ts +12 -7
  17. package/dist/connectors/agent-noop.d.ts.map +1 -1
  18. package/dist/connectors/agent-noop.js +31 -12
  19. package/dist/connectors/agent-noop.js.map +1 -1
  20. package/dist/connectors/agent.d.ts +150 -28
  21. package/dist/connectors/agent.d.ts.map +1 -1
  22. package/dist/connectors/agent.js +13 -10
  23. package/dist/connectors/agent.js.map +1 -1
  24. package/dist/connectors/local-model-mcp.d.ts +8 -0
  25. package/dist/connectors/local-model-mcp.d.ts.map +1 -1
  26. package/dist/connectors/local-model-mcp.js +10 -0
  27. package/dist/connectors/local-model-mcp.js.map +1 -1
  28. package/dist/connectors/memory-store-mcp.d.ts +9 -0
  29. package/dist/connectors/memory-store-mcp.d.ts.map +1 -1
  30. package/dist/connectors/memory-store-mcp.js +11 -0
  31. package/dist/connectors/memory-store-mcp.js.map +1 -1
  32. package/dist/connectors/registry.d.ts +15 -1
  33. package/dist/connectors/registry.d.ts.map +1 -1
  34. package/dist/connectors/registry.js +23 -1
  35. package/dist/connectors/registry.js.map +1 -1
  36. package/dist/connectors/skill-store.d.ts.map +1 -1
  37. package/dist/connectors/skill-store.js +43 -13
  38. package/dist/connectors/skill-store.js.map +1 -1
  39. package/dist/connectors/types.d.ts +12 -0
  40. package/dist/connectors/types.d.ts.map +1 -1
  41. package/dist/connectors/types.js.map +1 -1
  42. package/dist/dashboard/spa/app.js +37 -9
  43. package/dist/dispatch-validate.d.ts +64 -0
  44. package/dist/dispatch-validate.d.ts.map +1 -0
  45. package/dist/dispatch-validate.js +81 -0
  46. package/dist/dispatch-validate.js.map +1 -0
  47. package/dist/errors.d.ts +11 -0
  48. package/dist/errors.d.ts.map +1 -1
  49. package/dist/errors.js +16 -0
  50. package/dist/errors.js.map +1 -1
  51. package/dist/help-content.d.ts.map +1 -1
  52. package/dist/help-content.js +92 -12
  53. package/dist/help-content.js.map +1 -1
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/lint.d.ts +11 -0
  59. package/dist/lint.d.ts.map +1 -1
  60. package/dist/lint.js +560 -104
  61. package/dist/lint.js.map +1 -1
  62. package/dist/mcp-server.d.ts.map +1 -1
  63. package/dist/mcp-server.js +53 -11
  64. package/dist/mcp-server.js.map +1 -1
  65. package/dist/parser.d.ts +27 -6
  66. package/dist/parser.d.ts.map +1 -1
  67. package/dist/parser.js +115 -11
  68. package/dist/parser.js.map +1 -1
  69. package/dist/runtime.d.ts +51 -2
  70. package/dist/runtime.d.ts.map +1 -1
  71. package/dist/runtime.js +126 -35
  72. package/dist/runtime.js.map +1 -1
  73. package/dist/scheduler.d.ts +20 -1
  74. package/dist/scheduler.d.ts.map +1 -1
  75. package/dist/scheduler.js +40 -3
  76. package/dist/scheduler.js.map +1 -1
  77. package/dist/testing/conformance.d.ts.map +1 -1
  78. package/dist/testing/conformance.js +16 -6
  79. package/dist/testing/conformance.js.map +1 -1
  80. package/examples/classify-support-ticket.skill.md +1 -1
  81. package/examples/cut-release-tag.skill.md +1 -1
  82. package/examples/doc-qa-with-citations.skill.md +1 -1
  83. package/examples/feedback-sentiment-scan.skill.md +1 -1
  84. package/examples/hello.skill.provenance.json +1 -1
  85. package/examples/morning-brief.skill.md +1 -1
  86. package/examples/queue-length-monitor.skill.md +1 -1
  87. package/examples/service-health-watch.skill.md +1 -1
  88. package/examples/youtrack-morning-sweep.skill.md +1 -1
  89. package/package.json +1 -1
  90. package/scaffold/examples/hello.skill.md +3 -2
@@ -1,48 +1,140 @@
1
- import type { StaticCapabilities, ManifestInfo } from "./types.js";
1
+ import type { StaticCapabilities } from "./types.js";
2
2
  /**
3
- * Provenance record threaded onto every `DeliveryPayload` so the receiving
4
- * agent can disambiguate "what fired this delivery" was it cron-scheduled?
5
- * a session boundary? a user-triggered manual run? v0.2.6 addition per the
6
- * AgentConnector polish in Perry's thread `f75477a4`.
3
+ * Runtime-filled envelope metadata. Adopters CONSUME this (substrate-side
4
+ * serialization); they NEVER construct it. The runtime populates every
5
+ * required field at the `deliver()` call site.
6
+ *
7
+ * Locked v1.0 shape per v0.9.6 audit Q8. Optional fields are intentionally
8
+ * sparse; additive growth is non-breaking (TypeScript discriminated union
9
+ * semantics), so future fields land additively per real adopter feedback.
7
10
  */
8
- export interface TriggerProvenance {
9
- source: "cron" | "session" | "event" | "agent-event" | "file-watch" | "sensor" | "manual";
10
- /** Source-specific value: cron expression, session phase, event name, etc. */
11
- name: string;
12
- /** Unix-ms timestamp the trigger fired. */
13
- fired_at_ms: number;
11
+ export interface DeliveryMeta {
12
+ /**
13
+ * UUID per `notify()` op invocation. Same dispatch_id across multi-
14
+ * connector broadcast (one `notify()` op, N wired connectors for the
15
+ * same agent_id all N `deliver()` calls share this id). Sequential
16
+ * `notify()` calls in the same skill produce distinct dispatch_ids per
17
+ * call. Author's call-site boundary is what defines the dispatch event.
18
+ *
19
+ * Agent-side idempotency primitive — receivers dedupe substrate retries
20
+ * by dispatch_id.
21
+ */
22
+ dispatch_id: string;
23
+ /**
24
+ * Runtime emit-clock timestamp (unix ms) — when `notify()` / `# Output:`
25
+ * hook fired. Distinct from receipt-side `delivered_at` (substrate
26
+ * confirmation). Staleness checks need both surfaces; delta = effective
27
+ * queue lag.
28
+ */
29
+ sent_at: number;
30
+ /**
31
+ * Origin tracking. Runtime auto-fills from execution context. Receiver
32
+ * uses for attribution + routing decisions.
33
+ */
34
+ origin: {
35
+ /** Immediate emitter — the skill that fired this delivery. */
36
+ skill_name: string;
37
+ /**
38
+ * Root entry-point skill when distinct from `skill_name`. Set when the
39
+ * emit happens inside a composed helper (e.g., skill A inlines B via
40
+ * `&`, B emits → entry_skill_name=A). Intermediate composition steps
41
+ * are NOT captured here — those live in runtime trace logs. Surface
42
+ * boundaries are decisions, not accidents.
43
+ */
44
+ entry_skill_name?: string;
45
+ /**
46
+ * Triggering pathway that fired the originating skill. From the
47
+ * RECEIVER's lens — not the kind of OUTPUT (which is captured by
48
+ * `kind: "augment" | "template"`).
49
+ */
50
+ trigger_kind: "cron" | "session" | "webhook" | "agent" | "cli" | "dashboard" | "inline";
51
+ /**
52
+ * Root-trigger agent IF identifiable, else undefined. Composition
53
+ * doesn't reset the calling-agent context — if X triggered the chain,
54
+ * X is the caller regardless of how deep the call stack is when the
55
+ * emit happens. Cron / session / cli / dashboard / inline triggers
56
+ * have no calling agent.
57
+ */
58
+ caller_agent_id?: string;
59
+ };
60
+ /**
61
+ * Adopter-defined routing vocabulary — opaque to skillscript. Set via
62
+ * `notify(event_type=...)` kwarg OR `# Event-type:` skill frontmatter
63
+ * (kwarg takes precedence; frontmatter is the fallback). Receiver uses
64
+ * for handler routing without parsing content.
65
+ *
66
+ * Lifecycle-hook deliveries (`# Output: agent:` / `# Output: template:`)
67
+ * carry frontmatter value if set. `notify()` deliveries can override via
68
+ * the kwarg.
69
+ */
70
+ event_type?: string;
71
+ /**
72
+ * Reply-correlation primitive for the future v0.10 `exchange()` op /
73
+ * `request_response()` substrate path. When sender sets correlation_id,
74
+ * receiver echoes it on reply. Kind-independent — both augment and
75
+ * template kinds may carry correlation_id; receiver may reply regardless
76
+ * of kind.
77
+ *
78
+ * Settable via `notify(correlation_id=...)` kwarg ONLY (NOT via `#
79
+ * Output:` lifecycle hook).
80
+ */
81
+ correlation_id?: string;
14
82
  }
15
83
  /**
16
84
  * Discriminated payload union for `deliver`. The runtime picks `kind`
17
85
  * based on the source declaration:
18
- * - `# Output: agent: <name>` → `{ kind: "augment", ... }`
19
- * - `# Output: template: <agent>` → `{ kind: "template", ... }`
86
+ * - `# Output: agent: <name>` / `notify(agent=...)` → `{ kind: "augment", ... }`
87
+ * - `# Output: template: <name>` → `{ kind: "template", ... }`
20
88
  *
21
- * Common-shaped provenance + augmenting-context fields apply to both
22
- * variants (v0.2.6 addition). `source_skill` was template-only in T7.1;
23
- * now lives on both.
89
+ * Closed set for v1.0 per audit Q4. Additive growth (e.g., `kind: "binary"`)
90
+ * is non-breaking via discriminated union semantics adopters whose
91
+ * substrate can't handle a future kind throw at `deliver()` time.
24
92
  */
25
93
  export type DeliveryPayload = {
26
94
  kind: "augment";
27
95
  content: string;
28
- format?: "text" | "markdown";
29
- source_skill?: string;
30
- triggered_by?: TriggerProvenance;
31
- delivery_context?: string;
32
- templates?: string[];
96
+ meta: DeliveryMeta;
33
97
  } | {
34
98
  kind: "template";
35
99
  prompt: string;
36
- source_skill?: string;
37
- triggered_by?: TriggerProvenance;
38
- delivery_context?: string;
39
- templates?: string[];
100
+ meta: DeliveryMeta;
40
101
  };
41
102
  export interface DeliveryReceipt {
42
103
  /** Unix-ms timestamp the substrate accepted the delivery. */
43
104
  delivered_at: number;
44
105
  /** Substrate-specific id for callers to correlate later. */
45
106
  delivery_id?: string;
107
+ /**
108
+ * Adopter signals "accepted but not pushed to the agent" — agent offline,
109
+ * rate-limit drop, tmux session exists but agent hasn't read, etc.
110
+ * Distinct from outright dispatch failure (which throws). Runtime echoes
111
+ * this on the receipt record so dashboards + observability can surface it.
112
+ *
113
+ * v0.9.6 promotion: was previously runtime-set on `AgentDeliveryReceiptRecord`
114
+ * (v0.9.2 P1.1); now contract-set so adopters can signal explicitly.
115
+ * Runtime preserves NoOp-fallback inference when adopter doesn't set it.
116
+ */
117
+ delivery_skipped?: boolean;
118
+ }
119
+ /**
120
+ * Synchronous request-response envelope — locked v1.0 shape per Q1.
121
+ * Impl deferred to v0.10 (when `exchange()` op ships). Adopters' agents
122
+ * implementing this method will see `NotImplementedError` from
123
+ * `NoOpAgentConnector` until v0.10 runtime support lands.
124
+ */
125
+ export interface Response {
126
+ /** Echoes the original `meta.correlation_id` of the request. */
127
+ correlation_id: string;
128
+ /** The reply content. */
129
+ content: string;
130
+ /** Unix-ms timestamp the agent emitted the reply. */
131
+ sent_at: number;
132
+ /** The replying agent_id. */
133
+ agent_id: string;
134
+ }
135
+ export interface RequestResponseOpts {
136
+ /** Max wait in ms before throwing TimeoutError. */
137
+ timeout_ms: number;
46
138
  }
47
139
  export interface WakeOpts {
48
140
  /** Optional preamble to prepend to the wake message. */
@@ -59,17 +151,47 @@ export interface AgentDescriptor {
59
151
  agent_name?: string;
60
152
  capabilities?: ReadonlyArray<"deliver" | "wake" | "augment" | "template">;
61
153
  }
154
+ /**
155
+ * Signal-only metadata about an agent's reachability/availability. Adopter
156
+ * implements iff they have per-agent tracking (e.g., a webhook adopter
157
+ * tracking last-ACK timestamp). Runtime does NOT auto-gate delivery on
158
+ * `agent_status` values — pure metadata. If you want runtime to skip
159
+ * delivery for offline agents, set `delivery_skipped: true` on the
160
+ * `DeliveryReceipt` (Q7) instead.
161
+ *
162
+ * Distinct from `health_check()` which is the connector substrate's
163
+ * health, not per-agent.
164
+ */
62
165
  export type AgentStatus = "active" | "idle" | "asleep" | "unknown";
63
166
  /**
64
- * The contract. Two primary verbs (deliver + wake), one mandatory
65
- * discovery method (list_agents), one optional status probe.
167
+ * The contract. v0.9.6 audit locked Q1-Q12.
168
+ *
169
+ * Required methods: `list_agents`, `deliver`, `wake`, `health_check`,
170
+ * `request_response`. Optional: `agent_status`.
171
+ *
172
+ * `health_check()` is invoked at `Registry.registerAgentConnector()` —
173
+ * bootstrap-throws on false. Adopters wanting soft dev-mode behavior wrap
174
+ * their AgentConnector with a retry / always-healthy shim; the contract
175
+ * stays clean.
66
176
  */
67
177
  export interface AgentConnector {
68
178
  list_agents(): Promise<AgentDescriptor[]>;
69
179
  deliver(agent_id: string, payload: DeliveryPayload): Promise<DeliveryReceipt>;
70
180
  wake(agent_id: string, opts?: WakeOpts): Promise<WakeReceipt>;
181
+ /**
182
+ * Bootstrap-time health probe. Adopter returns `true` if the substrate
183
+ * is reachable + configured correctly. Registry throws on `false` so
184
+ * wiring failures surface at boot, not at first skill-fire.
185
+ */
186
+ health_check(): Promise<boolean>;
187
+ /**
188
+ * Synchronous send-and-await-reply. Required signature; impl deferred
189
+ * to v0.10 (when the `exchange()` op ships). Adopters' agents writing
190
+ * AgentConnector impls before v0.10 should throw `NotImplementedError`
191
+ * here — see `NoOpAgentConnector` for the canonical pattern.
192
+ */
193
+ request_response(agent_id: string, payload: DeliveryPayload, opts: RequestResponseOpts): Promise<Response>;
71
194
  agent_status?(agent_id: string): Promise<AgentStatus>;
72
- manifest(): Promise<ManifestInfo>;
73
195
  }
74
196
  export interface AgentConnectorClass {
75
197
  new (...args: never[]): AgentConnector;
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/connectors/agent.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1F,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,aAAa,CAAC,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;CAC3E;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9E,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9D,YAAY,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC;IACvC,kBAAkB,IAAI,kBAAkB,CAAC;CAC1C"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/connectors/agent.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,5 @@
1
- // AgentConnector — the fifth connector contract, added in T7.1 for v0.2.0.
2
- //
3
- // Augmenting and Template skill kinds both deliver to a *frontier agent*.
4
- // The runtime needs a substrate-neutral way to (a) discover which agents
5
- // are reachable, (b) deliver content into an agent's context, and (c)
6
- // optionally wake a sleeping agent. AgentConnector covers all three.
1
+ // AgentConnector — the substrate-neutral contract for delivering payloads
2
+ // to a frontier agent. Locked at v1.0 per the v0.9.6 audit (memory b722bbf4).
7
3
  //
8
4
  // Substrate examples — the contract is neutral; adopters wire impls:
9
5
  //
@@ -12,10 +8,17 @@
12
8
  // - file-watch: write to `<path>/augment-<id>.txt`
13
9
  // - Slack thread: post to monitored thread
14
10
  // - IPC pipe: write to named pipe
15
- // - AMP memory: write `agent:` memory with recipients (T8)
16
11
  //
17
- // The bundled default is `NoOpAgentConnector` list_agents returns [],
18
- // deliver/wake resolve with a warning log. Lets the runtime start cleanly
19
- // when no agent substrate is wired.
12
+ // Adopter-side impl note: this contract is typically implemented by the
13
+ // adopter's AGENT (not the human programmer) see memory `9fbeb1a1`. The
14
+ // human's role is closer to "supervise the agent." Keep surface MINIMAL +
15
+ // STABLE so adopter forks merge cleanly across upstream releases.
16
+ //
17
+ // The bundled default is `NoOpAgentConnector` — `list_agents` returns [],
18
+ // `deliver` / `wake` resolve cleanly after a stderr warning. Lets runtimes
19
+ // start with no AgentConnector wired; `# Output: agent:` decls still
20
+ // complete (with a warning instead of a thrown error). Use the bundled
21
+ // `HttpWebhookAgentConnector` (separate impl session, post-v0.9.6) as the
22
+ // canonical worked-example for adopter impls.
20
23
  export {};
21
24
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/connectors/agent.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,sEAAsE;AACtE,qEAAqE;AACrE,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,6DAA6D;AAC7D,2DAA2D;AAC3D,uDAAuD;AACvD,6CAA6C;AAC7C,wCAAwC;AACxC,+DAA+D;AAC/D,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,oCAAoC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/connectors/agent.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,8EAA8E;AAC9E,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,6DAA6D;AAC7D,2DAA2D;AAC3D,uDAAuD;AACvD,6CAA6C;AAC7C,wCAAwC;AACxC,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,kEAAkE;AAClE,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,qEAAqE;AACrE,uEAAuE;AACvE,0EAA0E;AAC1E,8CAA8C"}
@@ -2,6 +2,14 @@ import type { McpConnector, McpDispatchCtx, StaticCapabilities, ManifestInfo, Lo
2
2
  export declare class LocalModelMcpConnector implements McpConnector {
3
3
  private readonly localModel;
4
4
  static staticCapabilities(): StaticCapabilities;
5
+ /**
6
+ * v0.9.1 — declared tool surface. The bridge dispatches a single
7
+ * canonical entry point: the `prompt` tool, taking a `prompt` kwarg.
8
+ * Bare-form `$ llm prompt=...` name-matches and bypasses this surface;
9
+ * qualified `$ llm.prompt prompt=...` validates against this list.
10
+ * Qualified `$ llm.tweet_post ...` etc. fails lint with `unknown-tool-on-connector`.
11
+ */
12
+ static staticTools(): string[];
5
13
  constructor(localModel: LocalModel);
6
14
  call(_toolName: string, args: Record<string, unknown>, _ctxOverrides?: McpDispatchCtx): Promise<unknown>;
7
15
  manifest(): Promise<ManifestInfo>;
@@ -1 +1 @@
1
- {"version":3,"file":"local-model-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/local-model-mcp.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB,qBAAa,sBAAuB,YAAW,YAAY;IAc7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAbvC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;gBAalB,UAAU,EAAE,UAAU;IAE7C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC;IAkBb,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;CAUxC"}
1
+ {"version":3,"file":"local-model-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/local-model-mcp.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACX,MAAM,YAAY,CAAC;AAIpB,qBAAa,sBAAuB,YAAW,YAAY;IAyB7C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAxBvC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;IAa/C;;;;;;OAMG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;gBAID,UAAU,EAAE,UAAU;IAE7C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC;IAkBb,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;CAUxC"}
@@ -36,6 +36,16 @@ export class LocalModelMcpConnector {
36
36
  },
37
37
  };
38
38
  }
39
+ /**
40
+ * v0.9.1 — declared tool surface. The bridge dispatches a single
41
+ * canonical entry point: the `prompt` tool, taking a `prompt` kwarg.
42
+ * Bare-form `$ llm prompt=...` name-matches and bypasses this surface;
43
+ * qualified `$ llm.prompt prompt=...` validates against this list.
44
+ * Qualified `$ llm.tweet_post ...` etc. fails lint with `unknown-tool-on-connector`.
45
+ */
46
+ static staticTools() {
47
+ return ["prompt"];
48
+ }
39
49
  constructor(localModel) {
40
50
  this.localModel = localModel;
41
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-model-mcp.js","sourceRoot":"","sources":["../../src/connectors/local-model-mcp.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kFAAkF;AAClF,yEAAyE;AACzE,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,wBAAwB;AACxB,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,sEAAsE;AACtE,qEAAqE;AACrE,iBAAiB;AACjB,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,wEAAwE;AACxE,0BAA0B;AAU1B,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,OAAO,sBAAsB;IAcJ;IAb7B,MAAM,CAAC,kBAAkB;QACvB,OAAO;YACL,cAAc,EAAE,eAAe;YAC/B,cAAc,EAAE,wBAAwB;YACxC,gBAAgB,EAAE,gBAAgB;YAClC,QAAQ,EAAE;gBACR,6BAA6B,EAAE,KAAK;gBACpC,4BAA4B,EAAE,KAAK;gBACnC,cAAc,EAAE,KAAK;aACtB;SACF,CAAC;IACJ,CAAC;IAED,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,IAA6B,EAC7B,aAA8B;QAE9B,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,GAA2C,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpD,OAAO;YACL,oBAAoB,EAAE,GAAG;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;aACjC;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"local-model-mcp.js","sourceRoot":"","sources":["../../src/connectors/local-model-mcp.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kFAAkF;AAClF,yEAAyE;AACzE,EAAE;AACF,wEAAwE;AACxE,wEAAwE;AACxE,0EAA0E;AAC1E,wBAAwB;AACxB,EAAE;AACF,qEAAqE;AACrE,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,sEAAsE;AACtE,qEAAqE;AACrE,iBAAiB;AACjB,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,wEAAwE;AACxE,0BAA0B;AAU1B,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,OAAO,sBAAsB;IAyBJ;IAxB7B,MAAM,CAAC,kBAAkB;QACvB,OAAO;YACL,cAAc,EAAE,eAAe;YAC/B,cAAc,EAAE,wBAAwB;YACxC,gBAAgB,EAAE,gBAAgB;YAClC,QAAQ,EAAE;gBACR,6BAA6B,EAAE,KAAK;gBACpC,4BAA4B,EAAE,KAAK;gBACnC,cAAc,EAAE,KAAK;aACtB;SACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,WAAW;QAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;IAED,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEvD,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,IAA6B,EAC7B,aAA8B;QAE9B,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,GAA2C,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpD,OAAO;YACL,oBAAoB,EAAE,GAAG;YACzB,QAAQ,EAAE;gBACR,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;aACjC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -2,6 +2,15 @@ import type { McpConnector, McpDispatchCtx, StaticCapabilities, ManifestInfo, Me
2
2
  export declare class MemoryStoreMcpConnector implements McpConnector {
3
3
  private readonly memoryStore;
4
4
  static staticCapabilities(): StaticCapabilities;
5
+ /**
6
+ * v0.9.1 — declared tool surface. The bridge dispatches two canonical
7
+ * tools: `query` (read) and `memory_write` (write). Bare-form `$ memory`
8
+ * name-matches and uses dispatchQuery; bare `$ memory_write` uses
9
+ * dispatchWrite (same bridge instance registered under both names).
10
+ * Qualified `$ memory.query` / `$ memory.memory_write` validate
11
+ * against this list; other tool names fail lint with `unknown-tool-on-connector`.
12
+ */
13
+ static staticTools(): string[];
5
14
  constructor(memoryStore: MemoryStore);
6
15
  call(toolName: string, args: Record<string, unknown>, _ctxOverrides?: McpDispatchCtx): Promise<unknown>;
7
16
  private dispatchQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/memory-store-mcp.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,WAAW,EAGZ,MAAM,YAAY,CAAC;AAIpB,qBAAa,uBAAwB,YAAW,YAAY;IAe9C,OAAO,CAAC,QAAQ,CAAC,WAAW;IAdxC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;gBAclB,WAAW,EAAE,WAAW;IAE/C,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC;YAWL,aAAa;YA4Bb,aAAa;IAwBrB,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;CAUxC"}
1
+ {"version":3,"file":"memory-store-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/memory-store-mcp.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,WAAW,EAGZ,MAAM,YAAY,CAAC;AAIpB,qBAAa,uBAAwB,YAAW,YAAY;IA2B9C,OAAO,CAAC,QAAQ,CAAC,WAAW;IA1BxC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;IAc/C;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;gBAID,WAAW,EAAE,WAAW;IAE/C,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,aAAa,CAAC,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC;YAWL,aAAa;YA4Bb,aAAa;IAwBrB,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;CAUxC"}
@@ -48,6 +48,17 @@ export class MemoryStoreMcpConnector {
48
48
  },
49
49
  };
50
50
  }
51
+ /**
52
+ * v0.9.1 — declared tool surface. The bridge dispatches two canonical
53
+ * tools: `query` (read) and `memory_write` (write). Bare-form `$ memory`
54
+ * name-matches and uses dispatchQuery; bare `$ memory_write` uses
55
+ * dispatchWrite (same bridge instance registered under both names).
56
+ * Qualified `$ memory.query` / `$ memory.memory_write` validate
57
+ * against this list; other tool names fail lint with `unknown-tool-on-connector`.
58
+ */
59
+ static staticTools() {
60
+ return ["query", "memory_write"];
61
+ }
51
62
  constructor(memoryStore) {
52
63
  this.memoryStore = memoryStore;
53
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory-store-mcp.js","sourceRoot":"","sources":["../../src/connectors/memory-store-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-store-mcp.js","sourceRoot":"","sources":["../../src/connectors/memory-store-mcp.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,21 @@ export declare class Registry {
18
18
  getMcpConnectorAllowedTools(name: string): string[] | undefined;
19
19
  /** True iff `toolName` is permitted by `name`'s allowlist (or no allowlist is configured). */
20
20
  isToolAllowed(name: string, toolName: string): boolean;
21
- registerAgentConnector(name: string, instance: AgentConnector): void;
21
+ /**
22
+ * v0.9.1 — return the class constructor for a wired MCP connector, or
23
+ * undefined when not wired. Used by `validateQualifiedDispatch` to read
24
+ * the class-level `staticTools()` surface and validate qualified
25
+ * dispatch shapes against the connector's declared tool set.
26
+ */
27
+ getMcpConnectorCtor(name: string): McpConnectorClass | undefined;
28
+ /**
29
+ * Register an AgentConnector instance. Invokes `instance.health_check()`
30
+ * and throws on `false` — wiring failures surface at boot, not at first
31
+ * skill-fire (v0.9.6 audit Q6). Adopters wanting soft dev-mode behavior
32
+ * wrap their AgentConnector with a retry / always-healthy shim; the
33
+ * contract stays clean.
34
+ */
35
+ registerAgentConnector(name: string, instance: AgentConnector): Promise<void>;
22
36
  getSkillStore(name?: string): SkillStore;
23
37
  getMemoryStore(name?: string): MemoryStore;
24
38
  getLocalModel(name?: string): LocalModel;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,29 @@ export class Registry {
37
37
  return true;
38
38
  return allowed.includes(toolName);
39
39
  }
40
- registerAgentConnector(name, instance) {
40
+ /**
41
+ * v0.9.1 — return the class constructor for a wired MCP connector, or
42
+ * undefined when not wired. Used by `validateQualifiedDispatch` to read
43
+ * the class-level `staticTools()` surface and validate qualified
44
+ * dispatch shapes against the connector's declared tool set.
45
+ */
46
+ getMcpConnectorCtor(name) {
47
+ return this.mcpConnectors.get(name)?.ctor;
48
+ }
49
+ /**
50
+ * Register an AgentConnector instance. Invokes `instance.health_check()`
51
+ * and throws on `false` — wiring failures surface at boot, not at first
52
+ * skill-fire (v0.9.6 audit Q6). Adopters wanting soft dev-mode behavior
53
+ * wrap their AgentConnector with a retry / always-healthy shim; the
54
+ * contract stays clean.
55
+ */
56
+ async registerAgentConnector(name, instance) {
57
+ const healthy = await instance.health_check();
58
+ if (!healthy) {
59
+ throw new Error(`AgentConnector '${name}' (${ctorOf(instance).name ?? "<unknown class>"}) health_check() returned false at registration. ` +
60
+ `Substrate is unreachable or misconfigured; runtime refuses to start with an unhealthy AgentConnector. ` +
61
+ `Fix the substrate or wrap your connector with a retry/always-healthy shim for dev mode.`);
62
+ }
41
63
  this.agentConnectors.set(name, { instance, ctor: ctorOf(instance) });
42
64
  }
43
65
  // ─── Get instance (runtime dispatch) ────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-store.d.ts","sourceRoot":"","sources":["../../src/connectors/skill-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IAgBzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAfpC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;gBAelB,OAAO,EAAE,MAAM;IAEtC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAUjC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0B1D,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0BjD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAa1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmC9C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBxF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA4B5E,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,eAAe;YAIT,SAAS;CAkBxB"}
1
+ {"version":3,"file":"skill-store.d.ts","sourceRoot":"","sources":["../../src/connectors/skill-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AAMpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IAgBzC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAfpC,MAAM,CAAC,kBAAkB,IAAI,kBAAkB;gBAelB,OAAO,EAAE,MAAM;IAEtC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAUjC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0B1D,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA0BjD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAa1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmC9C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAqCxF,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAenC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAsC5E,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,eAAe;YAIT,SAAS;CAkBxB"}
@@ -2,6 +2,7 @@ import { readFile, readdir, writeFile, mkdir, stat, unlink, appendFile } from "n
2
2
  import { join } from "node:path";
3
3
  import { createHash } from "node:crypto";
4
4
  import { SkillNotFoundError, VersionNotFoundError, StorageConflictError } from "../errors.js";
5
+ import { stampApprovalToken, extractStatusFromBody } from "../approval.js";
5
6
  const CONTRACT_VERSION = "1.0.0";
6
7
  /**
7
8
  * Filesystem-backed SkillStore. Skills live as `*.skill.md` files under a
@@ -162,11 +163,23 @@ export class FilesystemSkillStore {
162
163
  throw new StorageConflictError(name, "name contains characters unsafe for filesystem path", "FilesystemSkillStore");
163
164
  }
164
165
  await mkdir(this.rootDir, { recursive: true });
165
- const content_hash = hashSource(source);
166
+ // v0.9.1 P0.4 auto-stamp. When the body declares `# Status: Approved`
167
+ // without a hash token (or with an invalid one), stamp `vN:<token>`
168
+ // automatically so headless MCP-only adopters don't need a dashboard
169
+ // round-trip to get a runnable Approved state. Bodies that ALREADY
170
+ // carry a valid `# Status: Approved vN:<token>` are re-stamped too
171
+ // (cheap; ensures the persisted body always matches the hash).
172
+ // Draft/Disabled bodies pass through verbatim.
173
+ let bodyToWrite = source;
174
+ const extracted = extractStatusFromBody(source);
175
+ if (extracted !== null && extracted.status === "Approved") {
176
+ bodyToWrite = stampApprovalToken(source);
177
+ }
178
+ const content_hash = hashSource(bodyToWrite);
166
179
  const version = shortHash(content_hash);
167
- const status = metadata?.status ?? extractStatus(source) ?? "Draft";
180
+ const status = metadata?.status ?? extractStatus(bodyToWrite) ?? "Draft";
168
181
  const nowSec = Math.floor(Date.now() / 1000);
169
- await writeFile(this.pathFor(name), source, "utf8");
182
+ await writeFile(this.pathFor(name), bodyToWrite, "utf8");
170
183
  const info = {
171
184
  name,
172
185
  version,
@@ -207,7 +220,18 @@ export class FilesystemSkillStore {
207
220
  throw err;
208
221
  }
209
222
  const previous_status = extractStatus(source) ?? "Draft";
210
- const updated = rewriteStatusHeader(source, status);
223
+ // v0.9.0 transitions to Approved stamp `# Status: Approved vN:<token>`
224
+ // automatically; transitions to Draft/Disabled strip any prior token.
225
+ // Adopter dashboards can supplant this with a stronger `f()` by calling
226
+ // `registerApprovalFn("v2", hmacSha256Fn)` etc. before update_status.
227
+ let updated;
228
+ if (status === "Approved") {
229
+ const stamped = stampApprovalToken(rewriteStatusHeader(source, "Approved"));
230
+ updated = stamped;
231
+ }
232
+ else {
233
+ updated = rewriteStatusHeader(source, status);
234
+ }
211
235
  await writeFile(path, updated, "utf8");
212
236
  const content_hash = hashSource(updated);
213
237
  const version = shortHash(content_hash);
@@ -260,32 +284,38 @@ function extractHeader(body, key) {
260
284
  return m ? m[1] : null;
261
285
  }
262
286
  function extractStatus(source) {
287
+ // v0.9.0 — split on whitespace; first token is the enum, remainder may
288
+ // be an approval token (`vN:<token>`). Substrate doesn't need to verify
289
+ // the token here — that's the runtime's job at dispatch time.
263
290
  const raw = extractHeader(source, "Status");
264
291
  if (raw === null)
265
292
  return null;
266
- const lower = raw.toLowerCase();
267
- if (lower === "draft")
293
+ const first = raw.trim().split(/\s+/)[0]?.toLowerCase() ?? "";
294
+ if (first === "draft")
268
295
  return "Draft";
269
- if (lower === "approved")
296
+ if (first === "approved")
270
297
  return "Approved";
271
- if (lower === "disabled")
298
+ if (first === "disabled")
272
299
  return "Disabled";
273
300
  return null;
274
301
  }
275
302
  /**
276
303
  * Rewrite or insert the `# Status:` header. If absent, inserts after the
277
- * `# Skill:` line (or at the top of the file as a fallback).
304
+ * `# Skill:` line (or at the top of the file as a fallback). Optional
305
+ * trailing token (v0.9.0) lets the dashboard's approval path stamp
306
+ * `# Status: Approved v1:<token>` in one call.
278
307
  */
279
- function rewriteStatusHeader(source, status) {
308
+ function rewriteStatusHeader(source, status, token) {
309
+ const line = token !== undefined && token.length > 0 ? `# Status: ${status} ${token}` : `# Status: ${status}`;
280
310
  const re = /^#\s*Status\s*:\s*.+?\s*$/m;
281
311
  if (re.test(source)) {
282
- return source.replace(re, `# Status: ${status}`);
312
+ return source.replace(re, line);
283
313
  }
284
314
  const skillLineRe = /^(#\s*Skill\s*:\s*.+?)\s*$/m;
285
315
  if (skillLineRe.test(source)) {
286
- return source.replace(skillLineRe, `$1\n# Status: ${status}`);
316
+ return source.replace(skillLineRe, `$1\n${line}`);
287
317
  }
288
- return `# Status: ${status}\n${source}`;
318
+ return `${line}\n${source}`;
289
319
  }
290
320
  function applyFilter(metas, filter) {
291
321
  if (filter === undefined)