@jterrats/open-orchestra 0.5.7 → 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 (249) 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 +169 -32
  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-store.js +3 -3
  9. package/dist/autonomous-run-store.js.map +1 -1
  10. package/dist/benchmark.d.ts +4 -1
  11. package/dist/benchmark.js +93 -4
  12. package/dist/benchmark.js.map +1 -1
  13. package/dist/cli.js +73 -2
  14. package/dist/cli.js.map +1 -1
  15. package/dist/collaboration-flows.js +3 -5
  16. package/dist/collaboration-flows.js.map +1 -1
  17. package/dist/collection-utils.d.ts +3 -0
  18. package/dist/collection-utils.js +10 -0
  19. package/dist/collection-utils.js.map +1 -0
  20. package/dist/command-manifest.d.ts +12 -1
  21. package/dist/command-manifest.js +213 -10
  22. package/dist/command-manifest.js.map +1 -1
  23. package/dist/commands.d.ts +10 -5
  24. package/dist/commands.js +16 -6
  25. package/dist/commands.js.map +1 -1
  26. package/dist/config-migrations.d.ts +24 -0
  27. package/dist/config-migrations.js +102 -0
  28. package/dist/config-migrations.js.map +1 -0
  29. package/dist/constants.d.ts +2 -0
  30. package/dist/constants.js +22 -0
  31. package/dist/constants.js.map +1 -1
  32. package/dist/dashboard-commands.d.ts +2 -0
  33. package/dist/dashboard-commands.js +14 -0
  34. package/dist/dashboard-commands.js.map +1 -0
  35. package/dist/defaults.d.ts +13 -0
  36. package/dist/defaults.js +13 -0
  37. package/dist/defaults.js.map +1 -1
  38. package/dist/delegation-decision.js +23 -8
  39. package/dist/delegation-decision.js.map +1 -1
  40. package/dist/delivery-commands.js +5 -0
  41. package/dist/delivery-commands.js.map +1 -1
  42. package/dist/delivery-dashboard-charts.d.ts +4 -0
  43. package/dist/delivery-dashboard-charts.js +156 -0
  44. package/dist/delivery-dashboard-charts.js.map +1 -0
  45. package/dist/delivery-dashboard-html.d.ts +2 -0
  46. package/dist/delivery-dashboard-html.js +115 -0
  47. package/dist/delivery-dashboard-html.js.map +1 -0
  48. package/dist/delivery-dashboard-types.d.ts +78 -0
  49. package/dist/delivery-dashboard-types.js +2 -0
  50. package/dist/delivery-dashboard-types.js.map +1 -0
  51. package/dist/delivery-dashboard.d.ts +8 -0
  52. package/dist/delivery-dashboard.js +124 -0
  53. package/dist/delivery-dashboard.js.map +1 -0
  54. package/dist/effort-classification.d.ts +7 -0
  55. package/dist/effort-classification.js +72 -0
  56. package/dist/effort-classification.js.map +1 -0
  57. package/dist/extension-commands.d.ts +3 -0
  58. package/dist/extension-commands.js +40 -0
  59. package/dist/extension-commands.js.map +1 -0
  60. package/dist/extensions.d.ts +22 -0
  61. package/dist/extensions.js +126 -0
  62. package/dist/extensions.js.map +1 -0
  63. package/dist/github.d.ts +2 -0
  64. package/dist/github.js +15 -3
  65. package/dist/github.js.map +1 -1
  66. package/dist/health-checks.js +51 -0
  67. package/dist/health-checks.js.map +1 -1
  68. package/dist/lucid-story-map.d.ts +73 -0
  69. package/dist/lucid-story-map.js +112 -0
  70. package/dist/lucid-story-map.js.map +1 -0
  71. package/dist/mcp-integrations.d.ts +19 -0
  72. package/dist/mcp-integrations.js +58 -0
  73. package/dist/mcp-integrations.js.map +1 -0
  74. package/dist/mcp-tool-adapter.d.ts +21 -0
  75. package/dist/mcp-tool-adapter.js +56 -0
  76. package/dist/mcp-tool-adapter.js.map +1 -0
  77. package/dist/metrics-commands.js +47 -13
  78. package/dist/metrics-commands.js.map +1 -1
  79. package/dist/model-commands.d.ts +5 -0
  80. package/dist/model-commands.js +95 -1
  81. package/dist/model-commands.js.map +1 -1
  82. package/dist/model-providers.js +13 -1
  83. package/dist/model-providers.js.map +1 -1
  84. package/dist/package-update-check.d.ts +18 -0
  85. package/dist/package-update-check.js +20 -0
  86. package/dist/package-update-check.js.map +1 -1
  87. package/dist/phase-executor.d.ts +1 -0
  88. package/dist/phase-executor.js +115 -14
  89. package/dist/phase-executor.js.map +1 -1
  90. package/dist/phase-playbooks.d.ts +15 -0
  91. package/dist/phase-playbooks.js +82 -0
  92. package/dist/phase-playbooks.js.map +1 -1
  93. package/dist/planning-commands.d.ts +1 -0
  94. package/dist/planning-commands.js +24 -1
  95. package/dist/planning-commands.js.map +1 -1
  96. package/dist/project-detection.js +9 -7
  97. package/dist/project-detection.js.map +1 -1
  98. package/dist/prompt-registry-update.d.ts +2 -0
  99. package/dist/prompt-registry-update.js +5 -1
  100. package/dist/prompt-registry-update.js.map +1 -1
  101. package/dist/prompt-registry-validation.js +39 -2
  102. package/dist/prompt-registry-validation.js.map +1 -1
  103. package/dist/qa-commands.d.ts +2 -0
  104. package/dist/qa-commands.js +18 -0
  105. package/dist/qa-commands.js.map +1 -0
  106. package/dist/qa-coverage.d.ts +24 -0
  107. package/dist/qa-coverage.js +189 -0
  108. package/dist/qa-coverage.js.map +1 -0
  109. package/dist/qa-readiness.d.ts +5 -0
  110. package/dist/qa-readiness.js +26 -0
  111. package/dist/qa-readiness.js.map +1 -0
  112. package/dist/refresh-generated.d.ts +10 -1
  113. package/dist/refresh-generated.js +83 -6
  114. package/dist/refresh-generated.js.map +1 -1
  115. package/dist/release-candidate.d.ts +9 -1
  116. package/dist/release-candidate.js +52 -1
  117. package/dist/release-candidate.js.map +1 -1
  118. package/dist/release-commands.js +161 -8
  119. package/dist/release-commands.js.map +1 -1
  120. package/dist/release-readiness.d.ts +33 -0
  121. package/dist/release-readiness.js +187 -3
  122. package/dist/release-readiness.js.map +1 -1
  123. package/dist/runtime-bootstrap.js +1 -1
  124. package/dist/runtime-bootstrap.js.map +1 -1
  125. package/dist/runtime-commands.d.ts +2 -0
  126. package/dist/runtime-commands.js +77 -0
  127. package/dist/runtime-commands.js.map +1 -1
  128. package/dist/runtime-execution-renderer.d.ts +3 -2
  129. package/dist/runtime-execution-renderer.js +19 -1
  130. package/dist/runtime-execution-renderer.js.map +1 -1
  131. package/dist/runtime-execution.d.ts +2 -1
  132. package/dist/runtime-execution.js +71 -11
  133. package/dist/runtime-execution.js.map +1 -1
  134. package/dist/runtime-guardrails.d.ts +26 -0
  135. package/dist/runtime-guardrails.js +168 -0
  136. package/dist/runtime-guardrails.js.map +1 -0
  137. package/dist/setup-agents-import.js +5 -3
  138. package/dist/setup-agents-import.js.map +1 -1
  139. package/dist/skills-commands.d.ts +4 -0
  140. package/dist/skills-commands.js +55 -2
  141. package/dist/skills-commands.js.map +1 -1
  142. package/dist/skills-memory.d.ts +36 -2
  143. package/dist/skills-memory.js +165 -6
  144. package/dist/skills-memory.js.map +1 -1
  145. package/dist/skills-planning.js +2 -4
  146. package/dist/skills-planning.js.map +1 -1
  147. package/dist/skills-render.js +2 -4
  148. package/dist/skills-render.js.map +1 -1
  149. package/dist/skills.d.ts +1 -1
  150. package/dist/skills.js +1 -1
  151. package/dist/skills.js.map +1 -1
  152. package/dist/sprint-commands.js +2 -1
  153. package/dist/sprint-commands.js.map +1 -1
  154. package/dist/subagent-protocol.js +3 -5
  155. package/dist/subagent-protocol.js.map +1 -1
  156. package/dist/support-commands.d.ts +2 -0
  157. package/dist/support-commands.js +18 -0
  158. package/dist/support-commands.js.map +1 -0
  159. package/dist/support-diagnostics.d.ts +49 -0
  160. package/dist/support-diagnostics.js +86 -0
  161. package/dist/support-diagnostics.js.map +1 -0
  162. package/dist/task-graph-commands.js +5 -3
  163. package/dist/task-graph-commands.js.map +1 -1
  164. package/dist/telemetry-redaction.js +8 -1
  165. package/dist/telemetry-redaction.js.map +1 -1
  166. package/dist/tool-commands.d.ts +3 -0
  167. package/dist/tool-commands.js +62 -0
  168. package/dist/tool-commands.js.map +1 -1
  169. package/dist/tracker-adapters.d.ts +71 -0
  170. package/dist/tracker-adapters.js +186 -0
  171. package/dist/tracker-adapters.js.map +1 -0
  172. package/dist/tracker-commands.d.ts +2 -0
  173. package/dist/tracker-commands.js +119 -0
  174. package/dist/tracker-commands.js.map +1 -0
  175. package/dist/types/metrics.d.ts +24 -0
  176. package/dist/types/model-config.d.ts +35 -0
  177. package/dist/types/runtime.d.ts +56 -0
  178. package/dist/types/skills.d.ts +2 -0
  179. package/dist/types/tasks.d.ts +6 -0
  180. package/dist/types/workflow-run.d.ts +17 -0
  181. package/dist/types.d.ts +4 -4
  182. package/dist/types.js.map +1 -1
  183. package/dist/upgrade-commands.js +13 -4
  184. package/dist/upgrade-commands.js.map +1 -1
  185. package/dist/validation.js +2 -2
  186. package/dist/validation.js.map +1 -1
  187. package/dist/visual-validation.d.ts +81 -0
  188. package/dist/visual-validation.js +290 -0
  189. package/dist/visual-validation.js.map +1 -0
  190. package/dist/web-action-security.d.ts +11 -0
  191. package/dist/web-action-security.js +45 -0
  192. package/dist/web-action-security.js.map +1 -0
  193. package/dist/web-api-read-routes.js +101 -1
  194. package/dist/web-api-read-routes.js.map +1 -1
  195. package/dist/web-api.js +507 -5
  196. package/dist/web-api.js.map +1 -1
  197. package/dist/web-artifacts.d.ts +55 -0
  198. package/dist/web-artifacts.js +222 -0
  199. package/dist/web-artifacts.js.map +1 -0
  200. package/dist/web-console/assets/index-C9lx-V42.css +1 -0
  201. package/dist/web-console/assets/index-M3S0g1GK.js +11 -0
  202. package/dist/web-console/index.html +13 -0
  203. package/dist/web-console.js +9 -3
  204. package/dist/web-console.js.map +1 -1
  205. package/dist/web-recovery.d.ts +30 -0
  206. package/dist/web-recovery.js +163 -0
  207. package/dist/web-recovery.js.map +1 -0
  208. package/dist/web-workflow-progress.d.ts +41 -0
  209. package/dist/web-workflow-progress.js +114 -0
  210. package/dist/web-workflow-progress.js.map +1 -0
  211. package/dist/workflow-approval-service.d.ts +2 -1
  212. package/dist/workflow-approval-service.js +72 -0
  213. package/dist/workflow-approval-service.js.map +1 -1
  214. package/dist/workflow-evidence-service.js +8 -1
  215. package/dist/workflow-evidence-service.js.map +1 -1
  216. package/dist/workflow-gates.d.ts +1 -0
  217. package/dist/workflow-gates.js +57 -0
  218. package/dist/workflow-gates.js.map +1 -1
  219. package/dist/workflow-run-commands.js +13 -1
  220. package/dist/workflow-run-commands.js.map +1 -1
  221. package/dist/workflow-services.d.ts +16 -12
  222. package/dist/workflow-services.js +311 -253
  223. package/dist/workflow-services.js.map +1 -1
  224. package/dist/workflow-task-service.d.ts +11 -0
  225. package/dist/workflow-task-service.js +242 -0
  226. package/dist/workflow-task-service.js.map +1 -0
  227. package/dist/workspace-validator.js +109 -3
  228. package/dist/workspace-validator.js.map +1 -1
  229. package/dist/workspace.js +8 -2
  230. package/dist/workspace.js.map +1 -1
  231. package/docs/adoption-guide.md +147 -0
  232. package/docs/autonomous-workflow.md +118 -27
  233. package/docs/benchmark.md +15 -7
  234. package/docs/command-contracts.md +18 -1
  235. package/docs/core-command-surface.md +59 -13
  236. package/docs/end-to-end-demo.md +1 -0
  237. package/docs/extension-contracts.md +83 -0
  238. package/docs/orchestra-mvp.md +83 -3
  239. package/docs/persona-workflows.md +32 -0
  240. package/docs/release-test-matrix.md +42 -0
  241. package/docs/runtime-adapters.md +92 -0
  242. package/docs/runtime-llm-flow.md +13 -0
  243. package/docs/setup-agents-applicability-review.md +173 -0
  244. package/docs/source-of-truth-and-agent-learning.md +14 -0
  245. package/docs/traceability-flow.md +5 -1
  246. package/docs/tracker-adapter-contract.md +10 -1
  247. package/docs/web-console-qa.md +35 -0
  248. package/package.json +12 -6
  249. package/rules/development-engineering.mdc +66 -0
