@jterrats/open-orchestra 0.3.1 → 0.4.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 (92) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/autonomous-phase-lifecycle.d.ts +25 -0
  3. package/dist/autonomous-phase-lifecycle.js +194 -0
  4. package/dist/autonomous-phase-lifecycle.js.map +1 -0
  5. package/dist/autonomous-run-state.d.ts +6 -0
  6. package/dist/autonomous-run-state.js +91 -0
  7. package/dist/autonomous-run-state.js.map +1 -0
  8. package/dist/autonomous-run-store.d.ts +12 -0
  9. package/dist/autonomous-run-store.js +64 -0
  10. package/dist/autonomous-run-store.js.map +1 -0
  11. package/dist/autonomous-workflow-constants.d.ts +6 -0
  12. package/dist/autonomous-workflow-constants.js +36 -0
  13. package/dist/autonomous-workflow-constants.js.map +1 -0
  14. package/dist/autonomous-workflow.d.ts +6 -45
  15. package/dist/autonomous-workflow.js +4 -385
  16. package/dist/autonomous-workflow.js.map +1 -1
  17. package/dist/benchmark.d.ts +2 -1
  18. package/dist/benchmark.js +70 -0
  19. package/dist/benchmark.js.map +1 -1
  20. package/dist/cli.js +31 -2
  21. package/dist/cli.js.map +1 -1
  22. package/dist/command-utils.d.ts +6 -0
  23. package/dist/command-utils.js +19 -0
  24. package/dist/command-utils.js.map +1 -0
  25. package/dist/commands.d.ts +8 -40
  26. package/dist/commands.js +59 -803
  27. package/dist/commands.js.map +1 -1
  28. package/dist/constants.js +14 -0
  29. package/dist/constants.js.map +1 -1
  30. package/dist/defaults.d.ts +17 -0
  31. package/dist/defaults.js +17 -0
  32. package/dist/defaults.js.map +1 -1
  33. package/dist/instruction-commands.d.ts +5 -0
  34. package/dist/instruction-commands.js +98 -0
  35. package/dist/instruction-commands.js.map +1 -0
  36. package/dist/metrics-commands.d.ts +3 -0
  37. package/dist/metrics-commands.js +114 -0
  38. package/dist/metrics-commands.js.map +1 -0
  39. package/dist/model-commands.d.ts +13 -0
  40. package/dist/model-commands.js +199 -0
  41. package/dist/model-commands.js.map +1 -0
  42. package/dist/model-providers.d.ts +26 -1
  43. package/dist/model-providers.js +257 -1
  44. package/dist/model-providers.js.map +1 -1
  45. package/dist/notifications.d.ts +31 -0
  46. package/dist/notifications.js +165 -0
  47. package/dist/notifications.js.map +1 -0
  48. package/dist/phase-executor.d.ts +18 -0
  49. package/dist/phase-executor.js +218 -0
  50. package/dist/phase-executor.js.map +1 -0
  51. package/dist/release-commands.d.ts +10 -0
  52. package/dist/release-commands.js +116 -0
  53. package/dist/release-commands.js.map +1 -1
  54. package/dist/runtime-adapters.d.ts +5 -1
  55. package/dist/runtime-adapters.js +27 -0
  56. package/dist/runtime-adapters.js.map +1 -1
  57. package/dist/runtime-commands.d.ts +9 -0
  58. package/dist/runtime-commands.js +156 -0
  59. package/dist/runtime-commands.js.map +1 -0
  60. package/dist/runtime-execution-adapters.d.ts +2 -0
  61. package/dist/runtime-execution-adapters.js +163 -0
  62. package/dist/runtime-execution-adapters.js.map +1 -0
  63. package/dist/runtime-execution-renderer.d.ts +10 -0
  64. package/dist/runtime-execution-renderer.js +110 -0
  65. package/dist/runtime-execution-renderer.js.map +1 -0
  66. package/dist/runtime-execution.d.ts +27 -0
  67. package/dist/runtime-execution.js +147 -0
  68. package/dist/runtime-execution.js.map +1 -0
  69. package/dist/skills-commands.d.ts +9 -0
  70. package/dist/skills-commands.js +130 -0
  71. package/dist/skills-commands.js.map +1 -0
  72. package/dist/sprint-commands.d.ts +5 -0
  73. package/dist/sprint-commands.js +120 -0
  74. package/dist/sprint-commands.js.map +1 -0
  75. package/dist/sprint-metrics.d.ts +9 -0
  76. package/dist/sprint-metrics.js +203 -0
  77. package/dist/sprint-metrics.js.map +1 -0
  78. package/dist/telemetry-commands.d.ts +7 -0
  79. package/dist/telemetry-commands.js +82 -0
  80. package/dist/telemetry-commands.js.map +1 -0
  81. package/dist/tool-commands.d.ts +3 -0
  82. package/dist/tool-commands.js +67 -0
  83. package/dist/tool-commands.js.map +1 -0
  84. package/dist/types.d.ts +177 -0
  85. package/dist/types.js.map +1 -1
  86. package/dist/workflow-services.d.ts +3 -1
  87. package/dist/workflow-services.js +16 -6
  88. package/dist/workflow-services.js.map +1 -1
  89. package/docs/autonomous-workflow.md +28 -1
  90. package/docs/benchmark.md +18 -0
  91. package/docs/runtime-llm-flow.md +80 -9
  92. package/package.json +1 -1
