skillscript-runtime 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -13
- package/dist/bootstrap.d.ts +11 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +36 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli.js +25 -13
- package/dist/cli.js.map +1 -1
- package/dist/compile.js +16 -0
- package/dist/compile.js.map +1 -1
- package/dist/connectors/agent-noop.d.ts +1 -1
- package/dist/connectors/agent-noop.js +1 -1
- package/dist/connectors/agent.d.ts +1 -1
- package/dist/connectors/agent.js +1 -1
- package/dist/connectors/agent.js.map +1 -1
- package/dist/connectors/config.d.ts +21 -1
- package/dist/connectors/config.d.ts.map +1 -1
- package/dist/connectors/config.js +39 -4
- package/dist/connectors/config.js.map +1 -1
- package/dist/connectors/index.d.ts +4 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +11 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/memory-store-mcp.d.ts +3 -1
- package/dist/connectors/memory-store-mcp.d.ts.map +1 -1
- package/dist/connectors/memory-store-mcp.js +35 -1
- package/dist/connectors/memory-store-mcp.js.map +1 -1
- package/dist/connectors/memory-store.d.ts +9 -1
- package/dist/connectors/memory-store.d.ts.map +1 -1
- package/dist/connectors/memory-store.js +33 -0
- package/dist/connectors/memory-store.js.map +1 -1
- package/dist/connectors/registry.d.ts +1 -1
- package/dist/connectors/registry.js +1 -1
- package/dist/connectors/types.d.ts +31 -0
- package/dist/connectors/types.d.ts.map +1 -1
- package/dist/connectors/types.js.map +1 -1
- package/dist/help-content.d.ts.map +1 -1
- package/dist/help-content.js +20 -16
- package/dist/help-content.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/lint.d.ts +3 -0
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +88 -10
- package/dist/lint.js.map +1 -1
- package/dist/parser.d.ts +16 -3
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +45 -4
- package/dist/parser.js.map +1 -1
- package/dist/runtime-config.d.ts +56 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +145 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/runtime.d.ts +3 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +76 -17
- package/dist/runtime.js.map +1 -1
- package/examples/classify-support-ticket.skill.md +1 -1
- package/examples/custom-bootstrap.example.ts +130 -0
- package/examples/feedback-sentiment-scan.skill.md +1 -2
- package/examples/hello.skill.provenance.json +1 -1
- package/examples/morning-brief.skill.md +2 -4
- package/examples/onboarding-scaffold/README.md +80 -0
- package/examples/onboarding-scaffold/bootstrap.ts +100 -0
- package/examples/onboarding-scaffold/connectors.json +15 -0
- package/examples/onboarding-scaffold/file-memory-store.ts +126 -0
- package/examples/onboarding-scaffold/memory.example.json +23 -0
- package/examples/onboarding-scaffold/openai-local-model.ts +117 -0
- package/examples/onboarding-scaffold/tmux-shell-agent-connector.ts +110 -0
- package/package.json +1 -1
package/dist/help-content.js
CHANGED
|
@@ -32,9 +32,9 @@ The three delivery channels are all first-class:
|
|
|
32
32
|
|
|
33
33
|
| Channel | Op | When you'd use it |
|
|
34
34
|
|---|---|---|
|
|
35
|
-
| **Embedded prompt** | \`emit(text="...")\` | Skill output is
|
|
36
|
-
| **Memory handoff** | \`$ memory_write content="..." addressed_to="<agent>" -> R\` | Skill writes a memory the target agent picks up via mailbox |
|
|
35
|
+
| **Embedded prompt** | \`emit(text="...")\` | Skill output is delivered to the receiving agent via the \`# Output: agent: <name>\` lifecycle hook |
|
|
37
36
|
| **File handoff** | \`file_write(path="...", content="...")\` | Skill writes a file at a known location for the agent to read |
|
|
37
|
+
| **Memory handoff** *(v0.8.x)* | \`$ memory_write content="..." recipients=["agent"] -> R\` | Skill writes a memory the target agent picks up via mailbox. **Deferred to v0.8.x** bundled with the auth model; not available in v0.7.x. |
|
|
38
38
|
|
|
39
39
|
## 2. The three op classes
|
|
40
40
|
|
|
@@ -105,12 +105,12 @@ foreach M in \${MEMORIES}:
|
|
|
105
105
|
|
|
106
106
|
\`\`\`
|
|
107
107
|
# Skill: morning-showstopper-sweep
|
|
108
|
-
# Description: Cron-fired pre-triage; delivers triaged showstoppers to oncall agent via
|
|
108
|
+
# Description: Cron-fired pre-triage; delivers triaged showstoppers to oncall agent via the agent: lifecycle hook
|
|
109
109
|
# Status: Approved
|
|
110
110
|
# Autonomous: true
|
|
111
111
|
# Vars: PROJECT=INFRA
|
|
112
112
|
# Triggers: cron: 0 8 * * MON-FRI
|
|
113
|
-
# Output:
|
|
113
|
+
# Output: agent: oncall
|
|
114
114
|
|
|
115
115
|
run:
|
|
116
116
|
$ ticketing_search query="project:\${PROJECT} severity:showstopper state:Open" limit=20 -> ISSUES
|
|
@@ -129,10 +129,10 @@ default: run
|
|
|
129
129
|
What this example demonstrates:
|
|
130
130
|
- **Trigger** — cron at 8am weekdays
|
|
131
131
|
- **Process** — \`$ ticketing_search\` MCP dispatch (substrate-portable: adopters wire whatever ticketing connector they have), \`foreach\` iteration with per-item \`$ llm\` sub-classification
|
|
132
|
-
- **Deliver** — \`emit(text=...)\` per line accumulates as
|
|
132
|
+
- **Deliver** — \`emit(text=...)\` per line accumulates as agent-bound delivery, routed to the on-call agent via the \`# Output: agent: oncall\` lifecycle hook declaration
|
|
133
133
|
- **Authorization** — \`# Autonomous: true\` declares this skill cron-fired and unattended; mutation ops within are silenced from the user-confirmation lint
|
|
134
134
|
|
|
135
|
-
**Pattern note:** prefer \`emit(text="...")\` per line over building a multi-line accumulator string with \`$append\`. The runtime threads emissions into
|
|
135
|
+
**Pattern note:** prefer \`emit(text="...")\` per line over building a multi-line accumulator string with \`$append\`. The runtime threads emissions into the agent-bound delivery naturally, and the per-line shape is what cold authors reach for. Multi-line string accumulators are a real pattern for file-writing scenarios; emit is the natural choice for agent-targeted delivery via \`# Output: agent:\`.
|
|
136
136
|
|
|
137
137
|
Use \`help({topic: "ops"})\`, \`help({topic: "frontmatter"})\`, \`help({topic: "examples"})\`,
|
|
138
138
|
\`help({topic: "connectors"})\`, or \`help({topic: "lint-codes"})\` for deeper sections.
|
|
@@ -292,7 +292,7 @@ $ memory mode=fts query="recent incidents" limit=10 -> CONTEXT
|
|
|
292
292
|
$ memory_write content="\${REPORT}" addressed_to="oncall" tags="morning-sweep" approved="cron deliverable" -> R
|
|
293
293
|
\`\`\`
|
|
294
294
|
|
|
295
|
-
**Today's reality (v0.7.
|
|
295
|
+
**Today's reality (v0.7.3).** Default deployments auto-wire \`llm\` + \`memory\` MCP connectors via bundled bridges (\`LocalModelMcpConnector\` over \`LocalModel\`; \`MemoryStoreMcpConnector\` over \`MemoryStore\`), so \`$ llm\` and \`$ memory\` work zero-config against the bundled Ollama + SQLite contracts. Adopters override by re-registering the same connector names against their own substrate. The legacy \`~ prompt=...\` and \`> mode=... query=...\` ops continue to dispatch through the bundled typed contracts during the v0.7.x grace period with tier-2 \`deprecated-symbol-op\` warnings. **\`$ memory_write\` is deferred to v0.8.x** bundled with the auth model — \`MemoryStore.write()\` contract extension + passthrough credential threading ship together so the documented memory-handoff delivery channel matches reality.
|
|
296
296
|
|
|
297
297
|
**One canonical call surface per concern.** \`$ memory\` is **the** memory-retrieval call surface — one contract (\`mode=... query=... limit=N -> R\` returning \`{items: [...]}\` envelope), one connector name. Both bare-form (\`$ memory ...\`) and dotted-form (\`$ memory.query ...\`) dispatch through the same registered connector. Same shape for \`$ llm\` (one \`prompt=... [maxTokens=N] [model="..."] -> R\` contract returning the response string). Author against the canonical \`$ llm\` / \`$ memory\` surfaces today; legacy \`~\` / \`>\` removal lands in v0.8/v0.9.
|
|
298
298
|
|
|
@@ -370,7 +370,7 @@ Skill files open with \`# Key: value\` headers. Order isn't significant.
|
|
|
370
370
|
- \`# Type: procedural | data\` — \`procedural\` (default) for runtime-fired skills; \`data\` for compile-time-inlined fragments referenced by \`inline(skill="...")\` (canonical) or legacy \`& <skill-name>\` ops.
|
|
371
371
|
- \`# Vars: NAME=default, OTHER\` — declared variables. \`NAME=default\` provides a default; bare \`NAME\` is required at invocation.
|
|
372
372
|
- \`# Triggers: cron: 0 9 * * *, session: start\` — autonomous-dispatch sources. Comma-separated entries split by source-keyword boundary; cron expressions with commas (\`30,45 9 * * 1-5\`) parse correctly.
|
|
373
|
-
- \`# Output: text |
|
|
373
|
+
- \`# Output: text | agent: <name> | template: <name> | file: path | none\` — output routing. Five kinds, all substrate-neutral. **Two substrate-neutral lifecycle hooks** (v0.8.0): \`agent: <name>\` (renamed from \`prompt-context:\`) routes via AgentConnector as augment-kind delivery; \`template: <name>\` routes as template-kind delivery (receiving agent executes the rendered playbook). Both default to **joined emissions string** (the \`emit(text=...)\` lines concatenated with newlines). \`text\` / \`file:\` default to the **last-bound variable value** (structured), falling back to the emissions array when no var was bound. If your skill emits multiple lines and a downstream consumer only sees the final tool output via \`outputs.text\`, that's the structured-default behavior — use \`# Output: agent: <name>\` (or another text-coerced kind) to publish the joined emissions instead. **For substrate-specific delivery destinations** (Slack, WhatsApp, Discord, pagerduty, custom dashboards, etc.) — that's contract-between-the-skill-and-the-substrate territory, downstream of the language. Two paths: (1) \`$ <connector>.<tool> ...\` inside the skill body to dispatch through an adopter-wired MCP connector, or (2) deliver via \`agent: <name>\` to an agent whose AgentConnector decides how to surface the result.
|
|
374
374
|
- \`# OnError: <fallback-skill-name>\` — error-handler skill invoked when an op fails and no target-level \`else:\` catches.
|
|
375
375
|
- \`# Autonomous: true | false\` — declarative authorship intent for unattended-execution skills (cron-fired, agent-fired, etc.). v0.4.2. Today silences \`unconfirmed-mutation\` lint warnings for the whole skill (since the user-confirmation pattern doesn't apply to autonomous skills); reserved as the canonical autonomous-skill category marker for future rules + scheduling defaults + discovery surfaces. Omitted = interactive (default).
|
|
376
376
|
|
|
@@ -379,7 +379,7 @@ Skill files open with \`# Key: value\` headers. Order isn't significant.
|
|
|
379
379
|
- \`# Delivery-context: <prose>\` — routed to the receiving agent alongside the augment payload. v0.2.6.
|
|
380
380
|
- \`# Templates: <skill_name>, <skill_name>\` — comma-separated Template-skill names the receiving agent may fetch as follow-on actions. v0.2.6.
|
|
381
381
|
|
|
382
|
-
(Both fire \`unused-augmenting-header\` lint warning if set on a Headless skill — one with no \`
|
|
382
|
+
(Both fire \`unused-augmenting-header\` lint warning if set on a Headless skill — one with no \`agent:\` or \`template:\` output declaration.)
|
|
383
383
|
|
|
384
384
|
## Capabilities + retrieval
|
|
385
385
|
|
|
@@ -492,7 +492,7 @@ Demonstrates: \`# Triggers:\` cron, \`# Autonomous: true\` for unattended skills
|
|
|
492
492
|
# Vars: TICKET_BODY
|
|
493
493
|
# Delivery-context: Urgent ticket triage — please assess + assign owner.
|
|
494
494
|
# Templates: ticket-assignment-procedure
|
|
495
|
-
# Output:
|
|
495
|
+
# Output: agent: oncall
|
|
496
496
|
|
|
497
497
|
classify:
|
|
498
498
|
$ llm prompt="Classify this support ticket as one of: 'critical', 'normal', 'low'. Reply with only the label. Ticket: \${TICKET_BODY}" -> VERDICT
|
|
@@ -509,7 +509,7 @@ route: classify
|
|
|
509
509
|
default: route
|
|
510
510
|
\`\`\`
|
|
511
511
|
|
|
512
|
-
Demonstrates: \`$ llm\` MCP dispatch (substrate-portable — adopter wires their LLM substrate under the \`llm\` connector name), \`|trim\` filter on LLM output, ref-vs-literal comparison, agent delivery via \`
|
|
512
|
+
Demonstrates: \`$ llm\` MCP dispatch (substrate-portable — adopter wires their LLM substrate under the \`llm\` connector name), \`|trim\` filter on LLM output, ref-vs-literal comparison, agent delivery via \`agent:\` lifecycle hook, augmenting headers (\`# Delivery-context:\` + \`# Templates:\`).
|
|
513
513
|
|
|
514
514
|
## 4. Composition — orchestrator invoking child skills
|
|
515
515
|
|
|
@@ -563,12 +563,12 @@ Demonstrates: \`$ memory\` MCP dispatch (substrate-portable memory query), \`$ap
|
|
|
563
563
|
|
|
564
564
|
\`\`\`
|
|
565
565
|
# Skill: morning-showstopper-sweep
|
|
566
|
-
# Description: Cron pre-triage; delivers triaged showstoppers to oncall via
|
|
566
|
+
# Description: Cron pre-triage; delivers triaged showstoppers to oncall via the agent: lifecycle hook
|
|
567
567
|
# Status: Approved
|
|
568
568
|
# Autonomous: true
|
|
569
569
|
# Vars: PROJECT=INFRA
|
|
570
570
|
# Triggers: cron: 0 8 * * MON-FRI
|
|
571
|
-
# Output:
|
|
571
|
+
# Output: agent: oncall
|
|
572
572
|
|
|
573
573
|
run:
|
|
574
574
|
$ ticketing_search query="project:\${PROJECT} severity:showstopper state:Open" limit=20 -> ISSUES
|
|
@@ -583,7 +583,7 @@ run:
|
|
|
583
583
|
default: run
|
|
584
584
|
\`\`\`
|
|
585
585
|
|
|
586
|
-
Demonstrates: end-to-end trigger → process → deliver pattern. Trigger fires cron; process pulls data + sub-classifies each issue with \`$ llm\`; delivers via
|
|
586
|
+
Demonstrates: end-to-end trigger → process → deliver pattern. Trigger fires cron; process pulls data + sub-classifies each issue with \`$ llm\`; delivers via the \`agent:\` lifecycle hook (each \`emit(text=...)\` becomes a line in the joined-emissions delivery to the named agent).
|
|
587
587
|
`;
|
|
588
588
|
const COMPOSITION = `# Composition — composing skills from other skills
|
|
589
589
|
|
|
@@ -650,9 +650,13 @@ Skillscript skills don't import packages — they invoke connectors. The runtime
|
|
|
650
650
|
| \`LocalModel\` | LLM inference (Ollama by default) | \`$ llm\` MCP dispatch via auto-wired \`LocalModelMcpConnector\` bridge (v0.7.2); legacy \`~\` op during grace period |
|
|
651
651
|
| \`MemoryStore\` | Knowledge retrieval (SQLite-FTS by default) | \`$ memory\` MCP dispatch via auto-wired \`MemoryStoreMcpConnector\` bridge (v0.7.2); legacy \`>\` op during grace period |
|
|
652
652
|
| \`McpConnector\` | MCP tool dispatch — all external tools | \`$ <connector_name> args\` |
|
|
653
|
-
| \`AgentConnector\` | Deliver augment/template payloads | \`# Output:
|
|
653
|
+
| \`AgentConnector\` | Deliver augment/template payloads | \`# Output: agent:\` / \`template:\` |
|
|
654
654
|
|
|
655
|
-
**v0.7.
|
|
655
|
+
**v0.7.3 substrate framing.** Canonical syntax routes substrate-specific dispatch through MCP (\`$ llm\` / \`$ memory\` rather than legacy \`~\` / \`>\`). Default deployments auto-wire the \`llm\` and \`memory\` connector names via bundled bridges (\`LocalModelMcpConnector\` over \`LocalModel\`; \`MemoryStoreMcpConnector\` over \`MemoryStore\`), so \`$ llm\` and \`$ memory\` work zero-config. Adopters override by re-registering those same connector names against their own substrate (e.g., a hosted-model MCP server in place of the local Ollama bridge); the canonical call sites don't change.
|
|
656
|
+
|
|
657
|
+
**Adopter-extensible class registration (v0.7.3).** Custom \`McpConnector\` classes that are JSON-instantiable register via \`registerConnectorClass(name, entry)\` from adopter bootstrap before \`loadConnectorsConfig\` runs. Replaces the pre-v0.7.3 pattern of editing the bundled \`KNOWN_CONNECTOR_CLASSES\` Map directly (merge-conflict bait). See \`examples/custom-bootstrap.example.ts\`.
|
|
658
|
+
|
|
659
|
+
**Canonical runtime config (v0.7.3).** \`skillscript.config.json\` externalizes runtime knobs (skillsDir, traceDir, dashboard port, etc.) so the two-instance posture (dev + adopter on same machine) works as copy-and-tweak. CLI flags override file values; file values override defaults. See \`skillscript.config.json.example\`.
|
|
656
660
|
|
|
657
661
|
**One canonical call surface per concern.** \`$ memory\` is **the** memory-retrieval call surface — one contract (\`mode=... query=... limit=N -> R\` returning \`{items: [...]}\` envelope), one connector name. Both bare-form (\`$ memory ...\`) and dotted-form (\`$ memory.query ...\`) dispatch through the same registered connector. Same shape for \`$ llm\` (one \`prompt=... [maxTokens=N] [model="..."] -> R\` contract returning the response string). The legacy \`~\` / \`>\` removal lands in v0.8/v0.9 — author against the canonical \`$ llm\` / \`$ memory\` surfaces today.
|
|
658
662
|
|
package/dist/help-content.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-content.js","sourceRoot":"","sources":["../src/help-content.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,qEAAqE;AACrE,2BAA2B;AAC3B,EAAE;AACF,kBAAkB;AAClB,0EAA0E;AAC1E,+DAA+D;AAC/D,uCAAuC;AACvC,kFAAkF;AAClF,kFAAkF;AAClF,uDAAuD;AACvD,EAAE;AACF,uEAAuE;AACvE,yDAAyD;AAIzD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6HlB,CAAC;AAEF,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuNX,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFnB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkJhB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDnB,CAAC;AAEF,MAAM,mBAAmB,GAAG
|
|
1
|
+
{"version":3,"file":"help-content.js","sourceRoot":"","sources":["../src/help-content.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,12 @@ export { NoOpAgentConnector } from "./connectors/agent-noop.js";
|
|
|
22
22
|
export type { AgentConnector, AgentConnectorClass, AgentDescriptor, AgentStatus, DeliveryPayload, DeliveryReceipt, WakeOpts, WakeReceipt, } from "./connectors/agent.js";
|
|
23
23
|
export type { SkillStore, SkillStoreClass, SkillSource, SkillMeta, SkillStatus, SkillFilter, VersionInfo, MemoryStore, MemoryStoreClass, PortableMemory, QueryFilters, LocalModel, LocalModelClass, McpConnector, McpConnectorClass, McpDispatchCtx, StaticCapabilities, ManifestInfo, ConnectorType, CuratedMemoryField, } from "./connectors/types.js";
|
|
24
24
|
export { CURATED_MEMORY_FIELDS } from "./connectors/types.js";
|
|
25
|
+
export { loadSkillscriptConfig } from "./runtime-config.js";
|
|
26
|
+
export type { SkillscriptConfig, LoadSkillscriptConfigOpts, LoadSkillscriptConfigResult } from "./runtime-config.js";
|
|
27
|
+
export { bootstrap, defaultRegistry, wireDeclarativeTriggers } from "./bootstrap.js";
|
|
28
|
+
export type { BootstrapOpts, BootstrapResult, DefaultRegistryOpts } from "./bootstrap.js";
|
|
29
|
+
export { registerConnectorClass, unregisterConnectorClass, getConnectorClass, listKnownConnectorClasses, loadConnectorsConfig, } from "./connectors/config.js";
|
|
30
|
+
export type { ConnectorClassEntry, ConfiguredConnector, LoadConnectorsConfigOpts, LoadConnectorsConfigResult, } from "./connectors/config.js";
|
|
25
31
|
export { ConnectorError, SkillNotFoundError, VersionNotFoundError, LintFailureError, StorageConflictError, QueryError, DispatchError, ModelError, TimeoutError, OpError, ConnectorNotFoundError, OpTimeoutError, InteractiveOpInAutonomousModeError, UnsafeShellDisabledError, UnresolvedVariableError, MissingSkillReferenceError, } from "./errors.js";
|
|
26
32
|
export type { LintDiagnostic, OpErrorMetadata } from "./errors.js";
|
|
27
33
|
export { ReferenceIndex, ReferentialIntegrityError, buildReferenceIndex, extractReferences, storeSkill, deleteSkill, invalidateConnector, } from "./skill-manager.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtH,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEvE,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,eAAe,EACf,eAAe,EACf,QAAQ,EACR,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,UAAU,EACV,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,14 @@ export { SqliteMemoryStore } from "./connectors/memory-store.js";
|
|
|
22
22
|
export { CallbackMcpConnector } from "./connectors/mcp.js";
|
|
23
23
|
export { NoOpAgentConnector } from "./connectors/agent-noop.js";
|
|
24
24
|
export { CURATED_MEMORY_FIELDS } from "./connectors/types.js";
|
|
25
|
+
// v0.7.3 — canonical runtime config + adopter-extensible connector class registration.
|
|
26
|
+
export { loadSkillscriptConfig } from "./runtime-config.js";
|
|
27
|
+
// Bootstrap helpers (v0.7.3+ public): adopters wiring custom substrates import
|
|
28
|
+
// `Registry` + the connector classes + `wireDeclarativeTriggers`. The bundled
|
|
29
|
+
// `bootstrap()` is a reference implementation for default deployments — see
|
|
30
|
+
// `examples/onboarding-scaffold/bootstrap.ts` for a custom-substrate walkthrough.
|
|
31
|
+
export { bootstrap, defaultRegistry, wireDeclarativeTriggers } from "./bootstrap.js";
|
|
32
|
+
export { registerConnectorClass, unregisterConnectorClass, getConnectorClass, listKnownConnectorClasses, loadConnectorsConfig, } from "./connectors/config.js";
|
|
25
33
|
export { ConnectorError, SkillNotFoundError, VersionNotFoundError, LintFailureError, StorageConflictError, QueryError, DispatchError, ModelError, TimeoutError, OpError, ConnectorNotFoundError, OpTimeoutError, InteractiveOpInAutonomousModeError, UnsafeShellDisabledError, UnresolvedVariableError, MissingSkillReferenceError, } from "./errors.js";
|
|
26
34
|
export { ReferenceIndex, ReferentialIntegrityError, buildReferenceIndex, extractReferences, storeSkill, deleteSkill, invalidateConnector, } from "./skill-manager.js";
|
|
27
35
|
export { audit, formatAuditResult } from "./audit.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,mFAAmF;AACnF,+FAA+F;AAC/F,kCAAkC;AAClC,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,iEAAiE;AACjE,0CAA0C;AAE1C,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAkChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,OAAO,EACP,sBAAsB,EACtB,cAAc,EACd,kCAAkC,EAClC,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQ7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,mFAAmF;AACnF,+FAA+F;AAC/F,kCAAkC;AAClC,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,iEAAiE;AACjE,0CAA0C;AAE1C,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAkChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,uFAAuF;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,kFAAkF;AAClF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACV,aAAa,EACb,UAAU,EACV,YAAY,EACZ,OAAO,EACP,sBAAsB,EACtB,cAAc,EACd,kCAAkC,EAClC,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQ7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/lint.d.ts
CHANGED
|
@@ -103,6 +103,8 @@ export interface LintOptions {
|
|
|
103
103
|
* surfacing in the bootstrap result.
|
|
104
104
|
*/
|
|
105
105
|
connectorConfigErrors?: string[];
|
|
106
|
+
/** v0.8.0 — registered AgentConnector names (empty = none wired). */
|
|
107
|
+
agentConnectorNames?: string[];
|
|
106
108
|
}
|
|
107
109
|
interface LintContext {
|
|
108
110
|
parsed: ParsedSkill;
|
|
@@ -116,6 +118,7 @@ interface LintContext {
|
|
|
116
118
|
mcpConnectorNames: string[] | undefined;
|
|
117
119
|
connectorConfigErrors: string[];
|
|
118
120
|
mcpConnectorAllowedTools: Map<string, string[]>;
|
|
121
|
+
agentConnectorNames: string[] | undefined;
|
|
119
122
|
}
|
|
120
123
|
export interface LintRule {
|
|
121
124
|
id: string;
|
package/dist/lint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,WAAW,EAAgB,MAAM,aAAa,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,kBAAkB,IAAI,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAC9D,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,mBAAmB,CAAC;IAC/C;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;;OAOG;IACH,wBAAwB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/lint.js
CHANGED
|
@@ -13,6 +13,7 @@ export async function lint(source, options) {
|
|
|
13
13
|
mcpConnectorNames: options?.mcpConnectorNames ?? collectMcpConnectorNamesFromRegistry(options?.registry),
|
|
14
14
|
connectorConfigErrors: options?.connectorConfigErrors ?? [],
|
|
15
15
|
mcpConnectorAllowedTools: options?.mcpConnectorAllowedTools ?? collectMcpConnectorAllowedToolsFromRegistry(options?.registry),
|
|
16
|
+
agentConnectorNames: options?.agentConnectorNames ?? collectAgentConnectorNamesFromRegistry(options?.registry),
|
|
16
17
|
};
|
|
17
18
|
const findings = [];
|
|
18
19
|
for (const rule of RULES) {
|
|
@@ -49,6 +50,7 @@ export function lintSync(source, options) {
|
|
|
49
50
|
mcpConnectorNames: options?.mcpConnectorNames ?? collectMcpConnectorNamesFromRegistry(options?.registry),
|
|
50
51
|
connectorConfigErrors: options?.connectorConfigErrors ?? [],
|
|
51
52
|
mcpConnectorAllowedTools: options?.mcpConnectorAllowedTools ?? collectMcpConnectorAllowedToolsFromRegistry(options?.registry),
|
|
53
|
+
agentConnectorNames: options?.agentConnectorNames ?? collectAgentConnectorNamesFromRegistry(options?.registry),
|
|
52
54
|
};
|
|
53
55
|
const findings = [];
|
|
54
56
|
for (const rule of RULES) {
|
|
@@ -535,6 +537,14 @@ const DISALLOWED_TOOL = {
|
|
|
535
537
|
// masking real misconfiguration). Lint surfaces the same diagnostic at
|
|
536
538
|
// compile time when the runtime registry is queryable.
|
|
537
539
|
//
|
|
540
|
+
// v0.7.3 — name-match-before-primary fix (matches the v0.7.2 runtime
|
|
541
|
+
// dispatch resolver). Bare `$ <name>` where `<name>` matches a wired
|
|
542
|
+
// connector name (e.g., the auto-wired `llm` + `memory` bridges) routes
|
|
543
|
+
// to that connector directly; the lint must mirror the runtime's
|
|
544
|
+
// resolution order or the bare-form canonical syntax fails at lint
|
|
545
|
+
// before reaching dispatch. Same lesson as the v0.7.2 push-blocker:
|
|
546
|
+
// multi-layer promises need every layer to match.
|
|
547
|
+
//
|
|
538
548
|
// False-positive guard: only fires when `mcpConnectorNames` is non-undefined
|
|
539
549
|
// (lint context has real registry info) — embedder contexts that don't
|
|
540
550
|
// expose the registry stay silent rather than risk noise on legitimate
|
|
@@ -542,13 +552,11 @@ const DISALLOWED_TOOL = {
|
|
|
542
552
|
const UNWIRED_PRIMARY_CONNECTOR = {
|
|
543
553
|
id: "unwired-primary-connector",
|
|
544
554
|
severity: "error",
|
|
545
|
-
description: "A bare `$ TOOL` op (no connector prefix)
|
|
546
|
-
remediation: "Either add a `primary` entry to connectors.json that handles the tool, or qualify the op as `$ named_connector.TOOL` against a wired connector.
|
|
555
|
+
description: "A bare `$ TOOL` op (no connector prefix) routes to either (a) a wired connector matching the op name, or (b) the `primary` connector's tool dispatch. Neither resolves.",
|
|
556
|
+
remediation: "Either wire a connector whose name matches the bare op (the v0.7.2 canonical pattern — e.g., `llm` / `memory` auto-wire by default), add a `primary` entry to connectors.json that handles the tool, or qualify the op as `$ named_connector.TOOL` against a wired connector.",
|
|
547
557
|
check: (ctx) => {
|
|
548
558
|
if (ctx.mcpConnectorNames === undefined)
|
|
549
559
|
return [];
|
|
550
|
-
if (ctx.mcpConnectorNames.includes("primary"))
|
|
551
|
-
return [];
|
|
552
560
|
const findings = [];
|
|
553
561
|
const reported = new Set();
|
|
554
562
|
for (const [targetName, target] of ctx.parsed.targets) {
|
|
@@ -562,6 +570,15 @@ const UNWIRED_PRIMARY_CONNECTOR = {
|
|
|
562
570
|
const toolName = m[1];
|
|
563
571
|
if (toolName === "execute_skill" || toolName === "json_parse")
|
|
564
572
|
return;
|
|
573
|
+
// v0.7.3 name-match: if the bare op name matches a wired
|
|
574
|
+
// connector, the runtime dispatch resolver routes there directly.
|
|
575
|
+
// (Mirrors `runtime.ts` `$` op dispatch — kept in sync with that
|
|
576
|
+
// fix to prevent the v0.7.2-shape regression of lint-fails-then-
|
|
577
|
+
// user-never-reaches-runtime.)
|
|
578
|
+
if (ctx.mcpConnectorNames.includes(toolName))
|
|
579
|
+
return;
|
|
580
|
+
if (ctx.mcpConnectorNames.includes("primary"))
|
|
581
|
+
return;
|
|
565
582
|
const key = `${targetName}:${toolName}`;
|
|
566
583
|
if (reported.has(key))
|
|
567
584
|
return;
|
|
@@ -569,7 +586,7 @@ const UNWIRED_PRIMARY_CONNECTOR = {
|
|
|
569
586
|
findings.push({
|
|
570
587
|
rule: "unwired-primary-connector",
|
|
571
588
|
severity: "error",
|
|
572
|
-
message: `\`$ ${toolName}\` in target '${targetName}' is a bare tool op
|
|
589
|
+
message: `\`$ ${toolName}\` in target '${targetName}' is a bare tool op — no connector named '${toolName}' wired and no \`primary\` fallback. Wired connectors: ${ctx.mcpConnectorNames.length === 0 ? "(none)" : ctx.mcpConnectorNames.join(", ")}.`,
|
|
573
590
|
block: targetName,
|
|
574
591
|
extras: { tool: toolName },
|
|
575
592
|
});
|
|
@@ -1266,10 +1283,10 @@ const PLUGIN_COLLISION = {
|
|
|
1266
1283
|
const UNUSED_AUGMENTING_HEADER = {
|
|
1267
1284
|
id: "unused-augmenting-header",
|
|
1268
1285
|
severity: "warning",
|
|
1269
|
-
description: "`# Delivery-context:` or `# Templates:` set on a skill that has no `
|
|
1270
|
-
remediation: "Either add an agent-bound output (`# Output:
|
|
1286
|
+
description: "`# Delivery-context:` or `# Templates:` set on a skill that has no `agent:` or `template:` output declaration. The fields route through `DeliveryPayload`; without an agent-bound output they don't reach a substrate.",
|
|
1287
|
+
remediation: "Either add an agent-bound output (`# Output: agent: <name>` or `# Output: template: <name>`) so the augmenting fields fire, or remove `# Delivery-context:` / `# Templates:` from the frontmatter if the skill is genuinely Headless.",
|
|
1271
1288
|
check: (ctx) => {
|
|
1272
|
-
const hasAgentBoundOutput = ctx.parsed.outputs.some((o) => o.kind === "
|
|
1289
|
+
const hasAgentBoundOutput = ctx.parsed.outputs.some((o) => o.kind === "agent" || o.kind === "template");
|
|
1273
1290
|
if (hasAgentBoundOutput)
|
|
1274
1291
|
return [];
|
|
1275
1292
|
const findings = [];
|
|
@@ -1277,14 +1294,66 @@ const UNUSED_AUGMENTING_HEADER = {
|
|
|
1277
1294
|
findings.push({
|
|
1278
1295
|
rule: "unused-augmenting-header",
|
|
1279
1296
|
severity: "warning",
|
|
1280
|
-
message: "`# Delivery-context:` is set but this skill has no `
|
|
1297
|
+
message: "`# Delivery-context:` is set but this skill has no `agent:` or `template:` output — the value won't reach any agent.",
|
|
1281
1298
|
});
|
|
1282
1299
|
}
|
|
1283
1300
|
if (ctx.parsed.templates.length > 0) {
|
|
1284
1301
|
findings.push({
|
|
1285
1302
|
rule: "unused-augmenting-header",
|
|
1286
1303
|
severity: "warning",
|
|
1287
|
-
message: `\`# Templates:\` lists ${ctx.parsed.templates.length} skill(s) but this skill has no \`
|
|
1304
|
+
message: `\`# Templates:\` lists ${ctx.parsed.templates.length} skill(s) but this skill has no \`agent:\` or \`template:\` output — the field won't reach any agent.`,
|
|
1305
|
+
});
|
|
1306
|
+
}
|
|
1307
|
+
return findings;
|
|
1308
|
+
},
|
|
1309
|
+
};
|
|
1310
|
+
// v0.8.0 — tier-2 lint warns per the delivery-model lockdown (`bb34de4e`).
|
|
1311
|
+
const OUTPUT_AGENT_TARGET_NO_EMIT = {
|
|
1312
|
+
id: "output-agent-target-no-emit",
|
|
1313
|
+
severity: "warning",
|
|
1314
|
+
description: "`# Output: agent: <name>` or `# Output: template: <name>` declared but skill has no `emit()` ops; delivery fires with empty content.",
|
|
1315
|
+
remediation: "Add at least one `emit(text=\"...\")` op so the skill produces content for the lifecycle hook delivery, or remove the `# Output:` header if the skill produces no agent-targeted output.",
|
|
1316
|
+
check: (ctx) => {
|
|
1317
|
+
const findings = [];
|
|
1318
|
+
const agentBoundOutputs = ctx.parsed.outputs.filter((o) => (o.kind === "agent" || o.kind === "template") && o.target !== undefined);
|
|
1319
|
+
if (agentBoundOutputs.length === 0)
|
|
1320
|
+
return findings;
|
|
1321
|
+
let hasEmit = false;
|
|
1322
|
+
for (const [, target] of ctx.parsed.targets) {
|
|
1323
|
+
walkOps(target.ops, (op) => { if (op.kind === "!")
|
|
1324
|
+
hasEmit = true; });
|
|
1325
|
+
if (hasEmit)
|
|
1326
|
+
break;
|
|
1327
|
+
}
|
|
1328
|
+
if (hasEmit)
|
|
1329
|
+
return findings;
|
|
1330
|
+
for (const decl of agentBoundOutputs) {
|
|
1331
|
+
findings.push({
|
|
1332
|
+
rule: "output-agent-target-no-emit",
|
|
1333
|
+
severity: "warning",
|
|
1334
|
+
message: `\`# Output: ${decl.kind}: ${decl.target}\` declared but skill has no \`emit()\` ops; delivery fires with empty content.`,
|
|
1335
|
+
});
|
|
1336
|
+
}
|
|
1337
|
+
return findings;
|
|
1338
|
+
},
|
|
1339
|
+
};
|
|
1340
|
+
const OUTPUT_AGENT_TARGET_NO_CONNECTOR = {
|
|
1341
|
+
id: "output-agent-target-no-connector",
|
|
1342
|
+
severity: "warning",
|
|
1343
|
+
description: "`# Output: agent: <name>` or `# Output: template: <name>` declared but no `AgentConnector` is wired; delivery silently no-ops via the NoOp default.",
|
|
1344
|
+
remediation: "Wire an AgentConnector implementation in your bootstrap (`registry.registerAgentConnector(name, instance)`). See `docs/adopter-playbook.md` for the contract.",
|
|
1345
|
+
check: (ctx) => {
|
|
1346
|
+
if (ctx.agentConnectorNames === undefined)
|
|
1347
|
+
return [];
|
|
1348
|
+
if (ctx.agentConnectorNames.length > 0)
|
|
1349
|
+
return [];
|
|
1350
|
+
const findings = [];
|
|
1351
|
+
const agentBoundOutputs = ctx.parsed.outputs.filter((o) => (o.kind === "agent" || o.kind === "template") && o.target !== undefined);
|
|
1352
|
+
for (const decl of agentBoundOutputs) {
|
|
1353
|
+
findings.push({
|
|
1354
|
+
rule: "output-agent-target-no-connector",
|
|
1355
|
+
severity: "warning",
|
|
1356
|
+
message: `\`# Output: ${decl.kind}: ${decl.target}\` declared but no AgentConnector is wired; delivery silently no-ops via the NoOp default.`,
|
|
1288
1357
|
});
|
|
1289
1358
|
}
|
|
1290
1359
|
return findings;
|
|
@@ -1874,6 +1943,8 @@ const RULES = [
|
|
|
1874
1943
|
DRAFT_WITH_TRIGGER,
|
|
1875
1944
|
REFERENCE_TO_DISABLED_SKILL,
|
|
1876
1945
|
UNUSED_AUGMENTING_HEADER,
|
|
1946
|
+
OUTPUT_AGENT_TARGET_NO_EMIT,
|
|
1947
|
+
OUTPUT_AGENT_TARGET_NO_CONNECTOR,
|
|
1877
1948
|
// Tier-3 (info)
|
|
1878
1949
|
NO_DEFAULT_TARGET,
|
|
1879
1950
|
DUPLICATE_SKILL_NAME,
|
|
@@ -2039,6 +2110,13 @@ function collectMcpConnectorNamesFromRegistry(registry) {
|
|
|
2039
2110
|
return undefined;
|
|
2040
2111
|
return registry.listMcpConnectors().map((e) => e.name);
|
|
2041
2112
|
}
|
|
2113
|
+
function collectAgentConnectorNamesFromRegistry(registry) {
|
|
2114
|
+
if (registry === undefined)
|
|
2115
|
+
return undefined;
|
|
2116
|
+
// listAgentConnectors() excludes the implicit NoOp fallback (per
|
|
2117
|
+
// registry.ts) — empty array means "no real AgentConnector wired."
|
|
2118
|
+
return registry.listAgentConnectors().map((e) => e.name);
|
|
2119
|
+
}
|
|
2042
2120
|
function collectMcpConnectorAllowedToolsFromRegistry(registry) {
|
|
2043
2121
|
const out = new Map();
|
|
2044
2122
|
if (registry === undefined)
|