@jterrats/open-orchestra 0.4.0 → 0.4.2-beta.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 (107) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/assets/web-console.js +91 -1
  3. package/dist/autonomous-phase-lifecycle.d.ts +26 -0
  4. package/dist/autonomous-phase-lifecycle.js +214 -0
  5. package/dist/autonomous-phase-lifecycle.js.map +1 -0
  6. package/dist/autonomous-run-state.d.ts +8 -0
  7. package/dist/autonomous-run-state.js +162 -0
  8. package/dist/autonomous-run-state.js.map +1 -0
  9. package/dist/autonomous-run-store.d.ts +17 -0
  10. package/dist/autonomous-run-store.js +89 -0
  11. package/dist/autonomous-run-store.js.map +1 -0
  12. package/dist/autonomous-workflow-constants.d.ts +7 -0
  13. package/dist/autonomous-workflow-constants.js +36 -0
  14. package/dist/autonomous-workflow-constants.js.map +1 -0
  15. package/dist/autonomous-workflow.d.ts +6 -45
  16. package/dist/autonomous-workflow.js +4 -394
  17. package/dist/autonomous-workflow.js.map +1 -1
  18. package/dist/benchmark.js +16 -0
  19. package/dist/benchmark.js.map +1 -1
  20. package/dist/clarification.d.ts +2 -0
  21. package/dist/clarification.js +23 -5
  22. package/dist/clarification.js.map +1 -1
  23. package/dist/cli.js +101 -14
  24. package/dist/cli.js.map +1 -1
  25. package/dist/command-manifest.js +8 -0
  26. package/dist/command-manifest.js.map +1 -1
  27. package/dist/command-utils.d.ts +6 -0
  28. package/dist/command-utils.js +19 -0
  29. package/dist/command-utils.js.map +1 -0
  30. package/dist/commands.d.ts +15 -43
  31. package/dist/commands.js +466 -912
  32. package/dist/commands.js.map +1 -1
  33. package/dist/constants.js +20 -0
  34. package/dist/constants.js.map +1 -1
  35. package/dist/defaults.d.ts +11 -0
  36. package/dist/defaults.js +11 -0
  37. package/dist/defaults.js.map +1 -1
  38. package/dist/instruction-commands.d.ts +5 -0
  39. package/dist/instruction-commands.js +98 -0
  40. package/dist/instruction-commands.js.map +1 -0
  41. package/dist/mcp-oauth-proxy.d.ts +47 -0
  42. package/dist/mcp-oauth-proxy.js +276 -0
  43. package/dist/mcp-oauth-proxy.js.map +1 -1
  44. package/dist/memory.d.ts +11 -0
  45. package/dist/memory.js +224 -0
  46. package/dist/memory.js.map +1 -0
  47. package/dist/metrics-commands.d.ts +3 -0
  48. package/dist/metrics-commands.js +123 -0
  49. package/dist/metrics-commands.js.map +1 -0
  50. package/dist/model-commands.d.ts +13 -0
  51. package/dist/model-commands.js +216 -0
  52. package/dist/model-commands.js.map +1 -0
  53. package/dist/notifications.d.ts +25 -0
  54. package/dist/notifications.js +187 -11
  55. package/dist/notifications.js.map +1 -1
  56. package/dist/package-update-check.d.ts +19 -0
  57. package/dist/package-update-check.js +123 -0
  58. package/dist/package-update-check.js.map +1 -0
  59. package/dist/runtime-adapters.d.ts +5 -1
  60. package/dist/runtime-adapters.js +27 -0
  61. package/dist/runtime-adapters.js.map +1 -1
  62. package/dist/runtime-bootstrap.js +4 -2
  63. package/dist/runtime-bootstrap.js.map +1 -1
  64. package/dist/runtime-commands.d.ts +9 -0
  65. package/dist/runtime-commands.js +156 -0
  66. package/dist/runtime-commands.js.map +1 -0
  67. package/dist/runtime-execution-adapters.d.ts +2 -0
  68. package/dist/runtime-execution-adapters.js +163 -0
  69. package/dist/runtime-execution-adapters.js.map +1 -0
  70. package/dist/runtime-execution-renderer.d.ts +10 -0
  71. package/dist/runtime-execution-renderer.js +113 -0
  72. package/dist/runtime-execution-renderer.js.map +1 -0
  73. package/dist/runtime-execution.d.ts +27 -0
  74. package/dist/runtime-execution.js +153 -0
  75. package/dist/runtime-execution.js.map +1 -0
  76. package/dist/skills-commands.d.ts +10 -0
  77. package/dist/skills-commands.js +138 -0
  78. package/dist/skills-commands.js.map +1 -0
  79. package/dist/skills.d.ts +7 -1
  80. package/dist/skills.js +120 -11
  81. package/dist/skills.js.map +1 -1
  82. package/dist/sprint-commands.d.ts +5 -0
  83. package/dist/sprint-commands.js +120 -0
  84. package/dist/sprint-commands.js.map +1 -0
  85. package/dist/subagent-protocol.js +6 -0
  86. package/dist/subagent-protocol.js.map +1 -1
  87. package/dist/telemetry-commands.d.ts +7 -0
  88. package/dist/telemetry-commands.js +82 -0
  89. package/dist/telemetry-commands.js.map +1 -0
  90. package/dist/tool-commands.d.ts +5 -0
  91. package/dist/tool-commands.js +159 -0
  92. package/dist/tool-commands.js.map +1 -0
  93. package/dist/types.d.ts +206 -4
  94. package/dist/types.js.map +1 -1
  95. package/dist/web-api.js +93 -1
  96. package/dist/web-api.js.map +1 -1
  97. package/dist/web-chart-contracts.d.ts +3 -1
  98. package/dist/web-chart-contracts.js +6 -0
  99. package/dist/web-chart-contracts.js.map +1 -1
  100. package/dist/web-console.js +2 -2
  101. package/dist/workflow-services.d.ts +21 -3
  102. package/dist/workflow-services.js +474 -10
  103. package/dist/workflow-services.js.map +1 -1
  104. package/docs/runtime-llm-flow.md +46 -0
  105. package/package.json +2 -1
  106. package/skills/proactive-orchestra/SKILL.md +27 -0
  107. package/skills/proactive-orchestra/manifest.json +41 -0