@@ -0,0 +1,114 @@
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
+ io.log(` Reviews: ${result.quality.reviewCount} (${result.quality.blockingReviews} blocking)`);
95
+ io.log(` Evidence: ${result.quality.evidenceCount} artifacts`);
96
+ io.log(` Gate blocks: ${result.quality.gateBlockCount}`);
97
+ io.log(` Lessons: ${result.quality.lessonCount}`);
98
+ if (result.quality.totalInputTokens > 0 ||
99
+ result.quality.totalOutputTokens > 0) {
100
+ io.log(` Tokens: ${result.quality.totalInputTokens}in / ${result.quality.totalOutputTokens}out`);
101
+ io.log(` Cost: $${result.quality.estimatedCostUsd}`);
102
+ }
103
+ }
104
+ function numberOption(value, fallback) {
105
+ if (typeof value !== "string" || value.trim() === "") {
106
+ return fallback;
107
+ }
108
+ const parsed = Number(value);
109
+ if (!Number.isFinite(parsed)) {
110
+ throw new Error(`invalid number: ${value}`);
111
+ }
112
+ return parsed;
113
+ }
114
+ //# 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,199 @@
1
+ import { requireArg } from "./args.js";
2
+ import { parseCsv, removeUndefined, stringOption, } from "./command-utils.js";
3
+ import { approveApproval, 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 result = await checkUsageBudget(stringOption(options.task));
14
+ if (options.json) {
15
+ io.log(JSON.stringify(result, null, 2));
16
+ }
17
+ else {
18
+ io.log(renderBudgetCheck(result));
19
+ }
20
+ if (!result.passed) {
21
+ throw new Error("budget check failed");
22
+ }
23
+ }
24
+ export async function approvalsListCommand(options, io) {
25
+ const approvals = await listApprovals(stringOption(options.task));
26
+ if (options.json) {
27
+ io.log(JSON.stringify(approvals, null, 2));
28
+ return;
29
+ }
30
+ if (approvals.length === 0) {
31
+ io.log("No approvals");
32
+ return;
33
+ }
34
+ for (const approval of approvals) {
35
+ io.log(`${approval.id} [${approval.status}] ${approval.taskId ?? "no-task"} ${approval.artifact}`);
36
+ }
37
+ }
38
+ export async function approvalsShowCommand(options, io) {
39
+ const approval = await showApproval(requireArg(options, "id"));
40
+ if (options.json) {
41
+ io.log(JSON.stringify(approval, null, 2));
42
+ return;
43
+ }
44
+ io.log(approval.content);
45
+ }
46
+ export async function approvalsApproveCommand(options, io) {
47
+ const approval = await approveApproval(parseApprovalDecision(options));
48
+ io.log(`Approved ${approval.id}`);
49
+ }
50
+ export async function approvalsRejectCommand(options, io) {
51
+ const approval = await rejectApproval(parseApprovalDecision(options));
52
+ io.log(`Rejected ${approval.id}`);
53
+ }
54
+ export async function configShowCommand(options, io) {
55
+ const config = await getWorkflowConfig();
56
+ if (options.json) {
57
+ io.log(JSON.stringify(config, null, 2));
58
+ return;
59
+ }
60
+ io.log(`Tools: ${Object.keys(config.tools ?? {}).length}`);
61
+ io.log(`Role routes: ${Object.keys(config.providers?.byRole ?? {}).length}`);
62
+ }
63
+ export async function modelProvidersCommand(options, io) {
64
+ const providers = await listConfiguredModelProviders();
65
+ if (options.json) {
66
+ io.log(JSON.stringify(providers, null, 2));
67
+ return;
68
+ }
69
+ if (providers.length === 0) {
70
+ io.log("No configured model providers");
71
+ return;
72
+ }
73
+ for (const provider of providers) {
74
+ io.log(`${provider.scope}: ${provider.provider}/${provider.model} (${provider.timeoutMs}ms)`);
75
+ }
76
+ }
77
+ export async function modelSetRoleCommand(options, io) {
78
+ const role = requireArg(options, "role");
79
+ const routing = parseProviderRouting(options);
80
+ await setRoleModelProvider(role, routing);
81
+ io.log(`Configured model provider for ${role}`);
82
+ }
83
+ export async function modelProvenanceAddCommand(options, io) {
84
+ const record = await recordModelProvenance({
85
+ task: requireArg(options, "task"),
86
+ role: requireArg(options, "role"),
87
+ provider: requireArg(options, "provider"),
88
+ model: requireArg(options, "model"),
89
+ promptId: requireArg(options, "prompt-id"),
90
+ responseId: requireArg(options, "response-id"),
91
+ inputTokens: numberOption(options["input-tokens"], 0),
92
+ outputTokens: numberOption(options["output-tokens"], 0),
93
+ estimatedCostUsd: numberOption(options["estimated-cost-usd"], 0),
94
+ finishReason: requireArg(options, "finish-reason"),
95
+ });
96
+ io.log(`Recorded model provenance ${record.responseId}`);
97
+ }
98
+ export async function modelProvenanceListCommand(options, io) {
99
+ const records = await listModelProvenance(stringOption(options.task));
100
+ if (options.json) {
101
+ io.log(JSON.stringify(records, null, 2));
102
+ return;
103
+ }
104
+ if (records.length === 0) {
105
+ io.log("No model provenance");
106
+ return;
107
+ }
108
+ for (const record of records) {
109
+ io.log(`${record.task} ${record.role} ${record.provider}/${record.model} ${record.responseId}`);
110
+ }
111
+ }
112
+ export async function modelCompleteFakeCommand(options, io) {
113
+ const result = await completeWithProviderFallback({
114
+ provider: requireArg(options, "provider"),
115
+ model: requireArg(options, "model"),
116
+ fallbacks: parseCsv(options.fallbacks),
117
+ maxTokens: 0,
118
+ maxCostUsd: 0,
119
+ timeoutMs: 30000,
120
+ retries: 0,
121
+ requiredCapabilities: [],
122
+ }, requireArg(options, "prompt"), removeUndefined({
123
+ failingProviders: parseCsv(options["fail-provider"]),
124
+ taskId: stringOption(options.task),
125
+ role: stringOption(options.role) ?? "parent",
126
+ }));
127
+ if (options.json) {
128
+ io.log(JSON.stringify(result, null, 2));
129
+ return;
130
+ }
131
+ io.log(`Fake completion used ${result.provider}/${result.model} fallback=${String(result.fallbackUsed)}`);
132
+ }
133
+ function parseProviderRouting(options) {
134
+ return {
135
+ provider: requireArg(options, "provider"),
136
+ model: requireArg(options, "model"),
137
+ fallbacks: parseCsv(options.fallbacks),
138
+ maxTokens: numberOption(options["max-tokens"], 0),
139
+ maxCostUsd: numberOption(options["max-cost-usd"], 0),
140
+ timeoutMs: numberOption(options["timeout-ms"], 30000),
141
+ retries: numberOption(options.retries, 0),
142
+ requiredCapabilities: parseCsv(options.capabilities),
143
+ };
144
+ }
145
+ function parseApprovalDecision(options) {
146
+ return {
147
+ id: requireArg(options, "id"),
148
+ approver: requireArg(options, "approver"),
149
+ rationale: requireArg(options, "rationale"),
150
+ };
151
+ }
152
+ function numberOption(value, fallback) {
153
+ if (typeof value !== "string" || value.trim() === "") {
154
+ return fallback;
155
+ }
156
+ const parsed = Number(value);
157
+ if (!Number.isFinite(parsed)) {
158
+ throw new Error(`invalid number: ${value}`);
159
+ }
160
+ return parsed;
161
+ }
162
+ function renderUsageReport(report) {
163
+ return [
164
+ `Usage${report.taskId ? ` for ${report.taskId}` : ""}`,
165
+ `- Requests: ${report.totals.requests}`,
166
+ `- Input tokens: ${report.totals.inputTokens}`,
167
+ `- Output tokens: ${report.totals.outputTokens}`,
168
+ `- Total tokens: ${report.totals.totalTokens}`,
169
+ `- Estimated cost USD: ${report.totals.estimatedCostUsd}`,
170
+ "",
171
+ "By role:",
172
+ ...usageLines(report.byRole),
173
+ "",
174
+ "By provider:",
175
+ ...usageLines(report.byProvider),
176
+ ].join("\n");
177
+ }
178
+ function renderBudgetCheck(result) {
179
+ return [
180
+ `Budget check${result.taskId ? ` for ${result.taskId}` : ""}: ${result.passed ? "passed" : "failed"}`,
181
+ `- Applied budgets: ${result.appliedBudgets.length > 0
182
+ ? result.appliedBudgets.join(", ")
183
+ : "none"}`,
184
+ `- Requests: ${result.usage.totals.requests}`,
185
+ `- Total tokens: ${result.usage.totals.totalTokens}`,
186
+ `- Estimated cost USD: ${result.usage.totals.estimatedCostUsd}`,
187
+ "",
188
+ "Violations:",
189
+ ...(result.violations.length === 0
190
+ ? ["- none"]
191
+ : result.violations.map((violation) => `- ${violation.scope} ${violation.metric}: ${violation.actual} > ${violation.limit}`)),
192
+ ].join("\n");
193
+ }
194
+ function usageLines(items) {
195
+ return items.length === 0
196
+ ? ["- none"]
197
+ : items.map((item) => `- ${item.key}: ${item.requests} requests, ${item.totalTokens} tokens, $${item.estimatedCostUsd}`);
198
+ }
199
+ //# 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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"}
@@ -1,10 +1,13 @@
1
- import type { ConfiguredProviderSummary, ModelProvider, ModelProviderCapabilities, ModelRequest, ModelResponse, WorkflowConfig } from "./types.js";
1
+ import type { ConfiguredProviderSummary, ModelProvider, ModelProviderCapabilities, ModelRequest, ModelResponse, ProviderPolicyConfig, WorkflowConfig } from "./types.js";
2
2
  export declare class InMemoryModelProviderRegistry {
3
3
  private readonly providers;
4
4
  register(provider: ModelProvider): void;
5
5
  get(providerId: string): ModelProvider;
6
6
  list(): ModelProvider[];
7
7
  }