@@ -0,0 +1,71 @@
1
+ export type TrackerProvider = "github" | "jira" | "gitlab" | "bitbucket";
2
+ export type TrackerAdapterTransport = "cli" | "mcp-skill";
3
+ export type TrackerIssueState = "open" | "in_progress" | "blocked" | "done";
4
+ export interface TrackerAdapterContract {
5
+ tracker: TrackerProvider;
6
+ nativeCli: string;
7
+ mcpSkill: string;
8
+ operations: Array<"issue-read" | "comment-upsert" | "close">;
9
+ }
10
+ export interface TrackerTransportSelection {
11
+ tracker: TrackerProvider;
12
+ transport: TrackerAdapterTransport;
13
+ reason: string;
14
+ }
15
+ export interface NormalizedTrackerIssue {
16
+ tracker: TrackerProvider;
17
+ remoteId: string;
18
+ url?: string;
19
+ title: string;
20
+ body?: string;
21
+ state?: TrackerIssueState;
22
+ labels: string[];
23
+ assignees: string[];
24
+ acceptanceCriteria: string[];
25
+ updatedAt?: string;
26
+ }
27
+ export interface TrackerSyncPlan {
28
+ tracker: TrackerProvider;
29
+ remoteId: string;
30
+ taskId: string;
31
+ action: "create" | "update" | "none" | "conflict";
32
+ conflicts: string[];
33
+ mappedFields: string[];
34
+ }
35
+ export declare function listTrackerAdapterContracts(): TrackerAdapterContract[];
36
+ export declare function getTrackerAdapterContract(tracker: string): TrackerAdapterContract;
37
+ export declare function selectTrackerTransport({ tracker, requestedTransport, cliAvailable, mcpSkillAvailable, }: {
38
+ tracker: string;
39
+ requestedTransport?: TrackerAdapterTransport;
40
+ cliAvailable: boolean;
41
+ mcpSkillAvailable: boolean;
42
+ }): TrackerTransportSelection;
43
+ export declare function normalizeTrackerIssue(input: {
44
+ tracker: string;
45
+ remoteId: string | number;
46
+ url?: unknown;
47
+ title: unknown;
48
+ body?: unknown;
49
+ state?: unknown;
50
+ labels?: unknown;
51
+ assignees?: unknown;
52
+ acceptanceCriteria?: unknown;
53
+ updatedAt?: unknown;
54
+ }): NormalizedTrackerIssue;
55
+ export declare function defaultTrackerTaskId(issue: NormalizedTrackerIssue): string;
56
+ export declare function trackerIssueTaskFields(issue: NormalizedTrackerIssue): {
57
+ title: string;
58
+ backlogItem: string;
59
+ goal?: string;
60
+ acceptanceCriteria?: string[];
61
+ risks?: string[];
62
+ status?: "pending" | "in_progress" | "blocked" | "done";
63
+ };
64
+ export declare function planTrackerSync(input: {
65
+ issue: NormalizedTrackerIssue;
66
+ taskId?: string;
67
+ existingTask?: {
68
+ title: string;
69
+ backlogItem?: string;
70
+ };
71
+ }): TrackerSyncPlan;
@@ -0,0 +1,186 @@
1
+ const TRACKER_CONTRACTS = [
2
+ contract("github", "gh", "github-mcp"),
3
+ contract("jira", "jira", "jira-mcp"),
4
+ contract("gitlab", "glab", "gitlab-mcp"),
5
+ contract("bitbucket", "bb", "bitbucket-mcp"),
6
+ ];
7
+ export function listTrackerAdapterContracts() {
8
+ return TRACKER_CONTRACTS.map((item) => ({
9
+ ...item,
10
+ operations: [...item.operations],
11
+ }));
12
+ }
13
+ export function getTrackerAdapterContract(tracker) {
14
+ const normalized = normalizeTrackerProvider(tracker);
15
+ const contract = TRACKER_CONTRACTS.find((item) => item.tracker === normalized);
16
+ if (!contract) {
17
+ throw new Error(`unsupported tracker: ${tracker}`);
18
+ }
19
+ return { ...contract, operations: [...contract.operations] };
20
+ }
21
+ export function selectTrackerTransport({ tracker, requestedTransport, cliAvailable, mcpSkillAvailable, }) {
22
+ const contract = getTrackerAdapterContract(tracker);
23
+ if (requestedTransport === "cli") {
24
+ if (!cliAvailable) {
25
+ throw new Error(`${contract.tracker} CLI transport requires ${contract.nativeCli}`);
26
+ }
27
+ return {
28
+ tracker: contract.tracker,
29
+ transport: "cli",
30
+ reason: `${contract.nativeCli} CLI selected explicitly`,
31
+ };
32
+ }
33
+ if (requestedTransport === "mcp-skill") {
34
+ if (!mcpSkillAvailable) {
35
+ throw new Error(`${contract.tracker} MCP skill transport requires ${contract.mcpSkill}`);
36
+ }
37
+ return {
38
+ tracker: contract.tracker,
39
+ transport: "mcp-skill",
40
+ reason: `${contract.mcpSkill} selected explicitly`,
41
+ };
42
+ }
43
+ if (cliAvailable) {
44
+ return {
45
+ tracker: contract.tracker,
46
+ transport: "cli",
47
+ reason: `${contract.nativeCli} CLI available`,
48
+ };
49
+ }
50
+ if (mcpSkillAvailable) {
51
+ return {
52
+ tracker: contract.tracker,
53
+ transport: "mcp-skill",
54
+ reason: `${contract.nativeCli} unavailable; ${contract.mcpSkill} fallback available`,
55
+ };
56
+ }
57
+ throw new Error(`${contract.tracker} tracker sync requires ${contract.nativeCli} CLI or ${contract.mcpSkill} MCP skill`);
58
+ }
59
+ export function normalizeTrackerIssue(input) {
60
+ const tracker = normalizeTrackerProvider(input.tracker);
61
+ const state = normalizeTrackerIssueState(input.state);
62
+ if (typeof input.title !== "string" || input.title.trim() === "") {
63
+ throw new Error("tracker issue title is required");
64
+ }
65
+ return {
66
+ tracker,
67
+ remoteId: String(input.remoteId),
68
+ ...(typeof input.url === "string" && input.url.trim()
69
+ ? { url: input.url }
70
+ : {}),
71
+ title: input.title,
72
+ ...(typeof input.body === "string" ? { body: input.body } : {}),
73
+ ...(state ? { state } : {}),
74
+ labels: stringArray(input.labels),
75
+ assignees: stringArray(input.assignees),
76
+ acceptanceCriteria: stringArray(input.acceptanceCriteria),
77
+ ...(typeof input.updatedAt === "string" && input.updatedAt.trim()
78
+ ? { updatedAt: input.updatedAt }
79
+ : {}),
80
+ };
81
+ }
82
+ export function defaultTrackerTaskId(issue) {
83
+ return `${issue.tracker.toUpperCase()}-${issue.remoteId.replace(/[^a-z0-9]+/gi, "-").replace(/^-|-$/g, "")}`;
84
+ }
85
+ export function trackerIssueTaskFields(issue) {
86
+ const goal = issue.body ? firstSection(issue.body, "User Story") : undefined;
87
+ return {
88
+ title: issue.title,
89
+ backlogItem: issue.url ?? `${issue.tracker}:${issue.remoteId}`,
90
+ ...(goal ? { goal } : {}),
91
+ ...(issue.acceptanceCriteria.length > 0
92
+ ? { acceptanceCriteria: issue.acceptanceCriteria }
93
+ : {}),
94
+ ...(issue.labels.length > 0 ? { risks: issue.labels } : {}),
95
+ ...(issue.state ? { status: trackerStateToTaskStatus(issue.state) } : {}),
96
+ };
97
+ }
98
+ export function planTrackerSync(input) {
99
+ const taskId = input.taskId ?? defaultTrackerTaskId(input.issue);
100
+ const fields = trackerIssueTaskFields(input.issue);
101
+ if (!input.existingTask) {
102
+ return {
103
+ tracker: input.issue.tracker,
104
+ remoteId: input.issue.remoteId,
105
+ taskId,
106
+ action: "create",
107
+ conflicts: [],
108
+ mappedFields: mappedTrackerFields(fields),
109
+ };
110
+ }
111
+ const conflicts = [];
112
+ if (input.existingTask.backlogItem &&
113
+ input.existingTask.backlogItem !== fields.backlogItem) {
114
+ conflicts.push(`task ${taskId} is already linked to ${input.existingTask.backlogItem}`);
115
+ }
116
+ return {
117
+ tracker: input.issue.tracker,
118
+ remoteId: input.issue.remoteId,
119
+ taskId,
120
+ action: conflicts.length > 0
121
+ ? "conflict"
122
+ : input.existingTask.title === fields.title
123
+ ? "none"
124
+ : "update",
125
+ conflicts,
126
+ mappedFields: mappedTrackerFields(fields),
127
+ };
128
+ }
129
+ function contract(tracker, nativeCli, mcpSkill) {
130
+ return {
131
+ tracker,
132
+ nativeCli,
133
+ mcpSkill,
134
+ operations: ["issue-read", "comment-upsert", "close"],
135
+ };
136
+ }
137
+ function normalizeTrackerProvider(tracker) {
138
+ const normalized = tracker.toLowerCase().trim();
139
+ if (normalized === "github" ||
140
+ normalized === "jira" ||
141
+ normalized === "gitlab" ||
142
+ normalized === "bitbucket") {
143
+ return normalized;
144
+ }
145
+ throw new Error(`unsupported tracker: ${tracker}`);
146
+ }
147
+ function normalizeTrackerIssueState(value) {
148
+ if (typeof value !== "string") {
149
+ return undefined;
150
+ }
151
+ const normalized = value
152
+ .toLowerCase()
153
+ .trim()
154
+ .replace(/[-\s]+/g, "_");
155
+ if (normalized === "open" ||
156
+ normalized === "in_progress" ||
157
+ normalized === "blocked" ||
158
+ normalized === "done") {
159
+ return normalized;
160
+ }
161
+ return undefined;
162
+ }
163
+ function trackerStateToTaskStatus(state) {
164
+ if (state === "open")
165
+ return "pending";
166
+ return state;
167
+ }
168
+ function stringArray(value) {
169
+ return Array.isArray(value)
170
+ ? value.filter((item) => typeof item === "string")
171
+ : [];
172
+ }
173
+ function mappedTrackerFields(fields) {
174
+ return Object.entries(fields)
175
+ .filter(([, value]) => Array.isArray(value) ? value.length > 0 : value !== undefined)
176
+ .map(([key]) => key);
177
+ }
178
+ function firstSection(body, heading) {
179
+ const pattern = new RegExp(`##\\s+${escapeRegExp(heading)}\\s*\\n([\\s\\S]*?)(?=\\n##\\s+|$)`, "i");
180
+ const match = body.match(pattern);
181
+ return match?.[1]?.trim();
182
+ }
183
+ function escapeRegExp(value) {
184
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
185
+ }
186
+ //# sourceMappingURL=tracker-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker-adapters.js","sourceRoot":"","sources":["../src/tracker-adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { CliIo, CliOptions } from "./types.js";
2
+ export declare function trackerSyncCommand(options: CliOptions, io: CliIo): Promise<void>;
@@ -0,0 +1,119 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { requireArg } from "./args.js";
4
+ import { removeUndefined, stringOption, targetRootOption, } from "./command-utils.js";
5
+ import { normalizeTaskStatus } from "./constants.js";
6
+ import { resolveWorkspaceWritePath } from "./fs-utils.js";
7
+ import { normalizeTrackerIssue, defaultTrackerTaskId, planTrackerSync, trackerIssueTaskFields, } from "./tracker-adapters.js";
8
+ import { addEvidence, addTask, listTasks, updateTask, } from "./workflow-services.js";
9
+ export async function trackerSyncCommand(options, io) {
10
+ const root = targetRootOption(options);
11
+ const tracker = requireArg(options, "tracker");
12
+ const remoteId = requireArg(options, "remote");
13
+ const issueFile = stringOption(options["issue-file"]);
14
+ if (!issueFile) {
15
+ throw new Error("tracker sync requires --issue-file with normalized tracker issue JSON; live provider runners must inject an adapter");
16
+ }
17
+ const payload = await readIssuePayload(root, issueFile);
18
+ const issue = normalizeTrackerIssue({
19
+ tracker,
20
+ remoteId,
21
+ title: payload.title,
22
+ url: payload.url,
23
+ body: payload.body,
24
+ state: payload.state,
25
+ labels: payload.labels,
26
+ assignees: payload.assignees,
27
+ acceptanceCriteria: payload.acceptanceCriteria,
28
+ updatedAt: payload.updatedAt,
29
+ });
30
+ const tasks = await listTasks(root);
31
+ const taskId = stringOption(options.task);
32
+ const effectiveTaskId = taskId ?? undefined;
33
+ const existing = tasks.find((task) => task.id === (effectiveTaskId ?? defaultTrackerTaskId(issue)) ||
34
+ task.backlogItem === (issue.url ?? `${issue.tracker}:${issue.remoteId}`));
35
+ const plan = planTrackerSync({
36
+ issue,
37
+ ...(effectiveTaskId ? { taskId: effectiveTaskId } : {}),
38
+ ...(existing
39
+ ? {
40
+ existingTask: {
41
+ title: existing.title,
42
+ ...(existing.backlogItem
43
+ ? { backlogItem: existing.backlogItem }
44
+ : {}),
45
+ },
46
+ }
47
+ : {}),
48
+ });
49
+ if (plan.action === "conflict") {
50
+ throw new Error(`tracker sync conflict: ${plan.conflicts.join("; ")}`);
51
+ }
52
+ const fields = trackerIssueTaskFields(issue);
53
+ const ownerRole = stringOption(options.owner) ?? existing?.ownerRole ?? "developer";
54
+ const status = parseTaskStatus(stringOption(options.status)) ?? fields.status;
55
+ const taskInput = removeUndefined({
56
+ id: plan.taskId,
57
+ title: fields.title,
58
+ ownerRole,
59
+ dependencies: existing?.dependencies ?? [],
60
+ status,
61
+ backlogItem: fields.backlogItem,
62
+ goal: fields.goal ?? existing?.goal,
63
+ acceptanceCriteria: fields.acceptanceCriteria ?? existing?.acceptanceCriteria,
64
+ risks: fields.risks ?? existing?.risks,
65
+ qaGate: existing?.qaGate ??
66
+ defaultQaPlanForImportedExecution(status, issue.tracker, issue.remoteId),
67
+ });
68
+ if (!options["dry-run"]) {
69
+ if (plan.action === "create") {
70
+ await addTask(taskInput, root);
71
+ if (status && status !== "pending") {
72
+ await updateTask({ id: taskInput.id, status }, root);
73
+ }
74
+ }
75
+ else if (plan.action === "update") {
76
+ await updateTask(taskInput, root);
77
+ }
78
+ await addEvidence({
79
+ task: plan.taskId,
80
+ role: "developer",
81
+ type: "report",
82
+ summary: `${issue.tracker} issue ${issue.remoteId} synchronized from normalized tracker adapter (${plan.action})`,
83
+ }, root);
84
+ }
85
+ const result = {
86
+ ...plan,
87
+ dryRun: Boolean(options["dry-run"]),
88
+ task: taskInput,
89
+ issue,
90
+ };
91
+ if (options.json) {
92
+ io.log(JSON.stringify(result, null, 2));
93
+ return;
94
+ }
95
+ io.log(`${plan.tracker} ${plan.remoteId} -> ${plan.taskId}: ${plan.action}`);
96
+ }
97
+ async function readIssuePayload(root, issueFile) {
98
+ const issuePath = resolveWorkspaceWritePath(root, path.normalize(issueFile));
99
+ return JSON.parse(await readFile(issuePath, "utf8"));
100
+ }
101
+ function parseTaskStatus(value) {
102
+ if (!value) {
103
+ return undefined;
104
+ }
105
+ const status = normalizeTaskStatus(value);
106
+ if (!status) {
107
+ throw new Error(`invalid task status: ${value}`);
108
+ }
109
+ return status;
110
+ }
111
+ function defaultQaPlanForImportedExecution(status, tracker, remoteId) {
112
+ if (status !== "ready" && status !== "in_progress") {
113
+ return undefined;
114
+ }
115
+ return {
116
+ plan: `Validate imported ${tracker} issue ${remoteId} against mapped acceptance criteria, regression risk, and synchronization evidence before release.`,
117
+ };
118
+ }
119
+ //# sourceMappingURL=tracker-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker-commands.js","sourceRoot":"","sources":["../src/tracker-commands.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface EstimateRecord {
8
8
  sizingLabel: SizingLabel;
