@tyvm/knowhow 0.0.130 → 0.0.132

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 (97) hide show
  1. package/package.json +1 -1
  2. package/src/agents/configurable/ConfigAgent.ts +0 -1
  3. package/src/agents/tools/startAgentTask.ts +17 -13
  4. package/src/ai.ts +55 -24
  5. package/src/chat/CliChatService.ts +7 -1
  6. package/src/chat/modules/AgentModule.ts +72 -14
  7. package/src/chat/renderer/PlainRenderer.ts +218 -0
  8. package/src/chat/renderer/index.ts +1 -0
  9. package/src/chat/renderer/loadRenderer.ts +2 -0
  10. package/src/chat.ts +2 -2
  11. package/src/cli.ts +23 -0
  12. package/src/clients/anthropic.ts +9 -1
  13. package/src/clients/fireworks.ts +10 -1
  14. package/src/clients/index.ts +6 -3
  15. package/src/clients/meta.ts +9 -0
  16. package/src/clients/pricing/anthropic.ts +11 -0
  17. package/src/clients/pricing/fireworks.ts +12 -0
  18. package/src/commands/agent.ts +53 -20
  19. package/src/commands/agents.ts +556 -0
  20. package/src/commands/hash.ts +170 -0
  21. package/src/commands/misc.ts +157 -3
  22. package/src/commands/skills.ts +36 -0
  23. package/src/config.ts +54 -2
  24. package/src/generate.ts +507 -0
  25. package/src/index.ts +32 -216
  26. package/src/services/BehaviorsService.ts +32 -0
  27. package/src/services/SkillsService.ts +198 -0
  28. package/src/types.ts +36 -4
  29. package/ts_build/package.json +1 -1
  30. package/ts_build/src/agents/configurable/ConfigAgent.js.map +1 -1
  31. package/ts_build/src/agents/tools/startAgentTask.d.ts +2 -2
  32. package/ts_build/src/agents/tools/startAgentTask.js +13 -12
  33. package/ts_build/src/agents/tools/startAgentTask.js.map +1 -1
  34. package/ts_build/src/ai.d.ts +10 -4
  35. package/ts_build/src/ai.js +27 -25
  36. package/ts_build/src/ai.js.map +1 -1
  37. package/ts_build/src/chat/CliChatService.d.ts +1 -1
  38. package/ts_build/src/chat/CliChatService.js +4 -1
  39. package/ts_build/src/chat/CliChatService.js.map +1 -1
  40. package/ts_build/src/chat/modules/AgentModule.js +61 -4
  41. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  42. package/ts_build/src/chat/renderer/PlainRenderer.d.ts +28 -0
  43. package/ts_build/src/chat/renderer/PlainRenderer.js +169 -0
  44. package/ts_build/src/chat/renderer/PlainRenderer.js.map +1 -0
  45. package/ts_build/src/chat/renderer/index.d.ts +1 -0
  46. package/ts_build/src/chat/renderer/index.js +3 -1
  47. package/ts_build/src/chat/renderer/index.js.map +1 -1
  48. package/ts_build/src/chat/renderer/loadRenderer.js +2 -0
  49. package/ts_build/src/chat/renderer/loadRenderer.js.map +1 -1
  50. package/ts_build/src/chat.d.ts +1 -1
  51. package/ts_build/src/chat.js +2 -2
  52. package/ts_build/src/chat.js.map +1 -1
  53. package/ts_build/src/cli.js +16 -0
  54. package/ts_build/src/cli.js.map +1 -1
  55. package/ts_build/src/clients/anthropic.js +4 -1
  56. package/ts_build/src/clients/anthropic.js.map +1 -1
  57. package/ts_build/src/clients/fireworks.js +7 -0
  58. package/ts_build/src/clients/fireworks.js.map +1 -1
  59. package/ts_build/src/clients/index.js +5 -1
  60. package/ts_build/src/clients/index.js.map +1 -1
  61. package/ts_build/src/clients/meta.d.ts +2 -0
  62. package/ts_build/src/clients/meta.js +5 -0
  63. package/ts_build/src/clients/meta.js.map +1 -1
  64. package/ts_build/src/clients/pricing/anthropic.d.ts +3 -0
  65. package/ts_build/src/clients/pricing/anthropic.js +6 -0
  66. package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
  67. package/ts_build/src/clients/pricing/fireworks.d.ts +1 -0
  68. package/ts_build/src/clients/pricing/fireworks.js +5 -1
  69. package/ts_build/src/clients/pricing/fireworks.js.map +1 -1
  70. package/ts_build/src/commands/agent.js +44 -17
  71. package/ts_build/src/commands/agent.js.map +1 -1
  72. package/ts_build/src/commands/agents.d.ts +2 -0
  73. package/ts_build/src/commands/agents.js +460 -0
  74. package/ts_build/src/commands/agents.js.map +1 -0
  75. package/ts_build/src/commands/hash.d.ts +2 -0
  76. package/ts_build/src/commands/hash.js +150 -0
  77. package/ts_build/src/commands/hash.js.map +1 -0
  78. package/ts_build/src/commands/misc.js +108 -2
  79. package/ts_build/src/commands/misc.js.map +1 -1
  80. package/ts_build/src/commands/skills.js +24 -0
  81. package/ts_build/src/commands/skills.js.map +1 -1
  82. package/ts_build/src/config.js +37 -1
  83. package/ts_build/src/config.js.map +1 -1
  84. package/ts_build/src/generate.d.ts +16 -0
  85. package/ts_build/src/generate.js +304 -0
  86. package/ts_build/src/generate.js.map +1 -0
  87. package/ts_build/src/index.d.ts +1 -3
  88. package/ts_build/src/index.js +9 -118
  89. package/ts_build/src/index.js.map +1 -1
  90. package/ts_build/src/services/BehaviorsService.d.ts +2 -0
  91. package/ts_build/src/services/BehaviorsService.js +24 -0
  92. package/ts_build/src/services/BehaviorsService.js.map +1 -1
  93. package/ts_build/src/services/SkillsService.d.ts +7 -0
  94. package/ts_build/src/services/SkillsService.js +163 -0
  95. package/ts_build/src/services/SkillsService.js.map +1 -1
  96. package/ts_build/src/types.d.ts +14 -4
  97. package/ts_build/src/types.js.map +1 -1
