@jterrats/open-orchestra 0.5.5 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/AGENTS.md +9 -8
  2. package/CLAUDE.md +13 -11
  3. package/README.md +78 -11
  4. package/dist/assets/web-console.js +203 -36
  5. package/dist/automation-evidence.d.ts +23 -0
  6. package/dist/automation-evidence.js +97 -0
  7. package/dist/automation-evidence.js.map +1 -0
  8. package/dist/autonomous-run-state.d.ts +4 -1
  9. package/dist/autonomous-run-state.js +8 -2
  10. package/dist/autonomous-run-state.js.map +1 -1
  11. package/dist/autonomous-run-store.d.ts +3 -1
  12. package/dist/autonomous-run-store.js +9 -3
  13. package/dist/autonomous-run-store.js.map +1 -1
  14. package/dist/autonomous-workflow-constants.js +5 -1
  15. package/dist/autonomous-workflow-constants.js.map +1 -1
  16. package/dist/benchmark.d.ts +4 -1
  17. package/dist/benchmark.js +140 -19
  18. package/dist/benchmark.js.map +1 -1
  19. package/dist/cli.js +88 -2
  20. package/dist/cli.js.map +1 -1
  21. package/dist/collaboration-flows.js +5 -19
  22. package/dist/collaboration-flows.js.map +1 -1
  23. package/dist/collection-utils.d.ts +3 -0
  24. package/dist/collection-utils.js +10 -0
  25. package/dist/collection-utils.js.map +1 -0
  26. package/dist/command-manifest.d.ts +12 -1
  27. package/dist/command-manifest.js +218 -10
  28. package/dist/command-manifest.js.map +1 -1
  29. package/dist/commands.d.ts +14 -6
  30. package/dist/commands.js +78 -28
  31. package/dist/commands.js.map +1 -1
  32. package/dist/config-migrations.d.ts +24 -0
  33. package/dist/config-migrations.js +102 -0
  34. package/dist/config-migrations.js.map +1 -0
  35. package/dist/constants.d.ts +3 -0
  36. package/dist/constants.js +26 -0
  37. package/dist/constants.js.map +1 -1
  38. package/dist/cursor-canvas.d.ts +20 -0
  39. package/dist/cursor-canvas.js +119 -0
  40. package/dist/cursor-canvas.js.map +1 -0
  41. package/dist/dashboard-commands.d.ts +2 -0
  42. package/dist/dashboard-commands.js +14 -0
  43. package/dist/dashboard-commands.js.map +1 -0
  44. package/dist/defaults.d.ts +13 -0
  45. package/dist/defaults.js +13 -0
  46. package/dist/defaults.js.map +1 -1
  47. package/dist/delegation-decision.js +23 -8
  48. package/dist/delegation-decision.js.map +1 -1
  49. package/dist/delivery-commands.js +5 -0
  50. package/dist/delivery-commands.js.map +1 -1
  51. package/dist/delivery-dashboard-charts.d.ts +4 -0
  52. package/dist/delivery-dashboard-charts.js +156 -0
  53. package/dist/delivery-dashboard-charts.js.map +1 -0
  54. package/dist/delivery-dashboard-html.d.ts +2 -0
  55. package/dist/delivery-dashboard-html.js +115 -0
  56. package/dist/delivery-dashboard-html.js.map +1 -0
  57. package/dist/delivery-dashboard-types.d.ts +78 -0
  58. package/dist/delivery-dashboard-types.js +2 -0
  59. package/dist/delivery-dashboard-types.js.map +1 -0
  60. package/dist/delivery-dashboard.d.ts +8 -0
  61. package/dist/delivery-dashboard.js +124 -0
  62. package/dist/delivery-dashboard.js.map +1 -0
  63. package/dist/doc-sync.d.ts +25 -0
  64. package/dist/doc-sync.js +79 -0
  65. package/dist/doc-sync.js.map +1 -0
  66. package/dist/effort-classification.d.ts +7 -0
  67. package/dist/effort-classification.js +72 -0
  68. package/dist/effort-classification.js.map +1 -0
  69. package/dist/extension-commands.d.ts +3 -0
  70. package/dist/extension-commands.js +40 -0
  71. package/dist/extension-commands.js.map +1 -0
  72. package/dist/extensions.d.ts +22 -0
  73. package/dist/extensions.js +126 -0
  74. package/dist/extensions.js.map +1 -0
  75. package/dist/gemini-provider.d.ts +3 -6
  76. package/dist/gemini-provider.js +8 -17
  77. package/dist/gemini-provider.js.map +1 -1
  78. package/dist/github.d.ts +2 -0
  79. package/dist/github.js +15 -3
  80. package/dist/github.js.map +1 -1
  81. package/dist/health-checks.js +51 -0
  82. package/dist/health-checks.js.map +1 -1
  83. package/dist/lucid-story-map.d.ts +73 -0
  84. package/dist/lucid-story-map.js +112 -0
  85. package/dist/lucid-story-map.js.map +1 -0
  86. package/dist/mcp-integrations.d.ts +19 -0
  87. package/dist/mcp-integrations.js +58 -0
  88. package/dist/mcp-integrations.js.map +1 -0
  89. package/dist/mcp-tool-adapter.d.ts +21 -0
  90. package/dist/mcp-tool-adapter.js +56 -0
  91. package/dist/mcp-tool-adapter.js.map +1 -0
  92. package/dist/metrics-commands.js +47 -13
  93. package/dist/metrics-commands.js.map +1 -1
  94. package/dist/model-commands.d.ts +5 -0
  95. package/dist/model-commands.js +95 -1
  96. package/dist/model-commands.js.map +1 -1
  97. package/dist/model-providers.d.ts +5 -12
  98. package/dist/model-providers.js +30 -43
  99. package/dist/model-providers.js.map +1 -1
  100. package/dist/network-policy.d.ts +2 -0
  101. package/dist/network-policy.js +6 -0
  102. package/dist/network-policy.js.map +1 -0
  103. package/dist/ollama-provider.d.ts +3 -6
  104. package/dist/ollama-provider.js +7 -16
  105. package/dist/ollama-provider.js.map +1 -1
  106. package/dist/package-update-check.d.ts +19 -0
  107. package/dist/package-update-check.js +24 -0
  108. package/dist/package-update-check.js.map +1 -1
  109. package/dist/phase-executor.d.ts +1 -0
  110. package/dist/phase-executor.js +401 -9
  111. package/dist/phase-executor.js.map +1 -1
  112. package/dist/phase-playbooks.d.ts +18 -1
  113. package/dist/phase-playbooks.js +146 -2
  114. package/dist/phase-playbooks.js.map +1 -1
  115. package/dist/planning-commands.d.ts +1 -0
  116. package/dist/planning-commands.js +36 -36
  117. package/dist/planning-commands.js.map +1 -1
  118. package/dist/policy-commands.d.ts +2 -0
  119. package/dist/policy-commands.js +29 -0
  120. package/dist/policy-commands.js.map +1 -0
  121. package/dist/policy-defaults.d.ts +2 -0
  122. package/dist/policy-defaults.js +42 -0
  123. package/dist/policy-defaults.js.map +1 -0
  124. package/dist/policy.d.ts +20 -0
  125. package/dist/policy.js +155 -0
  126. package/dist/policy.js.map +1 -0
  127. package/dist/project-detection.js +9 -7
  128. package/dist/project-detection.js.map +1 -1
  129. package/dist/prompt-registry-update.d.ts +2 -0
  130. package/dist/prompt-registry-update.js +5 -1
  131. package/dist/prompt-registry-update.js.map +1 -1
  132. package/dist/prompt-registry-validation.d.ts +3 -0
  133. package/dist/prompt-registry-validation.js +61 -21
  134. package/dist/prompt-registry-validation.js.map +1 -1
  135. package/dist/provider-utils.d.ts +11 -0
  136. package/dist/provider-utils.js +14 -0
  137. package/dist/provider-utils.js.map +1 -1
  138. package/dist/qa-commands.d.ts +2 -0
  139. package/dist/qa-commands.js +18 -0
  140. package/dist/qa-commands.js.map +1 -0
  141. package/dist/qa-coverage.d.ts +24 -0
  142. package/dist/qa-coverage.js +189 -0
  143. package/dist/qa-coverage.js.map +1 -0
  144. package/dist/qa-readiness.d.ts +5 -0
  145. package/dist/qa-readiness.js +26 -0
  146. package/dist/qa-readiness.js.map +1 -0
  147. package/dist/refresh-generated.d.ts +32 -0
  148. package/dist/refresh-generated.js +180 -0
  149. package/dist/refresh-generated.js.map +1 -0
  150. package/dist/release-candidate.d.ts +9 -1
  151. package/dist/release-candidate.js +52 -1
  152. package/dist/release-candidate.js.map +1 -1
  153. package/dist/release-commands.js +161 -8
  154. package/dist/release-commands.js.map +1 -1
  155. package/dist/release-readiness.d.ts +33 -0
  156. package/dist/release-readiness.js +187 -3
  157. package/dist/release-readiness.js.map +1 -1
  158. package/dist/runtime-adapters.d.ts +2 -1
  159. package/dist/runtime-adapters.js +16 -0
  160. package/dist/runtime-adapters.js.map +1 -1
  161. package/dist/runtime-bootstrap.js +1 -1
  162. package/dist/runtime-bootstrap.js.map +1 -1
  163. package/dist/runtime-commands.d.ts +2 -0
  164. package/dist/runtime-commands.js +85 -3
  165. package/dist/runtime-commands.js.map +1 -1
  166. package/dist/runtime-execution-adapters.js +40 -0
  167. package/dist/runtime-execution-adapters.js.map +1 -1
  168. package/dist/runtime-execution-renderer.d.ts +3 -2
  169. package/dist/runtime-execution-renderer.js +46 -8
  170. package/dist/runtime-execution-renderer.js.map +1 -1
  171. package/dist/runtime-execution.d.ts +8 -2
  172. package/dist/runtime-execution.js +109 -11
  173. package/dist/runtime-execution.js.map +1 -1
  174. package/dist/runtime-guardrails.d.ts +26 -0
  175. package/dist/runtime-guardrails.js +168 -0
  176. package/dist/runtime-guardrails.js.map +1 -0
  177. package/dist/setup-agents-import.js +5 -3
  178. package/dist/setup-agents-import.js.map +1 -1
  179. package/dist/skills-catalog.js +1 -0
  180. package/dist/skills-catalog.js.map +1 -1
  181. package/dist/skills-commands.d.ts +5 -0
  182. package/dist/skills-commands.js +79 -2
  183. package/dist/skills-commands.js.map +1 -1
  184. package/dist/skills-memory.d.ts +36 -2
  185. package/dist/skills-memory.js +165 -6
  186. package/dist/skills-memory.js.map +1 -1
  187. package/dist/skills-planning.js +9 -22
  188. package/dist/skills-planning.js.map +1 -1
  189. package/dist/skills-render.js +2 -4
  190. package/dist/skills-render.js.map +1 -1
  191. package/dist/skills.d.ts +1 -1
  192. package/dist/skills.js +1 -1
  193. package/dist/skills.js.map +1 -1
  194. package/dist/sprint-commands.js +2 -1
  195. package/dist/sprint-commands.js.map +1 -1
  196. package/dist/subagent-protocol.js +3 -5
  197. package/dist/subagent-protocol.js.map +1 -1
  198. package/dist/support-commands.d.ts +2 -0
  199. package/dist/support-commands.js +18 -0
  200. package/dist/support-commands.js.map +1 -0
  201. package/dist/support-diagnostics.d.ts +49 -0
  202. package/dist/support-diagnostics.js +86 -0
  203. package/dist/support-diagnostics.js.map +1 -0
  204. package/dist/task-graph-commands.js +6 -14
  205. package/dist/task-graph-commands.js.map +1 -1
  206. package/dist/task-text.d.ts +8 -0
  207. package/dist/task-text.js +18 -0
  208. package/dist/task-text.js.map +1 -0
  209. package/dist/telemetry-redaction.js +8 -1
  210. package/dist/telemetry-redaction.js.map +1 -1
  211. package/dist/tool-commands.d.ts +3 -0
  212. package/dist/tool-commands.js +62 -0
  213. package/dist/tool-commands.js.map +1 -1
  214. package/dist/tracker-adapters.d.ts +71 -0
  215. package/dist/tracker-adapters.js +186 -0
  216. package/dist/tracker-adapters.js.map +1 -0
  217. package/dist/tracker-commands.d.ts +2 -0
  218. package/dist/tracker-commands.js +119 -0
  219. package/dist/tracker-commands.js.map +1 -0
  220. package/dist/types/metrics.d.ts +25 -1
  221. package/dist/types/model-config.d.ts +51 -4
  222. package/dist/types/runtime.d.ts +83 -0
  223. package/dist/types/skills.d.ts +2 -0
  224. package/dist/types/tasks.d.ts +10 -0
  225. package/dist/types/workflow-run.d.ts +35 -0
  226. package/dist/types.d.ts +12 -4
  227. package/dist/types.js.map +1 -1
  228. package/dist/upgrade-commands.js +13 -4
  229. package/dist/upgrade-commands.js.map +1 -1
  230. package/dist/validation.js +2 -2
  231. package/dist/validation.js.map +1 -1
  232. package/dist/visual-validation.d.ts +81 -0
  233. package/dist/visual-validation.js +290 -0
  234. package/dist/visual-validation.js.map +1 -0
  235. package/dist/web-action-security.d.ts +11 -0
  236. package/dist/web-action-security.js +45 -0
  237. package/dist/web-action-security.js.map +1 -0
  238. package/dist/web-api-read-routes.js +115 -3
  239. package/dist/web-api-read-routes.js.map +1 -1
  240. package/dist/web-api.js +507 -5
  241. package/dist/web-api.js.map +1 -1
  242. package/dist/web-artifacts.d.ts +55 -0
  243. package/dist/web-artifacts.js +222 -0
  244. package/dist/web-artifacts.js.map +1 -0
  245. package/dist/web-console/assets/index-C9lx-V42.css +1 -0
  246. package/dist/web-console/assets/index-M3S0g1GK.js +11 -0
  247. package/dist/web-console/index.html +13 -0
  248. package/dist/web-console.js +9 -3
  249. package/dist/web-console.js.map +1 -1
  250. package/dist/web-recovery.d.ts +30 -0
  251. package/dist/web-recovery.js +163 -0
  252. package/dist/web-recovery.js.map +1 -0
  253. package/dist/web-workflow-progress.d.ts +41 -0
  254. package/dist/web-workflow-progress.js +114 -0
  255. package/dist/web-workflow-progress.js.map +1 -0
  256. package/dist/workflow-approval-service.d.ts +2 -1
  257. package/dist/workflow-approval-service.js +83 -4
  258. package/dist/workflow-approval-service.js.map +1 -1
  259. package/dist/workflow-approval-utils.js +13 -3
  260. package/dist/workflow-approval-utils.js.map +1 -1
  261. package/dist/workflow-event-query.d.ts +2 -0
  262. package/dist/workflow-event-query.js +6 -0
  263. package/dist/workflow-event-query.js.map +1 -0
  264. package/dist/workflow-evidence-service.js +18 -9
  265. package/dist/workflow-evidence-service.js.map +1 -1
  266. package/dist/workflow-gates.d.ts +2 -0
  267. package/dist/workflow-gates.js +103 -0
  268. package/dist/workflow-gates.js.map +1 -1
  269. package/dist/workflow-markdown.d.ts +6 -0
  270. package/dist/workflow-markdown.js +25 -0
  271. package/dist/workflow-markdown.js.map +1 -0
  272. package/dist/workflow-phase-planner.d.ts +19 -0
  273. package/dist/workflow-phase-planner.js +133 -0
  274. package/dist/workflow-phase-planner.js.map +1 -0
  275. package/dist/workflow-run-commands.d.ts +1 -0
  276. package/dist/workflow-run-commands.js +247 -20
  277. package/dist/workflow-run-commands.js.map +1 -1
  278. package/dist/workflow-services.d.ts +21 -12
  279. package/dist/workflow-services.js +376 -260
  280. package/dist/workflow-services.js.map +1 -1
  281. package/dist/workflow-task-service.d.ts +11 -0
  282. package/dist/workflow-task-service.js +242 -0
  283. package/dist/workflow-task-service.js.map +1 -0
  284. package/dist/workflow-templates.js +2 -14
  285. package/dist/workflow-templates.js.map +1 -1
  286. package/dist/workspace-validator.js +133 -5
  287. package/dist/workspace-validator.js.map +1 -1
  288. package/dist/workspace.js +10 -2
  289. package/dist/workspace.js.map +1 -1
  290. package/docs/adoption-guide.md +147 -0
  291. package/docs/autonomous-workflow.md +146 -28
  292. package/docs/benchmark.md +17 -9
  293. package/docs/command-contracts.md +18 -1
  294. package/docs/core-command-surface.md +62 -13
  295. package/docs/end-to-end-demo.md +1 -0
  296. package/docs/extension-contracts.md +83 -0
  297. package/docs/orchestra-mvp.md +86 -3
  298. package/docs/persona-workflows.md +32 -0
  299. package/docs/release-test-matrix.md +42 -0
  300. package/docs/runtime-adapters.md +113 -0
  301. package/docs/runtime-llm-flow.md +13 -0
  302. package/docs/setup-agents-applicability-review.md +173 -0
  303. package/docs/skill-loading-strategy.md +1 -0
  304. package/docs/source-of-truth-and-agent-learning.md +14 -0
  305. package/docs/traceability-flow.md +5 -1
  306. package/docs/tracker-adapter-contract.md +10 -1
  307. package/docs/web-console-qa.md +35 -0
  308. package/package.json +12 -6
  309. package/rules/development-engineering.mdc +66 -0
  310. package/skills/doc-sync/SKILL.md +2 -0
