skillscript-runtime 0.19.16 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +11 -1
  2. package/dist/approval.d.ts +80 -54
  3. package/dist/approval.d.ts.map +1 -1
  4. package/dist/approval.js +156 -120
  5. package/dist/approval.js.map +1 -1
  6. package/dist/bootstrap.d.ts +41 -0
  7. package/dist/bootstrap.d.ts.map +1 -1
  8. package/dist/bootstrap.js +59 -2
  9. package/dist/bootstrap.js.map +1 -1
  10. package/dist/cli.js +277 -24
  11. package/dist/cli.js.map +1 -1
  12. package/dist/compile.js +7 -0
  13. package/dist/compile.js.map +1 -1
  14. package/dist/composition.d.ts.map +1 -1
  15. package/dist/composition.js +13 -1
  16. package/dist/composition.js.map +1 -1
  17. package/dist/connectors/skill-store.d.ts.map +1 -1
  18. package/dist/connectors/skill-store.js +41 -13
  19. package/dist/connectors/skill-store.js.map +1 -1
  20. package/dist/connectors/sqlite-skill-store.d.ts.map +1 -1
  21. package/dist/connectors/sqlite-skill-store.js +21 -12
  22. package/dist/connectors/sqlite-skill-store.js.map +1 -1
  23. package/dist/connectors/types.d.ts +9 -0
  24. package/dist/connectors/types.d.ts.map +1 -1
  25. package/dist/connectors/types.js.map +1 -1
  26. package/dist/dashboard/server.d.ts +26 -0
  27. package/dist/dashboard/server.d.ts.map +1 -1
  28. package/dist/dashboard/server.js +70 -2
  29. package/dist/dashboard/server.js.map +1 -1
  30. package/dist/dashboard/spa/app.js +200 -8
  31. package/dist/dashboard/spa/index.html +2 -0
  32. package/dist/dashboard/spa/styles.css +42 -0
  33. package/dist/errors.d.ts +25 -0
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/errors.js +49 -0
  36. package/dist/errors.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -2
  40. package/dist/index.js.map +1 -1
  41. package/dist/lint.d.ts.map +1 -1
  42. package/dist/lint.js +24 -7
  43. package/dist/lint.js.map +1 -1
  44. package/dist/mcp-server.d.ts +3 -0
  45. package/dist/mcp-server.d.ts.map +1 -1
  46. package/dist/mcp-server.js +19 -2
  47. package/dist/mcp-server.js.map +1 -1
  48. package/dist/parser.js +2 -2
  49. package/dist/parser.js.map +1 -1
  50. package/dist/runtime-config.d.ts +6 -0
  51. package/dist/runtime-config.d.ts.map +1 -1
  52. package/dist/runtime-config.js +8 -0
  53. package/dist/runtime-config.js.map +1 -1
  54. package/dist/runtime-env-resolver.d.ts +4 -0
  55. package/dist/runtime-env-resolver.d.ts.map +1 -1
  56. package/dist/runtime-env-resolver.js +27 -0
  57. package/dist/runtime-env-resolver.js.map +1 -1
  58. package/dist/runtime.d.ts +18 -0
  59. package/dist/runtime.d.ts.map +1 -1
  60. package/dist/runtime.js +84 -17
  61. package/dist/runtime.js.map +1 -1
  62. package/dist/safe-path.d.ts +22 -0
  63. package/dist/safe-path.d.ts.map +1 -1
  64. package/dist/safe-path.js +72 -1
  65. package/dist/safe-path.js.map +1 -1
  66. package/dist/scheduler.d.ts +3 -0
  67. package/dist/scheduler.d.ts.map +1 -1
  68. package/dist/scheduler.js +8 -0
  69. package/dist/scheduler.js.map +1 -1
  70. package/dist/skill-catalog.d.ts.map +1 -1
  71. package/dist/skill-catalog.js +10 -2
  72. package/dist/skill-catalog.js.map +1 -1
  73. package/docs/adopter-playbook.md +75 -25
  74. package/docs/configuration.md +5 -1
  75. package/docs/connector-contract-reference.md +5 -1
  76. package/docs/language-reference.md +83 -130
  77. package/docs/sqlite-skill-store.md +5 -1
  78. package/examples/skillscripts/classify-support-ticket.skill.md +1 -1
  79. package/examples/skillscripts/data-store-roundtrip.skill.md +1 -1
  80. package/examples/skillscripts/doc-qa-with-citations.skill.md +1 -1
  81. package/examples/skillscripts/feedback-sentiment-scan.skill.md +1 -1
  82. package/examples/skillscripts/hello-world.skill.md +1 -1
  83. package/examples/skillscripts/hello-world.skill.provenance.json +1 -1
  84. package/examples/skillscripts/morning-brief.skill.md +1 -1
  85. package/examples/skillscripts/queue-length-monitor.skill.md +1 -1
  86. package/examples/skillscripts/service-health-watch.skill.md +1 -1
  87. package/examples/skillscripts/skill-store-roundtrip.skill.md +1 -1
  88. package/examples/skillscripts/youtrack-morning-sweep.skill.md +1 -1
  89. package/package.json +1 -1
  90. package/scaffold/skills/data-store-roundtrip.skill.md +1 -1
  91. package/scaffold/skills/hello-world.skill.md +1 -1
  92. package/scaffold/skills/skill-store-roundtrip.skill.md +1 -1
