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.
- package/dist/approval.d.ts +99 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +224 -0
- package/dist/approval.js.map +1 -0
- package/dist/bootstrap.d.ts +21 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +19 -5
- package/dist/bootstrap.js.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +9 -1
- package/dist/compile.js.map +1 -1
- package/dist/composition.d.ts +29 -0
- package/dist/composition.d.ts.map +1 -1
- package/dist/composition.js +62 -1
- package/dist/composition.js.map +1 -1
- package/dist/connectors/agent-noop.d.ts +12 -7
- package/dist/connectors/agent-noop.d.ts.map +1 -1
- package/dist/connectors/agent-noop.js +31 -12
- package/dist/connectors/agent-noop.js.map +1 -1
- package/dist/connectors/agent.d.ts +150 -28
- package/dist/connectors/agent.d.ts.map +1 -1
- package/dist/connectors/agent.js +13 -10
- package/dist/connectors/agent.js.map +1 -1
- package/dist/connectors/local-model-mcp.d.ts +8 -0
- package/dist/connectors/local-model-mcp.d.ts.map +1 -1
- package/dist/connectors/local-model-mcp.js +10 -0
- package/dist/connectors/local-model-mcp.js.map +1 -1
- package/dist/connectors/memory-store-mcp.d.ts +9 -0
- package/dist/connectors/memory-store-mcp.d.ts.map +1 -1
- package/dist/connectors/memory-store-mcp.js +11 -0
- package/dist/connectors/memory-store-mcp.js.map +1 -1
- package/dist/connectors/registry.d.ts +15 -1
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +23 -1
- package/dist/connectors/registry.js.map +1 -1
- package/dist/connectors/skill-store.d.ts.map +1 -1
- package/dist/connectors/skill-store.js +43 -13
- package/dist/connectors/skill-store.js.map +1 -1
- package/dist/connectors/types.d.ts +12 -0
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/connectors/types.js.map +1 -1
- package/dist/dashboard/spa/app.js +37 -9
- package/dist/dispatch-validate.d.ts +64 -0
- package/dist/dispatch-validate.d.ts.map +1 -0
- package/dist/dispatch-validate.js +81 -0
- package/dist/dispatch-validate.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -1
- package/dist/help-content.d.ts.map +1 -1
- package/dist/help-content.js +92 -12
- package/dist/help-content.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lint.d.ts +11 -0
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +560 -104
- package/dist/lint.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +53 -11
- package/dist/mcp-server.js.map +1 -1
- package/dist/parser.d.ts +27 -6
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +115 -11
- package/dist/parser.js.map +1 -1
- package/dist/runtime.d.ts +51 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +126 -35
- package/dist/runtime.js.map +1 -1
- package/dist/scheduler.d.ts +20 -1
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +40 -3
- package/dist/scheduler.js.map +1 -1
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +16 -6
- package/dist/testing/conformance.js.map +1 -1
- package/examples/classify-support-ticket.skill.md +1 -1
- package/examples/cut-release-tag.skill.md +1 -1
- package/examples/doc-qa-with-citations.skill.md +1 -1
- package/examples/feedback-sentiment-scan.skill.md +1 -1
- package/examples/hello.skill.provenance.json +1 -1
- package/examples/morning-brief.skill.md +1 -1
- package/examples/queue-length-monitor.skill.md +1 -1
- package/examples/service-health-watch.skill.md +1 -1
- package/examples/youtrack-morning-sweep.skill.md +1 -1
- package/package.json +1 -1
- package/scaffold/examples/hello.skill.md +3 -2
|
@@ -1,48 +1,140 @@
|
|
|
1
|
-
import type { StaticCapabilities
|
|
1
|
+
import type { StaticCapabilities } from "./types.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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: <
|
|
86
|
+
* - `# Output: agent: <name>` / `notify(agent=...)` → `{ kind: "augment", ... }`
|
|
87
|
+
* - `# Output: template: <name>` → `{ kind: "template", ... }`
|
|
20
88
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
65
|
-
*
|
|
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":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/connectors/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/connectors/agent.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
// AgentConnector — the
|
|
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
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
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,
|
|
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;
|
|
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;
|
|
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;
|
|
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":"AAAA,6EAA6E;AAC7E,gEAAgE;AAChE,2EAA2E;AAC3E,sCAAsC;AACtC,EAAE;AACF,wEAAwE;AACxE,yEAAyE;AACzE,yBAAyB;AACzB,EAAE;AACF,2EAA2E;AAC3E,EAAE;AACF,uFAAuF;AACvF,EAAE;AACF,uEAAuE;AACvE,6DAA6D;AAC7D,8BAA8B;AAC9B,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,+DAA+D;AAC/D,wCAAwC;AACxC,EAAE;AACF,oEAAoE;AACpE,4DAA4D;AAC5D,qEAAqE;AACrE,kEAAkE;AAClE,oEAAoE;AACpE,oEAAoE;AACpE,sDAAsD;AACtD,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,iEAAiE;AACjE,oCAAoC;AAYpC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,MAAM,OAAO,uBAAuB;
|
|
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
|
-
|
|
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":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAyCtE,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAyD;IAC5E,OAAO,CAAC,YAAY,CAA2D;IAC/E,OAAO,CAAC,WAAW,CAAyD;IAC5E,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,eAAe,CAAiE;IAIxF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI;IAI5D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI9D,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI;IAI5D,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAQzF;;;;OAIG;IACH,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAI/D,8FAA8F;IAC9F,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMtD,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;
|
|
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
|
-
|
|
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":"AAYA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAwCrD,MAAM,OAAO,QAAQ;IACX,WAAW,GAAG,IAAI,GAAG,EAA8C,CAAC;IACpE,YAAY,GAAG,IAAI,GAAG,EAAgD,CAAC;IACvE,WAAW,GAAG,IAAI,GAAG,EAA8C,CAAC;IACpE,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,eAAe,GAAG,IAAI,GAAG,EAAsD,CAAC;IAExF,2EAA2E;IAE3E,kBAAkB,CAAC,IAAY,EAAE,QAAoB;QACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAoB,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,mBAAmB,CAAC,IAAY,EAAE,QAAqB;QACrD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAqB,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,kBAAkB,CAAC,IAAY,EAAE,QAAoB;QACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAoB,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,QAAsB,EAAE,YAAuB;QAChF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE;YAC3B,QAAQ;YACR,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAsB;YAC3C,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,2BAA2B,CAAC,IAAY;QACtC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpD,CAAC;IAED,8FAA8F;IAC9F,aAAa,CAAC,IAAY,EAAE,QAAgB;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,sBAAsB,CAAC,IAAY,EAAE,QAAwB;
|
|
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;
|
|
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
|
-
|
|
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(
|
|
180
|
+
const status = metadata?.status ?? extractStatus(bodyToWrite) ?? "Draft";
|
|
168
181
|
const nowSec = Math.floor(Date.now() / 1000);
|
|
169
|
-
await writeFile(this.pathFor(name),
|
|
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
|
-
|
|
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
|
|
267
|
-
if (
|
|
293
|
+
const first = raw.trim().split(/\s+/)[0]?.toLowerCase() ?? "";
|
|
294
|
+
if (first === "draft")
|
|
268
295
|
return "Draft";
|
|
269
|
-
if (
|
|
296
|
+
if (first === "approved")
|
|
270
297
|
return "Approved";
|
|
271
|
-
if (
|
|
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,
|
|
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
|
|
316
|
+
return source.replace(skillLineRe, `$1\n${line}`);
|
|
287
317
|
}
|
|
288
|
-
return
|
|
318
|
+
return `${line}\n${source}`;
|
|
289
319
|
}
|
|
290
320
|
function applyFilter(metas, filter) {
|
|
291
321
|
if (filter === undefined)
|