@@ -0,0 +1,23 @@
1
+ import type { EvidenceInput } from "./types.js";
2
+ export type AutomationSurface = "web" | "api" | "cli" | "integration";
3
+ export interface AutomationEvidenceInput {
4
+ surface?: AutomationSurface;
5
+ assertions?: string;
6
+ externalValidation?: string;
7
+ deferredOwner?: string;
8
+ deferredRationale?: string;
9
+ }
10
+ export interface AutomationEvidenceQuality {
11
+ automated: boolean;
12
+ surface?: AutomationSurface;
13
+ assertions?: string;
14
+ externalValidation?: string;
15
+ deferredOwner?: string;
16
+ deferredRationale?: string;
17
+ observableOutcome: boolean;
18
+ deferredExternalValidation: boolean;
19
+ gaps: string[];
20
+ }
21
+ export declare function evaluateAutomationEvidence(input: EvidenceInput): AutomationEvidenceQuality;
22
+ export declare function assertAutomationEvidenceQuality(input: EvidenceInput): void;
23
+ export declare function automationEvidenceLines(quality: AutomationEvidenceQuality): string[];
@@ -0,0 +1,97 @@
1
+ const SURFACES = new Set([
2
+ "web",
3
+ "api",
4
+ "cli",
5
+ "integration",
6
+ ]);
7
+ export function evaluateAutomationEvidence(input) {
8
+ const surface = parseSurface(input.surface);
9
+ const assertions = stringValue(input.assertions);
10
+ const externalValidation = stringValue(input.externalValidation);
11
+ const deferredOwner = stringValue(input.deferredOwner);
12
+ const deferredRationale = stringValue(input.deferredRationale);
13
+ if (!surface) {
14
+ return {
15
+ automated: false,
16
+ observableOutcome: false,
17
+ deferredExternalValidation: false,
18
+ gaps: [],
19
+ };
20
+ }
21
+ const gaps = [
22
+ ...assertionGaps(surface, assertions),
23
+ ...integrationGaps(surface, externalValidation, deferredOwner, deferredRationale),
24
+ ];
25
+ return {
26
+ automated: true,
27
+ surface,
28
+ ...(assertions ? { assertions } : {}),
29
+ ...(externalValidation ? { externalValidation } : {}),
30
+ ...(deferredOwner ? { deferredOwner } : {}),
31
+ ...(deferredRationale ? { deferredRationale } : {}),
32
+ observableOutcome: gaps.length === 0,
33
+ deferredExternalValidation: Boolean(deferredOwner && deferredRationale),
34
+ gaps,
35
+ };
36
+ }
37
+ export function assertAutomationEvidenceQuality(input) {
38
+ const quality = evaluateAutomationEvidence(input);
39
+ if (!quality.automated || quality.gaps.length === 0) {
40
+ return;
41
+ }
42
+ throw new Error(`automation evidence is missing observable outcome validation: ${quality.gaps.join("; ")}`);
43
+ }
44
+ export function automationEvidenceLines(quality) {
45
+ if (!quality.automated) {
46
+ return ["- Automation surface: not declared"];
47
+ }
48
+ return [
49
+ `- Automation surface: ${quality.surface}`,
50
+ `- Assertions: ${quality.assertions ?? "not provided"}`,
51
+ `- External validation: ${quality.externalValidation ?? "not provided"}`,
52
+ `- Deferred owner: ${quality.deferredOwner ?? "not applicable"}`,
53
+ `- Deferred rationale: ${quality.deferredRationale ?? "not applicable"}`,
54
+ `- Observable outcome: ${quality.observableOutcome ? "yes" : "no"}`,
55
+ `- Gaps: ${quality.gaps.length === 0 ? "none" : quality.gaps.join("; ")}`,
56
+ ];
57
+ }
58
+ function assertionGaps(surface, assertions) {
59
+ if (assertions)
60
+ return [];
61
+ if (surface === "web") {
62
+ return ["web automation must assert visible user-facing state"];
63
+ }
64
+ if (surface === "api") {
65
+ return ["api automation must assert response body, state, or side effects"];
66
+ }
67
+ if (surface === "cli") {
68
+ return [
69
+ "cli automation must assert stdout, stderr, files, events, or state",
70
+ ];
71
+ }
72
+ return ["integration automation must assert the triggered flow outcome"];
73
+ }
74
+ function integrationGaps(surface, externalValidation, deferredOwner, deferredRationale) {
75
+ if (surface !== "integration")
76
+ return [];
77
+ if (externalValidation)
78
+ return [];
79
+ if (deferredOwner && deferredRationale)
80
+ return [];
81
+ return [
82
+ "integration automation must validate sandbox/mock/contract/webhook/event/log or defer with owner and rationale",
83
+ ];
84
+ }
85
+ function parseSurface(value) {
86
+ const text = stringValue(value);
87
+ if (!text)
88
+ return undefined;
89
+ if (!SURFACES.has(text)) {
90
+ throw new Error("automation surface must be one of: web, api, cli, integration");
91
+ }
92
+ return text;
93
+ }
94
+ function stringValue(value) {
95
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
96
+ }
97
+ //# sourceMappingURL=automation-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-evidence.js","sourceRoot":"","sources":["../src/automation-evidence.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import type { AutonomousPhaseDefinition } from "./autonomous-workflow-constants.js";
2
2
  import type { AutonomousRun } from "./types.js";
