skillscript-runtime 0.18.7 → 0.18.9

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 (42) hide show
  1. package/README.md +2 -2
  2. package/dist/bootstrap.d.ts +7 -0
  3. package/dist/bootstrap.d.ts.map +1 -1
  4. package/dist/bootstrap.js +30 -0
  5. package/dist/bootstrap.js.map +1 -1
  6. package/dist/cli.js +120 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/dashboard/spa/app.js +219 -2
  9. package/dist/dashboard/spa/index.html +1 -0
  10. package/dist/dashboard/spa/styles.css +39 -0
  11. package/dist/errors.d.ts +14 -0
  12. package/dist/errors.d.ts.map +1 -1
  13. package/dist/errors.js +33 -0
  14. package/dist/errors.js.map +1 -1
  15. package/dist/lint.d.ts +25 -0
  16. package/dist/lint.d.ts.map +1 -1
  17. package/dist/lint.js +81 -0
  18. package/dist/lint.js.map +1 -1
  19. package/dist/mcp-server.d.ts +6 -0
  20. package/dist/mcp-server.d.ts.map +1 -1
  21. package/dist/mcp-server.js +57 -0
  22. package/dist/mcp-server.js.map +1 -1
  23. package/dist/runtime-config.d.ts +25 -0
  24. package/dist/runtime-config.d.ts.map +1 -1
  25. package/dist/runtime-config.js +8 -0
  26. package/dist/runtime-config.js.map +1 -1
  27. package/dist/runtime.d.ts +17 -0
  28. package/dist/runtime.d.ts.map +1 -1
  29. package/dist/runtime.js +41 -1
  30. package/dist/runtime.js.map +1 -1
  31. package/dist/scheduler.d.ts +7 -0
  32. package/dist/scheduler.d.ts.map +1 -1
  33. package/dist/scheduler.js +3 -0
  34. package/dist/scheduler.js.map +1 -1
  35. package/dist/trace.d.ts +9 -0
  36. package/dist/trace.d.ts.map +1 -1
  37. package/dist/trace.js.map +1 -1
  38. package/docs/adopter-playbook.md +140 -0
  39. package/docs/configuration.md +2 -1
  40. package/examples/skillscripts/hello-world.skill.provenance.json +1 -1
  41. package/package.json +1 -1
  42. package/scaffold/.env.example +27 -0
@@ -12,6 +12,7 @@ const state = {
12
12
  triggers: [],
13
13
  metrics: null,
14
14
  capabilities: null,
15
+ blockedShellAttempts: null,
15
16
  lastUpdate: null,
16
17
  };
17
18
 