@@ -0,0 +1,123 @@
1
+ import { requireArg } from "./args.js";
2
+ import { computeBenchmark, recordEstimate, summarizeBenchmark, } from "./benchmark.js";
3
+ import { stringOption } from "./command-utils.js";
4
+ import { SIZING_LABELS } from "./types.js";
5
+ const CONFIDENCE_LEVELS = ["low", "medium", "high"];
6
+ export async function estimateCommand(options, io) {
7
+ const cwd = process.cwd();
8
+ const taskId = requireArg(options, "task");
9
+ const sizingRaw = requireArg(options, "sizing");
10
+ const soloDays = numberOption(options["solo-days"], 0);
11
+ const aiDays = numberOption(options["ai-unguided-days"], 0);
12
+ const confidence = (stringOption(options.confidence) ??
13
+ "medium");
14
+ const declaredBy = stringOption(options["declared-by"]) ?? "pm";
15
+ if (!SIZING_LABELS.includes(sizingRaw)) {
16
+ throw new Error(`--sizing must be one of: ${SIZING_LABELS.join(", ")}`);
17
+ }
18
+ if (!CONFIDENCE_LEVELS.includes(confidence)) {
19
+ throw new Error(`--confidence must be one of: ${CONFIDENCE_LEVELS.join(", ")}`);
20
+ }
21
+ if (soloDays <= 0)
22
+ throw new Error(`--solo-days must be > 0`);
23
+ if (aiDays <= 0)
24
+ throw new Error(`--ai-unguided-days must be > 0`);
25
+ const record = await recordEstimate(cwd, {
26
+ taskId,
27
+ sizingLabel: sizingRaw,
28
+ soloEstimateDays: soloDays,
29
+ aiUnguidedEstimateDays: aiDays,
30
+ confidence,
31
+ declaredBy,
32
+ });
33
+ if (options.json) {
34
+ io.log(JSON.stringify(record, null, 2));
35
+ return;
36
+ }
37
+ io.log(`Estimate recorded for ${taskId} [${record.id}]`);
38
+ io.log(` Sizing: ${record.sizingLabel}`);
39
+ io.log(` Solo: ${record.soloEstimateDays}d`);
40
+ io.log(` AI-unguided: ${record.aiUnguidedEstimateDays}d`);
41
+ io.log(` Confidence: ${record.confidence}`);
42
+ io.log(` Declared by: ${record.declaredBy}`);
43
+ }
44
+ export async function benchmarkCommand(options, io) {
45
+ const cwd = process.cwd();
46
+ if (options.summary) {
47
+ const summary = await summarizeBenchmark(cwd);
48
+ if (options.json) {
49
+ io.log(JSON.stringify(summary, null, 2));
50
+ return;
51
+ }
52
+ if (summary.stories.length === 0) {
53
+ io.log("No estimates recorded yet. Use: orchestra estimate --task <id> ...");
54
+ return;
55
+ }
56
+ const header = `${"Story".padEnd(14)} ${"Size".padEnd(4)} ${"Solo".padEnd(6)} ${"AI".padEnd(6)} ${"Actual".padEnd(8)} ${"vs Solo".padEnd(8)} ${"vs AI".padEnd(8)} ${"QA".padEnd(4)} ${"Rev".padEnd(4)} ${"Blk".padEnd(4)} ${"Ev".padEnd(4)} ${"Les"}`;
57
+ io.log(header);
58
+ io.log("─".repeat(header.length));
59
+ for (const story of summary.stories) {
60
+ const actual = story.actualDays !== null ? `${story.actualDays}d` : "pending";
61
+ const vsSolo = story.vsSoloPct !== null
62
+ ? `${story.vsSoloPct > 0 ? "+" : ""}${story.vsSoloPct}%`
63
+ : "—";
64
+ const vsAi = story.vsAiUnguidedPct !== null
65
+ ? `${story.vsAiUnguidedPct > 0 ? "+" : ""}${story.vsAiUnguidedPct}%`
66
+ : "—";
67
+ io.log(`${story.taskId.padEnd(14)} ${story.sizingLabel.padEnd(4)} ${`${story.soloEstimateDays}d`.padEnd(6)} ${`${story.aiUnguidedEstimateDays}d`.padEnd(6)} ${actual.padEnd(8)} ${vsSolo.padEnd(8)} ${vsAi.padEnd(8)} ${String(story.qaIterations).padEnd(4)} ${String(story.quality.reviewCount).padEnd(4)} ${String(story.quality.blockingReviews).padEnd(4)} ${String(story.quality.evidenceCount).padEnd(4)} ${story.quality.lessonCount}`);
68
+ }
69
+ if (summary.totalWithActuals > 0) {
70
+ io.log("");
71
+ io.log(`Avg savings vs solo: ${summary.avgVsSoloPct}%`);
72
+ io.log(`Avg savings vs AI-unguided: ${summary.avgVsAiUnguidedPct}%`);
73
+ io.log(`Stories with actuals: ${summary.totalWithActuals}/${summary.stories.length}`);
74
+ }
75
+ return;
76
+ }
77
+ const taskId = requireArg(options, "task");
78
+ const result = await computeBenchmark(cwd, taskId);
79
+ if (options.json) {
80
+ io.log(JSON.stringify(result, null, 2));
81
+ return;
82
+ }
83
+ io.log(`Benchmark: ${taskId} [${result.status}]`);
84
+ io.log(` Sizing: ${result.sizingLabel}`);
85
+ io.log(` Solo: ${result.soloEstimateDays}d (declared)`);
86
+ io.log(` AI-unguided: ${result.aiUnguidedEstimateDays}d (declared)`);
87
+ io.log(` Actual: ${result.actualDays !== null ? `${result.actualDays}d` : "pending — run not complete"}`);
88
+ if (result.vsSoloPct !== null) {
89
+ const sign = result.vsSoloPct > 0 ? "+" : "";
90
+ io.log(` vs Solo: ${sign}${result.vsSoloPct}%`);
91
+ io.log(` vs AI: ${result.vsAiUnguidedPct !== null ? `${result.vsAiUnguidedPct > 0 ? "+" : ""}${result.vsAiUnguidedPct}%` : "—"}`);
92
+ }
93
+ io.log(` QA loops: ${result.qaIterations}`);
94
+ if (result.phaseDurations.length > 0) {
95
+ io.log(` Phase durations:`);
96
+ for (const phase of result.phaseDurations) {
97
+ const duration = phase.durationMs !== null
98
+ ? `${Math.round(phase.durationMs / 1000)}s`
99
+ : "pending";
100
+ io.log(` - ${phase.phase}: ${duration}`);
101
+ }
102
+ }
103
+ io.log(` Reviews: ${result.quality.reviewCount} (${result.quality.blockingReviews} blocking)`);
104
+ io.log(` Evidence: ${result.quality.evidenceCount} artifacts`);
105
+ io.log(` Gate blocks: ${result.quality.gateBlockCount}`);
106
+ io.log(` Lessons: ${result.quality.lessonCount}`);
107
+ if (result.quality.totalInputTokens > 0 ||
108
+ result.quality.totalOutputTokens > 0) {
109
+ io.log(` Tokens: ${result.quality.totalInputTokens}in / ${result.quality.totalOutputTokens}out`);
110
+ io.log(` Cost: $${result.quality.estimatedCostUsd}`);
111
+ }
112
+ }
113
+ function numberOption(value, fallback) {
114
+ if (typeof value !== "string" || value.trim() === "") {
115
+ return fallback;
116
+ }
117
+ const parsed = Number(value);
118
+ if (!Number.isFinite(parsed)) {
119
+ throw new Error(`invalid number: ${value}`);
120
+ }
121
+ return parsed;
122
+ }
123
+ //# sourceMappingURL=metrics-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics-commands.js","sourceRoot":"","sources":["../src/metrics-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { CliIo, CliOptions } from "./types.js";
2
+ export declare function usageCommand(options: CliOptions, io: CliIo): Promise<void>;
3
+ export declare function budgetCheckCommand(options: CliOptions, io: CliIo): Promise<void>;
4
+ export declare function approvalsListCommand(options: CliOptions, io: CliIo): Promise<void>;
5
+ export declare function approvalsShowCommand(options: CliOptions, io: CliIo): Promise<void>;
6
+ export declare function approvalsApproveCommand(options: CliOptions, io: CliIo): Promise<void>;
7
+ export declare function approvalsRejectCommand(options: CliOptions, io: CliIo): Promise<void>;
8
+ export declare function configShowCommand(options: CliOptions, io: CliIo): Promise<void>;
9
+ export declare function modelProvidersCommand(options: CliOptions, io: CliIo): Promise<void>;
10
+ export declare function modelSetRoleCommand(options: CliOptions, io: CliIo): Promise<void>;
11
+ export declare function modelProvenanceAddCommand(options: CliOptions, io: CliIo): Promise<void>;
12
+ export declare function modelProvenanceListCommand(options: CliOptions, io: CliIo): Promise<void>;
13
+ export declare function modelCompleteFakeCommand(options: CliOptions, io: CliIo): Promise<void>;
@@ -0,0 +1,216 @@
1
+ import { requireArg } from "./args.js";
2
+ import { parseCsv, removeUndefined, stringOption, } from "./command-utils.js";
3
+ import { approveApproval, checkBudgetEstimatePreflight, checkUsageBudget, completeWithProviderFallback, getUsageReport, getWorkflowConfig, listApprovals, listConfiguredModelProviders, listModelProvenance, recordModelProvenance, rejectApproval, setRoleModelProvider, showApproval, } from "./workflow-services.js";
4
+ export async function usageCommand(options, io) {
5
+ const report = await getUsageReport(stringOption(options.task));
6
+ if (options.json) {
7
+ io.log(JSON.stringify(report, null, 2));
8
+ return;
9
+ }
10
+ io.log(renderUsageReport(report));
11
+ }
12
+ export async function budgetCheckCommand(options, io) {
13
+ const estimatedCostUsd = stringOption(options["estimate-cost"]);
14
+ if (estimatedCostUsd) {
15
+ const result = await checkBudgetEstimatePreflight(requireArg(options, "task"), numberOption(estimatedCostUsd, 0));
16
+ if (options.json) {
17
+ io.log(JSON.stringify(result, null, 2));
18
+ }
19
+ else {
20
+ io.log(renderBudgetCheck(result.budget));
21
+ for (const warning of result.warnings) {
22
+ io.log(`WARNING: ${warning.scope} estimatedCostUsd is ${warning.actual}/${warning.limit} (${warning.thresholdPercent}% threshold)`);
23
+ }
24
+ }
25
+ if (!result.passed) {
26
+ throw new Error("budget check failed");
27
+ }
28
+ return;
29
+ }
30
+ const result = await checkUsageBudget(stringOption(options.task));
31
+ if (options.json) {
32
+ io.log(JSON.stringify(result, null, 2));
33
+ }
34
+ else {
35
+ io.log(renderBudgetCheck(result));
36
+ }
37
+ if (!result.passed) {
38
+ throw new Error("budget check failed");
39
+ }
40
+ }
41
+ export async function approvalsListCommand(options, io) {
42
+ const approvals = await listApprovals(stringOption(options.task));
43
+ if (options.json) {
44
+ io.log(JSON.stringify(approvals, null, 2));
45
+ return;
46
+ }
47
+ if (approvals.length === 0) {
48
+ io.log("No approvals");
49
+ return;
50
+ }
51
+ for (const approval of approvals) {
52
+ io.log(`${approval.id} [${approval.status}] ${approval.taskId ?? "no-task"} ${approval.artifact}`);
53
+ }
54
+ }
55
+ export async function approvalsShowCommand(options, io) {
56
+ const approval = await showApproval(requireArg(options, "id"));
57
+ if (options.json) {
58
+ io.log(JSON.stringify(approval, null, 2));
59
+ return;
60
+ }
61
+ io.log(approval.content);
62
+ }
63
+ export async function approvalsApproveCommand(options, io) {
64
+ const approval = await approveApproval(parseApprovalDecision(options));
65
+ io.log(`Approved ${approval.id}`);
66
+ }
67
+ export async function approvalsRejectCommand(options, io) {
68
+ const approval = await rejectApproval(parseApprovalDecision(options));
69
+ io.log(`Rejected ${approval.id}`);
70
+ }
71
+ export async function configShowCommand(options, io) {
72
+ const config = await getWorkflowConfig();
73
+ if (options.json) {
74
+ io.log(JSON.stringify(config, null, 2));
75
+ return;
76
+ }
77
+ io.log(`Tools: ${Object.keys(config.tools ?? {}).length}`);
78
+ io.log(`Role routes: ${Object.keys(config.providers?.byRole ?? {}).length}`);
79
+ }
80
+ export async function modelProvidersCommand(options, io) {
81
+ const providers = await listConfiguredModelProviders();
82
+ if (options.json) {
83
+ io.log(JSON.stringify(providers, null, 2));
84
+ return;
85
+ }
86
+ if (providers.length === 0) {
87
+ io.log("No configured model providers");
88
+ return;
89
+ }
90
+ for (const provider of providers) {
91
+ io.log(`${provider.scope}: ${provider.provider}/${provider.model} (${provider.timeoutMs}ms)`);
92
+ }
93
+ }
94
+ export async function modelSetRoleCommand(options, io) {
95
+ const role = requireArg(options, "role");
96
+ const routing = parseProviderRouting(options);
97
+ await setRoleModelProvider(role, routing);
98
+ io.log(`Configured model provider for ${role}`);
99
+ }
100
+ export async function modelProvenanceAddCommand(options, io) {
101
+ const record = await recordModelProvenance({
102
+ task: requireArg(options, "task"),
103
+ role: requireArg(options, "role"),
104
+ provider: requireArg(options, "provider"),
105
+ model: requireArg(options, "model"),
106
+ promptId: requireArg(options, "prompt-id"),
107
+ responseId: requireArg(options, "response-id"),
108
+ inputTokens: numberOption(options["input-tokens"], 0),
109
+ outputTokens: numberOption(options["output-tokens"], 0),
110
+ estimatedCostUsd: numberOption(options["estimated-cost-usd"], 0),
111
+ finishReason: requireArg(options, "finish-reason"),
112
+ });
113
+ io.log(`Recorded model provenance ${record.responseId}`);
114
+ }
115
+ export async function modelProvenanceListCommand(options, io) {
116
+ const records = await listModelProvenance(stringOption(options.task));
117
+ if (options.json) {
118
+ io.log(JSON.stringify(records, null, 2));
119
+ return;
120
+ }
121
+ if (records.length === 0) {
122
+ io.log("No model provenance");
123
+ return;
124
+ }
125
+ for (const record of records) {
126
+ io.log(`${record.task} ${record.role} ${record.provider}/${record.model} ${record.responseId}`);
127
+ }
128
+ }
129
+ export async function modelCompleteFakeCommand(options, io) {
130
+ const result = await completeWithProviderFallback({
131
+ provider: requireArg(options, "provider"),
132
+ model: requireArg(options, "model"),
133
+ fallbacks: parseCsv(options.fallbacks),
134
+ maxTokens: 0,
135
+ maxCostUsd: 0,
136
+ timeoutMs: 30000,
137
+ retries: 0,
138
+ requiredCapabilities: [],
139
+ }, requireArg(options, "prompt"), removeUndefined({
140
+ failingProviders: parseCsv(options["fail-provider"]),
141
+ taskId: stringOption(options.task),
142
+ role: stringOption(options.role) ?? "parent",
143
+ }));
144
+ if (options.json) {
145
+ io.log(JSON.stringify(result, null, 2));
146
+ return;
147
+ }
148
+ io.log(`Fake completion used ${result.provider}/${result.model} fallback=${String(result.fallbackUsed)}`);
149
+ }
150
+ function parseProviderRouting(options) {
151
+ return {
152
+ provider: requireArg(options, "provider"),
153
+ model: requireArg(options, "model"),
154
+ fallbacks: parseCsv(options.fallbacks),
155
+ maxTokens: numberOption(options["max-tokens"], 0),
156
+ maxCostUsd: numberOption(options["max-cost-usd"], 0),
157
+ timeoutMs: numberOption(options["timeout-ms"], 30000),
158
+ retries: numberOption(options.retries, 0),
159
+ requiredCapabilities: parseCsv(options.capabilities),
160
+ };
161
+ }
162
+ function parseApprovalDecision(options) {
163
+ return {
164
+ id: requireArg(options, "id"),
165
+ approver: requireArg(options, "approver"),
166
+ rationale: requireArg(options, "rationale"),
167
+ };
168
+ }
169
+ function numberOption(value, fallback) {
170
+ if (typeof value !== "string" || value.trim() === "") {
171
+ return fallback;
172
+ }
173
+ const parsed = Number(value);
174
+ if (!Number.isFinite(parsed)) {
175
+ throw new Error(`invalid number: ${value}`);
176
+ }
177
+ return parsed;
178
+ }
179
+ function renderUsageReport(report) {
180
+ return [
181
+ `Usage${report.taskId ? ` for ${report.taskId}` : ""}`,
182
+ `- Requests: ${report.totals.requests}`,
183
+ `- Input tokens: ${report.totals.inputTokens}`,
184
+ `- Output tokens: ${report.totals.outputTokens}`,
185
+ `- Total tokens: ${report.totals.totalTokens}`,
186
+ `- Estimated cost USD: ${report.totals.estimatedCostUsd}`,
187
+ "",
188
+ "By role:",
189
+ ...usageLines(report.byRole),
190
+ "",
191
+ "By provider:",
192
+ ...usageLines(report.byProvider),
193
+ ].join("\n");
194
+ }
195
+ function renderBudgetCheck(result) {
196
+ return [
197
+ `Budget check${result.taskId ? ` for ${result.taskId}` : ""}: ${result.passed ? "passed" : "failed"}`,
198
+ `- Applied budgets: ${result.appliedBudgets.length > 0
199
+ ? result.appliedBudgets.join(", ")
200
+ : "none"}`,
201
+ `- Requests: ${result.usage.totals.requests}`,
202
+ `- Total tokens: ${result.usage.totals.totalTokens}`,
203
+ `- Estimated cost USD: ${result.usage.totals.estimatedCostUsd}`,
204
+ "",
205
+ "Violations:",
206
+ ...(result.violations.length === 0
207
+ ? ["- none"]
208
+ : result.violations.map((violation) => `- ${violation.scope} ${violation.metric}: ${violation.actual} > ${violation.limit}`)),
209
+ ].join("\n");
210
+ }
211
+ function usageLines(items) {
212
+ return items.length === 0
213
+ ? ["- none"]
214
+ : items.map((item) => `- ${item.key}: ${item.requests} requests, ${item.totalTokens} tokens, $${item.estimatedCostUsd}`);
215
+ }
216
+ //# sourceMappingURL=model-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-commands.js","sourceRoot":"","sources":["../src/model-commands.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,18 @@ export interface GatePauseNotificationInput {
5
5
  transitionKey: string;
