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,91 @@
1
+ export interface ManifestV2 {
2
+ manifest_version: "2.0";
3
+ run_id: string;
4
+ tasks: ManifestTaskV2[];
5
+ }
6
+ export interface ManifestTaskV2 {
7
+ id: string;
8
+ prompt_ref: string;
9
+ depends_on: string[];
10
+ timeout_sec: number;
11
+ verify_profile: string;
12
+ context_refs?: string[];
13
+ priority?: number;
14
+ retry_policy?: RetryPolicy;
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ export interface RetryPolicy {
18
+ max_attempts?: number;
19
+ retry_on?: string[];
20
+ }
21
+ export interface VerifyProfileRegistry {
22
+ profiles: Record<string, VerifyProfile>;
23
+ }
24
+ export interface VerifyProfile {
25
+ steps: VerifyStep[];
26
+ rollback_on_failure: boolean;
27
+ }
28
+ export interface VerifyStep {
29
+ name: string;
30
+ cmd: string;
31
+ cwd: string;
32
+ timeout_sec: number;
33
+ }
34
+ export interface TaskResultV2 {
35
+ contract_version: "2.0";
36
+ task_id: string;
37
+ status: "DONE" | "BLOCKED" | "FAILED" | "CONTRACT_ERROR";
38
+ summary: string;
39
+ changed_files?: string[];
40
+ writes?: WriteEntry[];
41
+ evidence?: Evidence;
42
+ failure_class?: string;
43
+ }
44
+ export interface WriteEntry {
45
+ path: string;
46
+ op: "create" | "replace" | "append";
47
+ encoding: "utf8";
48
+ content?: string;
49
+ content_ref?: string;
50
+ sha256_before?: string;
51
+ }
52
+ export interface Evidence {
53
+ commands?: string[];
54
+ log_refs?: string[];
55
+ notes?: string[];
56
+ }
57
+ export interface HealDecisionV2 {
58
+ contract_version: "2.0";
59
+ scope: "task" | "batch" | "epoch";
60
+ decision: "RETRY" | "ESCALATE" | "NOT_FIXABLE";
61
+ failure_class: string;
62
+ root_cause: string;
63
+ patches: HealPatch[];
64
+ learned_rule?: string;
65
+ escalations?: Array<{
66
+ task_id: string;
67
+ reason: string;
68
+ }>;
69
+ retry_policy?: HealRetryPolicy;
70
+ }
71
+ export interface HealPatch {
72
+ target: "shared_context" | "task_prompt" | "runtime_patch" | "contract_hint";
73
+ operation: "replace" | "append" | "merge";
74
+ path?: string;
75
+ task_id?: string;
76
+ content?: string | Record<string, unknown>;
77
+ }
78
+ export interface HealRetryPolicy {
79
+ reset_tasks?: string[];
80
+ retry_window?: "same_window" | "shrink_window" | "next_epoch";
81
+ }
82
+ export type ParserErrorCode = "NO_SENTINEL" | "INVALID_JSON" | "SCHEMA_VIOLATION" | "MISSING_REQUIRED_FIELD" | "UNSUPPORTED_VERSION";
83
+ export interface ParserFailure {
84
+ ok: false;
85
+ code: ParserErrorCode;
86
+ message: string;
87
+ }
88
+ export type FailureClass = "prompt_gap" | "missing_paths" | "weak_contract" | "contract_error" | "output_format" | "build_error" | "test_error" | "smoke_error" | "timeout" | "transient_infra" | "blocked_external" | "real_bug" | "unknown";
89
+ export declare const HEALABLE_FAILURE_CLASSES: ReadonlySet<string>;
90
+ export declare const NON_HEALABLE_FAILURE_CLASSES: ReadonlySet<string>;
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ // ─── Manifest ────────────────────────────────────────────────────────────────
2
+ export const HEALABLE_FAILURE_CLASSES = new Set([
3
+ "prompt_gap",
4
+ "missing_paths",
5
+ "weak_contract",
6
+ "contract_error",
7
+ "output_format",
8
+ "timeout",
9
+ "transient_infra",
10
+ ]);
11
+ export const NON_HEALABLE_FAILURE_CLASSES = new Set([
12
+ "blocked_external",
13
+ "real_bug",
14
+ ]);
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/contracts/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAkIhF,MAAM,CAAC,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IACnE,YAAY;IACZ,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,SAAS;IACT,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAwB,IAAI,GAAG,CAAC;IACvE,kBAAkB;IAClB,UAAU;CACX,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface ValidateManifestOptions {
2
+ manifestPath: string;
3
+ }
4
+ export interface Issue {
5
+ severity: "error" | "warning";
6
+ message: string;
7
+ }
8
+ export interface ValidateManifestResult {
9
+ valid: boolean;
10
+ taskCount: number;
11
+ issues: Issue[];
12
+ dependencyOrder: string[];
13
+ warnings: string[];
14
+ }
15
+ export declare function validateManifest(options: ValidateManifestOptions): ValidateManifestResult;
16
+ //# sourceMappingURL=validate-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-manifest.d.ts","sourceRoot":"","sources":["../../../src/lib/contracts/validate-manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAkFzF"}
@@ -0,0 +1,123 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { ConfigError } from "../errors/types.js";
3
+ import { validateManifestSchema } from "./schema-validator.js";
4
+ export function validateManifest(options) {
5
+ const issues = [];
6
+ const warnings = [];
7
+ let raw;
8
+ try {
9
+ raw = readFileSync(options.manifestPath, "utf8");
10
+ }
11
+ catch (e) {
12
+ throw new ConfigError(options.manifestPath, `Cannot read manifest: ${e instanceof Error ? e.message : String(e)}`);
13
+ }
14
+ let data;
15
+ try {
16
+ data = JSON.parse(raw);
17
+ }
18
+ catch (e) {
19
+ throw new ConfigError(options.manifestPath, `Invalid JSON: ${e instanceof Error ? e.message : String(e)}`);
20
+ }
21
+ const schemaResult = validateManifestSchema(data);
22
+ if (!schemaResult.valid) {
23
+ for (const err of schemaResult.errors) {
24
+ issues.push({ severity: "error", message: `${err.path}: ${err.message}` });
25
+ }
26
+ return { valid: false, taskCount: 0, issues, dependencyOrder: [], warnings };
27
+ }
28
+ const manifest = data;
29
+ const taskIds = new Set();
30
+ const duplicates = new Set();
31
+ for (const task of manifest.tasks) {
32
+ if (!task.id || typeof task.id !== "string") {
33
+ issues.push({ severity: "error", message: "Task missing id" });
34
+ continue;
35
+ }
36
+ if (taskIds.has(task.id)) {
37
+ duplicates.add(task.id);
38
+ }
39
+ taskIds.add(task.id);
40
+ if (!task.prompt_ref) {
41
+ issues.push({ severity: "error", message: `Task ${task.id}: missing prompt_ref` });
42
+ }
43
+ if (!Array.isArray(task.depends_on)) {
44
+ issues.push({ severity: "error", message: `Task ${task.id}: missing depends_on array` });
45
+ }
46
+ if (typeof task.timeout_sec !== "number" || task.timeout_sec <= 0) {
47
+ issues.push({ severity: "error", message: `Task ${task.id}: timeout_sec must be > 0` });
48
+ }
49
+ if (!task.verify_profile) {
50
+ issues.push({ severity: "error", message: `Task ${task.id}: missing verify_profile` });
51
+ }
52
+ }
53
+ for (const dup of duplicates) {
54
+ issues.push({ severity: "error", message: `Duplicate task id: ${dup}` });
55
+ }
56
+ for (const task of manifest.tasks) {
57
+ if (!Array.isArray(task.depends_on))
58
+ continue;
59
+ for (const dep of task.depends_on) {
60
+ if (!taskIds.has(dep)) {
61
+ issues.push({ severity: "error", message: `Task ${task.id}: depends_on references unknown task "${dep}"` });
62
+ }
63
+ }
64
+ }
65
+ const depOrder = topologicalSort(manifest.tasks, issues);
66
+ const valid = issues.every(i => i.severity !== "error");
67
+ return {
68
+ valid,
69
+ taskCount: manifest.tasks.length,
70
+ issues,
71
+ dependencyOrder: depOrder,
72
+ warnings,
73
+ };
74
+ }
75
+ function topologicalSort(tasks, issues) {
76
+ const graph = new Map();
77
+ const inDegree = new Map();
78
+ for (const task of tasks) {
79
+ graph.set(task.id, []);
80
+ inDegree.set(task.id, 0);
81
+ }
82
+ for (const task of tasks) {
83
+ if (!Array.isArray(task.depends_on))
84
+ continue;
85
+ for (const dep of task.depends_on) {
86
+ if (!graph.has(dep))
87
+ continue;
88
+ graph.get(dep).push(task.id);
89
+ inDegree.set(task.id, (inDegree.get(task.id) ?? 0) + 1);
90
+ }
91
+ }
92
+ // Priority-aware: lower priority value = earlier in queue
93
+ const priorityMap = new Map();
94
+ for (const task of tasks) {
95
+ priorityMap.set(task.id, task.priority ?? Infinity);
96
+ }
97
+ const queue = [];
98
+ for (const [id, deg] of inDegree) {
99
+ if (deg === 0)
100
+ queue.push(id);
101
+ }
102
+ queue.sort((a, b) => (priorityMap.get(a) ?? Infinity) - (priorityMap.get(b) ?? Infinity));
103
+ const order = [];
104
+ while (queue.length > 0) {
105
+ const current = queue.shift();
106
+ order.push(current);
107
+ const ready = [];
108
+ for (const neighbor of graph.get(current) ?? []) {
109
+ const newDeg = (inDegree.get(neighbor) ?? 1) - 1;
110
+ inDegree.set(neighbor, newDeg);
111
+ if (newDeg === 0)
112
+ ready.push(neighbor);
113
+ }
114
+ ready.sort((a, b) => (priorityMap.get(a) ?? Infinity) - (priorityMap.get(b) ?? Infinity));
115
+ queue.push(...ready);
116
+ }
117
+ if (order.length < tasks.length) {
118
+ const inCycle = tasks.filter(t => !order.includes(t.id)).map(t => t.id);
119
+ issues.push({ severity: "error", message: `Circular dependency detected involving: ${inCycle.join(", ")}` });
120
+ }
121
+ return order;
122
+ }
123
+ //# sourceMappingURL=validate-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-manifest.js","sourceRoot":"","sources":["../../../src/lib/contracts/validate-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAmB/D,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,yBAAyB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrH,CAAC;IAED,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,QAAQ,GAAG,IAAkB,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,SAAS;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,yCAAyC,GAAG,GAAG,EAAE,CAAC,CAAC;YAC9G,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;QAChC,MAAM;QACN,eAAe,EAAE,QAAQ;QACzB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAA0B,EAAE,MAAe;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,SAAS;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC9B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAE1F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/B,IAAI,MAAM,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type DoctorStatus = 'pass' | 'warn' | 'fail';
2
+ export interface DoctorCheck {
3
+ id: string;
4
+ title: string;
5
+ status: DoctorStatus;
6
+ detail: string;
7
+ recommendation?: string;
8
+ }
9
+ export interface DoctorResult {
10
+ ok: boolean;
11
+ checks: DoctorCheck[];
12
+ }
13
+ export interface DoctorOptions {
14
+ cwd?: string;
15
+ }
16
+ export declare function runDoctor(options?: DoctorOptions): DoctorResult;
17
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/lib/diagnostics/doctor.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA4HD,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,YAAY,CAcnE"}
@@ -0,0 +1,131 @@
1
+ import { accessSync, constants, existsSync, readFileSync } from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { spawnSync } from 'node:child_process';
5
+ function parseMajor(version) {
6
+ const clean = version.startsWith('v') ? version.slice(1) : version;
7
+ const [majorRaw] = clean.split('.');
8
+ const major = Number.parseInt(majorRaw, 10);
9
+ return Number.isNaN(major) ? 0 : major;
10
+ }
11
+ function checkNodeVersion() {
12
+ const major = parseMajor(process.version);
13
+ if (major >= 18) {
14
+ return {
15
+ id: 'node_version',
16
+ title: 'Node.js version',
17
+ status: 'pass',
18
+ detail: `Detected ${process.version} (supported: >=18)`,
19
+ };
20
+ }
21
+ return {
22
+ id: 'node_version',
23
+ title: 'Node.js version',
24
+ status: 'fail',
25
+ detail: `Detected ${process.version} (supported: >=18)`,
26
+ recommendation: 'Upgrade Node.js to 18 or newer.',
27
+ };
28
+ }
29
+ function checkNpm() {
30
+ const result = spawnSync('npm', ['--version'], { encoding: 'utf8' });
31
+ if (result.status === 0) {
32
+ const version = (result.stdout ?? '').trim();
33
+ return {
34
+ id: 'npm_available',
35
+ title: 'npm availability',
36
+ status: 'pass',
37
+ detail: `npm ${version || 'available'}`,
38
+ };
39
+ }
40
+ return {
41
+ id: 'npm_available',
42
+ title: 'npm availability',
43
+ status: 'fail',
44
+ detail: 'npm was not found in PATH or failed to run.',
45
+ recommendation: 'Install npm and ensure it is available in your shell PATH.',
46
+ };
47
+ }
48
+ function checkHomeWritable() {
49
+ const home = os.homedir();
50
+ try {
51
+ accessSync(home, constants.W_OK);
52
+ return {
53
+ id: 'home_writable',
54
+ title: 'Home directory write access',
55
+ status: 'pass',
56
+ detail: `Writable: ${home}`,
57
+ };
58
+ }
59
+ catch {
60
+ return {
61
+ id: 'home_writable',
62
+ title: 'Home directory write access',
63
+ status: 'fail',
64
+ detail: `Not writable: ${home}`,
65
+ recommendation: 'Ensure your user can write to the home directory for skill installation.',
66
+ };
67
+ }
68
+ }
69
+ function checkInstallScriptParity(cwd) {
70
+ const rootInstall = path.join(cwd, 'install.sh');
71
+ const siteInstall = path.join(cwd, 'site', 'install.sh');
72
+ if (!existsSync(rootInstall) || !existsSync(siteInstall)) {
73
+ return {
74
+ id: 'install_script_sync',
75
+ title: 'Installer parity (repo clone)',
76
+ status: 'warn',
77
+ detail: 'install.sh and site/install.sh were not both found in current directory.',
78
+ recommendation: 'Run doctor from the AgentThreader repository to verify script parity.',
79
+ };
80
+ }
81
+ const rootContent = readFileSync(rootInstall, 'utf8');
82
+ const siteContent = readFileSync(siteInstall, 'utf8');
83
+ if (rootContent === siteContent) {
84
+ return {
85
+ id: 'install_script_sync',
86
+ title: 'Installer parity (repo clone)',
87
+ status: 'pass',
88
+ detail: 'install.sh and site/install.sh are in sync.',
89
+ };
90
+ }
91
+ return {
92
+ id: 'install_script_sync',
93
+ title: 'Installer parity (repo clone)',
94
+ status: 'warn',
95
+ detail: 'install.sh and site/install.sh differ.',
96
+ recommendation: 'Copy root install.sh to site/install.sh after installer changes.',
97
+ };
98
+ }
99
+ function checkCompiledArtifacts(cwd) {
100
+ const expected = path.join(cwd, 'compiled', 'cursor', 'skills', 'agent-threader', 'SKILL.md');
101
+ if (existsSync(expected)) {
102
+ return {
103
+ id: 'compiled_artifacts',
104
+ title: 'Compiled skill artifacts',
105
+ status: 'pass',
106
+ detail: 'Compiled skill artifacts are present.',
107
+ };
108
+ }
109
+ return {
110
+ id: 'compiled_artifacts',
111
+ title: 'Compiled skill artifacts',
112
+ status: 'warn',
113
+ detail: 'Compiled artifacts were not found in this working directory.',
114
+ recommendation: 'From a repo clone, run: npm run compile',
115
+ };
116
+ }
117
+ export function runDoctor(options = {}) {
118
+ const cwd = path.resolve(options.cwd ?? process.cwd());
119
+ const checks = [
120
+ checkNodeVersion(),
121
+ checkNpm(),
122
+ checkHomeWritable(),
123
+ checkInstallScriptParity(cwd),
124
+ checkCompiledArtifacts(cwd),
125
+ ];
126
+ return {
127
+ ok: checks.every((check) => check.status !== 'fail'),
128
+ checks,
129
+ };
130
+ }
131
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/lib/diagnostics/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ErrorExplanation {
2
+ code: string;
3
+ category: 'app' | 'parser';
4
+ meaning: string;
5
+ likelyCauses: string[];
6
+ suggestedFixes: string[];
7
+ }
8
+ export declare function explainErrorCode(code: string): ErrorExplanation | undefined;
9
+ export declare function listKnownErrorCodes(): string[];
10
+ //# sourceMappingURL=explain-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-error.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/explain-error.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAoED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAG3E;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
@@ -0,0 +1,73 @@
1
+ const EXPLANATIONS = {
2
+ APP_ERROR: {
3
+ code: 'APP_ERROR',
4
+ category: 'app',
5
+ meaning: 'A generic application error was thrown.',
6
+ likelyCauses: ['Unexpected runtime condition', 'Unhandled edge case in command flow'],
7
+ suggestedFixes: ['Rerun with a narrower input and inspect command output', 'Use `agent-threader explain <code>` on a more specific code when available'],
8
+ },
9
+ NOT_FOUND_ERROR: {
10
+ code: 'NOT_FOUND_ERROR',
11
+ category: 'app',
12
+ meaning: 'A required file or entity could not be found.',
13
+ likelyCauses: ['Incorrect file path', 'Missing state or manifest file'],
14
+ suggestedFixes: ['Verify the path exists', 'Run from the expected working directory'],
15
+ },
16
+ COMMAND_ERROR: {
17
+ code: 'COMMAND_ERROR',
18
+ category: 'app',
19
+ meaning: 'A subprocess command failed.',
20
+ likelyCauses: ['Build/test command exited non-zero', 'Missing tool in PATH'],
21
+ suggestedFixes: ['Run the failing command directly to inspect full output', 'Install the required tool and retry'],
22
+ },
23
+ CONFIG_ERROR: {
24
+ code: 'CONFIG_ERROR',
25
+ category: 'app',
26
+ meaning: 'A configuration or contract file could not be read or validated.',
27
+ likelyCauses: ['Invalid JSON syntax', 'Schema mismatch', 'Unreadable file permissions'],
28
+ suggestedFixes: ['Validate JSON formatting', 'Run `agent-threader validate-manifest <path>`', 'Check file permissions'],
29
+ },
30
+ NO_SENTINEL: {
31
+ code: 'NO_SENTINEL',
32
+ category: 'parser',
33
+ meaning: 'Expected contract sentinel block was not found in log output.',
34
+ likelyCauses: ['Worker/healer did not emit fenced contract', 'Wrong log file was parsed'],
35
+ suggestedFixes: ['Ensure prompts require the correct sentinel marker', 'Confirm you passed the correct log path'],
36
+ },
37
+ INVALID_JSON: {
38
+ code: 'INVALID_JSON',
39
+ category: 'parser',
40
+ meaning: 'Contract sentinel was found, but JSON could not be parsed.',
41
+ likelyCauses: ['Malformed JSON emitted by model', 'Truncated contract output'],
42
+ suggestedFixes: ['Tighten prompt instructions for strict JSON', 'Retry task and verify full contract block is present'],
43
+ },
44
+ SCHEMA_VIOLATION: {
45
+ code: 'SCHEMA_VIOLATION',
46
+ category: 'parser',
47
+ meaning: 'JSON parsed successfully, but contract schema validation failed.',
48
+ likelyCauses: ['Unexpected field names/types', 'Missing required contract fields'],
49
+ suggestedFixes: ['Compare output against schema in `skill/schemas`', 'Update prompt to enforce exact field names and enums'],
50
+ },
51
+ MISSING_REQUIRED_FIELD: {
52
+ code: 'MISSING_REQUIRED_FIELD',
53
+ category: 'parser',
54
+ meaning: 'Required contract fields are missing from output.',
55
+ likelyCauses: ['Model omitted fields', 'Prompt did not include complete contract requirements'],
56
+ suggestedFixes: ['Include required fields explicitly in prompt template', 'Use examples that include full contract shape'],
57
+ },
58
+ UNSUPPORTED_VERSION: {
59
+ code: 'UNSUPPORTED_VERSION',
60
+ category: 'parser',
61
+ meaning: 'Contract version in output is not supported by this runtime.',
62
+ likelyCauses: ['Outdated prompts', 'Mixed version artifacts in workflow'],
63
+ suggestedFixes: ['Emit contract_version 2.0 for v2 contracts', 'Align prompt/system instructions with current schema version'],
64
+ },
65
+ };
66
+ export function explainErrorCode(code) {
67
+ const key = code.trim().toUpperCase();
68
+ return EXPLANATIONS[key];
69
+ }
70
+ export function listKnownErrorCodes() {
71
+ return Object.keys(EXPLANATIONS).sort();
72
+ }
73
+ //# sourceMappingURL=explain-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain-error.js","sourceRoot":"","sources":["../../../src/lib/errors/explain-error.ts"],"names":[],"mappings":"AAUA,MAAM,YAAY,GAAqC;IACrD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,yCAAyC;QAClD,YAAY,EAAE,CAAC,8BAA8B,EAAE,qCAAqC,CAAC;QACrF,cAAc,EAAE,CAAC,wDAAwD,EAAE,4EAA4E,CAAC;KACzJ;IACD,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,+CAA+C;QACxD,YAAY,EAAE,CAAC,qBAAqB,EAAE,gCAAgC,CAAC;QACvE,cAAc,EAAE,CAAC,wBAAwB,EAAE,yCAAyC,CAAC;KACtF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,CAAC,oCAAoC,EAAE,sBAAsB,CAAC;QAC5E,cAAc,EAAE,CAAC,yDAAyD,EAAE,qCAAqC,CAAC;KACnH;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,kEAAkE;QAC3E,YAAY,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,6BAA6B,CAAC;QACvF,cAAc,EAAE,CAAC,0BAA0B,EAAE,+CAA+C,EAAE,wBAAwB,CAAC;KACxH;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,+DAA+D;QACxE,YAAY,EAAE,CAAC,4CAA4C,EAAE,2BAA2B,CAAC;QACzF,cAAc,EAAE,CAAC,oDAAoD,EAAE,yCAAyC,CAAC;KAClH;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,4DAA4D;QACrE,YAAY,EAAE,CAAC,iCAAiC,EAAE,2BAA2B,CAAC;QAC9E,cAAc,EAAE,CAAC,6CAA6C,EAAE,sDAAsD,CAAC;KACxH;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,kEAAkE;QAC3E,YAAY,EAAE,CAAC,8BAA8B,EAAE,kCAAkC,CAAC;QAClF,cAAc,EAAE,CAAC,kDAAkD,EAAE,sDAAsD,CAAC;KAC7H;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,mDAAmD;QAC5D,YAAY,EAAE,CAAC,sBAAsB,EAAE,uDAAuD,CAAC;QAC/F,cAAc,EAAE,CAAC,uDAAuD,EAAE,+CAA+C,CAAC;KAC3H;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,8DAA8D;QACvE,YAAY,EAAE,CAAC,kBAAkB,EAAE,qCAAqC,CAAC;QACzE,cAAc,EAAE,CAAC,4CAA4C,EAAE,8DAA8D,CAAC;KAC/H;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAA8B,CAAC;IAClE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare class AppError extends Error {
2
+ readonly code: string;
3
+ readonly context: Record<string, unknown>;
4
+ constructor(message: string, code?: string, context?: Record<string, unknown>);
5
+ toJSON(): Record<string, unknown>;
6
+ }
7
+ export declare class NotFoundError extends AppError {
8
+ constructor(entity: string, identifier: string, context?: Record<string, unknown>);
9
+ }
10
+ export declare class CommandError extends AppError {
11
+ constructor(command: string, exitCode: number | null, stderr: string, context?: Record<string, unknown>);
12
+ }
13
+ export declare class ConfigError extends AppError {
14
+ constructor(filePath: string, cause: string, context?: Record<string, unknown>);
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/errors/types.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGxC,OAAO,EAAE,MAAM,EACf,IAAI,SAAc,EAClB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAQvC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQlC;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAQtF;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAS5G;AAED,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAQnF"}
@@ -0,0 +1,50 @@
1
+ export class AppError extends Error {
2
+ code;
3
+ context;
4
+ constructor(message, code = 'APP_ERROR', context = {}) {
5
+ super(message);
6
+ this.name = 'AppError';
7
+ this.code = code;
8
+ this.context = context;
9
+ }
10
+ toJSON() {
11
+ return {
12
+ error: this.name,
13
+ code: this.code,
14
+ message: this.message,
15
+ context: this.context,
16
+ };
17
+ }
18
+ }
19
+ export class NotFoundError extends AppError {
20
+ constructor(entity, identifier, context = {}) {
21
+ super(`${entity} not found: ${identifier}`, 'NOT_FOUND_ERROR', {
22
+ entity,
23
+ identifier,
24
+ ...context,
25
+ });
26
+ this.name = 'NotFoundError';
27
+ }
28
+ }
29
+ export class CommandError extends AppError {
30
+ constructor(command, exitCode, stderr, context = {}) {
31
+ super(`Command failed: ${command}`, 'COMMAND_ERROR', {
32
+ command,
33
+ exitCode,
34
+ stderr,
35
+ ...context,
36
+ });
37
+ this.name = 'CommandError';
38
+ }
39
+ }
40
+ export class ConfigError extends AppError {
41
+ constructor(filePath, cause, context = {}) {
42
+ super(`Configuration error in ${filePath}: ${cause}`, 'CONFIG_ERROR', {
43
+ filePath,
44
+ cause,
45
+ ...context,
46
+ });
47
+ this.name = 'ConfigError';
48
+ }
49
+ }
50
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/errors/types.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACb,OAAO,CAA0B;IAE1C,YACE,OAAe,EACf,IAAI,GAAG,WAAW,EAClB,UAAmC,EAAE;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzC,YAAY,MAAc,EAAE,UAAkB,EAAE,UAAmC,EAAE;QACnF,KAAK,CAAC,GAAG,MAAM,eAAe,UAAU,EAAE,EAAE,iBAAiB,EAAE;YAC7D,MAAM;YACN,UAAU;YACV,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAY,OAAe,EAAE,QAAuB,EAAE,MAAc,EAAE,UAAmC,EAAE;QACzG,KAAK,CAAC,mBAAmB,OAAO,EAAE,EAAE,eAAe,EAAE;YACnD,OAAO;YACP,QAAQ;YACR,MAAM;YACN,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;IACvC,YAAY,QAAgB,EAAE,KAAa,EAAE,UAAmC,EAAE;QAChF,KAAK,CAAC,0BAA0B,QAAQ,KAAK,KAAK,EAAE,EAAE,cAAc,EAAE;YACpE,QAAQ;YACR,KAAK;YACL,GAAG,OAAO;SACX,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ export { AppError, NotFoundError, CommandError, ConfigError } from './errors/types.js';
2
+ export { explainErrorCode, listKnownErrorCodes } from './errors/explain-error.js';
3
+ export type { ErrorExplanation } from './errors/explain-error.js';
4
+ export type { ManifestV2, ManifestTaskV2, RetryPolicy, VerifyProfileRegistry, VerifyProfile, VerifyStep, TaskResultV2, WriteEntry, Evidence, HealDecisionV2, HealPatch, HealRetryPolicy, ParserErrorCode, ParserFailure, FailureClass, } from './contracts/types.js';
5
+ export { HEALABLE_FAILURE_CLASSES, NON_HEALABLE_FAILURE_CLASSES } from './contracts/types.js';
6
+ export type { StateV2, RunPolicy, TaskStatus, TaskState, HistoryEntry, HealingRound, } from './state/types.js';
7
+ export { DEFAULT_POLICY, FIBONACCI_BATCH_SEQUENCE } from './state/types.js';
8
+ export type { PreparedInvocation, ExecutionArtifact, AdapterHealth, RunContext, CliAdapter, } from './adapters/types.js';
9
+ export { parseTaskResult, parseHealDecision, parseTaskResultFromString, parseHealDecisionFromString, generateFailureSignature, isParserFailure, } from './parser/parser.js';
10
+ export { loadState, writeState, initializeState, computeManifestDigest } from './state/state.js';
11
+ export { validateManifestSchema, validateTaskResultSchema, validateHealDecisionSchema, validateStateSchema, validateVerifyProfileSchema, } from './contracts/schema-validator.js';
12
+ export type { SchemaValidationResult, SchemaError } from './contracts/schema-validator.js';
13
+ export { validateManifest } from './contracts/validate-manifest.js';
14
+ export type { ValidateManifestOptions, ValidateManifestResult, Issue } from './contracts/validate-manifest.js';
15
+ export { initState } from './state/init-state.js';
16
+ export type { InitStateOptions, InitStateResult } from './state/init-state.js';
17
+ export { getStatus } from './state/status.js';
18
+ export type { StatusOptions, StatusResult, FailedTaskInfo } from './state/status.js';
19
+ export { getLogs } from './state/logs.js';
20
+ export type { LogsOptions, LogsResult, LogEntry } from './state/logs.js';
21
+ export { parseResult } from './parser/parse-result.js';
22
+ export type { ParseResultOptions, ParseResultResult } from './parser/parse-result.js';
23
+ export { parseHeal } from './parser/parse-heal.js';
24
+ export type { ParseHealOptions, ParseHealResult } from './parser/parse-heal.js';
25
+ export { runDoctor } from './diagnostics/doctor.js';
26
+ export type { DoctorOptions, DoctorResult, DoctorCheck, DoctorStatus } from './diagnostics/doctor.js';
27
+ export { buildDependencyOrder, getReadyTasks, isTerminalStatus, isRunComplete, growBatchSize, shrinkBatchSize, computeEffectiveWindowSize, isHealableFailure, computeFailureRate, shouldHeal, checkConvergence, shouldEscalateTask, shouldAbortRun, validatePatch, validatePatchSet, validateWrites, } from './orchestrator/index.js';
28
+ export type { SchedulingResult, BatchDecision, WindowOutcome, FailureRateResult, HealDecisionInput, ShouldHealResult, ConvergenceResult, EscalationResult, RunAbortResult, PatchValidationResult, WriteSafetyOptions, WriteSafetyResult, } from './orchestrator/index.js';
29
+ //# sourceMappingURL=index.d.ts.map