@@ -78,6 +78,19 @@ export interface DashboardServerConfig {
78
78
  * the typical adopter wires both).
79
79
  */
80
80
  scheduler?: Scheduler;
81
+ /**
82
+ * v0.20.1 — optional shared-secret gate for the dashboard surface (SPA + the
83
+ * `/rpc` it uses). When set, every request must present the token via
84
+ * `?token=<x>` (browser entry — a cookie is then set so follow-up requests
85
+ * pass), a `skillscript_dash` cookie, or `Authorization: Bearer <x>` (for
86
+ * programmatic `/rpc` callers); 401 otherwise. Default unset → open (localhost
87
+ * bind is the only gate, as before). `/event` keeps its own bearer token.
88
+ *
89
+ * This is NETWORK/CASUAL hygiene (keep network parties out when binding beyond
90
+ * localhost), NOT an agent-forgery boundary — the dashboard holds no signing
91
+ * key. Falls back to `SKILLSCRIPT_DASHBOARD_AUTH_TOKEN`.
92
+ */
93
+ authToken?: string;
81
94
  }
82
95
  export declare class DashboardServer {
83
96
  private readonly mcpServer;
@@ -89,12 +102,25 @@ export declare class DashboardServer {
89
102
  private readonly eventIngressEnabled;
90
103
  private readonly eventIngressAuthToken;
91
104
  private readonly scheduler;
105
+ private readonly authToken;
92
106
  private httpServer;
93
107
  constructor(config: DashboardServerConfig);
94
108
  start(): Promise<void>;
109
+ /** The actual bound port after `start()` — read this when constructed with
110
+ * port 0 (OS-assigned ephemeral port). Falls back to the configured port. */
111
+ boundPort(): number;
95
112
  stop(): Promise<void>;
96
113
  /** Exposed for direct testing — doesn't go through the network stack. */
97
114
  handle(req: IncomingMessage, res: ServerResponse): Promise<void>;
115
+ /**
116
+ * v0.20.1 — dashboard auth gate. Returns true when the request may proceed
117
+ * (no token configured, or a valid token presented); false when it already
118
+ * sent a 401. On a browser `?token=` entry it sets a cookie so the SPA's
119
+ * follow-up asset + `/rpc` requests carry the token without re-tokening.
120
+ */
121
+ private checkDashboardAuth;
122
+ /** Token from `?token=` query, the `skillscript_dash` cookie, or a Bearer header. */
123
+ private extractDashboardToken;
98
124
  /**
99
125
  * v0.19.0 — POST /event handler (memory `ceaf4579`).
100
126
  *
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAKzE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8GAA8G;IAC9G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;;;;;;OAkBG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AASD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,EAAE,qBAAqB;IAoCnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,yEAAyE;IACnE,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDtE;;;;;;;;;;;;;;;OAeG;YACW,WAAW;YA8DX,SAAS;YAkCT,YAAY;CAkB3B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAU,MAAM,WAAW,CAAC;AAKzE,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8GAA8G;IAC9G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;;;;;;OAkBG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,EAAE,qBAAqB;IAsCnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;kFAC8E;IAC9E,SAAS,IAAI,MAAM;IAKb,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,yEAAyE;IACnE,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDtE;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAgB1B,qFAAqF;IACrF,OAAO,CAAC,qBAAqB;IAa7B;;;;;;;;;;;;;;;OAeG;YACW,WAAW;YA8DX,SAAS;YAkCT,YAAY;CAkB3B"}
@@ -1,10 +1,19 @@
1
1
  import { createServer } from "node:http";
2
+ import { timingSafeEqual } from "node:crypto";
2
3
  import { readFile } from "node:fs/promises";
3
4
  import { existsSync } from "node:fs";
4
5
  import { extname, join, resolve, dirname } from "node:path";
5
6
  import { fileURLToPath } from "node:url";
6
7
  import { EventNotFoundError, EventParamMismatchError } from "../errors.js";
7
8
  import { resolveRuntimeConfigFromEnv, pickEnvOptionalOption } from "../runtime-env-resolver.js";
9
+ /** Constant-time token comparison (length-guarded so timingSafeEqual won't throw). */
10
+ function tokensEqual(a, b) {
11
+ const ab = Buffer.from(a);
12
+ const bb = Buffer.from(b);
13
+ if (ab.length !== bb.length)
14
+ return false;
15
+ return timingSafeEqual(ab, bb);
16
+ }
8
17
  const MIME = {
9
18
  ".html": "text/html; charset=utf-8",
10
19
  ".js": "application/javascript; charset=utf-8",
@@ -21,6 +30,7 @@ export class DashboardServer {
21
30
  eventIngressEnabled;
22
31
  eventIngressAuthToken;
23
32
  scheduler;
33
+ authToken;
24
34
  httpServer = null;
25
35
  constructor(config) {
26
36
  this.mcpServer = config.mcpServer;
@@ -56,15 +66,30 @@ export class DashboardServer {
56
66
  if (this.eventIngressEnabled && this.scheduler === undefined) {
57
67
  throw new Error("DashboardServer: eventIngressEnabled requires a scheduler reference");
58
68
  }
69
+ // v0.20.1 — dashboard auth gate. Empty string treated as unset.
70
+ this.authToken = config.authToken ?? (process.env["SKILLSCRIPT_DASHBOARD_AUTH_TOKEN"] || undefined);
59
71
  }
60
72
  async start() {
61
73
  this.httpServer = createServer((req, res) => {
62
74
  void this.handle(req, res);
63
75
  });
64
- return new Promise((resolve) => {
65
- this.httpServer.listen(this.port, this.bindAddress, () => resolve());
76
+ return new Promise((resolve, reject) => {
77
+ const server = this.httpServer;
78
+ // Reject (don't hang) on bind errors — e.g. EADDRINUSE — so callers fail
79
+ // fast instead of waiting on a promise that never resolves.
80
+ const onError = (err) => { server.off("listening", onListening); reject(err); };
81
+ const onListening = () => { server.off("error", onError); resolve(); };
82
+ server.once("error", onError);
83
+ server.once("listening", onListening);
84
+ server.listen(this.port, this.bindAddress);
66
85
  });
67
86
  }
87
+ /** The actual bound port after `start()` — read this when constructed with
88
+ * port 0 (OS-assigned ephemeral port). Falls back to the configured port. */
89
+ boundPort() {
90
+ const addr = this.httpServer?.address();
91
+ return typeof addr === "object" && addr !== null ? addr.port : this.port;
92
+ }
68
93
  async stop() {
69
94
  if (this.httpServer === null)
70
95
  return;
@@ -76,6 +101,11 @@ export class DashboardServer {
76
101
  async handle(req, res) {
77
102
  try {
78
103
  const url = new URL(req.url ?? "/", `http://${this.bindAddress}:${this.port}`);
104
+ // v0.20.1 — dashboard auth gate (SPA + /rpc). `/event` self-authenticates
105
+ // with its own bearer token, so it's exempt here.
106
+ if (url.pathname !== "/event" && !this.checkDashboardAuth(req, url, res)) {
107
+ return;
108
+ }
79
109
  // /rpc is POST-only — any other method on /rpc is 405 (not falling
80
110
  // through to the static handler, which would 404 with misleading
81
111
  // semantics).
@@ -122,6 +152,44 @@ export class DashboardServer {
122
152
  res.end(`Internal server error: ${err.message}`);
123
153
  }
124
154
  }
155
+ /**
156
+ * v0.20.1 — dashboard auth gate. Returns true when the request may proceed
157
+ * (no token configured, or a valid token presented); false when it already
158
+ * sent a 401. On a browser `?token=` entry it sets a cookie so the SPA's
159
+ * follow-up asset + `/rpc` requests carry the token without re-tokening.
160
+ */
161
+ checkDashboardAuth(req, url, res) {
162
+ if (this.authToken === undefined)
163
+ return true; // gate disabled (default)
164
+ const presented = this.extractDashboardToken(req, url);
165
+ if (presented !== undefined && tokensEqual(presented, this.authToken)) {
166
+ if (url.searchParams.has("token")) {
167
+ // Persist for the browser session so assets + /rpc don't need ?token=.
168
+ res.setHeader("Set-Cookie", `skillscript_dash=${encodeURIComponent(this.authToken)}; HttpOnly; SameSite=Strict; Path=/`);
169
+ }
170
+ return true;
171
+ }
172
+ res.statusCode = 401;
173
+ res.setHeader("content-type", "text/plain; charset=utf-8");
174
+ res.end("401 Unauthorized — append ?token=<SKILLSCRIPT_DASHBOARD_AUTH_TOKEN> to the URL (or send it as a Bearer token).");
175
+ return false;
176
+ }
177
+ /** Token from `?token=` query, the `skillscript_dash` cookie, or a Bearer header. */
178
+ extractDashboardToken(req, url) {
179
+ const q = url.searchParams.get("token");
180
+ if (q)
181
+ return q;
182
+ const cookie = req.headers["cookie"];
183
+ if (typeof cookie === "string") {
184
+ const m = /(?:^|;\s*)skillscript_dash=([^;]+)/.exec(cookie);
185
+ if (m && m[1] !== undefined)
186
+ return decodeURIComponent(m[1]);
187
+ }
188
+ const auth = req.headers["authorization"];
189
+ if (typeof auth === "string" && auth.startsWith("Bearer "))
190
+ return auth.slice(7);
191
+ return undefined;
192
+ }
125
193
  /**
126
194
  * v0.19.0 — POST /event handler (memory `ceaf4579`).
127
195
  *
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ const state = {
13
13
  metrics: null,
14
14
  capabilities: null,
15
15
  blockedShellAttempts: null,
16
+ // v1.0 Gate #7 — { enabled, public_key_present } or null (pre-Gate-#7 server).
17
+ securedApproval: null,
16
18
  lastUpdate: null,
17
19
  };
18
20
 
@@ -50,7 +52,7 @@ async function refresh() {
50
52
  callTool("skill_list", { filter: { audience: "all" } }),
51
53
  callTool("list_triggers", {}),
52
54
  callTool("health_metrics", {}),
53
- callTool("runtime_capabilities", { include: ["mcpConnectors", "mcpConnectorClasses", "localModels", "dataStores", "skillStores", "agentConnectors", "runtimeVersion"] }),
55
+ callTool("runtime_capabilities", { include: ["mcpConnectors", "mcpConnectorClasses", "localModels", "dataStores", "skillStores", "agentConnectors", "securedApproval", "runtimeVersion"] }),
54
56
  // v0.18.9 — blocked shell attempts for the Security view's
55
57
  // observe→promote loop. Graceful: pre-v0.18.9 servers don't have
56
58
  // this tool; catch returns null and the Security view degrades.
@@ -64,8 +66,11 @@ async function refresh() {
64
66
  state.triggers = triggers;
65
67
  state.metrics = metrics;
66
68
  state.capabilities = capabilities;
69
+ // v0.9.0+ servers may omit securedApproval (pre-Gate-#7) → null = "unsecured".
70
+ state.securedApproval = capabilities?.securedApproval ?? null;
67
71
  state.blockedShellAttempts = blocked;
68
72
  state.lastUpdate = ts;
73
+ renderSecuredBanner();
69
74
  document.getElementById("poll-status").textContent = `last updated ${ts.toLocaleTimeString()}`;
70
75
  renderCurrentView();
71
76
  } catch (err) {
@@ -78,8 +83,156 @@ function startPolling() {
78
83
  pollTimer = setInterval(refresh, POLL_INTERVAL_MS);
79
84
  }
80
85
 
86
+ // ─── Secured mode (v1.0 Gate #7) ────────────────────────────────────────────
87
+ // When the runtime runs in secured mode it holds no approval private key — it
88
+ // can VERIFY approvals (public key) but cannot GRANT them. Approval is an
89
+ // out-of-band operator action: `skillfile approve <name>` reads the operator's
90
+ // private key at the terminal and signs. The dashboard is a REVIEW surface, not
91
+ // a SIGNING surface (privilege separation keeps the key off this process).
92
+
93
+ function securedModeOn() {
94
+ return state.securedApproval?.enabled === true;
95
+ }
96
+
97
+ // The exact command an operator runs to approve a skill. Kept in one place so
98
+ // the queue and the detail view stay consistent.
99
+ function approveCommand(name) {
100
+ return `skillfile approve ${shellQuote(name)}`;
101
+ }
102
+ function shellQuote(s) {
103
+ return /^[A-Za-z0-9._-]+$/.test(s) ? s : `'${String(s).replace(/'/g, "'\\''")}'`;
104
+ }
105
+
106
+ function renderSecuredBanner() {
107
+ const el = document.getElementById("secured-banner");
108
+ if (!el) return;
109
+ const sa = state.securedApproval;
110
+ if (sa?.enabled !== true) { el.innerHTML = ""; return; }
111
+ if (sa.public_key_present === false) {
112
+ // Secured but no verifier wired — a misconfiguration: every effectful op is
113
+ // refused and no approval can verify. Loud, because nothing will run.
114
+ el.innerHTML = `<div class="banner banner-error">
115
+ <strong>Secured mode is ON but no approval public key is wired.</strong>
116
+ Every effectful op is refused and no skill can be approved. Set
117
+ <code>SKILLSCRIPT_APPROVAL_PUBLIC_KEY_FILE</code> (and provision a keypair)
118
+ then restart the runtime.
119
+ </div>`;
120
+ return;
121
+ }
122
+ el.innerHTML = `<div class="banner banner-secured">
123
+ <strong>🔒 Secured mode</strong> — unapproved skills cannot execute any
124
+ effectful op. Approval requires the operator's key:
125
+ <code>skillfile approve &lt;name&gt;</code> at the terminal. The dashboard
126
+ reviews; it does not sign.
127
+ </div>`;
128
+ }
129
+
81
130
  // ─── Views ──────────────────────────────────────────────────────────────────
82
131
 
132
+ // v1.0 Gate #7 — the approval queue. Surfaces every Draft skill awaiting
133
+ // operator approval, each with a glance of its security signals so the operator
134
+ // can triage WHAT to review before opening the body. The "approve" action is
135
+ // deliberately a copyable command, not a button: signing happens at the
136
+ // terminal where the operator's private key lives, never on this process.
137
+ async function renderApprovals() {
138
+ const secured = securedModeOn();
139
+ // The "needs approval" set = every skill the gate refuses (gate_ok === false),
140
+ // excluding intentionally-retired Disabled skills. That's two cases:
141
+ // • Draft skills — never approved.
142
+ // • Approved-but-stale — Approved status with a body the gate rejects
143
+ // (in secured mode: no/legacy/invalid signature — the v1-migration corpus).
144
+ // The 30s poll only sees Approved, so the queue queries Draft + Approved
145
+ // explicitly and filters Approved by gate_ok (now on every skill_list entry).
146
+ let pending = [];
147
+ try {
148
+ const [draftCat, apprCat] = await Promise.all([
149
+ callTool("skill_list", { filter: { audience: "all", status: "Draft" } }),
150
+ callTool("skill_list", { filter: { audience: "all", status: "Approved" } }),
151
+ ]);
152
+ const flat = (c) => [...(c.receives ?? []), ...(c.skills ?? []), ...(c.headless ?? [])];
153
+ const drafts = flat(draftCat).map((s) => ({ ...s, _why: "draft" }));
154
+ const stale = flat(apprCat).filter((s) => s.gate_ok === false).map((s) => ({ ...s, _why: "stale" }));
155
+ pending = [...drafts, ...stale];
156
+ } catch (err) {
157
+ return `<h2>Approvals</h2><section><div class="empty">Failed to load the approval queue: ${esc(err.message)}</div></section>`;
158
+ }
159
+ const staleCount = pending.filter((s) => s._why === "stale").length;
160
+ const intro = secured
161
+ ? `<p>Secured mode is <strong>ON</strong>. Each skill below is inert — no
162
+ effectful op will run until it is approved. ${staleCount > 0 ? `${staleCount} carry a stale/legacy approval (e.g. a pre-secured v1 stamp) and need re-signing — the fastest path is <code>skillfile reapprove --apply</code> at a terminal.` : ""}
163
+ Review the source, then sign at a terminal that can read your approval key.</p>`
164
+ : `<p>Secured mode is <strong>OFF</strong> — Draft skills can be approved
165
+ in-page from their detail view (the runtime self-stamps). Turn on secured
166
+ mode (<code>SKILLSCRIPT_SECURED_MODE=true</code>) to require key-signed
167
+ approval. The queue below still shows what's pending review.</p>`;
168
+ if (pending.length === 0) {
169
+ return `<h2>Approvals</h2><section>${intro}<div class="empty">Nothing awaiting approval — every skill is Approved (and valid) or Disabled.</div></section>`;
170
+ }
171
+ // Fetch each skill's source so we can show its security-signal summary inline.
172
+ // skill_read may fail (load() throws) — degrade that row to "source N/A".
173
+ const sources = await Promise.all(
174
+ pending.map((s) => callTool("skill_read", { name: s.name }).then((r) => r?.source ?? null).catch(() => null)),
175
+ );
176
+ const rows = pending.map((s, i) => {
177
+ const src = sources[i];
178
+ const sig = src ? collectSecuritySignals(src) : null;
179
+ const sigBadges = sig ? approvalSignalBadges(sig) : `<span class="empty">source N/A</span>`;
180
+ const whyBadge = s._why === "stale"
181
+ ? `<span class="badge error" title="Approved status, but the body lacks a valid signature">re-approval needed</span>`
182
+ : `<span class="badge Draft">Draft</span>`;
183
+ const cmd = approveCommand(s.name);
184
+ return `
185
+ <tr>
186
+ <td><a href="#skill/${encodeURIComponent(s.name)}"><strong>${esc(s.name)}</strong></a> ${whyBadge}<br>
187
+ <span style="color:#6c757d;font-size:0.85em;">${esc(s.description ?? "—")}</span></td>
188
+ <td>${sigBadges}</td>
189
+ <td>
190
+ <a href="#skill/${encodeURIComponent(s.name)}">Review →</a>
191
+ ${secured ? `<div class="approve-cmd"><code>${esc(cmd)}</code><button class="copy-btn" onclick="copyText('${esc(cmd).replace(/'/g, "\\'")}', this)">copy</button></div>` : ""}
192
+ </td>
193
+ </tr>`;
194
+ }).join("");
195
+ return `
196
+ <h2>Approvals (${pending.length})</h2>
197
+ <section>
198
+ ${intro}
199
+ <table>
200
+ <thead><tr><th>Skill</th><th>Security signals</th><th>Action</th></tr></thead>
201
+ <tbody>${rows}</tbody>
202
+ </table>
203
+ </section>
204
+ `;
205
+ }
206
+
207
+ // Compact security-signal badges for the queue triage column.
208
+ function approvalSignalBadges(sig) {
209
+ const b = [];
210
+ if (sig.writeOps > 0) b.push(`<span class="badge error" title="mutation ops">${sig.writeOps} write</span>`);
211
+ if (sig.unsafeShell > 0) b.push(`<span class="badge error" title="unsafe bash">${sig.unsafeShell} unsafe</span>`);
212
+ if (sig.approvedOps > 0) b.push(`<span class="badge error" title="per-op author authorization">${sig.approvedOps} approved=</span>`);
213
+ if (sig.autonomous) b.push(`<span class="badge error" title="bypasses human-in-loop"># Autonomous</span>`);
214
+ if (sig.shellOps > 0) b.push(`<span class="badge Draft" title="shell ops${sig.shellBinaries.length ? `: ${sig.shellBinaries.join(", ")}` : ""}">${sig.shellOps} shell</span>`);
215
+ if (sig.wakeAddresses > 0) b.push(`<span class="badge Draft" title="@session wake">${sig.wakeAddresses} wake</span>`);
216
+ if (sig.cronTriggers > 0) b.push(`<span class="badge" title="autonomous cron fire">${sig.cronTriggers} cron</span>`);
217
+ return b.length ? b.join(" ") : `<span class="badge ok">no signals</span>`;
218
+ }
219
+
220
+ window.copyText = function (text, btn) {
221
+ const done = () => { if (btn) { const o = btn.textContent; btn.textContent = "copied"; setTimeout(() => { btn.textContent = o; }, 1200); } };
222
+ if (navigator.clipboard?.writeText) {
223
+ navigator.clipboard.writeText(text).then(done).catch(() => fallbackCopy(text, done));
224
+ } else {
225
+ fallbackCopy(text, done);
226
+ }
227
+ };
228
+ function fallbackCopy(text, done) {
229
+ const ta = document.createElement("textarea");
230
+ ta.value = text; ta.style.position = "fixed"; ta.style.opacity = "0";
231
+ document.body.appendChild(ta); ta.select();
232
+ try { document.execCommand("copy"); done(); } catch { /* no-op */ }
233
+ document.body.removeChild(ta);
234
+ }
235
+
83
236
  function renderOverview() {
84
237
  const m = state.metrics;
85
238
  const totalFires = m?.totalFires ?? 0;
@@ -198,13 +351,7 @@ async function renderSkillDetail(name) {
198
351
  <h2>Status</h2>
199
352
  <p>${esc(metadata.description ?? "(no description)")}</p>
200
353
  ${approvalBanner}
201
- <div style="margin-top: 12px; display: flex; gap: 8px;">
202
- ${["Draft", "Approved", "Disabled"].filter((s) => s !== metadata.status || (s === "Approved" && approval && !approval.gate_ok)).map((s) => `
203
- <button class="${s === "Disabled" ? "danger" : ""}" onclick="updateStatus('${esc(name)}','${s}')">
204
- ${s === "Approved" && metadata.status === "Approved" ? "Re-approve (refresh token)" : `Transition to ${s}`}
205
- </button>
206
- `).join("")}
207
- </div>
354
+ ${renderStatusActions(name, metadata, approval)}
208
355
  </section>
209
356
 
210
357
  ${source ? renderSecuritySignalsPanel(source) : ""}
@@ -295,6 +442,46 @@ async function renderSkillDetail(name) {
295
442
  }
296
443
  }
297
444
 
445
+ // Status-transition controls for the skill detail view. The subtlety is
446
+ // Approved: in SECURED mode the runtime can't self-stamp (skill_status →
447
+ // Approved throws ApprovalRejectedError — the key lives at the operator's
448
+ // terminal, not on this process), so we surface the `skillfile approve`
449
+ // command instead of a button that would only error. Draft/Disabled never
450
+ // grant effects, so they stay one-click in both modes.
451
+ function renderStatusActions(name, metadata, approval) {
452
+ const secured = securedModeOn();
453
+ const status = metadata.status;
454
+ const staleApproved = status === "Approved" && approval && !approval.gate_ok;
455
+
456
+ // Non-approval transitions (revoke / demote) — always plain buttons.
457
+ const buttons = ["Draft", "Disabled"]
458
+ .filter((s) => s !== status)
459
+ .map((s) => `<button class="${s === "Disabled" ? "danger" : ""}" onclick="updateStatus('${esc(name)}','${esc(s)}')">Transition to ${s}</button>`)
460
+ .join("");
461
+
462
+ // The Approved action. Shown when not-yet-Approved OR stale (needs re-stamp).
463
+ const needsApprove = status !== "Approved" || staleApproved;
464
+ let approveBlock = "";
465
+ if (needsApprove) {
466
+ if (secured) {
467
+ const cmd = approveCommand(name);
468
+ approveBlock = `
469
+ <div class="approve-panel">
470
+ <div class="approve-panel-head">${staleApproved ? "Re-approve (body changed since signing)" : "Approve this skill"}</div>
471
+ <p>Secured mode: approval is signed with the operator's key at a terminal — not from this dashboard. Review the source below, then run:</p>
472
+ <div class="approve-cmd"><code>${esc(cmd)}</code><button class="copy-btn" onclick="copyText('${esc(cmd).replace(/'/g, "\\'")}', this)">copy</button></div>
473
+ </div>`;
474
+ } else {
475
+ approveBlock = `<button onclick="updateStatus('${esc(name)}','Approved')">${staleApproved ? "Re-approve (refresh token)" : "Transition to Approved"}</button>`;
476
+ }
477
+ }
478
+
479
+ return `<div style="margin-top: 12px; display: flex; gap: 8px; flex-wrap: wrap; align-items: flex-start;">
480
+ ${buttons}
481
+ ${!secured ? approveBlock : ""}
482
+ </div>${secured ? approveBlock : ""}`;
483
+ }
484
+
298
485
  function renderTriggers() {
299
486
  return `
300
487
  <h2>Triggers</h2>
@@ -787,6 +974,11 @@ async function renderCurrentView() {
787
974
  }
788
975
 
789
976
  currentView = hash;
977
+ if (hash === "approvals") {
978
+ main.innerHTML = "Loading…";
979
+ main.innerHTML = await renderApprovals();
980
+ return;
981
+ }
790
982
  switch (hash) {
791
983
  case "overview": main.innerHTML = renderOverview(); break;
792
984
  case "skills": main.innerHTML = renderSkills(); break;
@@ -12,12 +12,14 @@
12
12
  <nav id="nav">
13
13
  <a href="#overview">Overview</a>
14
14
  <a href="#skills">Skills</a>
15
+ <a href="#approvals">Approvals</a>
15
16
  <a href="#triggers">Triggers</a>
16
17
  <a href="#connectors">Connectors</a>
17
18
  <a href="#security">Security</a>
18
19
  </nav>
19
20
  <div id="poll-status" aria-live="polite"></div>
20
21
  </header>
22
+ <div id="secured-banner"></div>
21
23
  <main id="main"></main>
22
24
  <footer>
23
25
  <small>Polling every 30s · localhost-only</small>
@@ -136,3 +136,45 @@ pre.skill-source { white-space: pre-wrap; word-break: break-word; }
136
136
  border-left-color: #c4cad0;
137
137
  }
138
138
  .security-signals small { color: #6c757d; }
139
+
140
+ /* v1.0 Gate #7 — secured-mode banner + approval queue */
141
+ #secured-banner:empty { display: none; }
142
+ .banner {
143
+ margin: 0 24px 16px;
144
+ padding: 10px 14px;
145
+ border-radius: 6px;
146
+ font-size: 13px;
147
+ line-height: 1.5;
148
+ }
149
+ .banner code { background: rgba(0,0,0,0.06); padding: 1px 5px; border-radius: 3px; }
150
+ .banner-secured { background: #eef4ff; border: 1px solid #b9ccf0; color: #1a3a6b; }
151
+ .banner-error { background: #fdecea; border: 1px solid #f0b4ad; color: #8b1d1d; }
152
+
153
+ .approve-panel {
154
+ background: #f6f8fa;
155
+ border: 1px solid #e6e8eb;
156
+ border-radius: 6px;
157
+ padding: 12px 14px;
158
+ margin-top: 4px;
159
+ max-width: 640px;
160
+ }
161
+ .approve-panel-head { font-weight: 600; margin-bottom: 4px; }
162
+ .approve-panel p { margin: 4px 0 8px; color: #4a5158; font-size: 0.92em; }
163
+ .approve-cmd {
164
+ display: flex;
165
+ align-items: center;
166
+ gap: 8px;
167
+ margin-top: 4px;
168
+ }
169
+ .approve-cmd code {
170
+ background: #1a1d21;
171
+ color: #e6e8eb;
172
+ padding: 6px 10px;
173
+ border-radius: 4px;
174
+ font-size: 12px;
175
+ flex: 0 1 auto;
176
+ }
177
+ .copy-btn {
178
+ font-size: 11px;
179
+ padding: 4px 8px;
180
+ }
package/dist/errors.d.ts CHANGED
@@ -35,6 +35,18 @@ export declare class ApprovalRejectedError extends ConnectorError {
35
35
  readonly reason: string;
36
36
  constructor(skill_name: string, reason: string, implementation: string);
37
37
  }
38
+ /**
39
+ * v1.0 Gate #7 — an effectful op (or output-routing delivery) was reached in
40
+ * secured mode without an authorized approval. Complete-mediation refusal at
41
+ * the dispatch choke: the body never passed signature verification (source-mode,
42
+ * Draft, forged, or unapproved), so it cannot egress or mutate.
43
+ */
44
+ export declare class SecuredModeEffectError extends Error {
45
+ readonly opKind: string;
46
+ readonly target?: string | undefined;
47
+ readonly remediation: string;
48
+ constructor(opKind: string, target?: string | undefined, remediation?: string);
49
+ }
38
50
  export declare class VersionNotFoundError extends ConnectorError {
39
51
  readonly skill_name: string;
40
52
  readonly version: string;
@@ -133,6 +145,19 @@ export declare class ShellBinaryNotAllowedError extends OpError {
133
145
  readonly allowlist: string[] | undefined;
134
146
  constructor(binary: string, allowlist: string[] | undefined, target?: string);
135
147
  }
148
+ /**
149
+ * v1.0 Gate #7 — a file_read/file_write op targeted a path outside the operator's
150
+ * filesystem allowlist (the third allowlist; mirrors ShellBinaryNotAllowedError).
151
+ * DEFAULT-DENY: an unset allowlist refuses all file ops. The path is canonicalized
152
+ * (symlinks + `..` resolved) before the check, so the rejected path is the REAL
153
+ * resolved one — `allowed/../../etc/key` can't sneak through.
154
+ */
155
+ export declare class FilePathNotAllowedError extends OpError {
156
+ readonly opName: "file_read" | "file_write";
157
+ readonly path: string;
158
+ readonly allowlist: string[] | undefined;
159
+ constructor(opName: "file_read" | "file_write", path: string, allowlist: string[] | undefined, target?: string);
160
+ }
136
161
  /**
137
162
  * A composition reference (`&` data-skill inline, `$ execute_skill`, or
138
163
  * `# Templates:` delivery) couldn't be resolved at execute time because
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}