3
+ import type { ProviderFailureDetail } from "./types.js";
3
4
  export declare function cancelRun(root: string, runId: string, reason?: string): Promise<AutonomousRun>;
4
- export declare function markRunFailed(root: string, run: AutonomousRun, reason: string, failedPhase?: string): Promise<AutonomousRun>;
5
+ export declare function markRunFailed(root: string, run: AutonomousRun, reason: string, failedPhase?: string, diagnostics?: {
6
+ providerFailures?: ProviderFailureDetail[];
7
+ }): Promise<AutonomousRun>;
5
8
  export declare function markRunDone(root: string, run: AutonomousRun): Promise<AutonomousRun>;
6
9
  export declare function resumePhaseIndex(run: AutonomousRun, sequence?: AutonomousPhaseDefinition[]): number;
7
10
  export declare function suspendPhaseForClarification(root: string, run: AutonomousRun, phaseIndex: number, sequence?: AutonomousPhaseDefinition[]): Promise<AutonomousRun>;
@@ -42,7 +42,7 @@ export async function cancelRun(root, runId, reason = "Workflow run canceled") {
42
42
  }
43
43
  return updated;
44
44
  }
45
- export async function markRunFailed(root, run, reason, failedPhase) {
45
+ export async function markRunFailed(root, run, reason, failedPhase, diagnostics = {}) {
46
46
  const now = new Date().toISOString();
47
47
  const updated = {
48
48
  ...run,
@@ -63,7 +63,13 @@ export async function markRunFailed(root, run, reason, failedPhase) {
63
63
  taskId: run.taskId,
64
64
  actor: "parent",
65
65
  summary: reason,
66
- metadata: { runId: run.id },
66
+ metadata: {
67
+ runId: run.id,
68
+ ...(diagnostics.providerFailures &&
69
+ diagnostics.providerFailures.length > 0
70
+ ? { providerFailures: diagnostics.providerFailures }
71
+ : {}),
72
+ },
67
73
  });
68
74
  await notifyWorkflowLifecycle({
69
75
  root,
@@ -1 +1 @@
1
- {"version":3,"file":"autonomous-run-state.js","sourceRoot":"","sources":["../src/autonomous-run-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autonomous-run-state.js","sourceRoot":"","sources":["../src/autonomous-run-state.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- import type { AutonomousGateMode, AutonomousRun } from "./types.js";
1
+ import type { AutonomousGateMode, AutonomousRun, WorkflowRunMode } from "./types.js";
2
2
  import type { AutonomousPhaseDefinition } from "./autonomous-workflow-constants.js";
3
3
  export declare const AUTONOMOUS_RUNS_FILE = "workflow-runs.jsonl";
4
4
  export declare function autonomousRunsPath(root: string): string;
5
5
  export type AutonomousRunOptions = {
6
6
  taskId: string;
7
7
  gates: AutonomousGateMode;
8
+ mode?: WorkflowRunMode;
8
9
  maxIterations: number;
9
10
  phaseSequence?: string[];
11
+ phaseDefinitions?: AutonomousPhaseDefinition[];
10
12
  skippedPhases?: AutonomousPhaseDefinition[];
11
13
  };
12
14
  export declare function createAutonomousRun(root: string, opts: AutonomousRunOptions): Promise<AutonomousRun>;
@@ -1,7 +1,7 @@
1
1
  import { existsSync } from "node:fs";
2
- import { appendFile, readFile } from "node:fs/promises";
2
+ import { readFile } from "node:fs/promises";
3
3
  import path from "node:path";
4
- import { ensureDir, resolveWorkflowPath } from "./fs-utils.js";
4
+ import { appendJsonLine, ensureDir, resolveWorkflowPath } from "./fs-utils.js";
5
5
  import { appendEvent } from "./workspace.js";
6
6
  export const AUTONOMOUS_RUNS_FILE = "workflow-runs.jsonl";
7
7
  export function autonomousRunsPath(root) {
@@ -26,8 +26,12 @@ export async function createAutonomousRun(root, opts) {
26
26
  id,
27
27
  taskId: opts.taskId,
28
28
  gates: opts.gates,
29
+ ...(opts.mode ? { mode: opts.mode } : {}),
29
30
  maxIterations: opts.maxIterations,
30
31
  ...(opts.phaseSequence ? { phaseSequence: opts.phaseSequence } : {}),
32
+ ...(opts.phaseDefinitions
33
+ ? { phaseDefinitions: opts.phaseDefinitions }
34
+ : {}),
31
35
  qaIterations: 0,
32
36
  phases: skippedPhases,
33
37
  status: "running",
@@ -43,8 +47,10 @@ export async function createAutonomousRun(root, opts) {
43
47
  metadata: {
44
48
  runId: run.id,
45
49
  gates: opts.gates,
50
+ mode: opts.mode ?? "new",
46
51
  maxIterations: opts.maxIterations,
47
52
  phaseSequence: opts.phaseSequence,
53
+ phaseDefinitions: opts.phaseDefinitions,
48
54
  skippedPhases: opts.skippedPhases?.map((phase) => phase.phase) ?? [],
49
55
  },
50
56
  });
@@ -70,7 +76,7 @@ export async function persistRun(root, run) {
70
76
  if (current?.status === "canceled" && run.status !== "canceled") {
71
77
  return;
72
78
  }
73
- await appendFile(file, `${JSON.stringify(run)}\n`, "utf8");
79
+ await appendJsonLine(file, run);
74
80
  }
75
81
  async function latestRuns(root) {
76
82
  const file = autonomousRunsPath(root);
@@ -1 +1 @@
1
- {"version":3,"file":"autonomous-run-store.js","sourceRoot":"","sources":["../src/autonomous-run-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"autonomous-run-store.js","sourceRoot":"","sources":["../src/autonomous-run-store.ts"],"names":[],"mappings":"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"}
@@ -32,5 +32,9 @@ export const AUTONOMOUS_PHASE_SEQUENCE = [
32
32
  },
33
33
  ];
34
34
  // Gate transitions that require human approval in 'phase' mode.
35
- export const PHASE_GATES = new Set(["po→architect", "qa→release"]);
35
+ export const PHASE_GATES = new Set([
36
+ "po→architect",
37
+ "architect→architecture_challenge",
38
+ "qa→release",
39
+ ]);
36
40
  //# sourceMappingURL=autonomous-workflow-constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autonomous-workflow-constants.js","sourceRoot":"","sources":["../src/autonomous-workflow-constants.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,yBAAyB,GAIjC;IACH;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,sDAAsD;KAChE;IACD;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,2DAA2D;KACrE;IACD;QACE,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,0DAA0D;KACpE;IACD;QACE,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,4CAA4C;KACtD;IACD;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yDAAyD;KACnE;IACD;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,8CAA8C;KACxD;CACF,CAAC;AAKF,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"autonomous-workflow-constants.js","sourceRoot":"","sources":["../src/autonomous-workflow-constants.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,CAAC,MAAM,yBAAyB,GAIjC;IACH;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,sDAAsD;KAChE;IACD;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,2DAA2D;KACrE;IACD;QACE,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,0DAA0D;KACpE;IACD;QACE,KAAK,EAAE,WAAW;QAClB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,4CAA4C;KACtD;IACD;QACE,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,yDAAyD;KACnE;IACD;QACE,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,8CAA8C;KACxD;CACF,CAAC;AAKF,gEAAgE;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS;IACzC,cAAc;IACd,kCAAkC;IAClC,YAAY;CACb,CAAC,CAAC"}
@@ -1,7 +1,10 @@
1
- import type { BenchmarkResult, BenchmarkSummary, EstimateInput, EstimateRecord, VelocityReport } from "./types.js";
1
+ import type { BenchmarkResult, BenchmarkSummary, EstimateCalibration, EstimateInput, EstimateRecord, VelocityReport } from "./types.js";
2
2
  export declare const ESTIMATES_FILE = "estimates.jsonl";
3
3
  export declare function estimatesPath(root: string): string;
4
4
  export declare function recordEstimate(root: string, input: EstimateInput): Promise<EstimateRecord>;
5
+ export declare function calibrateEstimate(root: string, input: EstimateInput, options?: {
6
+ ignoreHistory?: boolean;
7
+ }): Promise<EstimateCalibration>;
5
8
  export declare function readEstimate(root: string, taskId: string): Promise<EstimateRecord | undefined>;
6
9
  export declare function listEstimates(root: string): Promise<EstimateRecord[]>;
7
10
  export declare function computeBenchmark(root: string, taskId: string): Promise<BenchmarkResult>;
package/dist/benchmark.js CHANGED
@@ -4,6 +4,7 @@ import path from "node:path";
4
4
  import { ensureDir, resolveWorkflowPath } from "./fs-utils.js";
5
5
  import { appendEvent, loadWorkspace, readEvents } from "./workspace.js";
6
6
  import { listAutonomousRuns } from "./autonomous-workflow.js";
7
+ import { manualEffortBreakdown, pendingEffortBreakdown, workflowEffortBreakdown, } from "./effort-classification.js";
7
8
  export const ESTIMATES_FILE = "estimates.jsonl";
8
9
  const MS_PER_HOUR = 1000 * 60 * 60;
9
10
  const MS_PER_DAY = MS_PER_HOUR * 24;
@@ -23,6 +24,7 @@ export async function recordEstimate(root, input) {
23
24
  sizingLabel: input.sizingLabel,
24
25
  soloEstimateDays: input.soloEstimateDays,
25
26
  aiUnguidedEstimateDays: input.aiUnguidedEstimateDays,
27
+ aiGuidedEstimateDays: input.aiGuidedEstimateDays,
26
28
  confidence: input.confidence,
27
29
  declaredBy: input.declaredBy,
28
30
  declaredAt: now,
@@ -34,17 +36,64 @@ export async function recordEstimate(root, input) {
34
36
  type: "ESTIMATE_RECORDED",
35
37
  taskId: input.taskId,
36
38
  actor: input.declaredBy,
37
- summary: `Estimate recorded: solo=${input.soloEstimateDays}d AI=${input.aiUnguidedEstimateDays}d sizing=${input.sizingLabel}`,
39
+ summary: `Estimate recorded: solo=${input.soloEstimateDays}d AI-unguided=${input.aiUnguidedEstimateDays}d AI-guided=${input.aiGuidedEstimateDays}d sizing=${input.sizingLabel}`,
38
40
  metadata: {
39
41
  estimateId: record.id,
40
42
  sizingLabel: input.sizingLabel,
41
43
  soloEstimateDays: input.soloEstimateDays,
42
44
  aiUnguidedEstimateDays: input.aiUnguidedEstimateDays,
45
+ aiGuidedEstimateDays: input.aiGuidedEstimateDays,
43
46
  confidence: input.confidence,
44
47
  },
45
48
  });
46
49
  return record;
47
50
  }
51
+ export async function calibrateEstimate(root, input, options = {}) {
52
+ const baselineEstimateDays = input.aiGuidedEstimateDays;
53
+ if (options.ignoreHistory) {
54
+ return {
55
+ baselineEstimateDays,
56
+ historicalMedian: null,
57
+ variance: null,
58
+ calibrationNote: "Historical calibration ignored by --ignore-history.",
59
+ sampleSize: 0,
60
+ ignored: true,
61
+ };
62
+ }
63
+ const estimates = await listEstimates(root);
64
+ const actuals = [];
65
+ for (const estimate of estimates) {
66
+ if (estimate.taskId === input.taskId)
67
+ continue;
68
+ if (estimate.sizingLabel !== input.sizingLabel)
69
+ continue;
70
+ const benchmark = await computeBenchmark(root, estimate.taskId).catch(() => null);
71
+ if (benchmark?.status === "complete" && benchmark.actualDays !== null) {
72
+ actuals.push(benchmark.actualDays);
73
+ }
74
+ }
75
+ if (actuals.length < 2) {
76
+ return {
77
+ baselineEstimateDays,
78
+ historicalMedian: null,
79
+ variance: null,
80
+ calibrationNote: `Insufficient comparable benchmark history (${actuals.length}/2).`,
81
+ sampleSize: actuals.length,
82
+ ignored: false,
83
+ };
84
+ }
85
+ const historicalMedian = median(actuals);
86
+ const variance = Math.round(((baselineEstimateDays - historicalMedian) / historicalMedian) * 100);
87
+ const direction = variance === 0 ? "matches" : variance > 0 ? "above" : "below";
88
+ return {
89
+ baselineEstimateDays,
90
+ historicalMedian,
91
+ variance,
92
+ calibrationNote: `AI-guided baseline is ${Math.abs(variance)}% ${direction} historical median for ${input.sizingLabel} work.`,
93
+ sampleSize: actuals.length,
94
+ ignored: false,
95
+ };
96
+ }
48
97
  export async function readEstimate(root, taskId) {
49
98
  const file = estimatesPath(root);
50
99
  if (!existsSync(file))
@@ -55,7 +104,7 @@ export async function readEstimate(root, taskId) {
55
104
  .filter(Boolean);
56
105
  const latest = new Map();
57
106
  for (const line of lines) {
58
- const r = JSON.parse(line);
107
+ const r = parseEstimateRecord(line);
59
108
  latest.set(r.taskId, r);
60
109
  }
61
110
  return latest.get(taskId);
@@ -70,11 +119,26 @@ export async function listEstimates(root) {
70
119
  .filter(Boolean);
71
120
  const latest = new Map();
72
121
  for (const line of lines) {
73
- const r = JSON.parse(line);
122
+ const r = parseEstimateRecord(line);
74
123
  latest.set(r.taskId, r);
75
124
  }
76
125
  return [...latest.values()];
77
126
  }
127
+ function parseEstimateRecord(line) {
128
+ const record = JSON.parse(line);
129
+ return {
130
+ ...record,
131
+ aiGuidedEstimateDays: record.aiGuidedEstimateDays ?? record.aiUnguidedEstimateDays,
132
+ };
133
+ }
134
+ function median(values) {
135
+ const sorted = [...values].sort((a, b) => a - b);
136
+ const middle = Math.floor(sorted.length / 2);
137
+ const lower = sorted[Math.max(0, middle - 1)] ?? 0;
138
+ const upper = sorted[middle] ?? lower;
139
+ const value = sorted.length % 2 === 0 ? (lower + upper) / 2 : upper;
140
+ return Math.round(value * 100) / 100;
141
+ }
78
142
  export async function computeBenchmark(root, taskId) {
79
143
  const estimate = await readEstimate(root, taskId);
80
144
  if (!estimate)
@@ -85,36 +149,39 @@ export async function computeBenchmark(root, taskId) {
85
149
  if (!taskRun) {
86
150
  const lifecycleActual = await computeTaskLifecycleDuration(root, taskId);
87
151
  if (lifecycleActual !== null) {
88
- const vsSoloPct = estimateDeltaPct(lifecycleActual.days, estimate.soloEstimateDays);
89
- const vsAiUnguidedPct = estimateDeltaPct(lifecycleActual.days, estimate.aiUnguidedEstimateDays);
90
- return {
152
+ return benchmarkFromTaskDuration({
153
+ estimate,
154
+ quality,
155
+ source: "task-lifecycle",
91
156
  taskId,
92
- sizingLabel: estimate.sizingLabel,
93
- soloEstimateDays: estimate.soloEstimateDays,
94
- aiUnguidedEstimateDays: estimate.aiUnguidedEstimateDays,
95
- actualSource: "task-lifecycle",
96
- actualDays: lifecycleActual.days,
97
- actualHours: lifecycleActual.hours,
98
- vsSoloPct,
99
- vsAiUnguidedPct,
100
- qaIterations: 0,
101
- phaseDurations: [],
157
+ timing: lifecycleActual,
158
+ });
159
+ }
160
+ const timestampActual = await computeTaskTimestampDuration(root, taskId);
161
+ if (timestampActual !== null) {
162
+ return benchmarkFromTaskDuration({
163
+ estimate,
102
164
  quality,
103
- status: "complete",
104
- };
165
+ source: "task-timestamps",
166
+ taskId,
167
+ timing: timestampActual,
168
+ });
105
169
  }
106
170
  return {
107
171
  taskId,
108
172
  sizingLabel: estimate.sizingLabel,
109
173
  soloEstimateDays: estimate.soloEstimateDays,
110
174
  aiUnguidedEstimateDays: estimate.aiUnguidedEstimateDays,
175
+ aiGuidedEstimateDays: estimate.aiGuidedEstimateDays,
111
176
  actualSource: "none",
112
177
  actualDays: null,
113
178
  actualHours: null,
114
179
  vsSoloPct: null,
115
180
  vsAiUnguidedPct: null,
181
+ vsAiGuidedPct: null,
116
182
  qaIterations: 0,
117
183
  phaseDurations: [],
184
+ effortBreakdown: pendingEffortBreakdown(estimate),
118
185
  quality,
119
186
  status: "pending",
120
187
  };
@@ -148,24 +215,31 @@ export async function computeBenchmark(root, taskId) {
148
215
  : null,
149
216
  };
150
217
  });
218
+ const effortBreakdown = workflowEffortBreakdown(estimate, taskRun, phaseDurations);
151
219
  const vsSoloPct = actualDays !== null
152
220
  ? estimateDeltaPct(actualDays, estimate.soloEstimateDays)
153
221
  : null;
154
222
  const vsAiUnguidedPct = actualDays !== null
155
223
  ? estimateDeltaPct(actualDays, estimate.aiUnguidedEstimateDays)
156
224
  : null;
225
+ const vsAiGuidedPct = actualDays !== null
226
+ ? estimateDeltaPct(actualDays, estimate.aiGuidedEstimateDays)
227
+ : null;
157
228
  return {
158
229
  taskId,
159
230
  sizingLabel: estimate.sizingLabel,
160
231
  soloEstimateDays: estimate.soloEstimateDays,
161
232
  aiUnguidedEstimateDays: estimate.aiUnguidedEstimateDays,
233
+ aiGuidedEstimateDays: estimate.aiGuidedEstimateDays,
162
234
  actualSource: actualDays !== null ? "phase-timeline" : "none",
163
235
  actualDays,
164
236
  actualHours,
165
237
  vsSoloPct,
166
238
  vsAiUnguidedPct,
239
+ vsAiGuidedPct,
167
240
  qaIterations: taskRun.qaIterations,
168
241
  phaseDurations,
242
+ effortBreakdown,
169
243
  quality,
170
244
  status: "complete",
171
245
  };
@@ -191,6 +265,42 @@ async function computeTaskLifecycleDuration(root, taskId) {
191
265
  }
192
266
  return durationParts(doneTime - startedTime);
193
267
  }
268
+ function benchmarkFromTaskDuration({ estimate, quality, source, taskId, timing, }) {
269
+ const vsSoloPct = estimateDeltaPct(timing.days, estimate.soloEstimateDays);
270
+ const vsAiUnguidedPct = estimateDeltaPct(timing.days, estimate.aiUnguidedEstimateDays);
271
+ const vsAiGuidedPct = estimateDeltaPct(timing.days, estimate.aiGuidedEstimateDays);
272
+ return {
273
+ taskId,
274
+ sizingLabel: estimate.sizingLabel,
275
+ soloEstimateDays: estimate.soloEstimateDays,
276
+ aiUnguidedEstimateDays: estimate.aiUnguidedEstimateDays,
277
+ aiGuidedEstimateDays: estimate.aiGuidedEstimateDays,
278
+ actualSource: source,
279
+ actualDays: timing.days,
280
+ actualHours: timing.hours,
281
+ vsSoloPct,
282
+ vsAiUnguidedPct,
283
+ vsAiGuidedPct,
284
+ qaIterations: 0,
285
+ phaseDurations: [],
286
+ effortBreakdown: manualEffortBreakdown(estimate, timing),
287
+ quality,
288
+ status: "complete",
289
+ };
290
+ }
291
+ async function computeTaskTimestampDuration(root, taskId) {
292
+ const workspace = await loadWorkspace(root);
293
+ const task = workspace.tasks.find((candidate) => candidate.id === taskId);
294
+ if (!task || task.status !== "done" || !task.claimedAt || !task.doneAt) {
295
+ return null;
296
+ }
297
+ const claimedTime = new Date(task.claimedAt).getTime();
298
+ const doneTime = new Date(task.doneAt).getTime();
299
+ if (!Number.isFinite(claimedTime) || !Number.isFinite(doneTime)) {
300
+ return null;
301
+ }
302
+ return durationParts(doneTime - claimedTime);
303
+ }
194
304
  function estimateDeltaPct(actualDays, estimateDays) {
195
305
  return Math.round(((actualDays - estimateDays) / estimateDays) * 100);
196
306
  }
@@ -264,7 +374,17 @@ export async function summarizeBenchmark(root) {
264
374
  ? Math.round(withActuals.reduce((sum, s) => sum + (s.vsAiUnguidedPct ?? 0), 0) /
265
375
  totalWithActuals)
266
376
  : null;
267
- return { stories, totalWithActuals, avgVsSoloPct, avgVsAiUnguidedPct };
377
+ const avgVsAiGuidedPct = totalWithActuals > 0
378
+ ? Math.round(withActuals.reduce((sum, s) => sum + (s.vsAiGuidedPct ?? 0), 0) /
379
+ totalWithActuals)
380
+ : null;
381
+ return {
382
+ stories,
383
+ totalWithActuals,
384
+ avgVsSoloPct,
385
+ avgVsAiUnguidedPct,
386
+ avgVsAiGuidedPct,
387
+ };
268
388
  }
269
389
  export async function computeVelocity(root) {
270
390
  const summary = await summarizeBenchmark(root);
@@ -307,6 +427,7 @@ export async function computeVelocity(root) {
307
427
  avgActualDaysPerStory: avgActualDays,
308
428
  avgVsSoloPct: summary.avgVsSoloPct,
309
429
  avgVsAiUnguidedPct: summary.avgVsAiUnguidedPct,
430
+ avgVsAiGuidedPct: summary.avgVsAiGuidedPct,
310
431
  weeks,
311
432
  trend,
312
433
  };