agent-threader 2.0.5

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 (172) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +126 -0
  3. package/compiled/claude/agent-threader/SKILL.md +361 -0
  4. package/compiled/codex/agent-threader/SKILL.md +361 -0
  5. package/compiled/cursor/rules/agent-threader.mdc +367 -0
  6. package/compiled/cursor/skills/agent-threader/SKILL.md +361 -0
  7. package/compiled/opencode/agent-threader.md +361 -0
  8. package/compiled/windsurf/rules/agent-threader.md +361 -0
  9. package/compiled/windsurf/skills/agent-threader/SKILL.md +361 -0
  10. package/dist/cli/commands/doctor.d.ts +6 -0
  11. package/dist/cli/commands/doctor.d.ts.map +1 -0
  12. package/dist/cli/commands/doctor.js +7 -0
  13. package/dist/cli/commands/doctor.js.map +1 -0
  14. package/dist/cli/commands/explain-error.d.ts +12 -0
  15. package/dist/cli/commands/explain-error.d.ts.map +1 -0
  16. package/dist/cli/commands/explain-error.js +23 -0
  17. package/dist/cli/commands/explain-error.js.map +1 -0
  18. package/dist/cli/commands/init-state.d.ts +6 -0
  19. package/dist/cli/commands/init-state.d.ts.map +1 -0
  20. package/dist/cli/commands/init-state.js +10 -0
  21. package/dist/cli/commands/init-state.js.map +1 -0
  22. package/dist/cli/commands/logs.d.ts +6 -0
  23. package/dist/cli/commands/logs.d.ts.map +1 -0
  24. package/dist/cli/commands/logs.js +9 -0
  25. package/dist/cli/commands/logs.js.map +1 -0
  26. package/dist/cli/commands/parse-heal.d.ts +6 -0
  27. package/dist/cli/commands/parse-heal.d.ts.map +1 -0
  28. package/dist/cli/commands/parse-heal.js +5 -0
  29. package/dist/cli/commands/parse-heal.js.map +1 -0
  30. package/dist/cli/commands/parse-result.d.ts +6 -0
  31. package/dist/cli/commands/parse-result.d.ts.map +1 -0
  32. package/dist/cli/commands/parse-result.js +5 -0
  33. package/dist/cli/commands/parse-result.js.map +1 -0
  34. package/dist/cli/commands/status.d.ts +6 -0
  35. package/dist/cli/commands/status.d.ts.map +1 -0
  36. package/dist/cli/commands/status.js +5 -0
  37. package/dist/cli/commands/status.js.map +1 -0
  38. package/dist/cli/commands/validate-manifest.d.ts +6 -0
  39. package/dist/cli/commands/validate-manifest.d.ts.map +1 -0
  40. package/dist/cli/commands/validate-manifest.js +5 -0
  41. package/dist/cli/commands/validate-manifest.js.map +1 -0
  42. package/dist/cli/index.d.ts +6 -0
  43. package/dist/cli/index.d.ts.map +1 -0
  44. package/dist/cli/index.js +360 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/cli/output-formatter.d.ts +6 -0
  47. package/dist/cli/output-formatter.d.ts.map +1 -0
  48. package/dist/cli/output-formatter.js +19 -0
  49. package/dist/cli/output-formatter.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +5 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lib/adapters/types.d.ts +40 -0
  55. package/dist/lib/adapters/types.d.ts.map +1 -0
  56. package/dist/lib/adapters/types.js +3 -0
  57. package/dist/lib/adapters/types.js.map +1 -0
  58. package/dist/lib/contracts/schema-validator.d.ts +15 -0
  59. package/dist/lib/contracts/schema-validator.d.ts.map +1 -0
  60. package/dist/lib/contracts/schema-validator.js +63 -0
  61. package/dist/lib/contracts/schema-validator.js.map +1 -0
  62. package/dist/lib/contracts/types.d.ts +91 -0
  63. package/dist/lib/contracts/types.d.ts.map +1 -0
  64. package/dist/lib/contracts/types.js +15 -0
  65. package/dist/lib/contracts/types.js.map +1 -0
  66. package/dist/lib/contracts/validate-manifest.d.ts +16 -0
  67. package/dist/lib/contracts/validate-manifest.d.ts.map +1 -0
  68. package/dist/lib/contracts/validate-manifest.js +123 -0
  69. package/dist/lib/contracts/validate-manifest.js.map +1 -0
  70. package/dist/lib/diagnostics/doctor.d.ts +17 -0
  71. package/dist/lib/diagnostics/doctor.d.ts.map +1 -0
  72. package/dist/lib/diagnostics/doctor.js +131 -0
  73. package/dist/lib/diagnostics/doctor.js.map +1 -0
  74. package/dist/lib/errors/explain-error.d.ts +10 -0
  75. package/dist/lib/errors/explain-error.d.ts.map +1 -0
  76. package/dist/lib/errors/explain-error.js +73 -0
  77. package/dist/lib/errors/explain-error.js.map +1 -0
  78. package/dist/lib/errors/types.d.ts +16 -0
  79. package/dist/lib/errors/types.d.ts.map +1 -0
  80. package/dist/lib/errors/types.js +50 -0
  81. package/dist/lib/errors/types.js.map +1 -0
  82. package/dist/lib/index.d.ts +29 -0
  83. package/dist/lib/index.d.ts.map +1 -0
  84. package/dist/lib/index.js +25 -0
  85. package/dist/lib/index.js.map +1 -0
  86. package/dist/lib/orchestrator/batch-strategy.d.ts +9 -0
  87. package/dist/lib/orchestrator/batch-strategy.d.ts.map +1 -0
  88. package/dist/lib/orchestrator/batch-strategy.js +34 -0
  89. package/dist/lib/orchestrator/batch-strategy.js.map +1 -0
  90. package/dist/lib/orchestrator/healing-policy.d.ts +47 -0
  91. package/dist/lib/orchestrator/healing-policy.d.ts.map +1 -0
  92. package/dist/lib/orchestrator/healing-policy.js +104 -0
  93. package/dist/lib/orchestrator/healing-policy.js.map +1 -0
  94. package/dist/lib/orchestrator/index.d.ts +11 -0
  95. package/dist/lib/orchestrator/index.d.ts.map +1 -0
  96. package/dist/lib/orchestrator/index.js +11 -0
  97. package/dist/lib/orchestrator/index.js.map +1 -0
  98. package/dist/lib/orchestrator/patch-validation.d.ts +9 -0
  99. package/dist/lib/orchestrator/patch-validation.d.ts.map +1 -0
  100. package/dist/lib/orchestrator/patch-validation.js +58 -0
  101. package/dist/lib/orchestrator/patch-validation.js.map +1 -0
  102. package/dist/lib/orchestrator/scheduling.d.ts +12 -0
  103. package/dist/lib/orchestrator/scheduling.d.ts.map +1 -0
  104. package/dist/lib/orchestrator/scheduling.js +74 -0
  105. package/dist/lib/orchestrator/scheduling.js.map +1 -0
  106. package/dist/lib/orchestrator/write-safety.d.ts +14 -0
  107. package/dist/lib/orchestrator/write-safety.d.ts.map +1 -0
  108. package/dist/lib/orchestrator/write-safety.js +44 -0
  109. package/dist/lib/orchestrator/write-safety.js.map +1 -0
  110. package/dist/lib/parser/parse-heal.d.ts +12 -0
  111. package/dist/lib/parser/parse-heal.d.ts.map +1 -0
  112. package/dist/lib/parser/parse-heal.js +9 -0
  113. package/dist/lib/parser/parse-heal.js.map +1 -0
  114. package/dist/lib/parser/parse-result.d.ts +12 -0
  115. package/dist/lib/parser/parse-result.d.ts.map +1 -0
  116. package/dist/lib/parser/parse-result.js +9 -0
  117. package/dist/lib/parser/parse-result.js.map +1 -0
  118. package/dist/lib/parser/parser.d.ts +8 -0
  119. package/dist/lib/parser/parser.d.ts.map +1 -0
  120. package/dist/lib/parser/parser.js +167 -0
  121. package/dist/lib/parser/parser.js.map +1 -0
  122. package/dist/lib/state/init-state.d.ts +15 -0
  123. package/dist/lib/state/init-state.d.ts.map +1 -0
  124. package/dist/lib/state/init-state.js +50 -0
  125. package/dist/lib/state/init-state.js.map +1 -0
  126. package/dist/lib/state/logs.d.ts +19 -0
  127. package/dist/lib/state/logs.d.ts.map +1 -0
  128. package/dist/lib/state/logs.js +25 -0
  129. package/dist/lib/state/logs.js.map +1 -0
  130. package/dist/lib/state/state.d.ts +7 -0
  131. package/dist/lib/state/state.d.ts.map +1 -0
  132. package/dist/lib/state/state.js +72 -0
  133. package/dist/lib/state/state.js.map +1 -0
  134. package/dist/lib/state/status.d.ts +22 -0
  135. package/dist/lib/state/status.d.ts.map +1 -0
  136. package/dist/lib/state/status.js +34 -0
  137. package/dist/lib/state/status.js.map +1 -0
  138. package/dist/lib/state/types.d.ts +55 -0
  139. package/dist/lib/state/types.d.ts.map +1 -0
  140. package/dist/lib/state/types.js +14 -0
  141. package/dist/lib/state/types.js.map +1 -0
  142. package/install-local.sh +239 -0
  143. package/install.sh +36 -0
  144. package/package.json +55 -0
  145. package/site/CNAME +1 -0
  146. package/site/index.html +141 -0
  147. package/site/install.sh +36 -0
  148. package/site/style.css +319 -0
  149. package/skill/SKILL.md +127 -0
  150. package/skill/SPEC.md +1189 -0
  151. package/skill/build/compile.mjs +237 -0
  152. package/skill/build/manifest.json +21 -0
  153. package/skill/fragments/common/model-selection.md +11 -0
  154. package/skill/fragments/common/portability-rules.md +16 -0
  155. package/skill/fragments/common/workflow.md +12 -0
  156. package/skill/fragments/domain/adapter-model.md +42 -0
  157. package/skill/fragments/domain/architecture-overview.md +36 -0
  158. package/skill/fragments/domain/contracts.md +31 -0
  159. package/skill/fragments/domain/pbh-healing.md +47 -0
  160. package/skill/fragments/domain/state-resume.md +34 -0
  161. package/skill/fragments/domain/verification-safety.md +33 -0
  162. package/skill/fragments/meta/schemas-reference.md +13 -0
  163. package/skill/fragments/meta/templates-reference.md +11 -0
  164. package/skill/schemas/heal_decision.v2.json +100 -0
  165. package/skill/schemas/manifest.v2.json +91 -0
  166. package/skill/schemas/state.v2.json +183 -0
  167. package/skill/schemas/task_result.v2.json +104 -0
  168. package/skill/schemas/verify_profile.v2.json +61 -0
  169. package/skill/skills/agent-threader/agent-threader.md +85 -0
  170. package/skill/templates/orchestrator.ts +38 -0
  171. package/skill/templates/parser.ts +384 -0
  172. package/skill/templates/types.ts +282 -0
