gsd-pi 2.68.1-dev.c1497ab → 2.69.0-dev.232905b
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.
- package/dist/resources/extensions/gsd/auto-model-selection.js +27 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +6 -2
- package/dist/resources/extensions/gsd/codebase-generator.js +12 -0
- package/dist/resources/extensions/gsd/commands-cmux.js +30 -1
- package/dist/resources/extensions/gsd/model-router.js +53 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +53 -6
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -15
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +15 -15
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +1 -1
- package/packages/daemon/src/orchestrator.ts +9 -84
- package/packages/mcp-server/README.md +25 -3
- package/packages/mcp-server/dist/cli.d.ts +0 -1
- package/packages/mcp-server/dist/cli.d.ts.map +1 -1
- package/packages/mcp-server/dist/cli.js +4 -2
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts +32 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +118 -1
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/tool-credentials.d.ts +6 -0
- package/packages/mcp-server/dist/tool-credentials.d.ts.map +1 -0
- package/packages/mcp-server/dist/tool-credentials.js +90 -0
- package/packages/mcp-server/dist/tool-credentials.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +274 -2
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/cli.ts +5 -3
- package/packages/mcp-server/src/mcp-server.test.ts +85 -1
- package/packages/mcp-server/src/server.ts +188 -1
- package/packages/mcp-server/src/tool-credentials.test.ts +95 -0
- package/packages/mcp-server/src/tool-credentials.ts +97 -0
- package/packages/mcp-server/src/workflow-tools.test.ts +32 -25
- package/packages/mcp-server/src/workflow-tools.ts +365 -2
- package/packages/pi-ai/dist/index.d.ts +3 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/amazon-bedrock.js +2 -2
- package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +1 -23
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +2 -2
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/mistral.js +2 -2
- package/packages/pi-ai/dist/providers/mistral.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +2 -2
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-responses-shared.js +2 -2
- package/packages/pi-ai/dist/providers/openai-responses-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/provider-capabilities.d.ts +59 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.js +173 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.js.map +1 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.test.js +132 -0
- package/packages/pi-ai/dist/providers/provider-capabilities.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/transform-messages-report.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/transform-messages-report.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/transform-messages-report.test.js +172 -0
- package/packages/pi-ai/dist/providers/transform-messages-report.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/transform-messages.d.ts +34 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +73 -2
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/index.d.ts +3 -2
- package/packages/pi-ai/dist/utils/oauth/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/index.js +3 -5
- package/packages/pi-ai/dist/utils/oauth/index.js.map +1 -1
- package/packages/pi-ai/src/index.ts +3 -0
- package/packages/pi-ai/src/providers/amazon-bedrock.ts +2 -2
- package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -2
- package/packages/pi-ai/src/providers/anthropic.ts +1 -31
- package/packages/pi-ai/src/providers/google-shared.ts +2 -2
- package/packages/pi-ai/src/providers/mistral.ts +2 -2
- package/packages/pi-ai/src/providers/openai-completions.ts +2 -2
- package/packages/pi-ai/src/providers/openai-responses-shared.ts +2 -2
- package/packages/pi-ai/src/providers/provider-capabilities.test.ts +174 -0
- package/packages/pi-ai/src/providers/provider-capabilities.ts +215 -0
- package/packages/pi-ai/src/providers/transform-messages-report.test.ts +189 -0
- package/packages/pi-ai/src/providers/transform-messages.ts +94 -1
- package/packages/pi-ai/src/utils/oauth/index.ts +3 -5
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +10 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +15 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +41 -0
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.d.ts +27 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js +69 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js.map +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts +2 -2
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +3 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/extensions/index.ts +4 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +11 -1
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +18 -0
- package/packages/pi-coding-agent/src/core/extensions/types.ts +45 -0
- package/packages/pi-coding-agent/src/core/tools/index.ts +7 -0
- package/packages/pi-coding-agent/src/core/tools/tool-compatibility-registry.ts +83 -0
- package/packages/pi-coding-agent/src/index.ts +9 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/auto-model-selection.ts +35 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +8 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +9 -5
- package/src/resources/extensions/gsd/codebase-generator.ts +16 -0
- package/src/resources/extensions/gsd/commands-cmux.ts +32 -1
- package/src/resources/extensions/gsd/model-router.ts +73 -0
- package/src/resources/extensions/gsd/tests/cmux.test.ts +67 -1
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +23 -7
- package/src/resources/extensions/gsd/workflow-mcp.ts +59 -5
- package/packages/pi-ai/dist/utils/oauth/anthropic.d.ts +0 -17
- package/packages/pi-ai/dist/utils/oauth/anthropic.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/oauth/anthropic.js +0 -106
- package/packages/pi-ai/dist/utils/oauth/anthropic.js.map +0 -1
- package/packages/pi-ai/src/utils/oauth/anthropic.ts +0 -140
- /package/dist/web/standalone/.next/static/{5D80IWYltFwlAJiCZ84MC → CHeIRZw-E97oO51g7zDvv}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{5D80IWYltFwlAJiCZ84MC → CHeIRZw-E97oO51g7zDvv}/_ssgManifest.js +0 -0
|
@@ -318,7 +318,7 @@ function getWriteGateModuleCandidates(): string[] {
|
|
|
318
318
|
const candidates: string[] = [];
|
|
319
319
|
const explicitModule = process.env.GSD_WORKFLOW_WRITE_GATE_MODULE?.trim();
|
|
320
320
|
if (explicitModule) {
|
|
321
|
-
if (/^[a-z]
|
|
321
|
+
if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith("file:")) {
|
|
322
322
|
throw new Error("GSD_WORKFLOW_WRITE_GATE_MODULE only supports file: URLs or filesystem paths.");
|
|
323
323
|
}
|
|
324
324
|
candidates.push(explicitModule.startsWith("file:") ? explicitModule : toFileUrl(explicitModule));
|
|
@@ -336,11 +336,15 @@ function toFileUrl(modulePath: string): string {
|
|
|
336
336
|
return pathToFileURL(resolve(modulePath)).href;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
+
async function importLocalModule<T>(relativePath: string): Promise<T> {
|
|
340
|
+
return import(new URL(relativePath, import.meta.url).href) as Promise<T>;
|
|
341
|
+
}
|
|
342
|
+
|
|
339
343
|
function getWorkflowExecutorModuleCandidates(env: NodeJS.ProcessEnv = process.env): string[] {
|
|
340
344
|
const candidates: string[] = [];
|
|
341
345
|
const explicitModule = env.GSD_WORKFLOW_EXECUTORS_MODULE?.trim();
|
|
342
346
|
if (explicitModule) {
|
|
343
|
-
if (/^[a-z]
|
|
347
|
+
if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith("file:")) {
|
|
344
348
|
throw new Error("GSD_WORKFLOW_EXECUTORS_MODULE only supports file: URLs or filesystem paths.");
|
|
345
349
|
}
|
|
346
350
|
candidates.push(explicitModule.startsWith("file:") ? explicitModule : toFileUrl(explicitModule));
|
|
@@ -420,6 +424,38 @@ interface McpToolServer {
|
|
|
420
424
|
): unknown;
|
|
421
425
|
}
|
|
422
426
|
|
|
427
|
+
export const WORKFLOW_TOOL_NAMES = [
|
|
428
|
+
"gsd_decision_save",
|
|
429
|
+
"gsd_save_decision",
|
|
430
|
+
"gsd_requirement_update",
|
|
431
|
+
"gsd_update_requirement",
|
|
432
|
+
"gsd_requirement_save",
|
|
433
|
+
"gsd_save_requirement",
|
|
434
|
+
"gsd_milestone_generate_id",
|
|
435
|
+
"gsd_generate_milestone_id",
|
|
436
|
+
"gsd_plan_milestone",
|
|
437
|
+
"gsd_plan_slice",
|
|
438
|
+
"gsd_plan_task",
|
|
439
|
+
"gsd_task_plan",
|
|
440
|
+
"gsd_replan_slice",
|
|
441
|
+
"gsd_slice_replan",
|
|
442
|
+
"gsd_slice_complete",
|
|
443
|
+
"gsd_complete_slice",
|
|
444
|
+
"gsd_skip_slice",
|
|
445
|
+
"gsd_complete_milestone",
|
|
446
|
+
"gsd_milestone_complete",
|
|
447
|
+
"gsd_validate_milestone",
|
|
448
|
+
"gsd_milestone_validate",
|
|
449
|
+
"gsd_reassess_roadmap",
|
|
450
|
+
"gsd_roadmap_reassess",
|
|
451
|
+
"gsd_save_gate_result",
|
|
452
|
+
"gsd_summary_save",
|
|
453
|
+
"gsd_task_complete",
|
|
454
|
+
"gsd_complete_task",
|
|
455
|
+
"gsd_milestone_status",
|
|
456
|
+
"gsd_journal_query",
|
|
457
|
+
] as const;
|
|
458
|
+
|
|
423
459
|
async function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {
|
|
424
460
|
// The shared DB adapter and workflow log base path are process-global, so
|
|
425
461
|
// workflow MCP mutations must not overlap within a single server process.
|
|
@@ -566,6 +602,15 @@ async function handleSaveGateResult(
|
|
|
566
602
|
return runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir));
|
|
567
603
|
}
|
|
568
604
|
|
|
605
|
+
async function ensureMilestoneDbRow(milestoneId: string): Promise<void> {
|
|
606
|
+
try {
|
|
607
|
+
const { insertMilestone } = await importLocalModule<any>("../../../src/resources/extensions/gsd/gsd-db.js");
|
|
608
|
+
insertMilestone({ id: milestoneId, status: "queued" });
|
|
609
|
+
} catch {
|
|
610
|
+
// Ignore pre-existing rows or transient DB availability issues.
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
|
|
569
614
|
const projectDirParam = z.string().describe("Absolute path to the project directory within the configured workflow root");
|
|
570
615
|
|
|
571
616
|
const planMilestoneParams = {
|
|
@@ -772,6 +817,73 @@ const summarySaveParams = {
|
|
|
772
817
|
};
|
|
773
818
|
const summarySaveSchema = z.object(summarySaveParams);
|
|
774
819
|
|
|
820
|
+
const decisionSaveParams = {
|
|
821
|
+
projectDir: projectDirParam,
|
|
822
|
+
scope: z.string().describe("Scope of the decision (e.g. architecture, library, observability)"),
|
|
823
|
+
decision: z.string().describe("What is being decided"),
|
|
824
|
+
choice: z.string().describe("The choice made"),
|
|
825
|
+
rationale: z.string().describe("Why this choice was made"),
|
|
826
|
+
revisable: z.string().optional().describe("Whether this can be revisited"),
|
|
827
|
+
when_context: z.string().optional().describe("When/context for the decision"),
|
|
828
|
+
made_by: z.enum(["human", "agent", "collaborative"]).optional().describe("Who made the decision"),
|
|
829
|
+
};
|
|
830
|
+
const decisionSaveSchema = z.object(decisionSaveParams);
|
|
831
|
+
|
|
832
|
+
const requirementUpdateParams = {
|
|
833
|
+
projectDir: projectDirParam,
|
|
834
|
+
id: z.string().describe("Requirement ID (e.g. R001)"),
|
|
835
|
+
status: z.string().optional().describe("New status"),
|
|
836
|
+
validation: z.string().optional().describe("Validation criteria or proof"),
|
|
837
|
+
notes: z.string().optional().describe("Additional notes"),
|
|
838
|
+
description: z.string().optional().describe("Updated description"),
|
|
839
|
+
primary_owner: z.string().optional().describe("Primary owning slice"),
|
|
840
|
+
supporting_slices: z.string().optional().describe("Supporting slices"),
|
|
841
|
+
};
|
|
842
|
+
const requirementUpdateSchema = z.object(requirementUpdateParams);
|
|
843
|
+
|
|
844
|
+
const requirementSaveParams = {
|
|
845
|
+
projectDir: projectDirParam,
|
|
846
|
+
class: z.string().describe("Requirement class"),
|
|
847
|
+
description: z.string().describe("Short description of the requirement"),
|
|
848
|
+
why: z.string().describe("Why this requirement matters"),
|
|
849
|
+
source: z.string().describe("Origin of the requirement"),
|
|
850
|
+
status: z.string().optional().describe("Requirement status"),
|
|
851
|
+
primary_owner: z.string().optional().describe("Primary owning slice"),
|
|
852
|
+
supporting_slices: z.string().optional().describe("Supporting slices"),
|
|
853
|
+
validation: z.string().optional().describe("Validation criteria"),
|
|
854
|
+
notes: z.string().optional().describe("Additional notes"),
|
|
855
|
+
};
|
|
856
|
+
const requirementSaveSchema = z.object(requirementSaveParams);
|
|
857
|
+
|
|
858
|
+
const milestoneGenerateIdParams = {
|
|
859
|
+
projectDir: projectDirParam,
|
|
860
|
+
};
|
|
861
|
+
const milestoneGenerateIdSchema = z.object(milestoneGenerateIdParams);
|
|
862
|
+
|
|
863
|
+
const planTaskParams = {
|
|
864
|
+
projectDir: projectDirParam,
|
|
865
|
+
milestoneId: z.string().describe("Milestone ID (e.g. M001)"),
|
|
866
|
+
sliceId: z.string().describe("Slice ID (e.g. S01)"),
|
|
867
|
+
taskId: z.string().describe("Task ID (e.g. T01)"),
|
|
868
|
+
title: z.string().describe("Task title"),
|
|
869
|
+
description: z.string().describe("Task description / steps block"),
|
|
870
|
+
estimate: z.string().describe("Task estimate"),
|
|
871
|
+
files: z.array(z.string()).describe("Files likely touched"),
|
|
872
|
+
verify: z.string().describe("Verification command or block"),
|
|
873
|
+
inputs: z.array(z.string()).describe("Input files or references"),
|
|
874
|
+
expectedOutput: z.array(z.string()).describe("Expected output files or artifacts"),
|
|
875
|
+
observabilityImpact: z.string().optional().describe("Task observability impact"),
|
|
876
|
+
};
|
|
877
|
+
const planTaskSchema = z.object(planTaskParams);
|
|
878
|
+
|
|
879
|
+
const skipSliceParams = {
|
|
880
|
+
projectDir: projectDirParam,
|
|
881
|
+
sliceId: z.string().describe("Slice ID (e.g. S02)"),
|
|
882
|
+
milestoneId: z.string().describe("Milestone ID (e.g. M003)"),
|
|
883
|
+
reason: z.string().optional().describe("Reason for skipping this slice"),
|
|
884
|
+
};
|
|
885
|
+
const skipSliceSchema = z.object(skipSliceParams);
|
|
886
|
+
|
|
775
887
|
const taskCompleteParams = {
|
|
776
888
|
projectDir: projectDirParam,
|
|
777
889
|
taskId: z.string().describe("Task ID (e.g. T01)"),
|
|
@@ -803,7 +915,171 @@ const milestoneStatusParams = {
|
|
|
803
915
|
};
|
|
804
916
|
const milestoneStatusSchema = z.object(milestoneStatusParams);
|
|
805
917
|
|
|
918
|
+
const journalQueryParams = {
|
|
919
|
+
projectDir: projectDirParam,
|
|
920
|
+
flowId: z.string().optional().describe("Filter by flow ID"),
|
|
921
|
+
unitId: z.string().optional().describe("Filter by unit ID"),
|
|
922
|
+
rule: z.string().optional().describe("Filter by rule name"),
|
|
923
|
+
eventType: z.string().optional().describe("Filter by event type"),
|
|
924
|
+
after: z.string().optional().describe("ISO-8601 lower bound (inclusive)"),
|
|
925
|
+
before: z.string().optional().describe("ISO-8601 upper bound (inclusive)"),
|
|
926
|
+
limit: z.number().optional().describe("Maximum entries to return"),
|
|
927
|
+
};
|
|
928
|
+
const journalQuerySchema = z.object(journalQueryParams);
|
|
929
|
+
|
|
806
930
|
export function registerWorkflowTools(server: McpToolServer): void {
|
|
931
|
+
server.tool(
|
|
932
|
+
"gsd_decision_save",
|
|
933
|
+
"Record a project decision to the GSD database and regenerate DECISIONS.md.",
|
|
934
|
+
decisionSaveParams,
|
|
935
|
+
async (args: Record<string, unknown>) => {
|
|
936
|
+
const parsed = parseWorkflowArgs(decisionSaveSchema, args);
|
|
937
|
+
const { projectDir, ...params } = parsed;
|
|
938
|
+
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
939
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
940
|
+
const { saveDecisionToDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
941
|
+
return saveDecisionToDb(params, projectDir);
|
|
942
|
+
});
|
|
943
|
+
return { content: [{ type: "text" as const, text: `Saved decision ${result.id}` }] };
|
|
944
|
+
},
|
|
945
|
+
);
|
|
946
|
+
|
|
947
|
+
server.tool(
|
|
948
|
+
"gsd_save_decision",
|
|
949
|
+
"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.",
|
|
950
|
+
decisionSaveParams,
|
|
951
|
+
async (args: Record<string, unknown>) => {
|
|
952
|
+
const parsed = parseWorkflowArgs(decisionSaveSchema, args);
|
|
953
|
+
const { projectDir, ...params } = parsed;
|
|
954
|
+
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
955
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
956
|
+
const { saveDecisionToDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
957
|
+
return saveDecisionToDb(params, projectDir);
|
|
958
|
+
});
|
|
959
|
+
return { content: [{ type: "text" as const, text: `Saved decision ${result.id}` }] };
|
|
960
|
+
},
|
|
961
|
+
);
|
|
962
|
+
|
|
963
|
+
server.tool(
|
|
964
|
+
"gsd_requirement_update",
|
|
965
|
+
"Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.",
|
|
966
|
+
requirementUpdateParams,
|
|
967
|
+
async (args: Record<string, unknown>) => {
|
|
968
|
+
const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
|
|
969
|
+
const { projectDir, id, ...updates } = parsed;
|
|
970
|
+
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
971
|
+
await runSerializedWorkflowOperation(async () => {
|
|
972
|
+
const { updateRequirementInDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
973
|
+
return updateRequirementInDb(id, updates, projectDir);
|
|
974
|
+
});
|
|
975
|
+
return { content: [{ type: "text" as const, text: `Updated requirement ${id}` }] };
|
|
976
|
+
},
|
|
977
|
+
);
|
|
978
|
+
|
|
979
|
+
server.tool(
|
|
980
|
+
"gsd_update_requirement",
|
|
981
|
+
"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.",
|
|
982
|
+
requirementUpdateParams,
|
|
983
|
+
async (args: Record<string, unknown>) => {
|
|
984
|
+
const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
|
|
985
|
+
const { projectDir, id, ...updates } = parsed;
|
|
986
|
+
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
987
|
+
await runSerializedWorkflowOperation(async () => {
|
|
988
|
+
const { updateRequirementInDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
989
|
+
return updateRequirementInDb(id, updates, projectDir);
|
|
990
|
+
});
|
|
991
|
+
return { content: [{ type: "text" as const, text: `Updated requirement ${id}` }] };
|
|
992
|
+
},
|
|
993
|
+
);
|
|
994
|
+
|
|
995
|
+
server.tool(
|
|
996
|
+
"gsd_requirement_save",
|
|
997
|
+
"Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.",
|
|
998
|
+
requirementSaveParams,
|
|
999
|
+
async (args: Record<string, unknown>) => {
|
|
1000
|
+
const parsed = parseWorkflowArgs(requirementSaveSchema, args);
|
|
1001
|
+
const { projectDir, ...params } = parsed;
|
|
1002
|
+
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
1003
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
1004
|
+
const { saveRequirementToDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
1005
|
+
return saveRequirementToDb(params, projectDir);
|
|
1006
|
+
});
|
|
1007
|
+
return { content: [{ type: "text" as const, text: `Saved requirement ${result.id}` }] };
|
|
1008
|
+
},
|
|
1009
|
+
);
|
|
1010
|
+
|
|
1011
|
+
server.tool(
|
|
1012
|
+
"gsd_save_requirement",
|
|
1013
|
+
"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.",
|
|
1014
|
+
requirementSaveParams,
|
|
1015
|
+
async (args: Record<string, unknown>) => {
|
|
1016
|
+
const parsed = parseWorkflowArgs(requirementSaveSchema, args);
|
|
1017
|
+
const { projectDir, ...params } = parsed;
|
|
1018
|
+
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
1019
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
1020
|
+
const { saveRequirementToDb } = await importLocalModule<any>("../../../src/resources/extensions/gsd/db-writer.js");
|
|
1021
|
+
return saveRequirementToDb(params, projectDir);
|
|
1022
|
+
});
|
|
1023
|
+
return { content: [{ type: "text" as const, text: `Saved requirement ${result.id}` }] };
|
|
1024
|
+
},
|
|
1025
|
+
);
|
|
1026
|
+
|
|
1027
|
+
server.tool(
|
|
1028
|
+
"gsd_milestone_generate_id",
|
|
1029
|
+
"Generate the next milestone ID for a new GSD milestone.",
|
|
1030
|
+
milestoneGenerateIdParams,
|
|
1031
|
+
async (args: Record<string, unknown>) => {
|
|
1032
|
+
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
1033
|
+
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
1034
|
+
const id = await runSerializedWorkflowOperation(async () => {
|
|
1035
|
+
const {
|
|
1036
|
+
claimReservedId,
|
|
1037
|
+
findMilestoneIds,
|
|
1038
|
+
getReservedMilestoneIds,
|
|
1039
|
+
nextMilestoneId,
|
|
1040
|
+
} = await importLocalModule<any>("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
1041
|
+
const reserved = claimReservedId();
|
|
1042
|
+
if (reserved) {
|
|
1043
|
+
await ensureMilestoneDbRow(reserved);
|
|
1044
|
+
return reserved;
|
|
1045
|
+
}
|
|
1046
|
+
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
1047
|
+
const nextId = nextMilestoneId(allIds);
|
|
1048
|
+
await ensureMilestoneDbRow(nextId);
|
|
1049
|
+
return nextId;
|
|
1050
|
+
});
|
|
1051
|
+
return { content: [{ type: "text" as const, text: id }] };
|
|
1052
|
+
},
|
|
1053
|
+
);
|
|
1054
|
+
|
|
1055
|
+
server.tool(
|
|
1056
|
+
"gsd_generate_milestone_id",
|
|
1057
|
+
"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.",
|
|
1058
|
+
milestoneGenerateIdParams,
|
|
1059
|
+
async (args: Record<string, unknown>) => {
|
|
1060
|
+
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
1061
|
+
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
1062
|
+
const id = await runSerializedWorkflowOperation(async () => {
|
|
1063
|
+
const {
|
|
1064
|
+
claimReservedId,
|
|
1065
|
+
findMilestoneIds,
|
|
1066
|
+
getReservedMilestoneIds,
|
|
1067
|
+
nextMilestoneId,
|
|
1068
|
+
} = await importLocalModule<any>("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
1069
|
+
const reserved = claimReservedId();
|
|
1070
|
+
if (reserved) {
|
|
1071
|
+
await ensureMilestoneDbRow(reserved);
|
|
1072
|
+
return reserved;
|
|
1073
|
+
}
|
|
1074
|
+
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
1075
|
+
const nextId = nextMilestoneId(allIds);
|
|
1076
|
+
await ensureMilestoneDbRow(nextId);
|
|
1077
|
+
return nextId;
|
|
1078
|
+
});
|
|
1079
|
+
return { content: [{ type: "text" as const, text: id }] };
|
|
1080
|
+
},
|
|
1081
|
+
);
|
|
1082
|
+
|
|
807
1083
|
server.tool(
|
|
808
1084
|
"gsd_plan_milestone",
|
|
809
1085
|
"Write milestone planning state to the GSD database and render ROADMAP.md from DB.",
|
|
@@ -830,6 +1106,48 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
830
1106
|
},
|
|
831
1107
|
);
|
|
832
1108
|
|
|
1109
|
+
server.tool(
|
|
1110
|
+
"gsd_plan_task",
|
|
1111
|
+
"Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.",
|
|
1112
|
+
planTaskParams,
|
|
1113
|
+
async (args: Record<string, unknown>) => {
|
|
1114
|
+
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
1115
|
+
const { projectDir, ...params } = parsed;
|
|
1116
|
+
await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
|
|
1117
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
1118
|
+
const { handlePlanTask } = await importLocalModule<any>("../../../src/resources/extensions/gsd/tools/plan-task.js");
|
|
1119
|
+
return handlePlanTask(params, projectDir);
|
|
1120
|
+
});
|
|
1121
|
+
if ("error" in result) {
|
|
1122
|
+
throw new Error(result.error);
|
|
1123
|
+
}
|
|
1124
|
+
return {
|
|
1125
|
+
content: [{ type: "text" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],
|
|
1126
|
+
};
|
|
1127
|
+
},
|
|
1128
|
+
);
|
|
1129
|
+
|
|
1130
|
+
server.tool(
|
|
1131
|
+
"gsd_task_plan",
|
|
1132
|
+
"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.",
|
|
1133
|
+
planTaskParams,
|
|
1134
|
+
async (args: Record<string, unknown>) => {
|
|
1135
|
+
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
1136
|
+
const { projectDir, ...params } = parsed;
|
|
1137
|
+
await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
|
|
1138
|
+
const result = await runSerializedWorkflowOperation(async () => {
|
|
1139
|
+
const { handlePlanTask } = await importLocalModule<any>("../../../src/resources/extensions/gsd/tools/plan-task.js");
|
|
1140
|
+
return handlePlanTask(params, projectDir);
|
|
1141
|
+
});
|
|
1142
|
+
if ("error" in result) {
|
|
1143
|
+
throw new Error(result.error);
|
|
1144
|
+
}
|
|
1145
|
+
return {
|
|
1146
|
+
content: [{ type: "text" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],
|
|
1147
|
+
};
|
|
1148
|
+
},
|
|
1149
|
+
);
|
|
1150
|
+
|
|
833
1151
|
server.tool(
|
|
834
1152
|
"gsd_replan_slice",
|
|
835
1153
|
"Replan a slice after a blocker is discovered, preserving completed tasks and re-rendering PLAN.md + REPLAN.md.",
|
|
@@ -870,6 +1188,36 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
870
1188
|
},
|
|
871
1189
|
);
|
|
872
1190
|
|
|
1191
|
+
server.tool(
|
|
1192
|
+
"gsd_skip_slice",
|
|
1193
|
+
"Mark a slice as skipped so auto-mode advances past it without executing.",
|
|
1194
|
+
skipSliceParams,
|
|
1195
|
+
async (args: Record<string, unknown>) => {
|
|
1196
|
+
const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);
|
|
1197
|
+
await enforceWorkflowWriteGate("gsd_skip_slice", projectDir, milestoneId);
|
|
1198
|
+
await runSerializedWorkflowOperation(async () => {
|
|
1199
|
+
const { getSlice, updateSliceStatus } = await importLocalModule<any>("../../../src/resources/extensions/gsd/gsd-db.js");
|
|
1200
|
+
const { invalidateStateCache } = await importLocalModule<any>("../../../src/resources/extensions/gsd/state.js");
|
|
1201
|
+
const { rebuildState } = await importLocalModule<any>("../../../src/resources/extensions/gsd/doctor.js");
|
|
1202
|
+
const slice = getSlice(milestoneId, sliceId);
|
|
1203
|
+
if (!slice) {
|
|
1204
|
+
throw new Error(`Slice ${sliceId} not found in milestone ${milestoneId}`);
|
|
1205
|
+
}
|
|
1206
|
+
if (slice.status === "complete" || slice.status === "done") {
|
|
1207
|
+
throw new Error(`Slice ${sliceId} is already complete and cannot be skipped`);
|
|
1208
|
+
}
|
|
1209
|
+
if (slice.status !== "skipped") {
|
|
1210
|
+
updateSliceStatus(milestoneId, sliceId, "skipped");
|
|
1211
|
+
invalidateStateCache();
|
|
1212
|
+
await rebuildState(projectDir);
|
|
1213
|
+
}
|
|
1214
|
+
});
|
|
1215
|
+
return {
|
|
1216
|
+
content: [{ type: "text" as const, text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? "User-directed skip"}.` }],
|
|
1217
|
+
};
|
|
1218
|
+
},
|
|
1219
|
+
);
|
|
1220
|
+
|
|
873
1221
|
server.tool(
|
|
874
1222
|
"gsd_complete_milestone",
|
|
875
1223
|
"Record a completed milestone to the GSD database and render its SUMMARY.md.",
|
|
@@ -994,4 +1342,19 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
994
1342
|
return runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir));
|
|
995
1343
|
},
|
|
996
1344
|
);
|
|
1345
|
+
|
|
1346
|
+
server.tool(
|
|
1347
|
+
"gsd_journal_query",
|
|
1348
|
+
"Query the structured event journal for auto-mode iterations.",
|
|
1349
|
+
journalQueryParams,
|
|
1350
|
+
async (args: Record<string, unknown>) => {
|
|
1351
|
+
const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);
|
|
1352
|
+
const { queryJournal } = await importLocalModule<any>("../../../src/resources/extensions/gsd/journal.js");
|
|
1353
|
+
const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);
|
|
1354
|
+
if (entries.length === 0) {
|
|
1355
|
+
return { content: [{ type: "text" as const, text: "No matching journal entries found." }] };
|
|
1356
|
+
}
|
|
1357
|
+
return { content: [{ type: "text" as const, text: JSON.stringify(entries, null, 2) }] };
|
|
1358
|
+
},
|
|
1359
|
+
);
|
|
997
1360
|
}
|
|
@@ -11,7 +11,10 @@ export * from "./providers/google-vertex.js";
|
|
|
11
11
|
export * from "./providers/mistral.js";
|
|
12
12
|
export * from "./providers/openai-completions.js";
|
|
13
13
|
export * from "./providers/openai-responses.js";
|
|
14
|
+
export * from "./providers/provider-capabilities.js";
|
|
14
15
|
export * from "./providers/register-builtins.js";
|
|
16
|
+
export type { ProviderSwitchReport } from "./providers/transform-messages.js";
|
|
17
|
+
export { createEmptyReport, hasTransformations, transformMessagesWithReport } from "./providers/transform-messages.js";
|
|
15
18
|
export * from "./stream.js";
|
|
16
19
|
export * from "./types.js";
|
|
17
20
|
export * from "./utils/event-stream.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACvH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACX,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,sBAAsB,GACtB,MAAM,wBAAwB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC"}
|
|
@@ -10,7 +10,9 @@ export * from "./providers/google-vertex.js";
|
|
|
10
10
|
export * from "./providers/mistral.js";
|
|
11
11
|
export * from "./providers/openai-completions.js";
|
|
12
12
|
export * from "./providers/openai-responses.js";
|
|
13
|
+
export * from "./providers/provider-capabilities.js";
|
|
13
14
|
export * from "./providers/register-builtins.js";
|
|
15
|
+
export { createEmptyReport, hasTransformations, transformMessagesWithReport } from "./providers/transform-messages.js";
|
|
14
16
|
export * from "./stream.js";
|
|
15
17
|
export * from "./types.js";
|
|
16
18
|
export * from "./utils/event-stream.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AACvH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAStC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"@sinclair/typebox\";\nexport { Type } from \"@sinclair/typebox\";\n\nexport * from \"./api-registry.js\";\nexport * from \"./env-api-keys.js\";\nexport * from \"./models.js\";\nexport * from \"./providers/anthropic.js\";\nexport * from \"./providers/azure-openai-responses.js\";\nexport * from \"./providers/google.js\";\nexport * from \"./providers/google-gemini-cli.js\";\nexport * from \"./providers/google-vertex.js\";\nexport * from \"./providers/mistral.js\";\nexport * from \"./providers/openai-completions.js\";\nexport * from \"./providers/openai-responses.js\";\nexport * from \"./providers/provider-capabilities.js\";\nexport * from \"./providers/register-builtins.js\";\nexport type { ProviderSwitchReport } from \"./providers/transform-messages.js\";\nexport { createEmptyReport, hasTransformations, transformMessagesWithReport } from \"./providers/transform-messages.js\";\nexport * from \"./stream.js\";\nexport * from \"./types.js\";\nexport * from \"./utils/event-stream.js\";\nexport * from \"./utils/json-parse.js\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthCredentials,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthProviderId,\n\tOAuthProviderInterface,\n} from \"./utils/oauth/types.js\";\nexport * from \"./utils/overflow.js\";\nexport * from \"./utils/typebox-helpers.js\";\nexport * from \"./utils/repair-tool-json.js\";\nexport * from \"./utils/validation.js\";\n"]}
|
|
@@ -4,7 +4,7 @@ import { AssistantMessageEventStream } from "../utils/event-stream.js";
|
|
|
4
4
|
import { parseStreamingJson } from "../utils/json-parse.js";
|
|
5
5
|
import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
|
|
6
6
|
import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.js";
|
|
7
|
-
import {
|
|
7
|
+
import { transformMessagesWithReport } from "./transform-messages.js";
|
|
8
8
|
export const streamBedrock = (model, context, options = {}) => {
|
|
9
9
|
const stream = new AssistantMessageEventStream();
|
|
10
10
|
(async () => {
|
|
@@ -365,7 +365,7 @@ function normalizeToolCallId(id) {
|
|
|
365
365
|
}
|
|
366
366
|
function convertMessages(context, model, cacheRetention) {
|
|
367
367
|
const result = [];
|
|
368
|
-
const transformedMessages =
|
|
368
|
+
const transformedMessages = transformMessagesWithReport(context.messages, model, normalizeToolCallId, "bedrock-converse-stream");
|
|
369
369
|
for (let i = 0; i < transformedMessages.length; i++) {
|
|
370
370
|
const m = transformedMessages[i];
|
|
371
371
|
switch (m.role) {
|