skillscript-runtime 0.14.1 → 0.15.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/dist/approval.d.ts +9 -0
- package/dist/approval.d.ts.map +1 -1
- package/dist/approval.js +35 -2
- package/dist/approval.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +10 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/cli.js +10 -6
- package/dist/cli.js.map +1 -1
- package/dist/connectors/config.d.ts.map +1 -1
- package/dist/connectors/config.js +4 -0
- package/dist/connectors/config.js.map +1 -1
- package/dist/connectors/index.d.ts +1 -0
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +4 -0
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/skill-store-mcp.d.ts +17 -0
- package/dist/connectors/skill-store-mcp.d.ts.map +1 -0
- package/dist/connectors/skill-store-mcp.js +180 -0
- package/dist/connectors/skill-store-mcp.js.map +1 -0
- package/dist/mutation-gate.d.ts +12 -6
- package/dist/mutation-gate.d.ts.map +1 -1
- package/dist/mutation-gate.js +19 -11
- package/dist/mutation-gate.js.map +1 -1
- package/dist/parser.d.ts +13 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +32 -1
- package/dist/parser.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +20 -3
- package/dist/runtime.js.map +1 -1
- package/examples/README.md +7 -5
- package/examples/connectors/McpConnectorTemplate/McpConnectorTemplate.ts +7 -0
- package/examples/connectors/McpConnectorTemplate/README.md +3 -2
- package/examples/connectors/README.md +1 -1
- package/examples/connectors/SkillStoreTemplate/SkillStoreTemplate.ts +26 -0
- package/examples/custom-bootstrap.example.ts +16 -5
- package/examples/onboarding-scaffold/bootstrap.ts +19 -8
- package/examples/skillscripts/data-store-roundtrip.skill.md +11 -0
- package/examples/skillscripts/doc-qa-with-citations.skill.md +1 -1
- package/examples/skillscripts/hello-world.skill.md +10 -0
- package/examples/skillscripts/{hello.skill.provenance.json → hello-world.skill.provenance.json} +2 -2
- package/examples/skillscripts/morning-brief.skill.md +1 -1
- package/examples/skillscripts/skill-store-roundtrip.skill.md +11 -0
- package/package.json +1 -1
- package/scaffold/examples/hello-world.skill.md +10 -0
- package/examples/skillscripts/hello.skill.md +0 -9
- package/scaffold/examples/hello.skill.md +0 -10
package/examples/README.md
CHANGED
|
@@ -6,7 +6,9 @@ For full language semantics, see [`../docs/language-reference.md`](../docs/langu
|
|
|
6
6
|
|
|
7
7
|
| Example | Patterns demonstrated |
|
|
8
8
|
|---|---|
|
|
9
|
-
| [`hello.skill.md`](./skillscripts/hello.skill.md) |
|
|
9
|
+
| [`hello-world.skill.md`](./skillscripts/hello-world.skill.md) | Phase 1 cold-adopter probe — no substrate; `# Vars:` + `--input` override; baseline runtime check |
|
|
10
|
+
| [`skill-store-roundtrip.skill.md`](./skillscripts/skill-store-roundtrip.skill.md) | Phase 1 cold-adopter probe — Lisp-shape `$ skill_write` + `$ skill_read`; child lands as Draft per v0.15.0 bridge boundary |
|
|
11
|
+
| [`data-store-roundtrip.skill.md`](./skillscripts/data-store-roundtrip.skill.md) | Phase 1 cold-adopter probe — `$ data_write` + `$ data_read` FTS round-trip |
|
|
10
12
|
| [`morning-brief.skill.md`](./skillscripts/morning-brief.skill.md) | Multi-target with `needs:`; cron-fired with `EVENT.fired_at_*`; `# OnError:` fallback; dual `# Output:` (slack + prompt-context); `# Requires:` user-var cascade with fallback; LocalModel + retrieval composition |
|
|
11
13
|
| [`doc-qa-with-citations.skill.md`](./skillscripts/doc-qa-with-citations.skill.md) | Single-target retrieval; `(fallback: [])` op-level fallback; LLM-with-citation pattern; pipe filter `\|json` for prompt embedding |
|
|
12
14
|
| [`classify-support-ticket.skill.md`](./skillscripts/classify-support-ticket.skill.md) | `if`/`elif`/`else` multi-branch routing; classifier-cascade pattern; DataStore `$` writes with structured `domain_tags`; `$set` literal binding |
|
|
@@ -18,7 +20,7 @@ For full language semantics, see [`../docs/language-reference.md`](../docs/langu
|
|
|
18
20
|
|
|
19
21
|
Most examples assume the bundled-default connectors:
|
|
20
22
|
|
|
21
|
-
- `hello.skill.md` — zero deps (runs cold)
|
|
23
|
+
- `hello-world.skill.md` — zero deps (runs cold)
|
|
22
24
|
- `doc-qa-with-citations.skill.md` — Ollama (LocalModel) + DataStore for the retrieval cache
|
|
23
25
|
- `morning-brief.skill.md`, `feedback-sentiment-scan.skill.md` — Ollama + DataStore + a calendar MCP connector (the `$ calendar.list_events` op)
|
|
24
26
|
- `classify-support-ticket.skill.md` — Ollama + DataStore
|
|
@@ -31,13 +33,13 @@ Skills that talk to MCP tools (like `calendar.list_events`) need that tool wired
|
|
|
31
33
|
|
|
32
34
|
```sh
|
|
33
35
|
# Cold install — no Ollama, no MCP, no external state
|
|
34
|
-
skillfile run examples/skillscripts/hello.skill.md
|
|
36
|
+
skillfile run examples/skillscripts/hello-world.skill.md
|
|
35
37
|
|
|
36
38
|
# With overrides
|
|
37
|
-
skillfile run examples/skillscripts/hello.skill.md --input WHO=Scott
|
|
39
|
+
skillfile run examples/skillscripts/hello-world.skill.md --input WHO=Scott
|
|
38
40
|
|
|
39
41
|
# Preview the compiled artifact without execution
|
|
40
|
-
skillfile compile examples/skillscripts/hello.skill.md
|
|
42
|
+
skillfile compile examples/skillscripts/hello-world.skill.md
|
|
41
43
|
|
|
42
44
|
# Mechanical preview — $/~/> ops short-circuit (useful for examining flow
|
|
43
45
|
# without firing real LLM calls)
|
|
@@ -18,6 +18,13 @@
|
|
|
18
18
|
* - `DataStoreMcpConnector` — bridges a registered DataStore as
|
|
19
19
|
* `$ data_read mode=...` MCP dispatch. Auto-wired when DataStore substrate
|
|
20
20
|
* is configured.
|
|
21
|
+
* - `SkillStoreMcpConnector` (v0.15.0) — bridges a registered SkillStore as
|
|
22
|
+
* `$ skill_write` / `$ skill_read` MCP dispatch. Makes the Lisp-shape
|
|
23
|
+
* primitive (skills program skills) work from inside an executing skill.
|
|
24
|
+
* Auto-wired against `substrate.skill_store`. In-skill writes are forced
|
|
25
|
+
* to `# Status: Draft` at the bridge per the v0.15.0 trust boundary —
|
|
26
|
+
* see `src/connectors/skill-store-mcp.ts` header for the threat-model
|
|
27
|
+
* rationale.
|
|
21
28
|
*
|
|
22
29
|
* Fork from this template when none of those fit — e.g.:
|
|
23
30
|
* - Direct HTTP MCP (JSON-RPC over HTTP, no child process)
|
|
@@ -9,7 +9,8 @@ A skeleton `McpConnector` implementation for adopters writing their own. Not run
|
|
|
9
9
|
| `RemoteMcpConnector` | Stdio bridging to remote MCP servers (`npx mcp-remote ...`). YouTrack, GitHub, Linear, most adopter MCP wiring goes through this. JSON-configurable via `connectors.json`. |
|
|
10
10
|
| `CallbackMcpConnector` | Wraps a JS function. Test rigs + embedder-wired transports where the dispatch is local code. |
|
|
11
11
|
| `LocalModelMcpConnector` | Bridges a registered `LocalModel` as `$ llm prompt=...`. Auto-wired when `substrate.local_model` is set. |
|
|
12
|
-
| `DataStoreMcpConnector` | Bridges a registered `DataStore` as `$ data_read mode=...`. Auto-wired when `substrate.data_store` is set. |
|
|
12
|
+
| `DataStoreMcpConnector` | Bridges a registered `DataStore` as `$ data_read mode=...` + `$ data_write content=...`. Auto-wired when `substrate.data_store` is set. |
|
|
13
|
+
| `SkillStoreMcpConnector` (v0.15.0) | Bridges a registered `SkillStore` as in-skill `$ skill_write` + `$ skill_read` dispatch (Lisp-shape: skills program skills). Auto-wired against `substrate.skill_store`. In-skill writes are forced to `# Status: Draft` at the bridge per the v0.15.0 trust boundary. |
|
|
13
14
|
|
|
14
15
|
**Fork this template only when none of those fit** — e.g.:
|
|
15
16
|
|
|
@@ -139,7 +140,7 @@ The declarative path is the canonical adopter pattern for stdio-bridged remote M
|
|
|
139
140
|
| Cardinality | Many instances per deployment | One singleton per slot |
|
|
140
141
|
| Substrate config | Per-instance via top-level keys | `substrate` section short/object/custom |
|
|
141
142
|
| Class extensibility | `registerConnectorClass()` for adopter-custom classes | Programmatic bootstrap (or `substrate.skill_store: {type: "custom", ...}` once async-bootstrap lands) |
|
|
142
|
-
| Auto-wired bridges | `llm` + `data_read` + `data_write` (LocalModel + DataStore exposed via bridge connectors) | n/a (these ARE the substrates being bridged) |
|
|
143
|
+
| Auto-wired bridges | `llm` + `data_read` + `data_write` + `skill_read` + `skill_write` (v0.15.0 — LocalModel + DataStore + SkillStore exposed via bridge connectors) | n/a (these ARE the substrates being bridged) |
|
|
143
144
|
|
|
144
145
|
McpConnector is fundamentally the "dispatch to external tools" surface — narrowest contract, broadest range of impls.
|
|
145
146
|
|
|
@@ -9,7 +9,7 @@ Worked examples + fork-me templates for adopter-written connectors. The bundled
|
|
|
9
9
|
| `SkillStore` | `FilesystemSkillStore`, `SqliteSkillStore` (in `src/connectors/`) | — | **[SkillStoreTemplate/](./SkillStoreTemplate/)** |
|
|
10
10
|
| `DataStore` | `SqliteDataStore` (in `src/connectors/`) | — | **[DataStoreTemplate/](./DataStoreTemplate/)** |
|
|
11
11
|
| `LocalModel` | `OllamaLocalModel` (in `src/connectors/`; opt-in via substrate config) | — | **[LocalModelTemplate/](./LocalModelTemplate/)** |
|
|
12
|
-
| `McpConnector` | `RemoteMcpConnector`, `CallbackMcpConnector`, `LocalModelMcpConnector`, `DataStoreMcpConnector` (in `src/connectors/`) | — | **[McpConnectorTemplate/](./McpConnectorTemplate/)** |
|
|
12
|
+
| `McpConnector` | `RemoteMcpConnector`, `CallbackMcpConnector`, `LocalModelMcpConnector`, `DataStoreMcpConnector`, `SkillStoreMcpConnector` (in `src/connectors/`) | — | **[McpConnectorTemplate/](./McpConnectorTemplate/)** |
|
|
13
13
|
| `AgentConnector` | `NoOpAgentConnector` (in `src/connectors/`) | **[HttpWebhookAgentConnector/](./HttpWebhookAgentConnector/)** | — |
|
|
14
14
|
|
|
15
15
|
**Bundled defaults** are runnable out of the box — wired through `connectors.json` substrate config or programmatic bootstrap.
|
|
@@ -26,6 +26,32 @@
|
|
|
26
26
|
* you register via the registry, so once your fork passes the conformance
|
|
27
27
|
* suite the entire skillscript surface (skill_write / skill_list /
|
|
28
28
|
* execute_skill / etc.) reads + writes against your substrate.
|
|
29
|
+
*
|
|
30
|
+
* **v0.15.0 — `SkillStoreMcpConnector` bridge auto-wires against your impl.**
|
|
31
|
+
* The runtime's `defaultRegistry` wraps your registered SkillStore in a
|
|
32
|
+
* `SkillStoreMcpConnector` instance and registers it under the connector
|
|
33
|
+
* names `skill_read` + `skill_write`, so `$ skill_read` / `$ skill_write` from
|
|
34
|
+
* inside an executing skill dispatches through your `load()` / `store()`
|
|
35
|
+
* methods. This is the Lisp-shape primitive — skills can program skills —
|
|
36
|
+
* and works against any `SkillStore` impl that passes the conformance suite.
|
|
37
|
+
*
|
|
38
|
+
* Your impl doesn't need to do anything special to participate. Two things
|
|
39
|
+
* worth knowing:
|
|
40
|
+
* - **In-skill writes arrive Draft-stamped.** The bridge layer applies a
|
|
41
|
+
* `# Status: Draft` override to the body before calling your `store()`.
|
|
42
|
+
* This is the v0.15.0 trust boundary — autonomously-generated skill
|
|
43
|
+
* bodies (e.g., `~ qwen prompt="generate a skill"` → `$ skill_write`)
|
|
44
|
+
* shouldn't bypass human review by landing Approved + immediately
|
|
45
|
+
* executable. See `src/connectors/skill-store-mcp.ts` header for the
|
|
46
|
+
* threat-model rationale. Outside-MCP `skill_write` (cold-author agents
|
|
47
|
+
* authoring directly via the wire surface) keeps the existing "body
|
|
48
|
+
* declares status, you auto-stamp via store()" path — that's the path
|
|
49
|
+
* your `store()` honor-the-body-Status logic addresses.
|
|
50
|
+
* - **Substrate-level lint runs at `store()` entry.** If you mirror
|
|
51
|
+
* `FilesystemSkillStore` / `SqliteSkillStore`, you'll run tier-1 lint
|
|
52
|
+
* on the body before persisting + throw `LintFailureError` on rejection.
|
|
53
|
+
* The bridge propagates that error through `$ skill_write` so authors
|
|
54
|
+
* see lint-rejection-on-write, not silent persistence of malformed bodies.
|
|
29
55
|
*/
|
|
30
56
|
|
|
31
57
|
import type {
|
|
@@ -89,11 +89,12 @@ registry.registerSkillStore("primary", skillStore);
|
|
|
89
89
|
// registry.registerDataStore("primary", new MyDataStoreAdapter(...));
|
|
90
90
|
// registry.registerAgentConnector("primary", new MyAgentHarnessAdapter(...));
|
|
91
91
|
|
|
92
|
-
// Then wire bridges if you want the canonical `$ llm` /
|
|
93
|
-
// `$
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
92
|
+
// Then wire bridges if you want the canonical in-skill `$ llm` /
|
|
93
|
+
// `$ data_read` / `$ data_write` / `$ skill_read` / `$ skill_write`
|
|
94
|
+
// surfaces. Each bridge handles its multi-verb tool surface via toolName
|
|
95
|
+
// discrimination; register the same instance under each connector name so
|
|
96
|
+
// bare-form name-match resolution picks the right route.
|
|
97
|
+
// import { LocalModelMcpConnector, DataStoreMcpConnector, SkillStoreMcpConnector } from "skillscript-runtime";
|
|
97
98
|
// registry.registerMcpConnector("llm", new LocalModelMcpConnector(registry.getLocalModel("default")));
|
|
98
99
|
// const ms = registry.listDataStores().find((e) => e.name === "primary");
|
|
99
100
|
// if (ms !== undefined) {
|
|
@@ -101,6 +102,16 @@ registry.registerSkillStore("primary", skillStore);
|
|
|
101
102
|
// registry.registerMcpConnector("data_read", dataBridge);
|
|
102
103
|
// registry.registerMcpConnector("data_write", dataBridge);
|
|
103
104
|
// }
|
|
105
|
+
// // v0.15.0 — SkillStore-as-bridge. Makes `$ skill_write` / `$ skill_read`
|
|
106
|
+
// // dispatchable from inside an executing skill (Lisp-shape: skills program
|
|
107
|
+
// // skills). In-skill writes are Draft-forced at the bridge layer; outside-MCP
|
|
108
|
+
// // skill_write keeps the existing "body declares status" behavior.
|
|
109
|
+
// const ss = registry.listSkillStores().find((e) => e.name === "primary");
|
|
110
|
+
// if (ss !== undefined) {
|
|
111
|
+
// const skillBridge = new SkillStoreMcpConnector(ss.instance);
|
|
112
|
+
// registry.registerMcpConnector("skill_read", skillBridge);
|
|
113
|
+
// registry.registerMcpConnector("skill_write", skillBridge);
|
|
114
|
+
// }
|
|
104
115
|
|
|
105
116
|
// Wire any connectors.json instances.
|
|
106
117
|
for (const c of connectors) {
|
|
@@ -20,12 +20,13 @@ import {
|
|
|
20
20
|
import { Scheduler } from "skillscript-runtime/scheduler";
|
|
21
21
|
import { FilesystemTraceStore } from "skillscript-runtime/trace";
|
|
22
22
|
import { McpServer } from "skillscript-runtime/mcp-server";
|
|
23
|
-
// Note: LocalModelMcpConnector + DataStoreMcpConnector
|
|
24
|
-
// already exported from skillscript-runtime/connectors.
|
|
25
|
-
// typed-contract impl as an MCP-dispatchable connector.
|
|
23
|
+
// Note: LocalModelMcpConnector + DataStoreMcpConnector + SkillStoreMcpConnector
|
|
24
|
+
// are bridge classes already exported from skillscript-runtime/connectors.
|
|
25
|
+
// They wrap any typed-contract impl as an MCP-dispatchable connector.
|
|
26
26
|
import {
|
|
27
27
|
LocalModelMcpConnector,
|
|
28
28
|
DataStoreMcpConnector,
|
|
29
|
+
SkillStoreMcpConnector,
|
|
29
30
|
} from "skillscript-runtime/connectors";
|
|
30
31
|
|
|
31
32
|
import { FileDataStore } from "./file-data-store.js";
|
|
@@ -63,15 +64,25 @@ const agentConnector = new TmuxShellAgentConnector({
|
|
|
63
64
|
});
|
|
64
65
|
registry.registerAgentConnector("primary", agentConnector);
|
|
65
66
|
|
|
66
|
-
// Step 3: wire bridges so `$ llm` / `$ data_read` /
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
67
|
+
// Step 3: wire bridges so canonical in-skill `$ llm` / `$ data_read` /
|
|
68
|
+
// `$ data_write` / `$ skill_read` / `$ skill_write` dispatch through the
|
|
69
|
+
// adopter substrates above (case 1 typed-contract wiring — portable). Each
|
|
70
|
+
// bridge handles its multi-verb surface via toolName discrimination;
|
|
71
|
+
// register the same instance under each connector name so bare-form
|
|
72
|
+
// name-match resolution picks the right route.
|
|
71
73
|
registry.registerMcpConnector("llm", new LocalModelMcpConnector(openai));
|
|
72
74
|
const dataBridge = new DataStoreMcpConnector(dataStore);
|
|
73
75
|
registry.registerMcpConnector("data_read", dataBridge);
|
|
74
76
|
registry.registerMcpConnector("data_write", dataBridge);
|
|
77
|
+
// v0.15.0 — SkillStore-as-bridge. Makes `$ skill_write` / `$ skill_read`
|
|
78
|
+
// dispatchable from inside an executing skill (Lisp-shape: skills program
|
|
79
|
+
// skills). In-skill writes are forced to `# Status: Draft` at the bridge
|
|
80
|
+
// layer per the v0.15.0 trust boundary — see `src/connectors/skill-store-mcp.ts`
|
|
81
|
+
// header for the threat-model rationale. Outside-MCP `skill_write` (via the
|
|
82
|
+
// wire surface) keeps its existing "body declares status" behavior.
|
|
83
|
+
const skillBridge = new SkillStoreMcpConnector(skillStore);
|
|
84
|
+
registry.registerMcpConnector("skill_read", skillBridge);
|
|
85
|
+
registry.registerMcpConnector("skill_write", skillBridge);
|
|
75
86
|
|
|
76
87
|
// Step 4: wire connectors.json instances (adopter-defined MCP servers).
|
|
77
88
|
for (const c of connectors) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Skill: data-store-roundtrip
|
|
2
|
+
# Status: Approved v1:83897803
|
|
3
|
+
# Autonomous: true
|
|
4
|
+
# Description: Round-trips the DataStore — writes a record, reads it back via full-text search. If this skill executes and emits a successful round-trip, your DataStore substrate is wired correctly.
|
|
5
|
+
|
|
6
|
+
run:
|
|
7
|
+
$ data_write content="adopter dogfood probe record" tags=["phase1","probe"] -> W
|
|
8
|
+
$ data_read mode="fts" query="adopter dogfood probe" limit=5 -> R
|
|
9
|
+
emit(text="wrote record '${W.id}'; read back ${R.items|length} items")
|
|
10
|
+
|
|
11
|
+
default: run
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Skill: hello-world
|
|
2
|
+
# Status: Approved v1:5ce6d5bf
|
|
3
|
+
# Description: The canonical first-run example. No substrate dependencies — pure emit. If this fails to execute, your install or runtime is broken; investigate before troubleshooting deeper layers. Demonstrates `# Vars:` declared inputs with `--input` override.
|
|
4
|
+
# Vars: WHO=world
|
|
5
|
+
|
|
6
|
+
greet:
|
|
7
|
+
emit(text="Hello, ${WHO}!")
|
|
8
|
+
emit(text="Your install is healthy. Try skill-store-roundtrip + data-store-roundtrip next to verify substrate wiring.")
|
|
9
|
+
|
|
10
|
+
default: greet
|
package/examples/skillscripts/{hello.skill.provenance.json → hello-world.skill.provenance.json}
RENAMED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"provenance_version": "1.0",
|
|
3
3
|
"language_version": "1.0",
|
|
4
4
|
"compiler_version": "0.1.0-dev",
|
|
5
|
-
"compiled_at": "2026-
|
|
5
|
+
"compiled_at": "2026-06-01T14:54:14.858Z",
|
|
6
6
|
"source_skill": {
|
|
7
|
-
"name": "hello"
|
|
7
|
+
"name": "hello-world"
|
|
8
8
|
},
|
|
9
9
|
"data_skills_inlined": []
|
|
10
10
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Skill: morning-brief
|
|
2
|
-
# Status: Approved v1:
|
|
2
|
+
# Status: Approved v1:091ae2ae
|
|
3
3
|
# Description: Compose a daily morning brief from calendar, mailbox, and overnight data writes when the cron trigger fires at 7am. Delivers via the agent: lifecycle hook to the receiving agent, who decides whether to surface to Slack / Discord / etc.
|
|
4
4
|
# Vars: AGENT, BRIEF_HORIZON_HOURS=24
|
|
5
5
|
# Triggers: cron: 0 7 * * *
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Skill: skill-store-roundtrip
|
|
2
|
+
# Status: Approved v1:a3d46cf0
|
|
3
|
+
# Autonomous: true
|
|
4
|
+
# Description: Round-trips the SkillStore — writes a child skill, reads it back. Demonstrates the Lisp-shape primitive (skills can write skills). NOTE: under v0.15.0, in-skill `$ skill_write` lands the child as `# Status: Draft` regardless of what the body declares — to run the generated child, an authorized agent (human via dashboard, or MCP-direct) reviews + promotes via the outside-MCP `skill_status` tool. The Draft-default gate keeps autonomously-written skills out of the immediate execution loop.
|
|
5
|
+
|
|
6
|
+
run:
|
|
7
|
+
$ skill_write name="hello-child" source="# Skill: hello-child\n# Status: Approved\nrun:\n emit(text=\"hello from a programmatically-authored skill\")\ndefault: run\n" -> W
|
|
8
|
+
$ skill_read name="hello-child" -> R
|
|
9
|
+
emit(text="wrote skill '${W.name}' as Status: ${W.status}; read back ${R.source|length} bytes")
|
|
10
|
+
|
|
11
|
+
default: run
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillscript-runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Runtime, compiler, lint, CLI, and dashboard for Skillscript — a small declarative language for authoring agent workflows.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Scott Shwarts <scotts@pobox.com>",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Skill: hello-world
|
|
2
|
+
# Status: Approved v1:5ce6d5bf
|
|
3
|
+
# Description: The canonical first-run example. No substrate dependencies — pure emit. If this fails to execute, your install or runtime is broken; investigate before troubleshooting deeper layers. Demonstrates `# Vars:` declared inputs with `--input` override.
|
|
4
|
+
# Vars: WHO=world
|
|
5
|
+
|
|
6
|
+
greet:
|
|
7
|
+
emit(text="Hello, ${WHO}!")
|
|
8
|
+
emit(text="Your install is healthy. Try skill-store-roundtrip + data-store-roundtrip next to verify substrate wiring.")
|
|
9
|
+
|
|
10
|
+
default: greet
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# Skill: hello
|
|
2
|
-
# Description: The canonical first-run example — runs without Ollama, MCP, or external state.
|
|
3
|
-
# Vars: WHO=world
|
|
4
|
-
|
|
5
|
-
greet:
|
|
6
|
-
emit(text="Hello, ${WHO}!")
|
|
7
|
-
emit(text="Welcome to Skillscript. You ran a skill end-to-end with three commands.")
|
|
8
|
-
|
|
9
|
-
default: greet
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# Skill: hello
|
|
2
|
-
# Status: Approved v1:03cf40ab
|
|
3
|
-
# Description: The canonical first-run example — runs without Ollama, MCP, or external state.
|
|
4
|
-
# Vars: WHO=world
|
|
5
|
-
|
|
6
|
-
greet:
|
|
7
|
-
emit(text="Hello, ${WHO}!")
|
|
8
|
-
emit(text="Welcome to Skillscript. You ran a skill end-to-end with three commands.")
|
|
9
|
-
|
|
10
|
-
default: greet
|