@@ -0,0 +1,360 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { AppError } from '../lib/errors/types.js';
5
+ import { validateManifestCommand } from './commands/validate-manifest.js';
6
+ import { initStateCommand } from './commands/init-state.js';
7
+ import { parseResultCommand } from './commands/parse-result.js';
8
+ import { parseHealCommand } from './commands/parse-heal.js';
9
+ import { statusCommand } from './commands/status.js';
10
+ import { logsCommand } from './commands/logs.js';
11
+ import { doctorCommand } from './commands/doctor.js';
12
+ import { explainErrorCommand } from './commands/explain-error.js';
13
+ const program = new Command();
14
+ program
15
+ .name('agent-threader')
16
+ .description('AgentThreader -- manifest-driven agentic CLI orchestration')
17
+ .version('2.0.0');
18
+ // ── validate-manifest ────────────────────────────────────────────────────────
19
+ program
20
+ .command('validate-manifest')
21
+ .alias('validate')
22
+ .description('Validate a manifest.v2 JSON file')
23
+ .argument('<path>', 'Path to manifest JSON file')
24
+ .option('--json', 'Output as JSON', false)
25
+ .action((manifestPath, options) => {
26
+ try {
27
+ const result = validateManifestCommand({ manifestPath, json: options.json });
28
+ if (options.json) {
29
+ console.log(JSON.stringify(result, null, 2));
30
+ }
31
+ else {
32
+ if (result.valid) {
33
+ console.log(chalk.green(`Valid manifest: ${result.taskCount} tasks`));
34
+ console.log(chalk.dim(`Dependency order: ${result.dependencyOrder.join(' -> ')}`));
35
+ }
36
+ else {
37
+ console.log(chalk.red('Invalid manifest'));
38
+ }
39
+ for (const issue of result.issues) {
40
+ const color = issue.severity === 'error' ? chalk.red : chalk.yellow;
41
+ console.log(color(` ${issue.severity.toUpperCase()}: ${issue.message}`));
42
+ }
43
+ }
44
+ if (!result.valid)
45
+ process.exit(1);
46
+ }
47
+ catch (error) {
48
+ handleError(error);
49
+ }
50
+ });
51
+ // ── init-state ───────────────────────────────────────────────────────────────
52
+ program
53
+ .command('init-state')
54
+ .alias('init')
55
+ .description('Initialize a state.v2 file from a manifest')
56
+ .argument('<manifest-path>', 'Path to manifest JSON file')
57
+ .option('--output <path>', 'Output state file path', '.agentic/state.json')
58
+ .option('--heal <schedule>', 'Heal schedule: auto, off, task, batch, epoch')
59
+ .option('--batch-strategy <strategy>', 'Batch strategy: fibonacci, fixed')
60
+ .option('--json', 'Output as JSON', false)
61
+ .action(async (manifestPath, options) => {
62
+ try {
63
+ const result = await initStateCommand({
64
+ manifestPath,
65
+ outputPath: options.output,
66
+ heal: options.heal,
67
+ batchStrategy: options.batchStrategy,
68
+ json: options.json,
69
+ });
70
+ if (options.json) {
71
+ console.log(JSON.stringify(result, null, 2));
72
+ }
73
+ else {
74
+ console.log(chalk.green(`State initialized: ${result.statePath}`));
75
+ console.log(chalk.dim(` Run ID: ${result.runId}`));
76
+ console.log(chalk.dim(` Tasks: ${result.taskCount}`));
77
+ console.log(chalk.dim(` Heal: ${result.policy.heal_schedule}`));
78
+ console.log(chalk.dim(` Batch: ${result.policy.batch_strategy}`));
79
+ }
80
+ }
81
+ catch (error) {
82
+ handleError(error);
83
+ }
84
+ });
85
+ // ── parse-result ─────────────────────────────────────────────────────────────
86
+ program
87
+ .command('parse-result')
88
+ .alias('parse')
89
+ .description('Extract and validate task_result.v2 from a worker log')
90
+ .argument('<log-path>', 'Path to worker log file')
91
+ .option('--json', 'Output as JSON', false)
92
+ .action((logPath, options) => {
93
+ try {
94
+ const result = parseResultCommand({ logPath, json: options.json });
95
+ if (options.json) {
96
+ console.log(JSON.stringify(result, null, 2));
97
+ }
98
+ else if (result.ok && result.taskResult) {
99
+ const tr = result.taskResult;
100
+ console.log(chalk.green(`Parsed task result: ${tr.task_id}`));
101
+ console.log(chalk.dim(` Status: ${tr.status}`));
102
+ console.log(chalk.dim(` Summary: ${tr.summary}`));
103
+ console.log(chalk.dim(` Changed files: ${tr.changed_files?.length ?? 0}`));
104
+ console.log(chalk.dim(` Writes: ${tr.writes?.length ?? 0}`));
105
+ }
106
+ else if (result.error) {
107
+ console.log(chalk.red(`Parse failed [${result.error.code}]: ${result.error.message}`));
108
+ process.exit(1);
109
+ }
110
+ }
111
+ catch (error) {
112
+ handleError(error);
113
+ }
114
+ });
115
+ // ── parse-heal ───────────────────────────────────────────────────────────────
116
+ program
117
+ .command('parse-heal')
118
+ .alias('heal')
119
+ .description('Extract and validate heal_decision.v2 from a healer log')
120
+ .argument('<log-path>', 'Path to healer log file')
121
+ .option('--json', 'Output as JSON', false)
122
+ .action((logPath, options) => {
123
+ try {
124
+ const result = parseHealCommand({ logPath, json: options.json });
125
+ if (options.json) {
126
+ console.log(JSON.stringify(result, null, 2));
127
+ }
128
+ else if (result.ok && result.healDecision) {
129
+ const hd = result.healDecision;
130
+ console.log(chalk.green(`Parsed heal decision: ${hd.decision}`));
131
+ console.log(chalk.dim(` Scope: ${hd.scope}`));
132
+ console.log(chalk.dim(` Failure class: ${hd.failure_class}`));
133
+ console.log(chalk.dim(` Root cause: ${hd.root_cause}`));
134
+ console.log(chalk.dim(` Patches: ${hd.patches.length}`));
135
+ if (hd.learned_rule) {
136
+ console.log(chalk.dim(` Learned rule: ${hd.learned_rule}`));
137
+ }
138
+ }
139
+ else if (result.error) {
140
+ console.log(chalk.red(`Parse failed [${result.error.code}]: ${result.error.message}`));
141
+ process.exit(1);
142
+ }
143
+ }
144
+ catch (error) {
145
+ handleError(error);
146
+ }
147
+ });
148
+ // ── status ───────────────────────────────────────────────────────────────────
149
+ program
150
+ .command('status')
151
+ .alias('st')
152
+ .description('Display run status from a state.v2 file')
153
+ .argument('[state-path]', 'Path to state JSON file', '.agentic/state.json')
154
+ .option('--json', 'Output as JSON', false)
155
+ .action((statePath, options) => {
156
+ try {
157
+ const result = statusCommand({ statePath, json: options.json });
158
+ if (options.json) {
159
+ console.log(JSON.stringify(result, null, 2));
160
+ }
161
+ else {
162
+ const statusColor = result.runStatus === 'COMPLETED' ? chalk.green
163
+ : result.runStatus === 'ABORTED' ? chalk.red
164
+ : chalk.yellow;
165
+ console.log(`Run ${chalk.bold(result.runId)}: ${statusColor(result.runStatus)}`);
166
+ if (result.abortReason) {
167
+ console.log(chalk.red(` Abort reason: ${result.abortReason}`));
168
+ }
169
+ console.log();
170
+ console.log(chalk.bold('Tasks:'));
171
+ for (const [status, count] of Object.entries(result.taskSummary)) {
172
+ const c = status === 'DONE' ? chalk.green
173
+ : status === 'FAILED' || status === 'ESCALATED' ? chalk.red
174
+ : status === 'RUNNING' ? chalk.yellow
175
+ : chalk.dim;
176
+ console.log(` ${c(status.padEnd(10))} ${count}`);
177
+ }
178
+ console.log(chalk.dim(` Total: ${result.totalTasks}`));
179
+ console.log();
180
+ if (result.healingRounds > 0) {
181
+ console.log(chalk.bold(`Healing rounds: ${result.healingRounds}`));
182
+ if (result.lastHealDecision) {
183
+ console.log(chalk.dim(` Last decision: ${result.lastHealDecision}`));
184
+ }
185
+ console.log();
186
+ }
187
+ if (result.failedTasks.length > 0) {
188
+ console.log(chalk.bold('Failed/Escalated/Blocked tasks:'));
189
+ for (const ft of result.failedTasks) {
190
+ console.log(chalk.red(` ${ft.taskId}: ${ft.status}`));
191
+ if (ft.failureClass)
192
+ console.log(chalk.dim(` Class: ${ft.failureClass}`));
193
+ if (ft.failureSignature)
194
+ console.log(chalk.dim(` Signature: ${ft.failureSignature}`));
195
+ console.log(chalk.dim(` Attempts: ${ft.workerAttempts}`));
196
+ }
197
+ }
198
+ }
199
+ }
200
+ catch (error) {
201
+ handleError(error);
202
+ }
203
+ });
204
+ // ── logs ─────────────────────────────────────────────────────────────────────
205
+ program
206
+ .command('logs')
207
+ .alias('history')
208
+ .description('List log files from state history entries')
209
+ .argument('[state-path]', 'Path to state JSON file', '.agentic/state.json')
210
+ .option('--task <id>', 'Filter by task ID')
211
+ .option('--phase <phase>', 'Filter by phase: worker, verify, healer, rollback')
212
+ .option('--json', 'Output as JSON', false)
213
+ .action((statePath, options) => {
214
+ try {
215
+ const result = logsCommand({
216
+ statePath,
217
+ taskId: options.task,
218
+ phase: options.phase,
219
+ json: options.json,
220
+ });
221
+ if (options.json) {
222
+ console.log(JSON.stringify(result, null, 2));
223
+ }
224
+ else {
225
+ if (result.entries.length === 0) {
226
+ console.log(chalk.dim('No log entries found.'));
227
+ }
228
+ else {
229
+ console.log(chalk.bold(`${result.entries.length} log entries:`));
230
+ console.log();
231
+ for (const entry of result.entries) {
232
+ const phaseColor = entry.phase === 'worker' ? chalk.blue
233
+ : entry.phase === 'verify' ? chalk.cyan
234
+ : entry.phase === 'healer' ? chalk.magenta
235
+ : chalk.yellow;
236
+ const exitStr = entry.exitCode !== null ? ` exit=${entry.exitCode}` : '';
237
+ console.log(` ${chalk.dim(entry.timestamp)} ${entry.taskId} ${phaseColor(entry.phase)}#${entry.attempt}${chalk.dim(exitStr)}`);
238
+ console.log(chalk.dim(` ${entry.logPath}`));
239
+ if (entry.verifyLogPath) {
240
+ console.log(chalk.dim(` ${entry.verifyLogPath}`));
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+ catch (error) {
247
+ handleError(error);
248
+ }
249
+ });
250
+ // ── doctor ───────────────────────────────────────────────────────────────────
251
+ program
252
+ .command('doctor')
253
+ .alias('diag')
254
+ .description('Check environment and local setup health')
255
+ .option('--cwd <path>', 'Directory to inspect for local repo checks', process.cwd())
256
+ .option('--json', 'Output as JSON', false)
257
+ .action((options) => {
258
+ try {
259
+ const result = doctorCommand({
260
+ cwd: options.cwd,
261
+ json: options.json,
262
+ });
263
+ if (options.json) {
264
+ console.log(JSON.stringify(result, null, 2));
265
+ }
266
+ else {
267
+ console.log(chalk.bold('AgentThreader Doctor'));
268
+ console.log();
269
+ for (const check of result.checks) {
270
+ const icon = check.status === 'pass' ? chalk.green('PASS')
271
+ : check.status === 'warn' ? chalk.yellow('WARN')
272
+ : chalk.red('FAIL');
273
+ console.log(`${icon} ${chalk.bold(check.title)} - ${check.detail}`);
274
+ if (check.recommendation) {
275
+ console.log(chalk.dim(` fix: ${check.recommendation}`));
276
+ }
277
+ }
278
+ console.log();
279
+ if (result.ok) {
280
+ console.log(chalk.green('Doctor passed with no fatal issues.'));
281
+ }
282
+ else {
283
+ console.log(chalk.red('Doctor found fatal issues. Fix FAIL checks and retry.'));
284
+ process.exit(1);
285
+ }
286
+ }
287
+ }
288
+ catch (error) {
289
+ handleError(error);
290
+ }
291
+ });
292
+ // ── explain ──────────────────────────────────────────────────────────────────
293
+ program
294
+ .command('explain')
295
+ .alias('why')
296
+ .description('Explain an AgentThreader error code')
297
+ .argument('[code]', 'Error code to explain (e.g. CONFIG_ERROR, NO_SENTINEL)')
298
+ .option('--json', 'Output as JSON', false)
299
+ .action((code, options) => {
300
+ try {
301
+ const result = explainErrorCommand({
302
+ code,
303
+ json: options.json,
304
+ });
305
+ if (options.json) {
306
+ console.log(JSON.stringify(result, null, 2));
307
+ if (code && !result.found)
308
+ process.exit(1);
309
+ return;
310
+ }
311
+ if (!code) {
312
+ console.log(chalk.bold('Known error codes:'));
313
+ for (const knownCode of result.knownCodes) {
314
+ console.log(` - ${knownCode}`);
315
+ }
316
+ console.log();
317
+ console.log(chalk.dim('Usage: agent-threader explain <code>'));
318
+ return;
319
+ }
320
+ if (!result.found || !result.explanation) {
321
+ console.log(chalk.red(`Unknown error code: ${code}`));
322
+ console.log(chalk.dim('Run `agent-threader explain` to list supported codes.'));
323
+ process.exit(1);
324
+ }
325
+ const exp = result.explanation;
326
+ console.log(chalk.green(`${exp.code} (${exp.category})`));
327
+ console.log(chalk.dim(exp.meaning));
328
+ console.log();
329
+ console.log(chalk.bold('Likely causes:'));
330
+ for (const cause of exp.likelyCauses) {
331
+ console.log(` - ${cause}`);
332
+ }
333
+ console.log(chalk.bold('Suggested fixes:'));
334
+ for (const fix of exp.suggestedFixes) {
335
+ console.log(` - ${fix}`);
336
+ }
337
+ }
338
+ catch (error) {
339
+ handleError(error);
340
+ }
341
+ });
342
+ // ── Error handling ───────────────────────────────────────────────────────────
343
+ program.parse();
344
+ function handleError(error) {
345
+ if (error instanceof AppError) {
346
+ console.error(chalk.red(`Error [${error.code}]: ${error.message}`));
347
+ if (Object.keys(error.context).length > 0) {
348
+ console.error(chalk.dim(JSON.stringify(error.context, null, 2)));
349
+ }
350
+ }
351
+ else if (error instanceof Error) {
352
+ console.error(chalk.red(`Error: ${error.message}`));
353
+ }
354
+ else {
355
+ console.error(chalk.red(`Error: ${String(error)}`));
356
+ }
357
+ process.exit(1);
358
+ }
359
+ export { program, handleError };
360
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare class OutputFormatter {
2
+ static formatJson(data: unknown): string;
3
+ static formatTable(headers: string[], rows: string[][], columnWidths?: number[]): string;
4
+ static formatKeyValue(pairs: [string, string][]): string;
5
+ }
6
+ //# sourceMappingURL=output-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.d.ts","sourceRoot":"","sources":["../../src/cli/output-formatter.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM;IAIxC,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,MAAM;IAkBT,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM;CAIzD"}
@@ -0,0 +1,19 @@
1
+ export class OutputFormatter {
2
+ static formatJson(data) {
3
+ return JSON.stringify(data, null, 2);
4
+ }
5
+ static formatTable(headers, rows, columnWidths) {
6
+ const widths = columnWidths ??
7
+ headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? '').length)));
8
+ const pad = (s, w) => s.padEnd(w);
9
+ const line = widths.map((w) => '-'.repeat(w)).join('-+-');
10
+ const headerRow = headers.map((h, i) => pad(h, widths[i])).join(' | ');
11
+ const dataRows = rows.map((r) => r.map((c, i) => pad(c ?? '', widths[i])).join(' | '));
12
+ return [headerRow, line, ...dataRows].join('\n');
13
+ }
14
+ static formatKeyValue(pairs) {
15
+ const maxKey = Math.max(...pairs.map(([k]) => k.length));
16
+ return pairs.map(([k, v]) => `${k.padEnd(maxKey)} ${v}`).join('\n');
17
+ }
18
+ }
19
+ //# sourceMappingURL=output-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../src/cli/output-formatter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,UAAU,CAAC,IAAa;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,WAAW,CAChB,OAAiB,EACjB,IAAgB,EAChB,YAAuB;QAEvB,MAAM,MAAM,GACV,YAAY;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;QAEJ,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACrD,CAAC;QAEF,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,KAAyB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from './lib/index.js';
2
+ export { OutputFormatter } from './cli/output-formatter.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // Re-export library surface
2
+ export * from './lib/index.js';
3
+ // Output formatting (CLI utility, also available as library export)
4
+ export { OutputFormatter } from './cli/output-formatter.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,cAAc,gBAAgB,CAAC;AAE/B,oEAAoE;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ManifestTaskV2, TaskResultV2, ParserFailure } from "../contracts/types.js";
2
+ import type { RunPolicy } from "../state/types.js";
3
+ export interface PreparedInvocation {
4
+ cwd: string;
5
+ argv: string[];
6
+ env?: Record<string, string>;
7
+ stdin?: string | null;
8
+ timeoutSec: number;
9
+ }
10
+ export interface ExecutionArtifact {
11
+ logPath: string;
12
+ exitCode: number | null;
13
+ startedAt: string;
14
+ finishedAt: string;
15
+ }
16
+ export interface AdapterHealth {
17
+ ready: boolean;
18
+ details: string[];
19
+ }
20
+ export interface RunContext {
21
+ repoRoot: string;
22
+ logsDir: string;
23
+ sharedContextPaths: string[];
24
+ contractHints: Map<string, string[]>;
25
+ policy: RunPolicy;
26
+ }
27
+ export interface CliAdapter {
28
+ id: string;
29
+ capabilities: {
30
+ stdinPrompt: boolean;
31
+ argPrompt: boolean;
32
+ pty: boolean;
33
+ interactive: boolean;
34
+ };
35
+ prepare(task: ManifestTaskV2, ctx: RunContext): PreparedInvocation;
36
+ execute(invocation: PreparedInvocation, ctx: RunContext): Promise<ExecutionArtifact>;
37
+ extractResult(artifact: ExecutionArtifact, ctx: RunContext): Promise<TaskResultV2 | ParserFailure>;
38
+ healthcheck(ctx: RunContext): Promise<AdapterHealth>;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/adapters/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE;QACZ,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;QACnB,GAAG,EAAE,OAAO,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACnE,OAAO,CACL,UAAU,EAAE,kBAAkB,EAC9B,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,aAAa,CACX,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC;IACzC,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACtD"}
@@ -0,0 +1,3 @@
1
+ // ─── Adapter Interface ───────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/adapters/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
@@ -0,0 +1,15 @@
1
+ export interface SchemaValidationResult {
2
+ valid: boolean;
3
+ errors: SchemaError[];
4
+ }
5
+ export interface SchemaError {
6
+ path: string;
7
+ message: string;
8
+ keyword: string;
9
+ }
10
+ export declare function validateManifestSchema(data: unknown): SchemaValidationResult;
11
+ export declare function validateTaskResultSchema(data: unknown): SchemaValidationResult;
12
+ export declare function validateHealDecisionSchema(data: unknown): SchemaValidationResult;
13
+ export declare function validateStateSchema(data: unknown): SchemaValidationResult;
14
+ export declare function validateVerifyProfileSchema(data: unknown): SchemaValidationResult;
15
+ //# sourceMappingURL=schema-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts/schema-validator.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsCD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAI5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAI9E;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAIhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAIzE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAIjF"}
@@ -0,0 +1,63 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import Ajv from "ajv";
4
+ const ajv = new Ajv({ allErrors: true, strict: false });
5
+ const validatorCache = new Map();
6
+ function findSchemasDir() {
7
+ // Resolve relative to this module's location in either src or dist
8
+ const moduleDir = path.dirname(new URL(import.meta.url).pathname);
9
+ // From src/lib/contracts/ or dist/lib/contracts/ -> project root -> skill/schemas
10
+ const projectRoot = path.resolve(moduleDir, '..', '..', '..');
11
+ return path.join(projectRoot, 'skill', 'schemas');
12
+ }
13
+ function getValidator(schemaFile) {
14
+ const cached = validatorCache.get(schemaFile);
15
+ if (cached)
16
+ return cached;
17
+ const schemasDir = findSchemasDir();
18
+ const schemaPath = path.join(schemasDir, schemaFile);
19
+ const raw = readFileSync(schemaPath, "utf8");
20
+ const schema = JSON.parse(raw);
21
+ // Strip $schema and $id -- default Ajv does not support draft-2020-12
22
+ // meta-schema, and $id causes collision errors on repeated loads.
23
+ delete schema.$schema;
24
+ delete schema.$id;
25
+ const validate = ajv.compile(schema);
26
+ validatorCache.set(schemaFile, validate);
27
+ return validate;
28
+ }
29
+ function formatErrors(errors) {
30
+ if (!errors)
31
+ return [];
32
+ return errors.map((e) => ({
33
+ path: e.instancePath || "/",
34
+ message: e.message ?? "unknown error",
35
+ keyword: e.keyword,
36
+ }));
37
+ }
38
+ export function validateManifestSchema(data) {
39
+ const validate = getValidator("manifest.v2.json");
40
+ const valid = validate(data);
41
+ return { valid: !!valid, errors: formatErrors(validate.errors) };
42
+ }
43
+ export function validateTaskResultSchema(data) {
44
+ const validate = getValidator("task_result.v2.json");
45
+ const valid = validate(data);
46
+ return { valid: !!valid, errors: formatErrors(validate.errors) };
47
+ }
48
+ export function validateHealDecisionSchema(data) {
49
+ const validate = getValidator("heal_decision.v2.json");
50
+ const valid = validate(data);
51
+ return { valid: !!valid, errors: formatErrors(validate.errors) };
52
+ }
53
+ export function validateStateSchema(data) {
54
+ const validate = getValidator("state.v2.json");
55
+ const valid = validate(data);
56
+ return { valid: !!valid, errors: formatErrors(validate.errors) };
57
+ }
58
+ export function validateVerifyProfileSchema(data) {
59
+ const validate = getValidator("verify_profile.v2.json");
60
+ const valid = validate(data);
61
+ return { valid: !!valid, errors: formatErrors(validate.errors) };
62
+ }
63
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../../../src/lib/contracts/schema-validator.ts"],"names":[],"mappings":"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"}