skillscript-runtime 0.27.3 → 0.30.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/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  Each release carries an **Upgrade impact:** line (first in its section) so a bump's requirements are visible at a glance. Tags (closed set): **BREAKING** (a manual change is needed to keep working) · **RE-APPROVE** (secured-mode signature invalidation — skills must be re-approved before they run) · **CONFIG** (`connectors.json` / config edit needed) · **none (additive)** (no action; backward-compatible). Standard from 0.20.0 forward; the pre-0.20 transitions that need action are flagged inline below (0.14.0, 0.18.8, 0.19.0). Full walkthrough: [UPGRADING.md](UPGRADING.md).
4
4
 
5
+ ## 0.30.0 — 2026-07-10 — public launch cut
6
+
7
+ **Upgrade impact:** none (additive). Documentation only; no runtime, API, or behavior change.
8
+
9
+ The public-announcement release. A final leakage-scrub pass over the shipped docs, closing the coverage gap the 0.27.3 audit left, so no doc names an internal substrate as an example.
10
+
11
+ - **`sqlite-skill-store.md` (npm-shipped): removed AMP from the three substrate examples** the 0.27.3 audit didn't cover — the "choose your substrate" list (`AMP, Pinecone, S3, Postgres…` → `Pinecone, S3, Postgres, Redis…`), the forking-checklist class-rename example (`AmpSkillStore` → `RedisSkillStore`), and the `manifest()` example (`kind: "amp"` → `kind: "postgres"`). Example-name swaps only; no structural change.
12
+ - **`configuration.md`: genericized two AMP-named examples** — the `connectors.json` `${VAR}`-substitution example (an `"amp"` connector using `${AMP_ENDPOINT}`/`${AMP_TOKEN}` → a generic `"memory"` connector using `${MEMORY_ENDPOINT}`/`${MEMORY_TOKEN}`) and an inline `_comment` ("AMP-style dogfooding" → "local dogfooding").
13
+ - **`language-reference.md` re-rendered from atoms** — the worked-example op dispatches that previously used `$ amp.*` connector calls (mailbox / memory-write / query) now use `$ github.*` / `$ linear.*`, and the substrate-neutrality note lists `$ github.*` / `$ linear.*` as the "substrate-specific tools the adopter declares" example. The "Source of truth: AMP" provenance footer is intentionally retained.
14
+
5
15
  ## 0.27.3 — 2026-07-10 — dashboard highlighter fix + adopter-facing docs audit
6
16
 
7
17
  **Upgrade impact:** none (additive). One dashboard rendering fix + docs; no runtime behavior change.
