@outerlayer/cli 0.14.1 → 0.16.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 (70) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{agent-setup-CN2HUBEJ.js → agent-setup-K3ABU5NL.js} +8 -7
  3. package/dist/build-info.json +1 -1
  4. package/dist/{check-SRGR36KI.js → check-CNTMSGOG.js} +20 -17
  5. package/dist/{chunk-HFKKFTXU.js → chunk-2MNPHL23.js} +19 -11
  6. package/dist/{chunk-FOJGZYFC.js → chunk-42ZI52JW.js} +1 -1
  7. package/dist/{chunk-SXWS25JC.js → chunk-5FEK6PNE.js} +6 -6
  8. package/dist/{chunk-PQUM37BK.js → chunk-6JNURGOA.js} +1 -1
  9. package/dist/{chunk-SWHQ4LUM.js → chunk-6QRMLNH3.js} +21 -3
  10. package/dist/{chunk-FI5UYJMQ.js → chunk-ADJRGVZC.js} +1 -1
  11. package/dist/chunk-C5Y5ZJJZ.js +88 -0
  12. package/dist/{chunk-Q2UK3C4P.js → chunk-CA3XMYFN.js} +3 -3
  13. package/dist/{chunk-NHDVD7DU.js → chunk-EHAAPRWY.js} +13 -11
  14. package/dist/{chunk-RBKIH5ST.js → chunk-EWORLJMO.js} +19 -5
  15. package/dist/{chunk-SMHOCDCI.js → chunk-FWX735W7.js} +18 -4
  16. package/dist/{chunk-3NLOVYJQ.js → chunk-JEHRUE3F.js} +47 -22
  17. package/dist/{chunk-MTF3PHVZ.js → chunk-NBGDBTO2.js} +3 -3
  18. package/dist/{chunk-2M63GG56.js → chunk-OHVJA253.js} +1 -1
  19. package/dist/{chunk-KFRM23WD.js → chunk-ONRCEE6D.js} +2 -2
  20. package/dist/{chunk-T5VPP6H7.js → chunk-OZGHL5Y5.js} +1 -1
  21. package/dist/{chunk-ZA5CHAFY.js → chunk-POJMEEJJ.js} +21 -4
  22. package/dist/{chunk-4OGPT6I2.js → chunk-R4ZQQ7U2.js} +28 -6
  23. package/dist/{chunk-JYIEHQIF.js → chunk-RSPXEVDX.js} +1 -1
  24. package/dist/{chunk-MSASO5O4.js → chunk-U3HXXRTY.js} +1 -1
  25. package/dist/{chunk-HFKQIZXL.js → chunk-W3EKCZSQ.js} +12 -5
  26. package/dist/{chunk-LCEXHCHD.js → chunk-WTE3MQML.js} +1 -1
  27. package/dist/{cli-UW2H3UUW.js → cli-AEWH62UE.js} +61 -58
  28. package/dist/{command-5LD7G2QQ.js → command-HHPBR6CS.js} +8 -7
  29. package/dist/{context-adopt-PJUMW2EZ.js → context-adopt-VMMGFRUZ.js} +5 -4
  30. package/dist/{context-materialize-FDHYKNDT.js → context-materialize-2WXTS4CW.js} +5 -4
  31. package/dist/{doctor-H7REBSLQ.js → doctor-N6Y7HKK3.js} +11 -10
  32. package/dist/{emit-artifact-cmd-FOGNJXVR.js → emit-artifact-cmd-H5MH3AOP.js} +2 -2
  33. package/dist/{emit-cmd-ZEYWLC2C.js → emit-cmd-IJ3GVRFD.js} +4 -3
  34. package/dist/{emit-finding-cmd-DLI4MKMN.js → emit-finding-cmd-ZXDRL6PG.js} +158 -45
  35. package/dist/{emit-result-cmd-MUSL7GQA.js → emit-result-cmd-RFKALS5Z.js} +2 -2
  36. package/dist/{hook-fast-WYQD6D7T.js → hook-fast-D7HV4IXG.js} +1 -1
  37. package/dist/{import-capture-cmd-6QVCOIHK.js → import-capture-cmd-EQ35EARA.js} +3 -3
  38. package/dist/{import-ruler-cmd-KLRGRBCP.js → import-ruler-cmd-BGAZXCQM.js} +1 -1
  39. package/dist/index.js +3 -3
  40. package/dist/{init-UBXK6MF7.js → init-FBCA4DRA.js} +10 -9
  41. package/dist/{init-NTXA3SN7.js → init-MYX7YMIH.js} +10 -9
  42. package/dist/{init-cmd-NARDUPIG.js → init-cmd-CAG572UE.js} +9 -8
  43. package/dist/{init-update-O5YYFGF4.js → init-update-VDFF4K3B.js} +9 -8
  44. package/dist/{loop-SW2M5VDD.js → loop-75J4YXLZ.js} +17 -16
  45. package/dist/{machine-U66FKVDP.js → machine-A6ZCTUGS.js} +8 -7
  46. package/dist/{runner-env-XTC53CHN.js → runner-env-EN7YE7QX.js} +1 -1
  47. package/dist/{runner-key-3JSMDRJA.js → runner-key-W25ISHI3.js} +10 -9
  48. package/dist/{session-sender-4M247XSV.js → session-sender-24L5EW25.js} +3 -3
  49. package/dist/{starter-pack-IB4UUIX3.js → starter-pack-KF66HGZR.js} +3 -3
  50. package/dist/{status-STZYPU3W.js → status-XHSGEYO5.js} +11 -10
  51. package/dist/{sync-cmd-UWD5JOFU.js → sync-cmd-5G5EIEHD.js} +2 -2
  52. package/dist/{watch-DBNB7R6X.js → watch-UTOXO4SE.js} +2 -2
  53. package/dist/{work-claim-cmd-LY4U6QHN.js → work-claim-cmd-RKHYFE5Y.js} +4 -4
  54. package/dist/{work-cmd-RVRQ32EH.js → work-cmd-DJQJEZVB.js} +1 -1
  55. package/dist/{work-comment-cmd-FFUM4TJU.js → work-comment-cmd-A55CUSYE.js} +1 -1
  56. package/dist/{work-open-pr-cmd-HLDWP4T2.js → work-open-pr-cmd-E6O53IJD.js} +1 -1
  57. package/package.json +1 -1
  58. package/skill-pack/maintained/{amend → outerlayer-amend}/SKILL.md +2 -2
  59. package/skill-pack/maintained/{outerlayer → outerlayer-cli}/SKILL.md +3 -3
  60. package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/SKILL.md +1 -1
  61. package/skill-pack/maintained/{reporting-findings → outerlayer-findings}/SKILL.md +24 -30
  62. package/skill-pack/shipped.json +10 -1
  63. package/skill-pack/template/build/SKILL.md +5 -1
  64. package/skill-pack/template/build/references/agent-briefs.md +7 -1
  65. package/skill-pack/template/build/references/evidence.md +1 -1
  66. package/skill-pack/template/build/references/release.md +1 -1
  67. package/skill-pack/template/build/references/review-briefs.md +6 -0
  68. package/skill-pack/template/writing-specs/SKILL.md +1 -1
  69. /package/skill-pack/maintained/{outerlayer → outerlayer-cli}/references/open-pull-request.md +0 -0
  70. /package/skill-pack/maintained/{emitting-evidence → outerlayer-evidence}/references/agents-snippet.md +0 -0