9
9
  soloEstimateDays: number;
10
10
  aiUnguidedEstimateDays: number;
11
+ aiGuidedEstimateDays: number;
11
12
  confidence: EstimateConfidence;
12
13
  declaredBy: string;
13
14
  declaredAt: string;
@@ -17,9 +18,18 @@ export interface EstimateInput {
17
18
  sizingLabel: SizingLabel;
18
19
  soloEstimateDays: number;
19
20
  aiUnguidedEstimateDays: number;
21
+ aiGuidedEstimateDays: number;
20
22
  confidence: EstimateConfidence;
21
23
  declaredBy: string;
22
24
  }
25
+ export interface EstimateCalibration {
26
+ baselineEstimateDays: number;
27
+ historicalMedian: number | null;
28
+ variance: number | null;
29
+ calibrationNote: string;
30
+ sampleSize: number;
31
+ ignored: boolean;
32
+ }
23
33
  export interface BenchmarkQualitySignals {
24
34
  reviewCount: number;
25
35
  blockingReviews: number;
@@ -30,18 +40,30 @@ export interface BenchmarkQualitySignals {
30
40
  totalOutputTokens: number;
31
41
  estimatedCostUsd: number;
32
42
  }
43
+ export interface EffortBreakdown {
44
+ aiAutonomousMinutes: number;
45
+ aiSupervisedMinutes: number;
46
+ aiCalibrationBaselineMinutes: number;
47
+ humanReviewMinutes: number;
48
+ humanManualMinutes: number;
49
+ classification: "ai_autonomous" | "ai_supervised" | "human_manual" | "pending";
50
+ notes: string[];
51
+ }
33
52
  export interface BenchmarkResult {
34
53
  taskId: string;
35
54
  sizingLabel: SizingLabel;
36
55
  soloEstimateDays: number;
37
56
  aiUnguidedEstimateDays: number;
57
+ aiGuidedEstimateDays: number;
38
58
  actualSource: "phase-timeline" | "task-lifecycle" | "task-timestamps" | "none";
39
59
  actualDays: number | null;
40
60
  actualHours: number | null;
41
61
  vsSoloPct: number | null;
42
62
  vsAiUnguidedPct: number | null;
63
+ vsAiGuidedPct: number | null;
43
64
  qaIterations: number;
44
65
  phaseDurations: BenchmarkPhaseDuration[];
66
+ effortBreakdown: EffortBreakdown;
45
67
  quality: BenchmarkQualitySignals;
46
68
  status: "pending" | "complete";
47
69
  }
@@ -50,6 +72,7 @@ export interface BenchmarkSummary {
50
72
  totalWithActuals: number;
51
73
  avgVsSoloPct: number | null;
52
74
  avgVsAiUnguidedPct: number | null;
75
+ avgVsAiGuidedPct: number | null;
53
76
  }
54
77
  export interface VelocityWeek {
55
78
  week: string;
@@ -62,6 +85,7 @@ export interface VelocityReport {
62
85
  avgActualDaysPerStory: number | null;
63
86
  avgVsSoloPct: number | null;
64
87
  avgVsAiUnguidedPct: number | null;
88
+ avgVsAiGuidedPct: number | null;
65
89
  weeks: VelocityWeek[];
66
90
  trend: "improving" | "stable" | "declining" | "insufficient_data";
67
91
  }
@@ -54,7 +54,10 @@ export interface ModelProviderError {
54
54
  }
55
55
  export interface ProviderFailureDetail {
56
56
  provider: string;
57
+ code: "provider_error" | "timeout" | "permission_denied" | "policy_blocked";
57
58
  reason: string;
59
+ retryable: boolean;
60
+ attempts: number;
58
61
  }
59
62
  export interface ProviderFallbackResult {
60
63
  provider: string;
@@ -102,6 +105,7 @@ export interface PhaseStructuredOutput {
102
105
  decisions: string[];
103
106
  evidence: string[];
104
107
  handoff: string;
108
+ noOpRationale?: string;
105
109
  architecturalConcerns?: {
106
110
  inherited: string[];
107
111
  selfImposed: string[];
@@ -145,12 +149,43 @@ export interface ProviderRouting {
145
149
  export interface WorkflowProvidersConfig {
146
150
  defaults: ProviderRouting;
147
151
  byRole: Record<string, ProviderRouting>;
152
+ profiles?: Record<string, ProviderRuntimeProfile>;
153
+ activeProfile?: string;
148
154
  }
149
155
  export interface ProviderPolicyConfig {
150
156
  allowedProviders?: string[];
151
157
  blockedProviders?: string[];
152
158
  allowVendorFallbackWithoutApproval?: boolean;
153
159
  }
160
+ export interface ProviderRuntimeProfile {
161
+ description?: string;
162
+ defaults?: ProviderRouting;
163
+ byRole: Record<string, ProviderRouting>;
164
+ budgets?: BudgetPolicy;
165
+ providerPolicy?: ProviderPolicyConfig;
166
+ requiredEnv?: string[];
167
+ }
168
+ export interface ProviderRuntimeProfileSummary {
169
+ name: string;
170
+ active: boolean;
171
+ description?: string;
172
+ roles: string[];
173
+ defaultProvider?: string;
174
+ defaultModel?: string;
175
+ requiredEnv: string[];
176
+ }
177
+ export interface ProviderProfileSmokeCheck {
178
+ scope: string;
179
+ provider: string;
180
+ model: string;
181
+ status: "pass" | "fail";
182
+ detail: string;
183
+ }
184
+ export interface ProviderProfileSmokeResult {
185
+ profile: string;
186
+ passed: boolean;
187
+ checks: ProviderProfileSmokeCheck[];
188
+ }
154
189
  export interface ProviderCredentialConfig {
155
190
  apiKeyFile?: string;
156
191
  apiKeyFileEnv?: string;
@@ -67,6 +67,7 @@ export interface RuntimeExecutorConfig {
67
67
  export interface RuntimeDelegationPolicy {
68
68
  mode: RuntimeDelegationMode;
69
69
  allowDirectProviderApi: boolean;
70
+ guardrails?: RuntimeDelegationGuardrails;
70
71
  }
71
72
  export interface RuntimeExecutionPolicy {
72
73
  defaults?: RuntimeExecutorConfig;
@@ -87,6 +88,59 @@ export interface RuntimeDelegationAssignment {
87
88
  allowedCommands: string[];
88
89
  expectedArtifacts: string[];
89
90
  }
91
+ export type RuntimeDelegationLimitAction = "queue" | "reject";
92
+ export interface RuntimeDelegationGuardrails {
93
+ maxConcurrentDelegates: number;
94
+ maxDelegationDepth: number;
95
+ maxSpawnsPerTask: number;
96
+ spawnBudgetTokens: number;
97
+ contextBudgetTokens: number;
98
+ timeoutMs: number;
99
+ staleClaimTtlMs: number;
100
+ allowNestedDelegation: boolean;
101
+ limitAction: RuntimeDelegationLimitAction;
102
+ handoffMaxChars: number;
103
+ }
104
+ export type RuntimeDelegationGuardrailStatus = "allow" | "queue" | "reject";
105
+ export interface RuntimeDelegationGuardrailEvaluation {
106
+ status: RuntimeDelegationGuardrailStatus;
107
+ reasons: string[];
108
+ policy: RuntimeDelegationGuardrails;
109
+ activeSessions: number;
110
+ requestedSpawns: number;
111
+ delegationDepth: number;
112
+ contextBudgetTokens: number;
113
+ spawnBudgetTokens: number;
114
+ staleSessions: string[];
115
+ }
116
+ export type RuntimeDelegationSessionStatus = "planned" | "spawned" | "active" | "suspended" | "completed" | "failed" | "timed_out" | "canceled" | "closed";
117
+ export interface RuntimeDelegationSessionSummary {
118
+ sessionId: string;
119
+ taskId: string;
120
+ runtime?: RuntimeExecutionId | string;
121
+ mode?: RuntimeDelegationMode;
122
+ roles: string[];
123
+ status: RuntimeDelegationSessionStatus;
124
+ lastEventType: string;
125
+ updatedAt: string;
126
+ ageMs: number;
127
+ active: boolean;
128
+ stale: boolean;
129
+ artifacts: string[];
130
+ }
131
+ export interface RuntimeDelegationOperationsReport {
132
+ generatedAt: string;
133
+ taskId?: string;
134
+ policy: RuntimeDelegationGuardrails;
135
+ counts: {
136
+ total: number;
137
+ active: number;
138
+ stale: number;
139
+ suspended: number;
140
+ terminal: number;
141
+ };
142
+ sessions: RuntimeDelegationSessionSummary[];
143
+ }
90
144
  export interface RuntimeBrief {
91
145
  taskId: string;
92
146
  runtime: RuntimeExecutionId;
@@ -98,6 +152,7 @@ export interface RuntimeBrief {
98
152
  }
99
153
  export interface RuntimeDelegationPacket {
100
154
  taskId: string;
155
+ sessionId: string;
101
156
  runtime: RuntimeExecutionId;
102
157
  artifact: string;
103
158
  content: string;
@@ -106,6 +161,7 @@ export interface RuntimeDelegationPacket {
106
161
  assignments: RuntimeDelegationAssignment[];
107
162
  requiresApproval: boolean;
108
163
  contextBudget: ContextBudgetMetadata;
164
+ guardrails: RuntimeDelegationGuardrailEvaluation;
109
165
  }
110
166
  export interface RuntimeInvocationPlan {
111
167
  runtime: RuntimeExecutionId;
@@ -111,6 +111,8 @@ export interface AgentLessonInput {
111
111
  export interface AgentLesson extends AgentLessonInput {
112
112
  id: string;
113
113
  timestamp: string;
114
+ archivedAt?: string;
115
+ archiveReason?: string;
114
116
  }
115
117
  export type MemoryHookPoint = "before_plan" | "before_implementation" | "before_handoff" | "before_final" | "after_failure";
116
118
  export interface MemoryLessonSnippet {
@@ -108,6 +108,7 @@ export interface UpdateTaskInput {
108
108
  testStrategy?: string;
109
109
  status?: TaskStatus;
110
110
  blockedReason?: string;
111
+ qaGate?: QaGateMetadata;
111
112
  claimedAt?: string;
112
113
  doneAt?: string;
113
114
  }
@@ -149,6 +150,11 @@ export interface EvidenceInput {
149
150
  path?: string | boolean | string[];
150
151
  command?: string | boolean | string[];
151
152
  exitCode?: string | boolean | string[];
153
+ surface?: string | boolean | string[];
154
+ assertions?: string | boolean | string[];
155
+ externalValidation?: string | boolean | string[];
156
+ deferredOwner?: string | boolean | string[];
157
+ deferredRationale?: string | boolean | string[];
152
158
  }
153
159
  export interface PlaywrightEvidenceInput {
154
160
  task: string;
@@ -41,6 +41,23 @@ export interface WorkflowGateApprovalResult {
41
41
  approvedAt: string;
42
42
  alreadyApproved: boolean;
43
43
  }
44
+ export type WorkflowGateDecisionResult = "approve" | "block" | "changes";
45
+ export interface WorkflowGateDecisionInput {
46
+ runId: string;
47
+ gateId: string;
48
+ reviewer: string;
49
+ rationale: string;
50
+ result: WorkflowGateDecisionResult;
51
+ }
52
+ export interface WorkflowGateDecisionRecord {
53
+ run: AutonomousRun;
54
+ gateId: string;
55
+ reviewer: string;
56
+ rationale: string;
57
+ result: WorkflowGateDecisionResult;
58
+ decidedAt: string;
59
+ alreadyApproved: boolean;
60
+ }
44
61
  export interface AutonomousRun {
45
62
  id: string;
46
63
  taskId: string;