@@ -83,18 +83,18 @@ Once `.env` populates `process.env`, both `skillscript.config.json` (`runtime-co
83
83
 
84
84
  ```json
85
85
  {
86
- "amp": {
86
+ "memory": {
87
87
  "class": "HttpMcpConnector",
88
88
  "config": {
89
- "endpoint": "${AMP_ENDPOINT}",
90
- "headers": { "Authorization": "Bearer ${AMP_TOKEN}" },
89
+ "endpoint": "${MEMORY_ENDPOINT}",
90
+ "headers": { "Authorization": "Bearer ${MEMORY_TOKEN}" },
91
91
  "identityHeader": "X-Agent-Id"
92
92
  }
93
93
  }
94
94
  }
95
95
  ```
96
96
 
97
- `AMP_ENDPOINT` and `AMP_TOKEN` in `.env`; declarative shape committed to `connectors.json`.
97
+ `MEMORY_ENDPOINT` and `MEMORY_TOKEN` in `.env`; declarative shape committed to `connectors.json`.
98
98
 
99
99
  ### `.env` file format
100
100
 
@@ -365,7 +365,7 @@ Underscore-prefixed top-level keys (`_comment`, `_note_security`, etc.) are igno
365
365
 
366
366
  ```json
367
367
  {
368
- "_comment": "Last edited 2026-05-28 — switched skill_store to sqlite for AMP-style dogfooding",
368
+ "_comment": "Last edited 2026-05-28 — switched skill_store to sqlite for local dogfooding",
369
369
  "substrate": { "skill_store": "sqlite" }
370
370
  }
371
371
  ```
@@ -460,11 +460,11 @@ Calls a tool through a configured connector. Connector name resolves against `co
460
460
  $ <connector>.<tool> kwarg=value, ... [-> R]
461
461
  ```
462
462
 
463
- The text before the dot is the connector name (must match an entry in `connectors.json`); the rest is the tool name + args. Named form is canonical for any tool whose semantics are substrate-specific — adopter MCP servers (`amp_*`, `github_*`, `linear_*`, etc.).
463
+ The text before the dot is the connector name (must match an entry in `connectors.json`); the rest is the tool name + args. Named form is canonical for any tool whose semantics are substrate-specific — adopter MCP servers (`github_*`, `linear_*`, etc.).
464
464
 
465
465
  ```
466
- $ amp.amp_check_mailbox limit=20 -> MAIL
467
- $ amp.amp_write_memory summary="..." domain_tags=["x"] vault="private" -> ACK
466
+ $ youtrack.search_issues query="project:INFRA state:Open" limit=20 -> ISSUES
467
+ $ github.create_issue repo="acme/foo" title="..." body="..." -> ACK
468
468
  $ github.search_issues query="repo:acme/foo state:open" -> ISSUES
469
469
  $ linear.find_issues filter="project:INFRA" -> TICKETS
470
470
  ```
@@ -508,7 +508,7 @@ Four surfaces apply to every `$` dispatch and to `shell()` (notably `(fallback:)
508
508
 
509
509
  ```
510
510
  $ llm prompt="..." timeout=30 -> R
511
- $ amp.amp_olsen_task task_type="scan" timeout=120 -> DISPATCH
511
+ $ youtrack.run_report report_id="INFRA-weekly" timeout=120 -> DISPATCH
512
512
  ```
513
513
 
514
514
  **`approved="<reason>"`** — Author-intent marker for the mutation-gate lint. Any non-empty string satisfies. Extracted at runtime; **not forwarded to the connector**. The value is required but not parsed semantically — presence is the signal.
@@ -523,7 +523,7 @@ Note: an envelope object like `{items: []}` is a non-empty object and does NOT t
523
523
 
524
524
  ```
525
525
  $ llm prompt="Classify: ${INPUT}" -> VERDICT (fallback: "unknown")
526
- $ amp.amp_query_memories query="${TOPIC}" -> RESULTS (fallback: [])
526
+ $ youtrack.search_issues query="${TOPIC}" -> RESULTS (fallback: [])
527
527
  shell(argv=["gh","pr","list","--repo","acme/foo"]) -> PRS (fallback: "No open PRs")
528
528
  $ ticketing.search query="..." -> ISSUES (fallback: "search-unavailable")
529
529
  ```
@@ -590,8 +590,8 @@ $ json_parse ${RAW_JSON} -> PARSED
590
590
  ### Worked examples
591
591
 
592
592
  ```
593
- $ amp.amp_olsen_task task_type="scan" -> DISPATCH
594
- $ amp.amp_query_memories query="recent activity" limit=5 -> RECENT
593
+ $ youtrack.run_report report_id="INFRA-weekly" -> DISPATCH
594
+ $ github.search_issues query="repo:acme/foo updated:>2026-01-01" limit=5 -> RECENT
595
595
  $ llm prompt="Classify: ${INPUT}" timeout=30 -> VERDICT
596
596
  $ llm prompt="Summarize: ${TEXT}" model="qwen" maxTokens=500 -> SUMMARY
597
597
  $ data_read mode=fts query="${TOPIC}" limit=5 -> RESULTS (fallback: [])
@@ -601,7 +601,7 @@ $ ticketing.search query="project:INFRA state:Open" limit=20 -> ISSUES
601
601
 
602
602
  Tool args are unconstrained `key=value` pairs — the connector forwards them to the underlying MCP tool. If a dispatched call returns `isError: true`, the executor throws via `makeOpError`, which routes through the target's `else:` handler. The inner tool's error text is preserved in `result.errors[]`.
603
603
 
604
- **Substrate-neutrality.** Typed-contract bare ops (`$ llm`, `$ data_read`, `$ data_write`, `$ skill_*`, `$ json_parse`) are not reserved built-ins — they're typed-contract bridges the adopter wires through `substrate.local_model` / `substrate.data_store` / `substrate.skill_store` in `skillscript.config.json`. Substrate-specific tools (`$ amp.*`, `$ github.*`, etc.) are whatever the adopter declares in `connectors.json`. For external MCP servers, three bundled wiring paths cover the common cases:
604
+ **Substrate-neutrality.** Typed-contract bare ops (`$ llm`, `$ data_read`, `$ data_write`, `$ skill_*`, `$ json_parse`) are not reserved built-ins — they're typed-contract bridges the adopter wires through `substrate.local_model` / `substrate.data_store` / `substrate.skill_store` in `skillscript.config.json`. Substrate-specific tools (`$ github.*`, `$ linear.*`, etc.) are whatever the adopter declares in `connectors.json`. For external MCP servers, three bundled wiring paths cover the common cases:
605
605
 
606
606
  - `HttpMcpConnector` — declarative wiring for any Streamable HTTP MCP server (JSON-RPC over HTTP + SSE). No subprocess. Adopters declare instances by class name in `connectors.json`.
607
607
  - `RemoteMcpConnector` — stdio bridging for MCPs distributed as spawnable binaries (YouTrack, GitHub, Linear when run locally) or HTTP MCPs adapted via `npx mcp-remote ... --sse`.
@@ -2173,7 +2173,7 @@ For *data skills* (skills marked `# Type: data`), the compile-time inline primit
2173
2173
  - Recursion is legal but bounded. If your design requires deeper recursion than the configured limit, reshape the workflow — almost always a sign of an iteration that should be expressed as `foreach` rather than recursion.
2174
2174
 
2175
2175
  ## Session isolation — a skill can't mutate the calling agent's session
2176
- A skill executes in its OWN session; agent session state (context, persona) is session-local. Calling `amp_set_session_context` (or similar) inside a skill sets it for the SKILL's session, not the caller's — the caller sees no change. The contract: **skills assemble and RETURN data; the agent owns its SESSION STATE.** To "enter a project," a skill returns the instruction bodies and the AGENT applies its own session context.
2176
+ A skill executes in its OWN session; agent session state (context, persona) is session-local. Calling a session-context tool (or similar) inside a skill sets it for the SKILL's session, not the caller's — the caller sees no change. The contract: **skills assemble and RETURN data; the agent owns its SESSION STATE.** To "enter a project," a skill returns the instruction bodies and the AGENT applies its own session context.
2177
2177
 
2178
2178
  ## Static vs Dynamic — skill execution model
2179
2179
 
@@ -2565,5 +2565,5 @@ When any of these primitives ship, the relevant grammar moves into its canonical
2565
2565
 
2566
2566
  ---
2567
2567
 
2568
- *Rendered from `skillscript/skillscript-language-reference` — 2026-07-10 13:59 EDT*
2568
+ *Rendered from `skillscript/skillscript-language-reference` — 2026-07-10 14:34 EDT*
2569
2569
  *Source of truth: AMP (`amp_render_document("skillscript/skillscript-language-reference")`)*
@@ -21,7 +21,7 @@ SkillStore (choose which connector)
21
21
  └── Adopter-custom (you write your own)
22
22
  ```
23
23
 
24
- If your substrate is AMP, Pinecone, S3, Postgres, or anything else, write a `class FooSkillStore implements SkillStore { ... }` and call `registry.registerSkillStore("primary", new FooSkillStore(...))`. The runtime is none the wiser.
24
+ If your substrate is Pinecone, S3, Postgres, Redis, or anything else, write a `class FooSkillStore implements SkillStore { ... }` and call `registry.registerSkillStore("primary", new FooSkillStore(...))`. The runtime is none the wiser.
25
25
 
26
26
  This SqliteSkillStore is one such impl — useful as a copy-paste starting point, or directly usable if your needs match.
27
27
 
@@ -160,10 +160,10 @@ The same holds for a fork: your `store()` neither stamps nor verifies — persis
160
160
 
161
161
  When forking into your codebase:
162
162
 
163
- 1. Rename the class (e.g., `PostgresSkillStore`, `AmpSkillStore`)
163
+ 1. Rename the class (e.g., `PostgresSkillStore`, `RedisSkillStore`)
164
164
  2. Replace the SQL with your substrate's API (HTTP, DataStore, vector DB, etc.)
165
165
  3. Update `staticCapabilities()` to match what your substrate actually supports — drop `supports_versioning` if you can't track history, drop `supports_tag_filter` if querying tags isn't tractable
166
- 4. Update `manifest()` to describe your substrate (`kind: "amp"` or whatever)
166
+ 4. Update `manifest()` to describe your substrate (`kind: "postgres"` or whatever)
167
167
  5. **Optional but high-value for network-backed forks: implement `version()`** — a cheap store-wide change-token computed WITHOUT loading bodies (a list ETag, max-revision, or metadata digest), where any add/remove/edit/status-change moves it. It lets `skill_list` skip its N+1 catalog rebuild on unchanged polls (each entry otherwise costs a `load()` — one network round-trip per skill against a remote store). `SqliteSkillStore` hashes `(name, status, current_version)` in one body-free query. Skip it and `skill_list` just always rebuilds.
168
168
  6. Tests: copy `tests/SqliteSkillStore.test.ts` as a starting point + run the conformance suite (`SkillStoreConformance.buildTests()` from `skillscript-runtime/testing`)
169
169
 
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:49.305Z",
5
+ "compiled_at": "2026-07-10T18:40:34.525Z",
6
6
  "source_skill": {
7
7
  "name": "classify-support-ticket"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:49.486Z",
5
+ "compiled_at": "2026-07-10T18:40:34.690Z",
6
6
  "source_skill": {
7
7
  "name": "data-store-roundtrip"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:49.652Z",
5
+ "compiled_at": "2026-07-10T18:40:34.849Z",
6
6
  "source_skill": {
7
7
  "name": "doc-qa-with-citations"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:49.855Z",
5
+ "compiled_at": "2026-07-10T18:40:35.079Z",
6
6
  "source_skill": {
7
7
  "name": "feedback-sentiment-scan"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.004Z",
5
+ "compiled_at": "2026-07-10T18:40:35.257Z",
6
6
  "source_skill": {
7
7
  "name": "hello-world"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.178Z",
5
+ "compiled_at": "2026-07-10T18:40:35.414Z",
6
6
  "source_skill": {
7
7
  "name": "morning-brief"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.377Z",
5
+ "compiled_at": "2026-07-10T18:40:35.595Z",
6
6
  "source_skill": {
7
7
  "name": "queue-length-monitor"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.550Z",
5
+ "compiled_at": "2026-07-10T18:40:35.815Z",
6
6
  "source_skill": {
7
7
  "name": "service-health-watch"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.723Z",
5
+ "compiled_at": "2026-07-10T18:40:35.978Z",
6
6
  "source_skill": {
7
7
  "name": "skill-store-roundtrip"
8
8
  },
@@ -2,7 +2,7 @@
2
2
  "provenance_version": "1.0",
3
3
  "language_version": "1.0",
4
4
  "compiler_version": "0.1.0-dev",
5
- "compiled_at": "2026-07-10T18:06:50.897Z",
5
+ "compiled_at": "2026-07-10T18:40:36.165Z",
6
6
  "source_skill": {
7
7
  "name": "youtrack-morning-sweep"
8
8
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillscript-runtime",
3
- "version": "0.27.3",
3
+ "version": "0.30.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>",