@@ -22,7 +22,7 @@ import './chunk-BJ3KTMDH.js';
22
22
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
23
23
  import './chunk-Z5GEFMRW.js';
24
24
  import { readFileSync, existsSync } from 'fs';
25
- import { join } from 'path';
25
+ import { join, dirname, basename } from 'path';
26
26
 
27
27
  createRequire(import.meta.url);
28
28
  var RECENT_EVENT_COUNT = 30;
@@ -50,14 +50,25 @@ function blockText(block) {
50
50
  }
51
51
  return "";
52
52
  }
53
- function summarize(type, message) {
54
- const content = typeof message === "object" && message !== null ? message.content : void 0;
53
+ function contentOf(message) {
54
+ return message?.content;
55
+ }
56
+ function flatText(message) {
57
+ const content = contentOf(message);
55
58
  const text = Array.isArray(content) ? content.map(blockText).join(" ") : blockText(content);
56
- const flat = scrubText(text.replace(/\s+/g, " ").trim());
57
- const clipped = flat.length > SUMMARY_MAX ? `${flat.slice(0, SUMMARY_MAX - 1)}\u2026` : flat;
58
- return `${type === "user" ? "user" : "agent"}: ${clipped}`;
59
+ return text.replace(/\s+/g, " ").trim();
60
+ }
61
+ function summarize(type, flat, agent) {
62
+ const scrubbed = scrubText(flat);
63
+ const clipped = scrubbed.length > SUMMARY_MAX ? `${scrubbed.slice(0, SUMMARY_MAX - 1)}\u2026` : scrubbed;
64
+ const who = type === "user" ? "user" : agent !== void 0 ? `agent ${agent}` : "agent";
65
+ return `${who}: ${clipped}`;
59
66
  }
60
- function readSessionEvents(transcriptPath) {
67
+ function isToolResult(message) {
68
+ const content = contentOf(message);
69
+ return Array.isArray(content) && content.some((b) => typeof b === "object" && b !== null && b.type === "tool_result");
70
+ }
71
+ function readSessionEvents(transcriptPath, agent) {
61
72
  let text;
62
73
  try {
63
74
  text = readFileSync(transcriptPath, "utf8");
@@ -75,20 +86,48 @@ function readSessionEvents(transcriptPath) {
75
86
  }
76
87
  if (record.type !== "user" && record.type !== "assistant" || typeof record.timestamp !== "string") return;
77
88
  if (!Number.isFinite(Date.parse(record.timestamp))) return;
78
- events.push({ id: `e${index + 1}`, at: record.timestamp, summary: summarize(record.type, record.message) });
89
+ const text2 = flatText(record.message);
90
+ events.push({
91
+ id: agent !== void 0 ? `${agent}:e${index + 1}` : `e${index + 1}`,
92
+ at: record.timestamp,
93
+ summary: summarize(record.type, text2, agent),
94
+ text: text2,
95
+ isResult: isToolResult(record.message)
96
+ });
79
97
  });
80
98
  return events;
81
99
  }
82
- function recentSessionEvents(sessionId, home, count = RECENT_EVENT_COUNT) {
83
- const path = locateTranscript(sessionId, home);
84
- if (path === void 0) return void 0;
85
- return readSessionEvents(path).slice(-count);
100
+ function subagentTranscripts(transcriptPath) {
101
+ const dir = join(dirname(transcriptPath), basename(transcriptPath, ".jsonl"), "subagents");
102
+ return findTranscripts(dir).map((entry) => ({ file: entry.file, agent: sessionIdFromPath(entry.file).replace(/^agent-/, "") }));
103
+ }
104
+ function readAllSessionEvents(transcriptPath) {
105
+ const all = [
106
+ ...readSessionEvents(transcriptPath),
107
+ ...subagentTranscripts(transcriptPath).flatMap(({ file, agent }) => readSessionEvents(file, agent))
108
+ ];
109
+ return all.sort((a, b) => Date.parse(a.at) - Date.parse(b.at));
110
+ }
111
+ function newestEvents(events, count = RECENT_EVENT_COUNT) {
112
+ return events.slice(-count);
113
+ }
114
+ function looseMatch(needle) {
115
+ const words = needle.split(/\s+/).filter((word) => word !== "");
116
+ if (words.length === 0) return void 0;
117
+ return new RegExp(words.map((word) => word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("\\s+"), "i");
118
+ }
119
+ function eventsShowing(events, needle) {
120
+ return eventsContaining(events, needle).filter((event) => event.isResult);
121
+ }
122
+ function eventsContaining(events, needle) {
123
+ const pattern = looseMatch(needle);
124
+ return pattern === void 0 ? [] : events.filter((event) => pattern.test(event.text));
86
125
  }
87
126
  var SessionEventNotFoundError = class extends Error {
88
127
  };
89
128
  function loadSessionEvents(sessionId, home) {
90
129
  const path = locateTranscript(sessionId, home);
91
- return path === void 0 ? void 0 : readSessionEvents(path);
130
+ return path === void 0 ? void 0 : readAllSessionEvents(path);
92
131
  }
93
132
  function pickSessionEvent(events, id) {
94
133
  if (events === void 0) {
@@ -107,16 +146,45 @@ function clock(iso) {
107
146
  const date = new Date(iso);
108
147
  return [date.getHours(), date.getMinutes(), date.getSeconds()].map((n) => String(n).padStart(2, "0")).join(":");
109
148
  }
110
- function formatRecentEvents(events) {
111
- if (events.length === 0) return "";
112
- const lines = events.map((event) => ` ${event.id.padEnd(7)} ${clock(event.at)} ${event.summary}`);
149
+ function eventLines(events) {
150
+ const width = Math.max(7, ...events.map((event) => event.id.length + 1));
151
+ return events.map((event) => ` ${event.id.padEnd(width)} ${clock(event.at)} ${event.summary}`);
152
+ }
153
+ function formatNeedsStart(opts) {
154
+ return [
155
+ "Not recorded: a finding records the time it cost, and no start was given.",
156
+ ...opts.errorGiven ? ["No tool output in this session or its subagents contains the --error text."] : [],
157
+ "",
158
+ "Recent events in this session and its subagents (id, local time, what happened):",
159
+ ...eventLines(opts.recent),
160
+ "",
161
+ // Last, so a call piped through `tail -4` still shows how to continue.
162
+ "Run the same command again with --started-at <id of the event where you first hit the problem>.",
163
+ "--ended-at defaults to the newest event; give it when you got past the problem earlier.",
164
+ "--find <text> lists every event of this session and its subagents that contains the text.",
165
+ "Pass --untimed only when the problem cost no time in this session."
166
+ ].join("\n");
167
+ }
168
+ function formatFound(needle, events) {
169
+ if (events.length === 0) return `No event of this session or its subagents contains "${plain(needle)}".`;
170
+ return [`Events that contain "${plain(needle)}" (id, local time, what happened):`, ...eventLines(events)].join("\n");
171
+ }
172
+ function formatBatchNeedsStart(ids, recent) {
113
173
  return [
114
- "Recent events in this session (id, local time, what happened):",
115
- ...lines,
116
- "To record time lost, run again with --started-at <id of the event where you first hit the problem>",
117
- "and --ended-at <id of the event where you got past it>. The time is read from those events."
174
+ `Not recorded: ${ids.map(plain).join(", ")} ${ids.length === 1 ? "has" : "have"} no "startedAt", and none was found from "error".`,
175
+ "",
176
+ "Recent events in this session and its subagents (id, local time, what happened):",
177
+ ...eventLines(recent),
178
+ "",
179
+ 'Give each one "startedAt": "<id of the event where the problem was first hit>". "endedAt" defaults to the newest event.',
180
+ 'Give "untimed": true instead only when the problem cost no time in this session. Then run emit findings again.'
118
181
  ].join("\n");
119
182
  }
183
+ function formatTimeLost(findingId, start, end, fromError) {
184
+ const minutes = Math.round((Date.parse(end.at) - Date.parse(start.at)) / 6e4);
185
+ const line = `Time lost for ${plain(findingId)}: ~${minutes} min, from ${start.id} (${clock(start.at)}) to ${end.id} (${clock(end.at)}).`;
186
+ return fromError ? `${line} The start is the first tool output that showed the error; if the problem began earlier, record it again with --started-at.` : line;
187
+ }
120
188
  function plain(text) {
121
189
  return text.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]+/g, " ").trim();
122
190
  }
@@ -236,26 +304,46 @@ function recordFromFlags(opts) {
236
304
  // Event ids, resolved to { id, at } against the session transcript
237
305
  // before the batch is validated.
238
306
  startedAt: opts.startedAt,
239
- endedAt: opts.endedAt
307
+ endedAt: opts.endedAt,
308
+ ...opts.untimed === true ? { untimed: true } : {}
240
309
  };
241
310
  }
242
- function resolveEvents(finding, sessionId, loadEvents) {
243
- const out = { ...finding };
244
- for (const key of ["startedAt", "endedAt"]) {
245
- const value = out[key];
246
- if (typeof value !== "string") continue;
247
- if (sessionId === void 0) {
248
- throw new EmitFindingError(
249
- `${key === "startedAt" ? "--started-at" : "--ended-at"} names an event of the recording session, but no recorded session was found here`
250
- );
311
+ function pick(events, id) {
312
+ try {
313
+ return pickSessionEvent(events, id);
314
+ } catch (err) {
315
+ throw new EmitFindingError(err.message);
316
+ }
317
+ }
318
+ function ref(event) {
319
+ return { id: event.id, at: event.at };
320
+ }
321
+ function timeFinding(finding, sessionId, loadEvents, flags) {
322
+ const { untimed, ...out } = finding;
323
+ const named = ["startedAt", "endedAt"].filter((key) => out[key] !== void 0);
324
+ if (untimed === true) {
325
+ if (named.length > 0) {
326
+ throw new EmitFindingError(`${flags.untimedFlag} records no time, so it cannot be given with ${flags.startFlag} or ${flags.endFlag}`);
251
327
  }
252
- try {
253
- out[key] = pickSessionEvent(loadEvents(sessionId), value);
254
- } catch (err) {
255
- throw new EmitFindingError(err.message);
328
+ return { finding: out };
329
+ }
330
+ if (named.some((key) => typeof out[key] !== "string")) return { finding: out };
331
+ if (sessionId === void 0) {
332
+ if (named.length > 0) {
333
+ const flag = named[0] === "startedAt" ? flags.startFlag : flags.endFlag;
334
+ throw new EmitFindingError(`${flag} names an event of the recording session, but no recorded session was found here`);
256
335
  }
336
+ return { finding: out };
257
337
  }
258
- return out;
338
+ const loaded = loadEvents(sessionId);
339
+ const given = typeof out.startedAt === "string" ? pick(loaded, out.startedAt) : void 0;
340
+ const givenEnd = typeof out.endedAt === "string" ? pick(loaded, out.endedAt) : void 0;
341
+ const events = loaded ?? [];
342
+ const shown = given === void 0 && typeof out.error === "string" ? eventsShowing(events, out.error)[0] : void 0;
343
+ const start = given ?? (shown !== void 0 ? ref(shown) : void 0);
344
+ if (start === void 0) return events.length > 0 ? { finding: out, needsStart: events } : { finding: out };
345
+ const end = givenEnd ?? ref(events[events.length - 1]);
346
+ return { finding: { ...out, startedAt: start, endedAt: end }, timing: { start, end, fromError: given === void 0 } };
259
347
  }
260
348
  function eventLoader(home) {
261
349
  let loaded = false;
@@ -268,6 +356,9 @@ function eventLoader(home) {
268
356
  return events;
269
357
  };
270
358
  }
359
+ function timingBlock(timed) {
360
+ return timed.filter((t) => t.timing !== void 0).map((t) => formatTimeLost(String(t.finding.id), t.timing.start, t.timing.end, t.timing.fromError)).join("\n");
361
+ }
271
362
  function firstIssueMessage(result) {
272
363
  const issue = result.error.issues[0];
273
364
  return issue ? `${issue.path.join(".")}: ${issue.message}` : "malformed";
@@ -360,7 +451,7 @@ async function upload(batch, target, opts) {
360
451
  } else {
361
452
  const summary = `${C.green}\u2713${C.reset} recorded ${count} ${count === 1 ? "finding" : "findings"} ${C.dim}\xB7${C.reset} item #${target.item.number}`;
362
453
  output = [
363
- opts.eventsBlock ?? "",
454
+ opts.timingBlock ?? "",
364
455
  count > 0 || !needsChoice ? summary : "",
365
456
  formatStored(results),
366
457
  formatCandidates(results, opts.rerun)
@@ -376,18 +467,34 @@ async function runEmitFinding(opts) {
376
467
  const now = opts.now ?? (() => /* @__PURE__ */ new Date());
377
468
  const sessionId = detectUploadSessionId({ cwd, home, env, now });
378
469
  const contextSourceSha = opts.contextSourceSha ?? (sessionId !== void 0 ? readLatestProvenanceForSession(sessionId, home)?.sha ?? void 0 : void 0);
470
+ const loadEvents = eventLoader(home);
471
+ if (opts.find !== void 0) {
472
+ if (sessionId === void 0) throw new EmitFindingError("--find searches the recording session, but no recorded session was found here");
473
+ const events = loadEvents(sessionId);
474
+ if (events === void 0) throw new EmitFindingError("--find: this session's transcript was not found on this machine");
475
+ const output = formatFound(opts.find, eventsContaining(events, opts.find));
476
+ if (!opts.quiet) process.stdout.write(output + "\n");
477
+ return { data: {}, output, exitCode: 0 };
478
+ }
479
+ const timed = timeFinding(recordFromFlags(opts), sessionId, loadEvents, {
480
+ startFlag: "--started-at",
481
+ endFlag: "--ended-at",
482
+ untimedFlag: "--untimed"
483
+ });
484
+ if (timed.needsStart !== void 0) {
485
+ throw new EmitFindingError(formatNeedsStart({ recent: newestEvents(timed.needsStart), errorGiven: opts.error !== void 0 }));
486
+ }
379
487
  const rawBatch = {
380
488
  schemaVersion: 3,
381
489
  ...opts.headSha !== void 0 ? { headSha: opts.headSha } : {},
382
490
  ...contextSourceSha !== void 0 ? { contextSourceSha } : {},
383
- findings: [resolveEvents(recordFromFlags(opts), sessionId, eventLoader(home))]
491
+ findings: [timed.finding]
384
492
  };
385
493
  const parsed = FindingBatchSchema.safeParse(rawBatch);
386
494
  if (!parsed.success) {
387
495
  throw new EmitFindingError(`invalid finding \u2014 ${firstIssueMessage(parsed)}`);
388
496
  }
389
497
  const target = resolveUploadTarget({ item: opts.item, sessionId, home });
390
- const events = opts.startedAt === void 0 && sessionId !== void 0 ? recentSessionEvents(sessionId, home) : void 0;
391
498
  return upload(parsed.data, target, {
392
499
  json: opts.json,
393
500
  url: opts.url,
@@ -398,7 +505,7 @@ async function runEmitFinding(opts) {
398
505
  home,
399
506
  env,
400
507
  fetchImpl: opts.fetchImpl,
401
- eventsBlock: events !== void 0 && !opts.json ? formatRecentEvents(events) : void 0,
508
+ timingBlock: timingBlock([timed]),
402
509
  rerun: RERUN_SINGLE
403
510
  });
404
511
  }
@@ -430,15 +537,20 @@ async function runEmitFindings(opts) {
430
537
  );
431
538
  }
432
539
  const sessionId = detectUploadSessionId({ cwd, home, env, now });
540
+ let timed = [];
433
541
  if (Array.isArray(raw?.findings)) {
434
542
  const batch = raw;
435
543
  const loadEvents = eventLoader(home);
436
- raw = {
437
- ...batch,
438
- findings: batch.findings.map(
439
- (entry) => typeof entry === "object" && entry !== null ? resolveEvents(entry, sessionId, loadEvents) : entry
440
- )
441
- };
544
+ const flags = { startFlag: "startedAt", endFlag: "endedAt", untimedFlag: '"untimed"' };
545
+ const entries = batch.findings.map(
546
+ (entry) => typeof entry === "object" && entry !== null ? timeFinding(entry, sessionId, loadEvents, flags) : entry
547
+ );
548
+ timed = entries.filter((entry) => typeof entry === "object" && entry !== null && "finding" in entry);
549
+ const missing = timed.filter((t) => t.needsStart !== void 0);
550
+ if (missing.length > 0) {
551
+ throw new EmitFindingError(formatBatchNeedsStart(missing.map((t) => String(t.finding.id)), newestEvents(missing[0].needsStart)));
552
+ }
553
+ raw = { ...batch, findings: entries.map((entry) => timed.includes(entry) ? entry.finding : entry) };
442
554
  }
443
555
  const parsed = FindingBatchSchema.safeParse(raw);
444
556
  if (!parsed.success) {
@@ -455,6 +567,7 @@ async function runEmitFindings(opts) {
455
567
  home,
456
568
  env,
457
569
  fetchImpl: opts.fetchImpl,
570
+ timingBlock: timingBlock(timed),
458
571
  rerun: rerunBatch(opts.file)
459
572
  });
460
573
  }
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectCi } from './chunk-MSASO5O4.js';
3
+ import { detectCi } from './chunk-U3HXXRTY.js';
4
4
  import { launchRefusalForSession } from './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import { autoConnect } from './chunk-NPQWKGUA.js';
@@ -23,7 +23,7 @@ import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMI
23
23
  import './chunk-EABW6AJQ.js';
24
24
  import './chunk-V7NIVOFD.js';
25
25
  import './chunk-ZM2IMMYN.js';
26
- import './chunk-PQUM37BK.js';
26
+ import './chunk-6JNURGOA.js';
27
27
  import './chunk-XCCLFVXM.js';
28
28
  import './chunk-BJ3KTMDH.js';
29
29
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { AUTO_SYNC_DEBOUNCE_MS, WORK_LEASE_RENEW_DEBOUNCE_MS, WORK_LINK_RETRIES, contextPossiblyGoverned, handleWorkLaunch, handleWorkSessionEnd, hookFiredMarkerPath, logHookError, markWorkLeaseRenewed, maybeAutoSync, maybeRenewWorkLease, recordLinkExitFailure, runHookFast, spoolDir } from './chunk-PQUM37BK.js';
3
+ export { AUTO_SYNC_DEBOUNCE_MS, WORK_LEASE_RENEW_DEBOUNCE_MS, WORK_LINK_RETRIES, contextPossiblyGoverned, handleWorkLaunch, handleWorkSessionEnd, hookFiredMarkerPath, logHookError, markWorkLeaseRenewed, maybeAutoSync, maybeRenewWorkLease, recordLinkExitFailure, runHookFast, spoolDir } from './chunk-6JNURGOA.js';
4
4
  import './chunk-XCCLFVXM.js';
5
5
  import './chunk-BJ3KTMDH.js';
6
6
  import './chunk-VNVZDWO3.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { C } from './chunk-YRYMNBGQ.js';
4
- import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-ZA5CHAFY.js';
5
- import './chunk-2M63GG56.js';
4
+ import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-POJMEEJJ.js';
5
+ import './chunk-OHVJA253.js';
6
6
  import './chunk-J5M7BSJQ.js';
7
7
  import './chunk-RA3O54FC.js';
8
8
  import './chunk-Z5GEFMRW.js';
@@ -12,7 +12,7 @@ import { join } from 'path';
12
12
  createRequire(import.meta.url);
13
13
  var ImportCaptureError = class extends Error {
14
14
  };
15
- var SNIPPET_PATH = ".outerlayer/skills/emitting-evidence/references/agents-snippet.md";
15
+ var SNIPPET_PATH = ".outerlayer/skills/outerlayer-evidence/references/agents-snippet.md";
16
16
  var AGENTS_MD_PATH = ".outerlayer/AGENTS.md";
17
17
  var AGENTS_MD_MARKER = "<!-- outerlayer:capture-pack -->";
18
18
  function runImportCapture(opts = {}) {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { C } from './chunk-YRYMNBGQ.js';
4
- import { normalizePath } from './chunk-2M63GG56.js';
4
+ import { normalizePath } from './chunk-OHVJA253.js';
5
5
  import './chunk-J5M7BSJQ.js';
6
6
  import './chunk-Z5GEFMRW.js';
7
7
  import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ createRequire(import.meta.url);
6
6
  // src/index.ts
7
7
  var argv = process.argv.slice(2);
8
8
  if (argv[0] === "hook") {
9
- const { runHookFast } = await import('./hook-fast-WYQD6D7T.js');
9
+ const { runHookFast } = await import('./hook-fast-D7HV4IXG.js');
10
10
  await runHookFast(argv[1]);
11
11
  process.exit(0);
12
12
  }
@@ -21,6 +21,6 @@ if (argv[0] === "statusline") {
21
21
  await runStatuslineFast(argv.slice(1));
22
22
  process.exit(0);
23
23
  }
24
- (await import('./hook-fast-WYQD6D7T.js')).recordLinkExitFailure(argv);
25
- var { runCli } = await import('./cli-UW2H3UUW.js');
24
+ (await import('./hook-fast-D7HV4IXG.js')).recordLinkExitFailure(argv);
25
+ var { runCli } = await import('./cli-AEWH62UE.js');
26
26
  await runCli(process.argv);
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { npmSupportsProvenance } from './chunk-YETTWTAY.js';
4
- import { RunnerInitError, readConfigObject } from './chunk-Q2UK3C4P.js';
5
- import './chunk-JYIEHQIF.js';
6
- import './chunk-RBKIH5ST.js';
4
+ import { RunnerInitError, readConfigObject } from './chunk-CA3XMYFN.js';
5
+ import './chunk-RSPXEVDX.js';
6
+ import './chunk-EWORLJMO.js';
7
7
  import './chunk-KMDLFI4P.js';
8
8
  import './chunk-QKFB4K7X.js';
9
9
  import './chunk-RSNSZ2LJ.js';
10
- import './chunk-T5VPP6H7.js';
10
+ import './chunk-OZGHL5Y5.js';
11
11
  import { checkFit, VM_SERVICE_NAME, RUNNER_RESERVE_BYTES } from './chunk-RLYZLUQ7.js';
12
12
  import './chunk-6MZSX4M7.js';
13
- import './chunk-SWHQ4LUM.js';
13
+ import './chunk-6QRMLNH3.js';
14
14
  import './chunk-NPQWKGUA.js';
15
15
  import './chunk-IP7BIBXJ.js';
16
16
  import { runnerCredentialProblem, resolveBuild, resolveHousekeeping } from './chunk-22RMZBGW.js';
@@ -31,13 +31,14 @@ import './chunk-4KSQKQXE.js';
31
31
  import './chunk-N6LURUEF.js';
32
32
  import './chunk-YRYMNBGQ.js';
33
33
  import './chunk-WZBHBH3J.js';
34
- import './chunk-3NLOVYJQ.js';
35
- import './chunk-LCEXHCHD.js';
34
+ import './chunk-JEHRUE3F.js';
35
+ import './chunk-WTE3MQML.js';
36
+ import './chunk-C5Y5ZJJZ.js';
36
37
  import './chunk-ZJSNLVCE.js';
37
38
  import './chunk-YO4PSLVB.js';
38
39
  import './chunk-BYT5O5RV.js';
39
- import './chunk-ZA5CHAFY.js';
40
- import './chunk-2M63GG56.js';
40
+ import './chunk-POJMEEJJ.js';
41
+ import './chunk-OHVJA253.js';
41
42
  import './chunk-PLMTLGYH.js';
42
43
  import './chunk-J5M7BSJQ.js';
43
44
  import './chunk-EABW6AJQ.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-Q2UK3C4P.js';
4
- import './chunk-JYIEHQIF.js';
5
- import './chunk-RBKIH5ST.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-CA3XMYFN.js';
4
+ import './chunk-RSPXEVDX.js';
5
+ import './chunk-EWORLJMO.js';
6
6
  import './chunk-KMDLFI4P.js';
7
7
  import './chunk-QKFB4K7X.js';
8
8
  import './chunk-RSNSZ2LJ.js';
9
- import './chunk-T5VPP6H7.js';
9
+ import './chunk-OZGHL5Y5.js';
10
10
  import './chunk-RLYZLUQ7.js';
11
11
  import './chunk-6MZSX4M7.js';
12
- import './chunk-SWHQ4LUM.js';
12
+ import './chunk-6QRMLNH3.js';
13
13
  import './chunk-NPQWKGUA.js';
14
14
  import './chunk-IP7BIBXJ.js';
15
15
  import './chunk-22RMZBGW.js';
@@ -29,13 +29,14 @@ import './chunk-4KSQKQXE.js';
29
29
  import './chunk-N6LURUEF.js';
30
30
  import './chunk-YRYMNBGQ.js';
31
31
  import './chunk-WZBHBH3J.js';
32
- import './chunk-3NLOVYJQ.js';
33
- import './chunk-LCEXHCHD.js';
32
+ import './chunk-JEHRUE3F.js';
33
+ import './chunk-WTE3MQML.js';
34
+ import './chunk-C5Y5ZJJZ.js';
34
35
  import './chunk-ZJSNLVCE.js';
35
36
  import './chunk-YO4PSLVB.js';
36
37
  import './chunk-BYT5O5RV.js';
37
- import './chunk-ZA5CHAFY.js';
38
- import './chunk-2M63GG56.js';
38
+ import './chunk-POJMEEJJ.js';
39
+ import './chunk-OHVJA253.js';
39
40
  import './chunk-PLMTLGYH.js';
40
41
  import './chunk-J5M7BSJQ.js';
41
42
  import './chunk-EABW6AJQ.js';
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { summarizeChecks, summaryText, renderDoctorText } from './chunk-HFKQIZXL.js';
4
- import './chunk-MTF3PHVZ.js';
5
- import './chunk-SWHQ4LUM.js';
3
+ import { summarizeChecks, summaryText, renderDoctorText } from './chunk-W3EKCZSQ.js';
4
+ import './chunk-NBGDBTO2.js';
5
+ import './chunk-6QRMLNH3.js';
6
6
  import './chunk-NPQWKGUA.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
8
  import './chunk-F47JBIAW.js';
9
9
  import './chunk-BKO6JEZI.js';
10
10
  import './chunk-XCK2YAY5.js';
11
- import './chunk-FOJGZYFC.js';
11
+ import './chunk-42ZI52JW.js';
12
12
  import { runConnect, COMMIT_LINE } from './chunk-YDSMROTB.js';
13
13
  import './chunk-WUYTWNMA.js';
14
14
  import './chunk-JXYVA45C.js';
@@ -17,17 +17,18 @@ import './chunk-N6LURUEF.js';
17
17
  import { C } from './chunk-YRYMNBGQ.js';
18
18
  import './chunk-WZBHBH3J.js';
19
19
  import './chunk-5QRP3MVS.js';
20
- import './chunk-LCEXHCHD.js';
20
+ import './chunk-WTE3MQML.js';
21
+ import './chunk-C5Y5ZJJZ.js';
21
22
  import './chunk-YO4PSLVB.js';
22
- import './chunk-ZA5CHAFY.js';
23
- import './chunk-2M63GG56.js';
23
+ import './chunk-POJMEEJJ.js';
24
+ import './chunk-OHVJA253.js';
24
25
  import './chunk-PLMTLGYH.js';
25
26
  import './chunk-J5M7BSJQ.js';
26
27
  import './chunk-EABW6AJQ.js';
27
28
  import './chunk-RA3O54FC.js';
28
29
  import './chunk-V7NIVOFD.js';
29
30
  import './chunk-ZM2IMMYN.js';
30
- import './chunk-PQUM37BK.js';
31
+ import './chunk-6JNURGOA.js';
31
32
  import './chunk-XCCLFVXM.js';
32
33
  import './chunk-BJ3KTMDH.js';
33
34
  import './chunk-VNVZDWO3.js';
@@ -1,23 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { keepHandWritten } from './chunk-SXWS25JC.js';
4
- import { runEmit } from './chunk-HFKKFTXU.js';
5
- import { contextIsGoverned, inspectStarterFiles, canonical } from './chunk-MTF3PHVZ.js';
3
+ import { keepHandWritten } from './chunk-5FEK6PNE.js';
4
+ import { runEmit } from './chunk-2MNPHL23.js';
5
+ import { contextIsGoverned, inspectStarterFiles, canonical } from './chunk-NBGDBTO2.js';
6
6
  import { setMcpEntry } from './chunk-XCK2YAY5.js';
7
- import './chunk-FOJGZYFC.js';
7
+ import './chunk-42ZI52JW.js';
8
8
  import { COMMIT_LINE } from './chunk-YDSMROTB.js';
9
9
  import './chunk-WUYTWNMA.js';
10
10
  import './chunk-JXYVA45C.js';
11
11
  import './chunk-4KSQKQXE.js';
12
12
  import './chunk-N6LURUEF.js';
13
13
  import { C } from './chunk-YRYMNBGQ.js';
14
- import './chunk-3NLOVYJQ.js';
15
- import './chunk-LCEXHCHD.js';
14
+ import './chunk-JEHRUE3F.js';
15
+ import './chunk-WTE3MQML.js';
16
+ import './chunk-C5Y5ZJJZ.js';
16
17
  import './chunk-ZJSNLVCE.js';
17
18
  import './chunk-YO4PSLVB.js';
18
19
  import './chunk-BYT5O5RV.js';
19
- import './chunk-ZA5CHAFY.js';
20
- import './chunk-2M63GG56.js';
20
+ import './chunk-POJMEEJJ.js';
21
+ import './chunk-OHVJA253.js';
21
22
  import './chunk-PLMTLGYH.js';
22
23
  import './chunk-J5M7BSJQ.js';
23
24
  import './chunk-EABW6AJQ.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RunnerStartError, listJobFiles, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-NHDVD7DU.js';
4
- import './chunk-4OGPT6I2.js';
3
+ export { RunnerStartError, listJobFiles, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-EHAAPRWY.js';
4
+ import './chunk-R4ZQQ7U2.js';
5
5
  import './chunk-O765JR4W.js';
6
6
  import './chunk-UGP76IZ5.js';
7
7
  import './chunk-3JVYMD4G.js';
@@ -9,24 +9,24 @@ import './chunk-YETTWTAY.js';
9
9
  import './chunk-RMWLBUCJ.js';
10
10
  import './chunk-I2UOAV7X.js';
11
11
  import './chunk-HYZRY4KZ.js';
12
- import './chunk-FI5UYJMQ.js';
13
- import './chunk-KFRM23WD.js';
14
- import './chunk-MSASO5O4.js';
12
+ import './chunk-ADJRGVZC.js';
13
+ import './chunk-ONRCEE6D.js';
14
+ import './chunk-U3HXXRTY.js';
15
15
  import './chunk-HHJDN6AU.js';
16
- import './chunk-SMHOCDCI.js';
16
+ import './chunk-FWX735W7.js';
17
17
  import './chunk-YYYRBYWG.js';
18
18
  import './chunk-TI7B7UEO.js';
19
19
  import './chunk-TBT347UY.js';
20
- import './chunk-Q2UK3C4P.js';
21
- import './chunk-JYIEHQIF.js';
22
- import './chunk-RBKIH5ST.js';
20
+ import './chunk-CA3XMYFN.js';
21
+ import './chunk-RSPXEVDX.js';
22
+ import './chunk-EWORLJMO.js';
23
23
  import './chunk-KMDLFI4P.js';
24
24
  import './chunk-QKFB4K7X.js';
25
25
  import './chunk-RSNSZ2LJ.js';
26
- import './chunk-T5VPP6H7.js';
26
+ import './chunk-OZGHL5Y5.js';
27
27
  import './chunk-RLYZLUQ7.js';
28
28
  import './chunk-6MZSX4M7.js';
29
- import './chunk-SWHQ4LUM.js';
29
+ import './chunk-6QRMLNH3.js';
30
30
  import './chunk-NPQWKGUA.js';
31
31
  import './chunk-IP7BIBXJ.js';
32
32
  import './chunk-22RMZBGW.js';
@@ -50,20 +50,21 @@ import './chunk-YRYMNBGQ.js';
50
50
  import './chunk-GQD22KKN.js';
51
51
  import './chunk-WZBHBH3J.js';
52
52
  import './chunk-5QRP3MVS.js';
53
- import './chunk-3NLOVYJQ.js';
54
- import './chunk-LCEXHCHD.js';
53
+ import './chunk-JEHRUE3F.js';
54
+ import './chunk-WTE3MQML.js';
55
+ import './chunk-C5Y5ZJJZ.js';
55
56
  import './chunk-ZJSNLVCE.js';
56
57
  import './chunk-YO4PSLVB.js';
57
58
  import './chunk-BYT5O5RV.js';
58
- import './chunk-ZA5CHAFY.js';
59
- import './chunk-2M63GG56.js';
59
+ import './chunk-POJMEEJJ.js';
60
+ import './chunk-OHVJA253.js';
60
61
  import './chunk-PLMTLGYH.js';
61
62
  import './chunk-J5M7BSJQ.js';
62
63
  import './chunk-EABW6AJQ.js';
63
64
  import './chunk-RA3O54FC.js';
64
65
  import './chunk-V7NIVOFD.js';
65
66
  import './chunk-ZM2IMMYN.js';
66
- import './chunk-PQUM37BK.js';
67
+ import './chunk-6JNURGOA.js';
67
68
  import './chunk-XCCLFVXM.js';
68
69
  import './chunk-BJ3KTMDH.js';
69
70
  import './chunk-VNVZDWO3.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-JYIEHQIF.js';
4
- import './chunk-RBKIH5ST.js';
3
+ export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-RSPXEVDX.js';
4
+ import './chunk-EWORLJMO.js';
5
5
  import './chunk-KMDLFI4P.js';
6
6
  import './chunk-QKFB4K7X.js';
7
7
  import './chunk-RSNSZ2LJ.js';
8
- import './chunk-SWHQ4LUM.js';
8
+ import './chunk-6QRMLNH3.js';
9
9
  import './chunk-NPQWKGUA.js';
10
10
  import './chunk-IP7BIBXJ.js';
11
11
  import './chunk-UXYLWVTQ.js';
@@ -24,13 +24,14 @@ import './chunk-4KSQKQXE.js';
24
24
  import './chunk-N6LURUEF.js';
25
25
  import './chunk-YRYMNBGQ.js';
26
26
  import './chunk-WZBHBH3J.js';
27
- import './chunk-3NLOVYJQ.js';
28
- import './chunk-LCEXHCHD.js';
27
+ import './chunk-JEHRUE3F.js';
28
+ import './chunk-WTE3MQML.js';
29
+ import './chunk-C5Y5ZJJZ.js';
29
30
  import './chunk-ZJSNLVCE.js';
30
31
  import './chunk-YO4PSLVB.js';
31
32
  import './chunk-BYT5O5RV.js';
32
- import './chunk-ZA5CHAFY.js';
33
- import './chunk-2M63GG56.js';
33
+ import './chunk-POJMEEJJ.js';
34
+ import './chunk-OHVJA253.js';
34
35
  import './chunk-PLMTLGYH.js';
35
36
  import './chunk-J5M7BSJQ.js';
36
37
  import './chunk-EABW6AJQ.js';