@@ -42,7 +43,7 @@ async function refresh() {
42
43
  const ts = new Date();
43
44
  document.getElementById("poll-status").textContent = `polling…`;
44
45
  try {
45
- const [catalog, triggers, metrics, capabilities] = await Promise.all([
46
+ const [catalog, triggers, metrics, capabilities, blocked] = await Promise.all([
46
47
  // v0.9.8 — skill_list returns SkillCatalog (pre-grouped by audience).
47
48
  // Dashboard wants the full picture (all categories); flatten the
48
49
  // groups into a single array for the existing rendering code.
@@ -50,6 +51,10 @@ async function refresh() {
50
51
  callTool("list_triggers", {}),
51
52
  callTool("health_metrics", {}),
52
53
  callTool("runtime_capabilities", { include: ["mcpConnectors", "mcpConnectorClasses", "localModels", "dataStores", "skillStores", "agentConnectors", "runtimeVersion"] }),
54
+ // v0.18.9 — blocked shell attempts for the Security view's
55
+ // observe→promote loop. Graceful: pre-v0.18.9 servers don't have
56
+ // this tool; catch returns null and the Security view degrades.
57
+ callTool("blocked_shell_attempts", { limit: 100 }).catch(() => null),
53
58
  ]);
54
59
  state.skills = [
55
60
  ...(catalog.receives ?? []),
@@ -59,6 +64,7 @@ async function refresh() {
59
64
  state.triggers = triggers;
60
65
  state.metrics = metrics;
61
66
  state.capabilities = capabilities;
67
+ state.blockedShellAttempts = blocked;
62
68
  state.lastUpdate = ts;
63
69
  document.getElementById("poll-status").textContent = `last updated ${ts.toLocaleTimeString()}`;
64
70
  renderCurrentView();
@@ -201,9 +207,11 @@ async function renderSkillDetail(name) {
201
207
  </div>
202
208
  </section>
203
209
 
210
+ ${source ? renderSecuritySignalsPanel(source) : ""}
211
+
204
212
  <section>
205
213
  <h2>Source</h2>
206
- ${source ? `<pre>${esc(source)}</pre>` : `<div class="empty">Source not available.</div>`}
214
+ ${source ? `<pre class="skill-source">${renderHighlightedSkillBody(source)}</pre>` : `<div class="empty">Source not available.</div>`}
207
215
  </section>
208
216
 
209
217
  ${renderComposesSection(name, source)}
@@ -318,6 +326,214 @@ function renderTriggers() {
318
326
  `;
319
327
  }
320
328
 
329
+ // v0.18.9 — security highlighting in the skill source viewer. Two
330
+ // severity tiers visualized as soft background tints in the <pre> body
331
+ // so a human reviewer can scan-prioritize "what's risky in this skill":
332
+ //
333
+ // HIGH (orange tint) — bypasses human-in-loop OR has unbounded blast radius:
334
+ // - `unsafe=true` kwarg (bash interpretation enabled)
335
+ // - `# Autonomous: true` frontmatter (no human-in-loop)
336
+ // - `approved="..."` kwarg (per-op author authorization)
337
+ // - `$ skill_write`, `$ data_write`, `file_write(...)` (mutation ops)
338
+ //
339
+ // MEDIUM (yellow tint) — touches OS / live-session surfaces:
340
+ // - `shell(...)` ops (OS-level dispatch even when allowlisted)
341
+ // - `notify(agent="X@session", ...)` (wake-class interrupt)
342
+ //
343
+ // Implementation: regex-based annotation pass over the already-esc'd
344
+ // source string. Each pattern wraps its match in a <span class=...>
345
+ // with low-alpha background. Patterns are deliberately conservative —
346
+ // false negatives are fine (the highlight aids scanning, not gating);
347
+ // false positives are worse because they desensitize the reviewer.
348
+ function renderHighlightedSkillBody(source) {
349
+ let body = esc(source);
350
+ // HIGH tier — must apply on the esc'd string, so patterns reference
351
+ // entity-escaped quote chars (e.g., approved=&quot;...&quot;).
352
+ const highPatterns = [
353
+ // Frontmatter signal: `# Autonomous: true`
354
+ /(^|\n)(# Autonomous:\s*true)/g,
355
+ // Per-op author authorization kwarg
356
+ /(approved=&quot;[^&]*&quot;)/g,
357
+ // Unsafe shell axis
358
+ /(unsafe\s*=\s*true)/g,
359
+ // Mutation ops (substrate writes + filesystem writes + skill writes)
360
+ /(file_write\s*\()/g,
361
+ /(\$\s*skill_write\b)/g,
362
+ /(\$\s*data_write\b)/g,
363
+ ];
364
+ // MEDIUM tier — shell() ops + wake-class notify
365
+ const mediumPatterns = [
366
+ /(shell\s*\()/g,
367
+ /(notify\s*\(\s*agent\s*=\s*&quot;[^&]*@[^&]*&quot;)/g,
368
+ ];
369
+ for (const re of highPatterns) {
370
+ body = body.replace(re, (_match, p1, p2) => {
371
+ const prefix = p2 !== undefined ? p1 : "";
372
+ const captured = p2 !== undefined ? p2 : p1;
373
+ return `${prefix}<span class="sig-high">${captured}</span>`;
374
+ });
375
+ }
376
+ for (const re of mediumPatterns) {
377
+ body = body.replace(re, (m) => `<span class="sig-medium">${m}</span>`);
378
+ }
379
+ return body;
380
+ }
381
+
382
+ // v0.18.9 — security signals summary panel. Glance-first surface
383
+ // showing aggregated counts so a reviewer knows WHAT to look for before
384
+ // scanning the body. Pairs with renderHighlightedSkillBody() (the
385
+ // WHERE).
386
+ function renderSecuritySignalsPanel(source) {
387
+ const sig = collectSecuritySignals(source);
388
+ const items = [];
389
+ if (sig.shellOps > 0) {
390
+ items.push(`<li class="sig-medium-text">${sig.shellOps} shell op${sig.shellOps === 1 ? "" : "s"}${sig.shellBinaries.length > 0 ? ` (binaries: ${sig.shellBinaries.map(esc).join(", ")})` : ""}</li>`);
391
+ }
392
+ if (sig.unsafeShell > 0) {
393
+ items.push(`<li class="sig-high-text">${sig.unsafeShell} unsafe shell op${sig.unsafeShell === 1 ? "" : "s"} <small>(requires <code>SKILLSCRIPT_ENABLE_UNSAFE_SHELL=true</code> AND <code>bash</code> on allowlist)</small></li>`);
394
+ }
395
+ if (sig.autonomous) {
396
+ items.push(`<li class="sig-high-text"><code># Autonomous: true</code> <small>(bypasses human-in-loop on mutation ops)</small></li>`);
397
+ }
398
+ if (sig.approvedOps > 0) {
399
+ items.push(`<li class="sig-high-text">${sig.approvedOps} <code>approved="..."</code> per-op authorization${sig.approvedOps === 1 ? "" : "s"}</li>`);
400
+ }
401
+ if (sig.writeOps > 0) {
402
+ items.push(`<li class="sig-high-text">${sig.writeOps} mutation op${sig.writeOps === 1 ? "" : "s"} <small>(<code>skill_write</code> / <code>data_write</code> / <code>file_write</code>)</small></li>`);
403
+ }
404
+ if (sig.wakeAddresses > 0) {
405
+ items.push(`<li class="sig-medium-text">${sig.wakeAddresses} <code>@session</code> wake-class deliver${sig.wakeAddresses === 1 ? "" : "s"}</li>`);
406
+ }
407
+ if (sig.cronTriggers > 0) {
408
+ items.push(`<li class="sig-info-text">${sig.cronTriggers} cron trigger${sig.cronTriggers === 1 ? "" : "s"} <small>(autonomous fire)</small></li>`);
409
+ }
410
+ if (items.length === 0) return "";
411
+ return `
412
+ <section>
413
+ <h2>Security signals</h2>
414
+ <ul class="security-signals">
415
+ ${items.join("")}
416
+ </ul>
417
+ <p><small>Scan the source below — highlighted spans match these signals. <span class="sig-high">Orange</span> = review carefully; <span class="sig-medium">yellow</span> = worth noting.</small></p>
418
+ </section>
419
+ `;
420
+ }
421
+
422
+ function collectSecuritySignals(source) {
423
+ const lines = source.split("\n");
424
+ let shellOps = 0;
425
+ let unsafeShell = 0;
426
+ let autonomous = false;
427
+ let approvedOps = 0;
428
+ let writeOps = 0;
429
+ let wakeAddresses = 0;
430
+ let cronTriggers = 0;
431
+ const shellBinaries = new Set();
432
+ for (const line of lines) {
433
+ if (/^# Autonomous:\s*true\s*$/i.test(line)) autonomous = true;
434
+ if (/^# Triggers:\s*cron:/i.test(line)) cronTriggers++;
435
+ const shellMatch = /shell\s*\(\s*command\s*=\s*"([^"]+)"/.exec(line);
436
+ if (shellMatch !== null) {
437
+ shellOps++;
438
+ const cmd = shellMatch[1]!.trim();
439
+ const isUnsafe = /unsafe\s*=\s*true/.test(line);
440
+ if (isUnsafe) {
441
+ unsafeShell++;
442
+ shellBinaries.add("bash");
443
+ } else if (cmd.length > 0 && !cmd.startsWith("${") && !cmd.startsWith("$(")) {
444
+ const binary = /^([^\s]+)/.exec(cmd);
445
+ if (binary !== null) shellBinaries.add(binary[1]!);
446
+ }
447
+ }
448
+ if (/approved\s*=\s*"/.test(line)) approvedOps++;
449
+ if (/\$\s*skill_write\b|\$\s*data_write\b|file_write\s*\(/.test(line)) writeOps++;
450
+ if (/notify\s*\(\s*agent\s*=\s*"[^"]*@[^"]*"/.test(line)) wakeAddresses++;
451
+ }
452
+ return {
453
+ shellOps,
454
+ unsafeShell,
455
+ autonomous,
456
+ approvedOps,
457
+ writeOps,
458
+ wakeAddresses,
459
+ cronTriggers,
460
+ shellBinaries: [...shellBinaries].sort(),
461
+ };
462
+ }
463
+
464
+ // v0.18.9 — Security view. Cross-skill observability for the shell
465
+ // allowlist's observe→promote loop. Operator sees what binaries skills
466
+ // tried to invoke off-list; decides whether to add any to .env.
467
+ function renderSecurity() {
468
+ const blocked = state.blockedShellAttempts;
469
+ if (blocked === null) {
470
+ return `
471
+ <section>
472
+ <h2>Security</h2>
473
+ <div class="empty">
474
+ <strong>blocked_shell_attempts tool unavailable.</strong>
475
+ The runtime serving this dashboard is pre-v0.18.9 and doesn't expose the
476
+ blocked-attempts query surface. Upgrade to v0.18.9+ to see what shell
477
+ binaries skills tried to invoke off the allowlist.
478
+ </div>
479
+ </section>
480
+ `;
481
+ }
482
+ const attempts = blocked.attempts ?? [];
483
+ // Group by binary for the "what should I consider adding?" angle.
484
+ const byBinary = {};
485
+ for (const a of attempts) {
486
+ if (!byBinary[a.binary]) byBinary[a.binary] = { count: 0, skills: new Set(), latest: 0 };
487
+ byBinary[a.binary].count++;
488
+ byBinary[a.binary].skills.add(a.skill_name);
489
+ if (a.fired_at_ms > byBinary[a.binary].latest) byBinary[a.binary].latest = a.fired_at_ms;
490
+ }
491
+ const groups = Object.entries(byBinary).sort((a, b) => b[1].count - a[1].count);
492
+ return `
493
+ <section>
494
+ <h2>Security · Blocked shell attempts</h2>
495
+ <p>
496
+ Skills attempted these shell binaries; the runtime refused each because
497
+ the binary isn't in <code>SKILLSCRIPT_SHELL_ALLOWLIST</code>. Review the
498
+ list — add any you intended to permit to your <code>.env</code>, then
499
+ restart the runtime. Run <code>skillfile shell-audit</code> from the
500
+ CLI to scan the full corpus instead of the recent trace window.
501
+ </p>
502
+ ${attempts.length === 0
503
+ ? `<div class="empty">No blocked shell attempts in the recent trace window.</div>`
504
+ : `<h3>By binary (${groups.length})</h3>
505
+ <table>
506
+ <thead><tr><th>Binary</th><th>Attempts</th><th>Skills</th><th>Last attempt</th></tr></thead>
507
+ <tbody>
508
+ ${groups.map(([binary, g]) => `
509
+ <tr>
510
+ <td><code>${esc(binary)}</code></td>
511
+ <td>${g.count}</td>
512
+ <td>${[...g.skills].sort().map((s) => `<a href="#skill/${encodeURIComponent(s)}">${esc(s)}</a>`).join(", ")}</td>
513
+ <td>${new Date(g.latest).toLocaleString()}</td>
514
+ </tr>
515
+ `).join("")}
516
+ </tbody>
517
+ </table>
518
+ <h3 style="margin-top: 24px;">Recent attempts (${attempts.length})</h3>
519
+ <table>
520
+ <thead><tr><th>When</th><th>Skill</th><th>Target</th><th>Binary</th><th>Body</th></tr></thead>
521
+ <tbody>
522
+ ${attempts.slice(0, 25).map((a) => `
523
+ <tr>
524
+ <td>${new Date(a.fired_at_ms).toLocaleString()}</td>
525
+ <td><a href="#skill/${encodeURIComponent(a.skill_name)}">${esc(a.skill_name)}</a></td>
526
+ <td><code>${esc(a.target)}</code></td>
527
+ <td><code>${esc(a.binary)}</code></td>
528
+ <td><code style="font-size: 0.85em;">${esc(a.body)}</code></td>
529
+ </tr>
530
+ `).join("")}
531
+ </tbody>
532
+ </table>`}
533
+ </section>
534
+ `;
535
+ }
536
+
321
537
  function renderConnectors() {
322
538
  const caps = state.capabilities;
323
539
  const wiredMcp = caps?.mcpConnectors ?? [];
@@ -576,6 +792,7 @@ async function renderCurrentView() {
576
792
  case "skills": main.innerHTML = renderSkills(); break;
577
793
  case "triggers": main.innerHTML = renderTriggers(); break;
578
794
  case "connectors": main.innerHTML = renderConnectors(); break;
795
+ case "security": main.innerHTML = renderSecurity(); break;
579
796
  default: main.innerHTML = `<section><div class="empty">Unknown view: ${esc(hash)}</div></section>`;
580
797
  }
581
798
  }
@@ -14,6 +14,7 @@
14
14
  <a href="#skills">Skills</a>
15
15
  <a href="#triggers">Triggers</a>
16
16
  <a href="#connectors">Connectors</a>
17
+ <a href="#security">Security</a>
17
18
  </nav>
18
19
  <div id="poll-status" aria-live="polite"></div>
19
20
  </header>
@@ -97,3 +97,42 @@ pre {
97
97
  }
98
98
 
99
99
  .empty { color: #6c757d; padding: 24px; text-align: center; font-style: italic; }
100
+
101
+ /* v0.18.9 — Security signal highlighting in the skill source viewer.
102
+ * Two tiers as soft tints on the dark <pre> background. Low alpha so
103
+ * the prose stays readable; the eye picks up the tinted spans on a
104
+ * scan without being overwhelmed. */
105
+ pre.skill-source { white-space: pre-wrap; word-break: break-word; }
106
+ .sig-high {
107
+ background: rgba(255, 140, 50, 0.30);
108
+ padding: 1px 3px;
109
+ border-radius: 3px;
110
+ }
111
+ .sig-medium {
112
+ background: rgba(255, 215, 0, 0.22);
113
+ padding: 1px 3px;
114
+ border-radius: 3px;
115
+ }
116
+
117
+ /* Inline color chips for the security-signals summary panel + the
118
+ * "what colors mean what" legend at the bottom of that panel. */
119
+ .security-signals { list-style: none; padding-left: 0; margin: 0; }
120
+ .security-signals li {
121
+ padding: 6px 10px;
122
+ margin: 4px 0;
123
+ border-radius: 4px;
124
+ border-left: 3px solid transparent;
125
+ }
126
+ .security-signals .sig-high-text {
127
+ background: rgba(255, 140, 50, 0.10);
128
+ border-left-color: rgba(255, 140, 50, 0.75);
129
+ }
130
+ .security-signals .sig-medium-text {
131
+ background: rgba(255, 215, 0, 0.10);
132
+ border-left-color: rgba(255, 215, 0, 0.80);
133
+ }
134
+ .security-signals .sig-info-text {
135
+ background: #fafbfc;
136
+ border-left-color: #c4cad0;
137
+ }
138
+ .security-signals small { color: #6c757d; }
package/dist/errors.d.ts CHANGED
@@ -119,6 +119,20 @@ export declare class UnsafeShellDisabledError extends OpError {
119
119
  readonly command: string;
120
120
  constructor(command: string, target?: string);
121
121
  }
122
+ /**
123
+ * v0.18.8 — a `shell(...)` op fired against a binary not in the operator's
124
+ * `SKILLSCRIPT_SHELL_ALLOWLIST`. Default-deny: an unset allowlist refuses
125
+ * every shell call (BREAKING from v0.18.7).
126
+ *
127
+ * Per Perry's "the error message IS the remediation doc" requirement: the
128
+ * message names the offending binary + the env var + the audit helper.
129
+ * Operators reading this error in logs know exactly what to do.
130
+ */
131
+ export declare class ShellBinaryNotAllowedError extends OpError {
132
+ readonly binary: string;
133
+ readonly allowlist: string[] | undefined;
134
+ constructor(binary: string, allowlist: string[] | undefined, target?: string);
135
+ }
122
136
  /**
123
137
  * A composition reference (`&` data-skill inline, `$ execute_skill`, or
124
138
  * `# 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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"}
package/dist/errors.js CHANGED
@@ -235,6 +235,39 @@ export class UnsafeShellDisabledError extends OpError {
235
235
  this.name = "UnsafeShellDisabledError";
236
236
  }
237
237
  }
238
+ /**
239
+ * v0.18.8 — a `shell(...)` op fired against a binary not in the operator's
240
+ * `SKILLSCRIPT_SHELL_ALLOWLIST`. Default-deny: an unset allowlist refuses
241
+ * every shell call (BREAKING from v0.18.7).
242
+ *
243
+ * Per Perry's "the error message IS the remediation doc" requirement: the
244
+ * message names the offending binary + the env var + the audit helper.
245
+ * Operators reading this error in logs know exactly what to do.
246
+ */
247
+ export class ShellBinaryNotAllowedError extends OpError {
248
+ binary;
249
+ allowlist;
250
+ constructor(binary, allowlist, target) {
251
+ const allowlistDisplay = allowlist === undefined
252
+ ? "(unset — default-deny)"
253
+ : allowlist.length === 0
254
+ ? "(empty list — operator declared no shell binaries permitted)"
255
+ : allowlist.join(", ");
256
+ const message = `\`shell\` op refused: binary '${binary}' is not in the operator's shell allowlist. Current allowlist: ${allowlistDisplay}.`;
257
+ const remediation = `Add '${binary}' to the runtime's shell allowlist via one of three wiring paths: ` +
258
+ `(1) \`SKILLSCRIPT_SHELL_ALLOWLIST\` env var (comma-separated; works on CLI + bootstrap()); ` +
259
+ `(2) \`shellAllowlist\` field in \`skillscript.config.json\`; ` +
260
+ `(3) \`bootstrap({ shellAllowlist: [...] })\` programmatic opt for embedders. ` +
261
+ `Then restart the runtime. ` +
262
+ `To discover what binaries your existing skill corpus uses, run \`skillfile shell-audit\` — it scans every skill and prints the union of binaries ready to paste into the allowlist. ` +
263
+ `Binary-scope is an operator boundary the skill author cannot escape via the \`unsafe\` keyword or any other in-skill mechanism. ` +
264
+ `See \`docs/adopter-playbook.md\` § "Shell binary allowlist" for the migration walkthrough (including the programmatic-bootstrap path's \`.env\` auto-load gotcha).`;
265
+ super(message, "shell", remediation, target);
266
+ this.binary = binary;
267
+ this.allowlist = allowlist;
268
+ this.name = "ShellBinaryNotAllowedError";
269
+ }
270
+ }
238
271
  /**
239
272
  * A composition reference (`&` data-skill inline, `$ execute_skill`, or
240
273
  * `# Templates:` delivery) couldn't be resolved at execute time because
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/lint.d.ts CHANGED
@@ -136,6 +136,25 @@ export interface LintOptions {
136
136
  * whose tools genuinely return bare arrays.
137
137
  */
138
138
  bareArrayReturnTools?: string[];
139
+ /**
140
+ * v0.18.8 — operator's shell binary allowlist. When set, the
141
+ * `shell-binary-not-allowed` rule fires tier-1 errors on any
142
+ * `shell(command="X ...")` whose first token isn't in the list.
143
+ *
144
+ * **Lint = local advisory; runtime = authoritative.** The allowlist
145
+ * lint checks against here is the AUTHOR's environment, which may
146
+ * differ from production. Passing lint does NOT guarantee the call
147
+ * will run — the production runtime gate is the authoritative
148
+ * boundary. Per Perry's framing (thread `7aab6f3f`): immediate
149
+ * author feedback at compile-time, defense-in-depth with runtime.
150
+ *
151
+ * Undefined → lint skips this rule (no allowlist context); the
152
+ * runtime still default-denies at execution. This split lets adopter
153
+ * tooling lint with the production allowlist when known (CI pipelines
154
+ * loading the deployment's .env) while authoring tools can lint
155
+ * permissively without false-positive noise.
156
+ */
157
+ shellAllowlist?: string[];
139
158
  }
140
159
  interface LintContext {
141
160
  parsed: ParsedSkill;
@@ -156,6 +175,12 @@ interface LintContext {
156
175
  localModelAliases: string[] | undefined;
157
176
  localModelsAvailable: string[] | undefined;
158
177
  bareArrayReturnTools: string[];
178
+ /**
179
+ * v0.18.8 — operator shell binary allowlist (see `LintOptions.shellAllowlist`).
180
+ * Undefined when not supplied — the `shell-binary-not-allowed` rule
181
+ * skips its check in that case (runtime still default-denies).
182
+ */
183
+ shellAllowlist: string[] | undefined;
159
184
  /**
160
185
  * v0.9.1 — per-connector declared tool surface from `McpConnectorClass.staticTools()`.
161
186
  * Map entry: connector name → tool array (declared surface) OR null (class doesn't
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
package/dist/lint.js CHANGED
@@ -22,6 +22,7 @@ export async function lint(source, options) {
22
22
  localModelAliases: localModelInfo?.aliases,
23
23
  localModelsAvailable: localModelInfo?.modelsAvailable,
24
24
  bareArrayReturnTools: options?.bareArrayReturnTools ?? [],
25
+ shellAllowlist: options?.shellAllowlist,
25
26
  mcpConnectorStaticTools: collectMcpConnectorStaticToolsFromRegistry(options?.registry),
26
27
  };
27
28
  const findings = [];
@@ -64,6 +65,7 @@ export function lintSync(source, options) {
64
65
  localModelAliases: options?.localModelAliases ?? collectLocalModelAliasesFromRegistry(options?.registry),
65
66
  localModelsAvailable: options?.localModelsAvailable,
66
67
  bareArrayReturnTools: options?.bareArrayReturnTools ?? [],
68
+ shellAllowlist: options?.shellAllowlist,
67
69
  mcpConnectorStaticTools: collectMcpConnectorStaticToolsFromRegistry(options?.registry),
68
70
  };
69
71
  const findings = [];
@@ -1511,6 +1513,84 @@ const UNSAFE_SHELL_DISABLED = {
1511
1513
  return findings;
1512
1514
  },
1513
1515
  };
1516
+ /**
1517
+ * v0.18.8 — author-time advisory for the operator's shell binary
1518
+ * allowlist. Per Perry's two-axes-decoupled rule (thread `7aab6f3f`):
1519
+ * binary-scope is a SEPARATE concern from syntax-scope, so this rule
1520
+ * is deliberately NOT part of the `unsafe-shell-*` family.
1521
+ *
1522
+ * Tier-1 error severity matches the runtime: an off-list binary will
1523
+ * refuse at execution time. Surfacing at compile-time gives the
1524
+ * author immediate "binary X not permitted" feedback rather than
1525
+ * runtime-failure-on-first-fire.
1526
+ *
1527
+ * **Lint is local advisory; runtime is authoritative.** This rule
1528
+ * checks against `LintOptions.shellAllowlist` which is the AUTHOR's
1529
+ * environment (their local `.env` or the linter's loaded config). The
1530
+ * production runtime may have a different allowlist — passing lint
1531
+ * does NOT guarantee the call will run. Authors lint with their own
1532
+ * env; CI pipelines linting against the deployment's .env catch the
1533
+ * production-environment-specific gaps.
1534
+ *
1535
+ * If `ctx.shellAllowlist` is undefined (LintOptions didn't supply one),
1536
+ * the rule skips silently — the runtime's default-deny still fires at
1537
+ * execution. This split prevents false-positive noise when authoring
1538
+ * tools lack the production-allowlist context.
1539
+ *
1540
+ * Unsafe path: `shell(..., unsafe=true)` resolves to `bash -c <body>`
1541
+ * at runtime; the first-token check is against the literal "bash". This
1542
+ * rule mirrors that: if the op is unsafe, the binary checked is "bash"
1543
+ * (regardless of what the body contains). Per Perry's reframe: no
1544
+ * parse-based binary enumeration on the unsafe path.
1545
+ */
1546
+ const SHELL_BINARY_NOT_ALLOWED = {
1547
+ id: "shell-binary-not-allowed",
1548
+ severity: "error",
1549
+ description: "A `shell(command=\"X ...\")` op's binary `X` is not in the operator's shell allowlist. The runtime refuses the op at execution time.",
1550
+ remediation: "Either add the binary to `SKILLSCRIPT_SHELL_ALLOWLIST` in your `.env` (or `shellAllowlist` in `skillscript.config.json`), or refactor the skill to use a permitted binary. Run `skillfile shell-audit` to discover what binaries your existing corpus uses. Reminder: lint is a local advisory against your author-env allowlist; runtime enforcement is authoritative.",
1551
+ check: (ctx) => {
1552
+ if (ctx.shellAllowlist === undefined)
1553
+ return [];
1554
+ const findings = [];
1555
+ for (const [targetName, target] of ctx.parsed.targets) {
1556
+ walkOps(target.ops, (op) => {
1557
+ if (op.kind !== "shell")
1558
+ return;
1559
+ const binary = op.policy === "unsafe" ? "bash" : firstShellToken(op.body);
1560
+ if (binary === null)
1561
+ return;
1562
+ if (ctx.shellAllowlist.includes(binary))
1563
+ return;
1564
+ const displayed = op.policy === "unsafe" ? "bash" : binary;
1565
+ findings.push({
1566
+ rule: "shell-binary-not-allowed",
1567
+ severity: "error",
1568
+ message: `\`shell\` op in target '${targetName}': binary '${displayed}' is not in the configured allowlist (${ctx.shellAllowlist.length === 0 ? "empty list" : ctx.shellAllowlist.join(", ")}). ${op.policy === "unsafe" ? "Unsafe-mode shell runs as `bash -c`; 'bash' must be on the allowlist to permit ANY unsafe shell." : ""}`,
1569
+ block: targetName,
1570
+ extras: { binary: displayed, policy: op.policy ?? "safe" },
1571
+ });
1572
+ });
1573
+ }
1574
+ return findings;
1575
+ },
1576
+ };
1577
+ /**
1578
+ * v0.18.8 — extract the first whitespace-separated token from a shell
1579
+ * body for allowlist comparison. Best-effort: bodies with `${VAR}`
1580
+ * substitutions whose value would resolve to the binary at runtime
1581
+ * can't be statically analyzed (runtime check is the authoritative
1582
+ * gate). Returns null for empty / substitution-prefix bodies to skip
1583
+ * the lint check for those cases.
1584
+ */
1585
+ function firstShellToken(body) {
1586
+ const trimmed = body.trim();
1587
+ if (trimmed.length === 0)
1588
+ return null;
1589
+ if (trimmed.startsWith("${") || trimmed.startsWith("$("))
1590
+ return null;
1591
+ const match = /^([^\s]+)/.exec(trimmed);
1592
+ return match === null ? null : match[1];
1593
+ }
1514
1594
  /**
1515
1595
  * Mutation-class op fired without author authorization. v0.14.1 refactored
1516
1596
  * to share the classifier + authorization predicate with the runtime gate
@@ -2819,6 +2899,7 @@ const RULES = [
2819
2899
  UNSAFE_SHELL_UNESCAPED_SUBST,
2820
2900
  UNSAFE_SHELL_OP,
2821
2901
  UNSAFE_SHELL_DISABLED,
2902
+ SHELL_BINARY_NOT_ALLOWED,
2822
2903
  UNCONFIRMED_MUTATION,
2823
2904
  UNQUOTED_SUBSTITUTION_IN_KWARG_VALUE,
2824
2905
  DRAFT_WITH_TRIGGER,