@@ -0,0 +1,460 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.addAgentsCommand = addAgentsCommand;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const chat_1 = require("../chat");
40
+ const AGENTS_DIR = path.join(".knowhow", "processes", "agents");
41
+ const SESSIONS_DIR = path.join(".knowhow", "chats", "sessions");
42
+ function readJson(filePath) {
43
+ try {
44
+ return JSON.parse(fs.readFileSync(filePath, "utf-8"));
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ function agentTaskIds() {
51
+ if (!fs.existsSync(AGENTS_DIR))
52
+ return [];
53
+ return fs
54
+ .readdirSync(AGENTS_DIR, { withFileTypes: true })
55
+ .filter((e) => e.isDirectory())
56
+ .map((e) => e.name);
57
+ }
58
+ function loadMeta(taskId) {
59
+ return readJson(path.join(AGENTS_DIR, taskId, "metadata.json"));
60
+ }
61
+ function loadStatus(taskId) {
62
+ const f = path.join(AGENTS_DIR, taskId, "status.txt");
63
+ try {
64
+ return fs.readFileSync(f, "utf-8").trim();
65
+ }
66
+ catch {
67
+ return "unknown";
68
+ }
69
+ }
70
+ function getStatus(taskId, meta) {
71
+ if (meta?.status)
72
+ return meta.status;
73
+ const fromFile = loadStatus(taskId);
74
+ return fromFile ?? "unknown";
75
+ }
76
+ function elapsedStr(startIso, endIso) {
77
+ if (!startIso)
78
+ return "?";
79
+ const start = new Date(startIso).getTime();
80
+ const end = endIso ? new Date(endIso).getTime() : Date.now();
81
+ const ms = end - start;
82
+ if (ms < 60_000)
83
+ return `${Math.floor(ms / 1000)}s`;
84
+ if (ms < 3_600_000)
85
+ return `${Math.floor(ms / 60_000)}m ${Math.floor((ms % 60_000) / 1000)}s`;
86
+ return `${Math.floor(ms / 3_600_000)}h ${Math.floor((ms % 3_600_000) / 60_000)}m`;
87
+ }
88
+ function shortId(taskId, maxLen = 52) {
89
+ return taskId.length > maxLen ? taskId.slice(0, maxLen) + "…" : taskId;
90
+ }
91
+ function lastAssistantMessage(thread) {
92
+ for (let i = thread.length - 1; i >= 0; i--) {
93
+ const msg = thread[i];
94
+ if (msg.role === "assistant") {
95
+ if (typeof msg.content === "string" && msg.content.trim()) {
96
+ return msg.content.trim();
97
+ }
98
+ if (Array.isArray(msg.content)) {
99
+ const text = msg.content
100
+ .filter((c) => c.type === "text")
101
+ .map((c) => c.text)
102
+ .join("\n")
103
+ .trim();
104
+ if (text)
105
+ return text;
106
+ }
107
+ }
108
+ }
109
+ return undefined;
110
+ }
111
+ function lastToolCall(thread) {
112
+ for (let i = thread.length - 1; i >= 0; i--) {
113
+ const msg = thread[i];
114
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0) {
115
+ const last = msg.tool_calls[msg.tool_calls.length - 1];
116
+ return last?.function?.name;
117
+ }
118
+ }
119
+ return undefined;
120
+ }
121
+ function formatMessage(msg, index) {
122
+ const role = msg.role.padEnd(9);
123
+ let content = "";
124
+ if (typeof msg.content === "string") {
125
+ content = msg.content.trim().slice(0, 300);
126
+ if (msg.content.length > 300)
127
+ content += "…";
128
+ }
129
+ else if (Array.isArray(msg.content)) {
130
+ content = msg.content
131
+ .filter((c) => c.type === "text")
132
+ .map((c) => c.text.slice(0, 200))
133
+ .join(" | ");
134
+ }
135
+ if (msg.role === "assistant" && Array.isArray(msg.tool_calls) && msg.tool_calls.length > 0) {
136
+ const tools = msg.tool_calls.map((tc) => {
137
+ const name = tc?.function?.name ?? "?";
138
+ let args = "";
139
+ try {
140
+ const parsed = JSON.parse(tc?.function?.arguments ?? "{}");
141
+ const entries = Object.entries(parsed).slice(0, 2);
142
+ args = entries.map(([k, v]) => `${k}=${String(v).slice(0, 40)}`).join(", ");
143
+ }
144
+ catch {
145
+ args = (tc?.function?.arguments ?? "").slice(0, 80);
146
+ }
147
+ return `[TOOL] ${name}(${args})`;
148
+ });
149
+ content = content ? content + "\n " + tools.join("\n ") : tools.join("\n ");
150
+ }
151
+ if (msg.role === "tool") {
152
+ const result = typeof msg.content === "string" ? msg.content.slice(0, 200) : JSON.stringify(msg.content).slice(0, 200);
153
+ content = `[RESULT] ${result}${(typeof msg.content === "string" ? msg.content : "").length > 200 ? "…" : ""}`;
154
+ }
155
+ return ` #${String(index).padStart(3)} [${role}] ${content}`;
156
+ }
157
+ function buildRows(includeAll) {
158
+ const taskIds = agentTaskIds();
159
+ const rows = [];
160
+ for (const taskId of taskIds) {
161
+ const meta = loadMeta(taskId);
162
+ const status = meta?.status ?? loadStatus(taskId);
163
+ if (!includeAll && (status === "completed" || status === "killed")) {
164
+ const lastUpdate = meta?.lastUpdate ?? "";
165
+ if (lastUpdate) {
166
+ const age = Date.now() - new Date(lastUpdate).getTime();
167
+ if (age > 3_600_000)
168
+ continue;
169
+ }
170
+ else {
171
+ continue;
172
+ }
173
+ }
174
+ const cost = meta?.totalCostUsd != null ? `$${meta.totalCostUsd.toFixed(3)}` : "";
175
+ const elapsed = elapsedStr(meta?.startTime, meta?.status === "completed" ? meta?.lastUpdate : undefined);
176
+ const lastUpdate = meta?.lastUpdate ? new Date(meta.lastUpdate).toLocaleString() : "?";
177
+ rows.push({
178
+ taskId,
179
+ displayId: shortId(taskId),
180
+ agentName: meta?.agentName ?? "?",
181
+ status: status ?? "unknown",
182
+ cost,
183
+ elapsed,
184
+ lastUpdate,
185
+ });
186
+ }
187
+ return rows;
188
+ }
189
+ function resolveTaskId(value, includeAll = false) {
190
+ const n = parseInt(value, 10);
191
+ if (!isNaN(n) && String(n) === value.trim() && n <= 9999) {
192
+ const rows = buildRows(includeAll);
193
+ const row = rows[n - 1];
194
+ return row ? row.taskId : null;
195
+ }
196
+ const all = agentTaskIds();
197
+ if (all.includes(value))
198
+ return value;
199
+ return all.find((id) => id.includes(value)) ?? null;
200
+ }
201
+ async function cmdList(opts) {
202
+ const rows = buildRows(opts.all);
203
+ if (rows.length === 0) {
204
+ if (agentTaskIds().length === 0) {
205
+ console.log("No agent task directories found under", AGENTS_DIR);
206
+ }
207
+ else {
208
+ console.log("No active agent tasks. Use --all to include completed tasks.");
209
+ }
210
+ return;
211
+ }
212
+ if (opts.json) {
213
+ console.log(JSON.stringify(rows.map(({ taskId, agentName, status, cost, elapsed, lastUpdate }) => ({
214
+ taskId, agentName, status, cost, elapsed, lastUpdate,
215
+ })), null, 2));
216
+ return;
217
+ }
218
+ const COL_IDX = 4;
219
+ const COL_ID = 55;
220
+ const COL_AGENT = 14;
221
+ const COL_STATUS = 12;
222
+ const COL_COST = 8;
223
+ const COL_ELAPSED = 10;
224
+ const header = "#".padEnd(COL_IDX) +
225
+ "TASK ID".padEnd(COL_ID) +
226
+ "AGENT".padEnd(COL_AGENT) +
227
+ "STATUS".padEnd(COL_STATUS) +
228
+ "COST".padEnd(COL_COST) +
229
+ "ELAPSED".padEnd(COL_ELAPSED) +
230
+ "LAST UPDATE";
231
+ console.log("\n" + header);
232
+ console.log("─".repeat(120));
233
+ rows.forEach((row, idx) => {
234
+ process.stdout.write(String(idx + 1).padEnd(COL_IDX) +
235
+ row.displayId.padEnd(COL_ID) +
236
+ row.agentName.padEnd(COL_AGENT) +
237
+ row.status.padEnd(COL_STATUS) +
238
+ row.cost.padEnd(COL_COST) +
239
+ row.elapsed.padEnd(COL_ELAPSED) +
240
+ row.lastUpdate +
241
+ "\n");
242
+ });
243
+ console.log("\nTip: use -i <#> with tail/status/attach to select by row number, e.g. knowhow agents attach -i 1\n");
244
+ }
245
+ async function cmdStatus(taskIdOrIndex, opts) {
246
+ const value = opts.index ?? taskIdOrIndex;
247
+ if (!value) {
248
+ console.error("Provide a task ID or use -i <number> to select by index.");
249
+ process.exit(1);
250
+ }
251
+ const resolvedId = resolveTaskId(value);
252
+ if (!resolvedId) {
253
+ console.error(`Task not found: ${value}`);
254
+ const rows = buildRows(true);
255
+ if (rows.length > 0) {
256
+ console.error("\nAvailable tasks:");
257
+ rows.forEach((r, i) => console.error(` ${i + 1}. ${r.displayId}`));
258
+ }
259
+ process.exit(1);
260
+ }
261
+ if (resolvedId !== value) {
262
+ console.log(`Resolved: ${resolvedId}`);
263
+ }
264
+ const meta = loadMeta(resolvedId);
265
+ const status = getStatus(resolvedId, meta);
266
+ console.log("\n📋 Agent Status");
267
+ console.log("─".repeat(60));
268
+ console.log(`Task ID: ${resolvedId}`);
269
+ console.log(`Agent: ${meta?.agentName ?? "?"}`);
270
+ console.log(`Status: ${status}`);
271
+ console.log(`Cost: ${meta?.totalCostUsd != null ? "$" + meta.totalCostUsd.toFixed(4) : "?"}`);
272
+ console.log(`Started: ${meta?.startTime ? new Date(meta.startTime).toLocaleString() : "?"}`);
273
+ console.log(`Last update:${meta?.lastUpdate ? " " + new Date(meta.lastUpdate).toLocaleString() : " ?"}`);
274
+ console.log(`Elapsed: ${elapsedStr(meta?.startTime)}`);
275
+ const threads = meta?.threads ?? [];
276
+ if (threads.length > 0) {
277
+ const lastThread = threads[threads.length - 1];
278
+ const msgCount = lastThread.length;
279
+ const lastTool = lastToolCall(lastThread);
280
+ const lastMsg = lastAssistantMessage(lastThread);
281
+ console.log(`Messages: ${msgCount} in last thread`);
282
+ if (lastTool) {
283
+ console.log(`Last tool: ${lastTool}`);
284
+ }
285
+ if (lastMsg) {
286
+ const preview = lastMsg.slice(0, 200);
287
+ console.log(`Last msg: ${preview}${lastMsg.length > 200 ? "…" : ""}`);
288
+ }
289
+ }
290
+ if (meta?.result) {
291
+ const result = String(meta.result).slice(0, 300);
292
+ console.log(`\nResult:\n ${result}`);
293
+ }
294
+ console.log("─".repeat(60));
295
+ }
296
+ async function cmdTail(taskIdOrIndex, opts) {
297
+ const value = opts.index ?? taskIdOrIndex;
298
+ if (!value) {
299
+ console.error("Provide a task ID or use -i <number> to select by index.");
300
+ process.exit(1);
301
+ }
302
+ const resolvedId = resolveTaskId(value);
303
+ if (!resolvedId) {
304
+ console.error(`Task not found: ${value}`);
305
+ const rows = buildRows(true);
306
+ if (rows.length > 0) {
307
+ console.error("\nAvailable tasks:");
308
+ rows.forEach((r, i) => console.error(` ${i + 1}. ${r.displayId}`));
309
+ }
310
+ process.exit(1);
311
+ return;
312
+ }
313
+ if (resolvedId !== value) {
314
+ console.log(`Resolved: ${resolvedId}`);
315
+ }
316
+ const meta = loadMeta(resolvedId);
317
+ if (!meta) {
318
+ console.error(`No metadata found for task: ${resolvedId}`);
319
+ process.exit(1);
320
+ }
321
+ const threads = meta.threads ?? [];
322
+ if (threads.length === 0) {
323
+ console.log("No thread data found in metadata.json (agent may not have started yet).");
324
+ return;
325
+ }
326
+ const lastThread = threads[threads.length - 1];
327
+ if (opts.raw) {
328
+ const slice = lastThread.slice(-opts.count);
329
+ console.log(JSON.stringify(slice, null, 2));
330
+ if (!opts.follow)
331
+ return;
332
+ }
333
+ const slice = lastThread.slice(-opts.count);
334
+ const startIndex = lastThread.length - slice.length;
335
+ console.log(`\n📜 Last ${slice.length} messages for task: ${resolvedId}`);
336
+ console.log(` Agent: ${meta.agentName} | Status: ${meta.status ?? loadStatus(resolvedId)} | Total messages: ${lastThread.length}`);
337
+ console.log("─".repeat(80));
338
+ for (let i = 0; i < slice.length; i++) {
339
+ console.log(formatMessage(slice[i], startIndex + i));
340
+ }
341
+ console.log("─".repeat(80));
342
+ const cost = meta.totalCostUsd != null ? `$${meta.totalCostUsd.toFixed(4)}` : "?";
343
+ const elapsed = elapsedStr(meta.startTime);
344
+ const status = getStatus(resolvedId, meta);
345
+ console.log(`Cost: ${cost} | Elapsed: ${elapsed} | Last update: ${meta.lastUpdate ? new Date(meta.lastUpdate).toLocaleString() : "?"}`);
346
+ const isDone = status === "completed" || status === "failed" || status === "killed";
347
+ if (opts.follow) {
348
+ if (isDone) {
349
+ console.log(`\n✅ Agent already ${status}. Nothing to follow.\n`);
350
+ }
351
+ else {
352
+ await followTask(resolvedId, lastThread.length);
353
+ }
354
+ }
355
+ else if (!isDone) {
356
+ console.log(`\n⏳ Agent is ${status}. Use -f to follow live output.\n`);
357
+ }
358
+ else {
359
+ console.log("");
360
+ }
361
+ }
362
+ async function followTask(resolvedId, seenCount) {
363
+ console.log(`\n👁 Following agent output… (Ctrl+C to stop)\n`);
364
+ const initialMeta = loadMeta(resolvedId);
365
+ const initialStatus = getStatus(resolvedId, initialMeta);
366
+ if (initialStatus === "completed" || initialStatus === "failed" || initialStatus === "killed") {
367
+ console.log(`✅ Agent already ${initialStatus}. Nothing to follow.\n`);
368
+ return;
369
+ }
370
+ let seen = seenCount;
371
+ const interval = setInterval(() => {
372
+ const meta = loadMeta(resolvedId);
373
+ if (!meta)
374
+ return;
375
+ const threads = meta.threads ?? [];
376
+ if (threads.length === 0)
377
+ return;
378
+ const thread = threads[threads.length - 1];
379
+ if (thread.length > seen) {
380
+ for (let i = seen; i < thread.length; i++) {
381
+ console.log(formatMessage(thread[i], i));
382
+ }
383
+ seen = thread.length;
384
+ }
385
+ const status = getStatus(resolvedId, meta);
386
+ if (status === "completed" || status === "failed" || status === "killed") {
387
+ const cost = meta.totalCostUsd != null ? `$${meta.totalCostUsd.toFixed(4)}` : "?";
388
+ console.log(`\n─────────────────────────────────────────────────────────────────────────────────`);
389
+ console.log(`✅ Agent ${status}. Cost: ${cost} | Elapsed: ${elapsedStr(meta.startTime, meta.lastUpdate)}`);
390
+ clearInterval(interval);
391
+ process.exit(0);
392
+ }
393
+ }, 1000);
394
+ await new Promise(() => { });
395
+ }
396
+ async function cmdAttach(taskIdOrIndex, opts) {
397
+ const value = opts.index ?? taskIdOrIndex;
398
+ if (!value) {
399
+ console.error("Provide a task ID or use -i <number> to select by index.");
400
+ process.exit(1);
401
+ }
402
+ const resolvedId = resolveTaskId(value);
403
+ if (!resolvedId) {
404
+ console.error(`Task not found: ${value}`);
405
+ const rows = buildRows(true);
406
+ if (rows.length > 0) {
407
+ console.error("\nAvailable tasks:");
408
+ rows.forEach((r, i) => console.error(` ${i + 1}. ${r.displayId}`));
409
+ }
410
+ process.exit(1);
411
+ return;
412
+ }
413
+ const { setupServices } = await Promise.resolve().then(() => __importStar(require("./services")));
414
+ await setupServices();
415
+ await (0, chat_1.startChat)(`/attach ${resolvedId}`);
416
+ }
417
+ function addAgentsCommand(program) {
418
+ const agents = program
419
+ .command("agents")
420
+ .description("Inspect running and recent agent tasks");
421
+ agents
422
+ .command("list")
423
+ .description("List known agent task directories with their status and cost. " +
424
+ "Shows only active/recent tasks by default; use --all to include completed.")
425
+ .option("--all", "Include completed and killed tasks", false)
426
+ .option("--json", "Output as JSON", false)
427
+ .action(async (opts) => {
428
+ await cmdList(opts);
429
+ });
430
+ agents
431
+ .command("status [taskId]")
432
+ .description("Show a summary for a specific agent task: status, last tool, cost, elapsed. " +
433
+ "Accepts a full task ID, partial substring, or -i <number> for row index from 'agents list'.")
434
+ .option("-i, --index <number>", "Select task by row number from 'agents list'")
435
+ .action(async (taskId, opts) => {
436
+ await cmdStatus(taskId, opts);
437
+ });
438
+ agents
439
+ .command("tail [taskId]")
440
+ .description("Print the last N messages from an agent's persisted thread. " +
441
+ "Accepts a full task ID, partial substring, or -i <number> for row index from 'agents list'. " +
442
+ "Use -f to follow live output.")
443
+ .option("-i, --index <number>", "Select task by row number from 'agents list'")
444
+ .option("-n, --count <number>", "Number of messages to show", (v) => parseInt(v, 10), 20)
445
+ .option("--raw", "Output raw JSON of messages", false)
446
+ .option("-f, --follow", "Follow live output (poll for new messages)", false)
447
+ .action(async (taskId, opts) => {
448
+ await cmdTail(taskId, opts);
449
+ });
450
+ agents
451
+ .command("attach [taskId]")
452
+ .description("Attach to a running agent and follow its live output. " +
453
+ "Shows recent history then streams new messages as they arrive. " +
454
+ "Accepts a full task ID, partial substring, or -i <number> for row index from 'agents list'.")
455
+ .option("-i, --index <number>", "Select task by row number from 'agents list'")
456
+ .action(async (taskId, opts) => {
457
+ await cmdAttach(taskId, opts);
458
+ });
459
+ }
460
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/commands/agents.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqfA,4CAsDC;AAxhBD,uCAAyB;AACzB,2CAA6B;AAC7B,kCAAoC;AAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAChE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAMhE,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,EAAE;SACN,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc;IAC9B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAGD,SAAS,SAAS,CAAC,MAAc,EAAE,IAAgB;IACjD,IAAI,IAAI,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,QAA4B,EAAE,MAAe;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7D,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvB,IAAI,EAAE,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IACpD,IAAI,EAAE,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;IAC9F,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACpF,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,MAAM,GAAG,EAAE;IAC1C,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzE,CAAC;AAGD,SAAS,oBAAoB,CAAC,MAAa;IACzC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC1D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO;qBACrB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;qBACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACvB,IAAI,CAAC,IAAI,CAAC;qBACV,IAAI,EAAE,CAAC;gBACV,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,SAAS,YAAY,CAAC,MAAa;IACjC,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvD,OAAO,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAGD,SAAS,aAAa,CAAC,GAAQ,EAAE,KAAa;IAC5C,MAAM,IAAI,GAAI,GAAG,CAAC,IAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;YAAE,OAAO,IAAI,GAAG,CAAC;IAC/C,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,GAAG,GAAG,CAAC,OAAO;aAClB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACrC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAE,CAAC,CAAC,IAAe,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACjD,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3F,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC;YACvC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC;gBAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnD,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,UAAU,IAAI,IAAI,IAAI,GAAG,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvH,OAAO,GAAG,YAAY,MAAM,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAChH,CAAC;IAED,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC;AAChE,CAAC;AAgBD,SAAS,SAAS,CAAC,UAAmB;IACpC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAU,EAAE,CAAC;IAEvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;YACnE,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;YAC1C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxD,IAAI,GAAG,GAAG,SAAS;oBAAE,SAAS;YAChC,CAAC;iBAAM,CAAC;gBACN,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,CAAC,YAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzG,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAEvF,IAAI,CAAC,IAAI,CAAC;YACR,MAAM;YACN,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;YAC1B,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,GAAG;YACjC,MAAM,EAAE,MAAM,IAAI,SAAS;YAC3B,IAAI;YACJ,OAAO;YACP,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AASD,SAAS,aAAa,CAAC,KAAa,EAAE,UAAU,GAAG,KAAK;IACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE9B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;AACtD,CAAC;AAOD,KAAK,UAAU,OAAO,CAAC,IAAqC;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,UAAU,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;YACjG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU;SACrD,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACf,OAAO;IACT,CAAC;IAGD,MAAM,OAAO,GAAG,CAAC,CAAC;IAClB,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,CAAC,CAAC;IACnB,MAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,MAAM,MAAM,GACV,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;QACnB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7B,aAAa,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7B,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;YAC/B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YAC/B,GAAG,CAAC,UAAU;YACd,IAAI,CACP,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC;AACtH,CAAC;AAID,KAAK,UAAU,SAAS,CAAC,aAAiC,EAAE,IAAwB;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAW,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAW,EAAE,IAAI,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,SAAS,IAAI,GAAG,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAI,IAAI,CAAC,YAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChH,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzG,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAY,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;QACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAEjD,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,iBAAiB,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,aAAiC,EAAE,IAAsE;IAC9H,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAY,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,uBAAuB,UAAU,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,wBAAwB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACzI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,CAAC,YAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9F,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,iBAAiB,OAAO,qBAAqB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAE5I,MAAM,MAAM,GAAG,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC;IAEpF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,wBAAwB,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;SAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEnB,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,mCAAmC,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAMD,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,SAAiB;IAC7D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAGhE,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzD,IAAI,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,wBAAwB,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,IAAI,IAAI,GAAG,SAAS,CAAC;IAErB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,OAAO,GAAY,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAK,IAAI,CAAC,YAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC;YACnG,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,WAAW,IAAI,iBAAiB,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC5G,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;IAGT,MAAM,IAAI,OAAO,CAAO,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,aAAiC,EAAE,IAAwB;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAKD,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,YAAY,GAAC,CAAC;IACrD,MAAM,aAAa,EAAE,CAAC;IAGtB,MAAM,IAAA,gBAAS,EAAC,WAAW,UAAU,EAAE,CAAC,CAAC;AAC3C,CAAC;AAQD,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wCAAwC,CAAC,CAAC;IAEzD,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CACV,gEAAgE;QAC9D,4EAA4E,CAC/E;SACA,MAAM,CAAC,OAAO,EAAE,oCAAoC,EAAE,KAAK,CAAC;SAC5D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CACV,8EAA8E;QAC5E,6FAA6F,CAChG;SACA,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,EAAE;QACrE,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CACV,8DAA8D;QAC5D,8FAA8F;QAC9F,+BAA+B,CAClC;SACA,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC9E,MAAM,CAAC,sBAAsB,EAAE,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;SACxF,MAAM,CAAC,OAAO,EAAE,6BAA6B,EAAE,KAAK,CAAC;SACrD,MAAM,CAAC,cAAc,EAAE,4CAA4C,EAAE,KAAK,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAsE,EAAE,EAAE;QACnH,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CACV,wDAAwD;QACtD,iEAAiE;QACjE,6FAA6F,CAChG;SACA,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAwB,EAAE,EAAE;QACrE,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function addHashCommand(program: Command): void;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.addHashCommand = addHashCommand;
37
+ const crypto = __importStar(require("crypto"));
38
+ const fs = __importStar(require("fs"));
39
+ const child_process_1 = require("child_process");
40
+ const glob_1 = require("glob");
41
+ const hashes_1 = require("../hashes");
42
+ function hashFiles(files) {
43
+ const hash = crypto.createHash("md5");
44
+ const sorted = [...files].sort();
45
+ for (const f of sorted) {
46
+ if (!fs.existsSync(f))
47
+ continue;
48
+ const content = fs.readFileSync(f);
49
+ hash.update(f);
50
+ hash.update(content);
51
+ }
52
+ return hash.digest("hex");
53
+ }
54
+ function addHashCommand(program) {
55
+ program
56
+ .command("hash")
57
+ .description("Check whether a named set of input files has changed since last saved. " +
58
+ "Exits 0 (unchanged) or 1 (changed / first run). " +
59
+ "Use with shell short-circuit: (knowhow hash ... || run-build-step)")
60
+ .requiredOption("--name <name>", "Unique name for this hash slot (e.g. 'build', 'generate-api'). Becomes the top-level key in .hashes.json.")
61
+ .requiredOption("--input <glob>", "Glob pattern(s) of input files to hash. Separate multiple globs with commas.")
62
+ .option("--output <paths>", "Optional output file(s) — if any are missing the check always returns changed (comma-separated).")
63
+ .option("--save", "Save the current hash after a successful build step.")
64
+ .option("--run <command>", "Self-contained mode: if inputs are unchanged, skip and exit 0. " +
65
+ "If changed (or first run), run this shell command and — only if it " +
66
+ "succeeds — save the new hash. Replaces the '(hash) || (build && hash --save)' pattern.")
67
+ .option("--verbose", "Print what files were found and the computed hash")
68
+ .action(async (opts) => {
69
+ const hashes = await (0, hashes_1.getHashes)();
70
+ const inputGlobs = opts.input.split(",").map((g) => g.trim());
71
+ const outputPaths = opts.output
72
+ ? opts.output.split(",").map((p) => p.trim())
73
+ : [];
74
+ const inputFiles = [];
75
+ for (const pattern of inputGlobs) {
76
+ const matches = (0, glob_1.globSync)(pattern, { nodir: true });
77
+ inputFiles.push(...matches);
78
+ }
79
+ if (opts.verbose) {
80
+ console.error(`[knowhow hash] name=${opts.name}`);
81
+ console.error(`[knowhow hash] input files (${inputFiles.length}): ${inputFiles.slice(0, 10).join(", ")}${inputFiles.length > 10 ? "…" : ""}`);
82
+ if (outputPaths.length) {
83
+ console.error(`[knowhow hash] output files: ${outputPaths.join(", ")}`);
84
+ }
85
+ }
86
+ const currentHash = hashFiles(inputFiles);
87
+ if (opts.save) {
88
+ if (!hashes[opts.name])
89
+ hashes[opts.name] = {};
90
+ hashes[opts.name][opts.input] = currentHash;
91
+ await (0, hashes_1.saveHashes)(hashes);
92
+ if (opts.verbose) {
93
+ console.error(`[knowhow hash] saved hash ${currentHash} for "${opts.name}"`);
94
+ }
95
+ process.exit(0);
96
+ }
97
+ let changed = false;
98
+ for (const outPath of outputPaths) {
99
+ if (!fs.existsSync(outPath)) {
100
+ if (opts.verbose) {
101
+ console.error(`[knowhow hash] output file missing: ${outPath} → changed`);
102
+ }
103
+ changed = true;
104
+ }
105
+ }
106
+ const storedHash = hashes[opts.name]?.[opts.input];
107
+ if (opts.verbose) {
108
+ console.error(`[knowhow hash] stored=${storedHash ?? "(none)"} current=${currentHash}`);
109
+ }
110
+ if (!(storedHash && storedHash === currentHash)) {
111
+ changed = true;
112
+ }
113
+ if (opts.run) {
114
+ if (!changed) {
115
+ if (opts.verbose) {
116
+ console.error(`[knowhow hash] ✓ unchanged — skipping "${opts.run}"`);
117
+ }
118
+ process.exit(0);
119
+ }
120
+ if (opts.verbose) {
121
+ console.error(`[knowhow hash] ✗ changed — running "${opts.run}"`);
122
+ }
123
+ try {
124
+ (0, child_process_1.execSync)(opts.run, { stdio: "inherit", shell: "/bin/sh" });
125
+ }
126
+ catch (err) {
127
+ process.exit(typeof err?.status === "number" ? err.status : 1);
128
+ }
129
+ if (!hashes[opts.name])
130
+ hashes[opts.name] = {};
131
+ hashes[opts.name][opts.input] = currentHash;
132
+ await (0, hashes_1.saveHashes)(hashes);
133
+ if (opts.verbose) {
134
+ console.error(`[knowhow hash] saved hash ${currentHash} for "${opts.name}"`);
135
+ }
136
+ process.exit(0);
137
+ }
138
+ if (!changed) {
139
+ if (opts.verbose) {
140
+ console.error(`[knowhow hash] ✓ unchanged — skipping`);
141
+ }
142
+ process.exit(0);
143
+ }
144
+ if (opts.verbose) {
145
+ console.error(`[knowhow hash] ✗ changed — rebuild needed`);
146
+ }
147
+ process.exit(1);
148
+ });
149
+ }
150
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/commands/hash.ts"],"names":[],"mappings":"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"}