6
6
  reviewArtifact: string;
7
7
  }
8
+ export type WorkflowNotificationKind = "done" | "failed" | "qa_retry" | "critical_blocking_review";
9
+ export interface WorkflowLifecycleNotificationInput {
10
+ root: string;
11
+ taskId: string;
12
+ kind: WorkflowNotificationKind;
13
+ runId?: string;
14
+ phase?: string;
15
+ actor?: string;
16
+ detail: string;
17
+ artifact?: string;
18
+ idempotencyKey?: string;
19
+ }
8
20
  export interface NotificationTransports {
9
21
  postSlack?: (webhookUrl: string, body: SlackPayload) => Promise<void>;
10
22
  commentOnIssue?: (issue: string, body: string) => Promise<void>;
@@ -16,6 +28,17 @@ interface GatePauseMessage {
16
28
  reviewArtifact: string;
17
29
  resumeCommand: string;
18
30
  }
31
+ interface WorkflowLifecycleMessage {
32
+ taskId: string;
33
+ taskTitle: string;
34
+ kind: WorkflowNotificationKind;
35
+ headline: string;
36
+ detail: string;
37
+ runId?: string;
38
+ phase?: string;
39
+ actor?: string;
40
+ artifact?: string;
41
+ }
19
42
  interface SlackPayload {
20
43
  text: string;
21
44
  blocks: Array<{
@@ -27,5 +50,7 @@ interface SlackPayload {
27
50
  }>;
28
51
  }
29
52
  export declare function notifyGatePaused(input: GatePauseNotificationInput, transports?: NotificationTransports): Promise<NotificationChannelResult[]>;
53
+ export declare function notifyWorkflowLifecycle(input: WorkflowLifecycleNotificationInput, transports?: NotificationTransports): Promise<NotificationChannelResult[]>;
30
54
  export declare function buildGatePauseMessage(input: GatePauseNotificationInput): Promise<GatePauseMessage>;
55
+ export declare function buildWorkflowLifecycleMessage(input: WorkflowLifecycleNotificationInput): Promise<WorkflowLifecycleMessage>;
31
56
  export {};