@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,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;
38
- actualSource: "phase-timeline" | "task-lifecycle" | "none";
57
+ aiGuidedEstimateDays: number;
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
  }
@@ -52,15 +52,19 @@ export interface ModelProviderError {
52
52
  message: string;
53
53
  retryable: boolean;
54
54
  }
55
+ export interface ProviderFailureDetail {
56
+ provider: string;
57
+ code: "provider_error" | "timeout" | "permission_denied" | "policy_blocked";
58
+ reason: string;
59
+ retryable: boolean;
60
+ attempts: number;
61
+ }
55
62
  export interface ProviderFallbackResult {
56
63
  provider: string;
57
64
  model: string;
58
65
  response: ModelResponse;
59
66
  fallbackUsed: boolean;
60
- failedProviders: {
61
- provider: string;
62
- reason: string;
63
- }[];
67
+ failedProviders: ProviderFailureDetail[];
64
68
  }
65
69
  export interface ModelProvenanceInput {
66
70
  task: string;
@@ -101,7 +105,13 @@ export interface PhaseStructuredOutput {
101
105
  decisions: string[];
102
106
  evidence: string[];
103
107
  handoff: string;
108
+ noOpRationale?: string;
109
+ architecturalConcerns?: {
110
+ inherited: string[];
111
+ selfImposed: string[];
112
+ };
104
113
  sizing?: string;
114
+ developerPoints?: number;
105
115
  }
106
116
  export interface PhaseLlmResult {
107
117
  mode: PhaseExecutionMode;
@@ -139,12 +149,43 @@ export interface ProviderRouting {
139
149
  export interface WorkflowProvidersConfig {
140
150
  defaults: ProviderRouting;
141
151
  byRole: Record<string, ProviderRouting>;
152
+ profiles?: Record<string, ProviderRuntimeProfile>;
153
+ activeProfile?: string;
142
154
  }
143
155
  export interface ProviderPolicyConfig {
144
156
  allowedProviders?: string[];
145
157
  blockedProviders?: string[];
146
158
  allowVendorFallbackWithoutApproval?: boolean;
147
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
+ }
148
189
  export interface ProviderCredentialConfig {
149
190
  apiKeyFile?: string;
150
191
  apiKeyFileEnv?: string;
@@ -202,6 +243,12 @@ export interface WorkflowConfig {
202
243
  budgets?: BudgetPolicy;
203
244
  workflow?: {
204
245
  phaseSequence?: string[];
246
+ architectureChallenge?: {
247
+ enabled?: boolean;
248
+ phase?: string;
249
+ role?: string;
250
+ summary?: string;
251
+ };
205
252
  phaseTimeoutMinutes?: number;
206
253
  playbooksDir?: string;
207
254
  phasePlaybooks?: Record<string, string>;