8
+ export declare function createModelProvider(providerId: string): ModelProvider;
9
+ export declare function assertProviderAllowed(providerId: string, policy: ProviderPolicyConfig | undefined): void;
10
+ export declare function assertVendorFallbackAllowed(providerId: string, policy: ProviderPolicyConfig | undefined): void;
8
11
  export declare class FakeModelProvider implements ModelProvider {
9
12
  readonly id: string;
10
13
  readonly capabilities: ModelProviderCapabilities;
@@ -16,4 +19,26 @@ export declare class FakeModelProvider implements ModelProvider {
16
19
  });
17
20
  complete(request: ModelRequest): Promise<ModelResponse>;
18
21
  }
22
+ export declare class OpenAIModelProvider implements ModelProvider {
23
+ readonly id = "openai";
24
+ readonly capabilities: ModelProviderCapabilities;
25
+ private readonly fetchFn;
26
+ private readonly env;
27
+ constructor({ fetchFn, env, }?: {
28
+ fetchFn?: typeof fetch;
29
+ env?: NodeJS.ProcessEnv;
30
+ });
31
+ complete(request: ModelRequest): Promise<ModelResponse>;
32
+ }
33
+ export declare class AnthropicModelProvider implements ModelProvider {
34
+ readonly id = "anthropic";
35
+ readonly capabilities: ModelProviderCapabilities;
36
+ private readonly fetchFn;
37
+ private readonly env;
38
+ constructor({ fetchFn, env, }?: {
39
+ fetchFn?: typeof fetch;
40
+ env?: NodeJS.ProcessEnv;
41
+ });
42
+ complete(request: ModelRequest): Promise<ModelResponse>;
43
+ }
19
44
  export declare function summarizeConfiguredProviders(config: WorkflowConfig): ConfiguredProviderSummary[];