@studio-foundation/runner 0.13.0 → 0.15.0

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 (74) hide show
  1. package/dist/generated/bundled-assets.d.ts +1 -1
  2. package/dist/generated/bundled-assets.js +1 -1
  3. package/dist/index.d.ts +4 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +10 -4
  6. package/dist/index.js.map +1 -1
  7. package/dist/prompt-builder.d.ts +2 -0
  8. package/dist/prompt-builder.d.ts.map +1 -1
  9. package/dist/prompt-builder.js +12 -5
  10. package/dist/prompt-builder.js.map +1 -1
  11. package/dist/prompt-builder.test.js +43 -0
  12. package/dist/prompt-builder.test.js.map +1 -1
  13. package/dist/prompt-cache.d.ts +33 -0
  14. package/dist/prompt-cache.d.ts.map +1 -0
  15. package/dist/prompt-cache.js +46 -0
  16. package/dist/prompt-cache.js.map +1 -0
  17. package/dist/prompt-cache.test.d.ts +2 -0
  18. package/dist/prompt-cache.test.d.ts.map +1 -0
  19. package/dist/prompt-cache.test.js +53 -0
  20. package/dist/prompt-cache.test.js.map +1 -0
  21. package/dist/providers/anthropic-batch.test.d.ts +2 -0
  22. package/dist/providers/anthropic-batch.test.d.ts.map +1 -0
  23. package/dist/providers/anthropic-batch.test.js +178 -0
  24. package/dist/providers/anthropic-batch.test.js.map +1 -0
  25. package/dist/providers/anthropic.d.ts +17 -1
  26. package/dist/providers/anthropic.d.ts.map +1 -1
  27. package/dist/providers/anthropic.js +126 -12
  28. package/dist/providers/anthropic.js.map +1 -1
  29. package/dist/providers/anthropic.test.js +69 -0
  30. package/dist/providers/anthropic.test.js.map +1 -1
  31. package/dist/providers/batch-window.d.ts +89 -0
  32. package/dist/providers/batch-window.d.ts.map +1 -0
  33. package/dist/providers/batch-window.js +309 -0
  34. package/dist/providers/batch-window.js.map +1 -0
  35. package/dist/providers/batch-window.test.d.ts +2 -0
  36. package/dist/providers/batch-window.test.d.ts.map +1 -0
  37. package/dist/providers/batch-window.test.js +317 -0
  38. package/dist/providers/batch-window.test.js.map +1 -0
  39. package/dist/providers/batch.d.ts +55 -0
  40. package/dist/providers/batch.d.ts.map +1 -0
  41. package/dist/providers/batch.js +35 -0
  42. package/dist/providers/batch.js.map +1 -0
  43. package/dist/providers/claude-code.d.ts.map +1 -1
  44. package/dist/providers/claude-code.js +72 -1
  45. package/dist/providers/claude-code.js.map +1 -1
  46. package/dist/providers/claude-code.test.js +95 -0
  47. package/dist/providers/claude-code.test.js.map +1 -1
  48. package/dist/providers/ollama.d.ts.map +1 -1
  49. package/dist/providers/ollama.js +4 -2
  50. package/dist/providers/ollama.js.map +1 -1
  51. package/dist/providers/openai-responses.d.ts.map +1 -1
  52. package/dist/providers/openai-responses.js +24 -18
  53. package/dist/providers/openai-responses.js.map +1 -1
  54. package/dist/providers/openai.d.ts.map +1 -1
  55. package/dist/providers/openai.js +26 -10
  56. package/dist/providers/openai.js.map +1 -1
  57. package/dist/providers/provider.d.ts +3 -6
  58. package/dist/providers/provider.d.ts.map +1 -1
  59. package/dist/providers/provider.js.map +1 -1
  60. package/dist/runner.d.ts +14 -6
  61. package/dist/runner.d.ts.map +1 -1
  62. package/dist/runner.js +20 -8
  63. package/dist/runner.js.map +1 -1
  64. package/dist/runner.test.js +137 -0
  65. package/dist/runner.test.js.map +1 -1
  66. package/package.json +3 -3
  67. package/dist/integrations/integration-loader.d.ts +0 -7
  68. package/dist/integrations/integration-loader.d.ts.map +0 -1
  69. package/dist/integrations/integration-loader.js +0 -33
  70. package/dist/integrations/integration-loader.js.map +0 -1
  71. package/dist/integrations/integration-loader.test.d.ts +0 -2
  72. package/dist/integrations/integration-loader.test.d.ts.map +0 -1
  73. package/dist/integrations/integration-loader.test.js +0 -50
  74. package/dist/integrations/integration-loader.test.js.map +0 -1
@@ -1,4 +1,4 @@
1
- export declare const PACKAGE_VERSION = "0.13.0";
1
+ export declare const PACKAGE_VERSION = "0.15.0";
2
2
  /** Contents of runner/templates/, keyed by path relative to that directory. */
3
3
  export declare const BUNDLED_ASSETS: Record<string, string>;
4
4
  //# sourceMappingURL=bundled-assets.d.ts.map
@@ -2,7 +2,7 @@
2
2
  // Generated by scripts/gen-bundled-assets.mjs — do not edit.
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.BUNDLED_ASSETS = exports.PACKAGE_VERSION = void 0;
5
- exports.PACKAGE_VERSION = "0.13.0";
5
+ exports.PACKAGE_VERSION = "0.15.0";
6
6
  /** Contents of runner/templates/, keyed by path relative to that directory. */
7
7
  exports.BUNDLED_ASSETS = {
8
8
  "tools/repo-manager.tool.yaml": "name: repo_manager\ndescription: Read and write files in the workspace\nversion: 1\n\ncommands:\n - name: repo_manager-read_file\n description: Read a file from the workspace\n parameters:\n path:\n type: string\n required: true\n description: File path relative to the workspace root\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-write_file\n description: Write or create a file in the workspace\n parameters:\n path:\n type: string\n required: true\n description: File path relative to the workspace root\n content:\n type: string\n required: true\n description: Full content to write to the file\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-list_files\n description: List files in the workspace\n parameters:\n path:\n type: string\n required: false\n description: Directory to list (default is workspace root)\n recursive:\n type: boolean\n required: false\n description: Whether to list recursively\n execute:\n type: builtin\n parse_output: json\n\n - name: repo_manager-apply_patch\n description: Apply a unified diff patch to a file\n parameters:\n path:\n type: string\n required: true\n description: File path to patch\n patch:\n type: string\n required: true\n description: Unified diff patch content\n execute:\n type: builtin\n parse_output: json\n\nprompt_snippet: |\n You have access to file management tools. Read files before modifying them.\n Use repo_manager-write_file to create or update files — provide the full file content.\n",
package/dist/index.d.ts CHANGED
@@ -15,6 +15,10 @@ export { AnthropicProvider } from './providers/anthropic.js';
15
15
  export { OllamaProvider } from './providers/ollama.js';
16
16
  export { ClaudeCodeProvider } from './providers/claude-code.js';
17
17
  export { ProviderRegistry, createDefaultRegistry } from './providers/registry.js';
18
+ export { isBatchProvider, assertValidBatch, CUSTOM_ID_PATTERN } from './providers/batch.js';
19
+ export type { BatchProvider, BatchRequestItem, BatchResultItem, BatchProgress, BatchDispatchOptions, } from './providers/batch.js';
20
+ export { BatchWindow, BatchingProviderRegistry, DEFAULT_MAX_BATCH_SIZE, DEFAULT_FLUSH_AFTER_MS, } from './providers/batch-window.js';
21
+ export type { BatchTicket, BatchWindowOptions, BatchDispatchInfo, BatchSettledInfo, } from './providers/batch-window.js';
18
22
  export { MockProvider } from './providers/mock.js';
19
23
  export type { MockStageConfig } from './providers/mock.js';
20
24
  export { ToolRegistry } from './tools/tool-registry.js';
@@ -32,5 +36,4 @@ export { loadPlugins, MCPClient, StudioOAuthProvider } from './plugins/index.js'
32
36
  export type { PluginManifest, MCPServerDef, SkillContent } from './plugins/index.js';
33
37
  export { loadSkills, loadSkill, validateSkillManifest } from './tools/skills/skill-loader.js';
34
38
  export type { SkillManifest } from './tools/skills/skill-loader.js';
35
- export { loadProjectIntegrations } from './integrations/integration-loader.js';
36
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACpI,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EACV,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACpI,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC9F,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @studio/runner - Multi-provider LLM agent runner with tool execution
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadProjectIntegrations = exports.validateSkillManifest = exports.loadSkill = exports.loadSkills = exports.StudioOAuthProvider = exports.MCPClient = exports.loadPlugins = exports.AnonymizationMiddleware = exports.BUILTIN_TOOL_NAMES = exports.getBundledToolTemplate = exports.listAvailableToolTemplates = exports.loadProjectTools = exports.STUDIO_RUN_PROMPT_SNIPPET = exports.createStudioRunTool = exports.createPatchTools = exports.createShellTools = exports.createRepoManagerTools = exports.ToolExecutor = exports.ToolRegistry = exports.MockProvider = exports.createDefaultRegistry = exports.ProviderRegistry = exports.ClaudeCodeProvider = exports.OllamaProvider = exports.AnthropicProvider = exports.OpenAIResponsesProvider = exports.OpenAIProvider = exports.isAgentLoopProvider = exports.buildPrompt = exports.runScript = exports.runAgent = void 0;
6
+ exports.validateSkillManifest = exports.loadSkill = exports.loadSkills = exports.StudioOAuthProvider = exports.MCPClient = exports.loadPlugins = exports.AnonymizationMiddleware = exports.BUILTIN_TOOL_NAMES = exports.getBundledToolTemplate = exports.listAvailableToolTemplates = exports.loadProjectTools = exports.STUDIO_RUN_PROMPT_SNIPPET = exports.createStudioRunTool = exports.createPatchTools = exports.createShellTools = exports.createRepoManagerTools = exports.ToolExecutor = exports.ToolRegistry = exports.MockProvider = exports.DEFAULT_FLUSH_AFTER_MS = exports.DEFAULT_MAX_BATCH_SIZE = exports.BatchingProviderRegistry = exports.BatchWindow = exports.CUSTOM_ID_PATTERN = exports.assertValidBatch = exports.isBatchProvider = exports.createDefaultRegistry = exports.ProviderRegistry = exports.ClaudeCodeProvider = exports.OllamaProvider = exports.AnthropicProvider = exports.OpenAIResponsesProvider = exports.OpenAIProvider = exports.isAgentLoopProvider = exports.buildPrompt = exports.runScript = exports.runAgent = void 0;
7
7
  // Main runner function
8
8
  var runner_js_1 = require("./runner.js");
9
9
  Object.defineProperty(exports, "runAgent", { enumerable: true, get: function () { return runner_js_1.runAgent; } });
@@ -28,6 +28,15 @@ Object.defineProperty(exports, "ClaudeCodeProvider", { enumerable: true, get: fu
28
28
  var registry_js_1 = require("./providers/registry.js");
29
29
  Object.defineProperty(exports, "ProviderRegistry", { enumerable: true, get: function () { return registry_js_1.ProviderRegistry; } });
30
30
  Object.defineProperty(exports, "createDefaultRegistry", { enumerable: true, get: function () { return registry_js_1.createDefaultRegistry; } });
31
+ var batch_js_1 = require("./providers/batch.js");
32
+ Object.defineProperty(exports, "isBatchProvider", { enumerable: true, get: function () { return batch_js_1.isBatchProvider; } });
33
+ Object.defineProperty(exports, "assertValidBatch", { enumerable: true, get: function () { return batch_js_1.assertValidBatch; } });
34
+ Object.defineProperty(exports, "CUSTOM_ID_PATTERN", { enumerable: true, get: function () { return batch_js_1.CUSTOM_ID_PATTERN; } });
35
+ var batch_window_js_1 = require("./providers/batch-window.js");
36
+ Object.defineProperty(exports, "BatchWindow", { enumerable: true, get: function () { return batch_window_js_1.BatchWindow; } });
37
+ Object.defineProperty(exports, "BatchingProviderRegistry", { enumerable: true, get: function () { return batch_window_js_1.BatchingProviderRegistry; } });
38
+ Object.defineProperty(exports, "DEFAULT_MAX_BATCH_SIZE", { enumerable: true, get: function () { return batch_window_js_1.DEFAULT_MAX_BATCH_SIZE; } });
39
+ Object.defineProperty(exports, "DEFAULT_FLUSH_AFTER_MS", { enumerable: true, get: function () { return batch_window_js_1.DEFAULT_FLUSH_AFTER_MS; } });
31
40
  var mock_js_1 = require("./providers/mock.js");
32
41
  Object.defineProperty(exports, "MockProvider", { enumerable: true, get: function () { return mock_js_1.MockProvider; } });
33
42
  // Tools
@@ -63,7 +72,4 @@ var skill_loader_js_1 = require("./tools/skills/skill-loader.js");
63
72
  Object.defineProperty(exports, "loadSkills", { enumerable: true, get: function () { return skill_loader_js_1.loadSkills; } });
64
73
  Object.defineProperty(exports, "loadSkill", { enumerable: true, get: function () { return skill_loader_js_1.loadSkill; } });
65
74
  Object.defineProperty(exports, "validateSkillManifest", { enumerable: true, get: function () { return skill_loader_js_1.validateSkillManifest; } });
66
- // Integration plugin system
67
- var integration_loader_js_1 = require("./integrations/integration-loader.js");
68
- Object.defineProperty(exports, "loadProjectIntegrations", { enumerable: true, get: function () { return integration_loader_js_1.loadProjectIntegrations; } });
69
75
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uBAAuB;AACvB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AAGjB,kBAAkB;AAClB,2DAAiD;AAAxC,+GAAA,SAAS,OAAA;AAGlB,iBAAiB;AACjB,yDAAkD;AAAzC,gHAAA,WAAW,OAAA;AAWpB,uDAA8D;AAArD,kHAAA,mBAAmB,OAAA;AAC5B,mDAAuD;AAA9C,2GAAA,cAAc,OAAA;AACvB,uEAA0E;AAAjE,8HAAA,uBAAuB,OAAA;AAChC,yDAA6D;AAApD,iHAAA,iBAAiB,OAAA;AAC1B,mDAAuD;AAA9C,2GAAA,cAAc,OAAA;AACvB,6DAAgE;AAAvD,oHAAA,kBAAkB,OAAA;AAC3B,uDAAkF;AAAzE,+GAAA,gBAAgB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAChD,+CAAmD;AAA1C,uGAAA,YAAY,OAAA;AAGrB,QAAQ;AACR,6DAAwD;AAA/C,gHAAA,YAAY,OAAA;AACrB,6DAAwD;AAA/C,gHAAA,YAAY,OAAA;AAGrB,gBAAgB;AAChB,mEAAyE;AAAhE,yHAAA,sBAAsB,OAAA;AAC/B,qDAA4D;AAAnD,4GAAA,gBAAgB,OAAA;AACzB,qDAA4D;AAAnD,4GAAA,gBAAgB,OAAA;AACzB,+DAA+F;AAAtF,oHAAA,mBAAmB,OAAA;AAAE,0HAAA,yBAAyB,OAAA;AAEvD,6DAAoI;AAA3H,oHAAA,gBAAgB,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAAE,0HAAA,sBAAsB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAGjG,2BAA2B;AAC3B,kEAAwE;AAA/D,2HAAA,uBAAuB,OAAA;AAGhC,mDAAmD;AACnD,+CAAiF;AAAxE,uGAAA,WAAW,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAGpD,eAAe;AACf,kEAA8F;AAArF,6GAAA,UAAU,OAAA;AAAE,4GAAA,SAAS,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AAGrD,4BAA4B;AAC5B,8EAA+E;AAAtE,gIAAA,uBAAuB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uBAAuB;AACvB,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AAGjB,kBAAkB;AAClB,2DAAiD;AAAxC,+GAAA,SAAS,OAAA;AAGlB,iBAAiB;AACjB,yDAAkD;AAAzC,gHAAA,WAAW,OAAA;AAWpB,uDAA8D;AAArD,kHAAA,mBAAmB,OAAA;AAC5B,mDAAuD;AAA9C,2GAAA,cAAc,OAAA;AACvB,uEAA0E;AAAjE,8HAAA,uBAAuB,OAAA;AAChC,yDAA6D;AAApD,iHAAA,iBAAiB,OAAA;AAC1B,mDAAuD;AAA9C,2GAAA,cAAc,OAAA;AACvB,6DAAgE;AAAvD,oHAAA,kBAAkB,OAAA;AAC3B,uDAAkF;AAAzE,+GAAA,gBAAgB,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAChD,iDAA4F;AAAnF,2GAAA,eAAe,OAAA;AAAE,4GAAA,gBAAgB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAQ7D,+DAKqC;AAJnC,8GAAA,WAAW,OAAA;AACX,2HAAA,wBAAwB,OAAA;AACxB,yHAAA,sBAAsB,OAAA;AACtB,yHAAA,sBAAsB,OAAA;AAQxB,+CAAmD;AAA1C,uGAAA,YAAY,OAAA;AAGrB,QAAQ;AACR,6DAAwD;AAA/C,gHAAA,YAAY,OAAA;AACrB,6DAAwD;AAA/C,gHAAA,YAAY,OAAA;AAGrB,gBAAgB;AAChB,mEAAyE;AAAhE,yHAAA,sBAAsB,OAAA;AAC/B,qDAA4D;AAAnD,4GAAA,gBAAgB,OAAA;AACzB,qDAA4D;AAAnD,4GAAA,gBAAgB,OAAA;AACzB,+DAA+F;AAAtF,oHAAA,mBAAmB,OAAA;AAAE,0HAAA,yBAAyB,OAAA;AAEvD,6DAAoI;AAA3H,oHAAA,gBAAgB,OAAA;AAAE,8HAAA,0BAA0B,OAAA;AAAE,0HAAA,sBAAsB,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAGjG,2BAA2B;AAC3B,kEAAwE;AAA/D,2HAAA,uBAAuB,OAAA;AAGhC,mDAAmD;AACnD,+CAAiF;AAAxE,uGAAA,WAAW,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAGpD,eAAe;AACf,kEAA8F;AAArF,6GAAA,UAAU,OAAA;AAAE,4GAAA,SAAS,OAAA;AAAE,wHAAA,qBAAqB,OAAA"}
@@ -42,7 +42,9 @@ export interface PromptBuildConfig {
42
42
  executionContext?: ExecutionContext;
43
43
  outputContract?: OutputContract;
44
44
  promptSnippets?: string[];
45
+ pluginSkills?: string[];
45
46
  skills?: SkillContent[];
47
+ projectInvariants?: string;
46
48
  }
47
49
  /**
48
50
  * Build prompt messages with retry escalation support
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACnI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAKnE,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,EAAE,CA+IhE"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACnI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAKnE,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,KAAK,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,EAAE,CAwJhE"}
@@ -23,6 +23,18 @@ function buildPrompt(config) {
23
23
  const messages = [];
24
24
  // Build system message
25
25
  let systemContent = agent.system_prompt || 'You are a helpful AI assistant.';
26
+ // Assembled here and nowhere else (INV-06) — callers hand over loaded
27
+ // content, never a pre-concatenated system prompt.
28
+ if (config.pluginSkills?.length) {
29
+ systemContent += '\n\n' + config.pluginSkills.join('\n\n---\n\n');
30
+ }
31
+ if (config.skills?.length) {
32
+ const skillChunks = config.skills.map(s => `## Skill: ${s.name}\n\n${s.content}`);
33
+ systemContent += '\n\n' + skillChunks.join('\n\n---\n\n');
34
+ }
35
+ if (config.projectInvariants) {
36
+ systemContent += `\n\n---\n\n## Project Invariants\n\n${config.projectInvariants}`;
37
+ }
26
38
  // Add output format with concrete schema when available
27
39
  const contract = config.outputContract;
28
40
  if (contract?.schema?.required_fields?.length) {
@@ -65,11 +77,6 @@ ${task.expected_output || `Provide your response according to the ${task.contrac
65
77
  if (config.promptSnippets && config.promptSnippets.length > 0) {
66
78
  systemContent += '\n\n' + config.promptSnippets.join('\n\n');
67
79
  }
68
- // Inject skills (.studio/skills/*.skill.md) declared by the agent
69
- if (config.skills && config.skills.length > 0) {
70
- const skillChunks = config.skills.map(s => `## Skill: ${s.name}\n\n${s.content}`);
71
- systemContent += '\n\n' + skillChunks.join('\n\n---\n\n');
72
- }
73
80
  messages.push({
74
81
  role: 'system',
75
82
  content: systemContent
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../src/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -151,4 +151,47 @@ const TASK = { description: 'Do the thing.' };
151
151
  (0, vitest_1.expect)(userMsg).not.toContain('## Stage Name');
152
152
  });
153
153
  });
154
+ (0, vitest_1.describe)('buildPrompt — plugin skills and project invariants', () => {
155
+ (0, vitest_1.it)('injects plugin skill chunks separated by ---', () => {
156
+ const messages = (0, prompt_builder_js_1.buildPrompt)({
157
+ agent: AGENT,
158
+ task: TASK,
159
+ context: {},
160
+ pluginSkills: ['# Plugin A', '# Plugin B'],
161
+ });
162
+ const sysMsg = messages.find(m => m.role === 'system').content;
163
+ (0, vitest_1.expect)(sysMsg).toContain('# Plugin A\n\n---\n\n# Plugin B');
164
+ });
165
+ (0, vitest_1.it)('injects project invariants under a Project Invariants heading', () => {
166
+ const messages = (0, prompt_builder_js_1.buildPrompt)({
167
+ agent: AGENT,
168
+ task: TASK,
169
+ context: {},
170
+ projectInvariants: 'Never delete the audit log.',
171
+ });
172
+ const sysMsg = messages.find(m => m.role === 'system').content;
173
+ (0, vitest_1.expect)(sysMsg).toContain('## Project Invariants\n\nNever delete the audit log.');
174
+ });
175
+ (0, vitest_1.it)('orders the identity block ahead of the output format section', () => {
176
+ const skills = [{ name: 'commit-conventions', content: 'Use conventional commits.' }];
177
+ const messages = (0, prompt_builder_js_1.buildPrompt)({
178
+ agent: AGENT,
179
+ task: TASK,
180
+ context: {},
181
+ pluginSkills: ['# Plugin A'],
182
+ skills,
183
+ projectInvariants: 'Never delete the audit log.',
184
+ outputContract: { name: 'c', version: 1, schema: { required_fields: ['summary'] } },
185
+ });
186
+ const sysMsg = messages.find(m => m.role === 'system').content;
187
+ (0, vitest_1.expect)(sysMsg.indexOf('# Plugin A')).toBeLessThan(sysMsg.indexOf('## Skill: commit-conventions'));
188
+ (0, vitest_1.expect)(sysMsg.indexOf('## Skill: commit-conventions')).toBeLessThan(sysMsg.indexOf('## Project Invariants'));
189
+ (0, vitest_1.expect)(sysMsg.indexOf('## Project Invariants')).toBeLessThan(sysMsg.indexOf('## REQUIRED OUTPUT FORMAT'));
190
+ });
191
+ (0, vitest_1.it)('omits every section when nothing is provided', () => {
192
+ const messages = (0, prompt_builder_js_1.buildPrompt)({ agent: AGENT, task: TASK, context: {} });
193
+ const sysMsg = messages.find(m => m.role === 'system').content;
194
+ (0, vitest_1.expect)(sysMsg).toBe('You are a helpful assistant.');
195
+ });
196
+ });
154
197
  //# sourceMappingURL=prompt-builder.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.test.js","sourceRoot":"","sources":["../src/prompt-builder.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.test.js","sourceRoot":"","sources":["../src/prompt-builder.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,2DAAkD;AAIlD,MAAM,KAAK,GAAgB;IACzB,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,2BAA2B;IAClC,aAAa,EAAE,8BAA8B;CAC9C,CAAC;AAEF,MAAM,IAAI,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AAE9C,IAAA,iBAAQ,EAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAA,WAAE,EAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,qBAAqB,EAAE;oBACrB,iBAAiB,EAAE;wBACjB;4BACE,EAAE,EAAE,GAAG;4BACP,IAAI,EAAE,yBAAyB;4BAC/B,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE;4BAC1D,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;yBAC1B;qBACF;iBACF;aACF;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QAC1E,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,iEAAiE;QACjE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,qBAAqB,EAAE;oBACrB,gBAAgB,EAAE;wBAChB;4BACE,EAAE,EAAE,GAAG;4BACP,IAAI,EAAE,wBAAwB;4BAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;4BACjC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE;yBACxD;qBACF;iBACF;aACF;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAA,WAAE,EAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,eAAe,EAAE;oBACf,UAAU,EAAE,cAAc;oBAC1B,cAAc,EAAE,oBAAoB;iBACrC;aACF;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC5C,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAChD,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAmB;YAC7B,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,mDAAmD,EAAE;SAC7F,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAmB;YAC7B,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,EAAE;YAC1D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE;SACtD,CAAC;QACF,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACrD,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAA,WAAE,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;SACpC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC3C,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAE,CAAC,OAAiB,CAAC;QACzE,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,oDAAoD,EAAE,GAAG,EAAE;IAClE,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;SAC3C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,iBAAiB,EAAE,6BAA6B;SACjD,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACtG,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,EAAE;YACX,YAAY,EAAE,CAAC,YAAY,CAAC;YAC5B,MAAM;YACN,iBAAiB,EAAE,6BAA6B;YAChD,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE;SACpF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAClG,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC7G,IAAA,eAAM,EAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAA,+BAAW,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAE,CAAC,OAAiB,CAAC;QAC1E,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * When a call's stable prefix is worth caching.
3
+ *
4
+ * A prompt cache is not free storage: the write is billed above the plain input
5
+ * rate and only earns that back when a later call reads the same prefix. So the
6
+ * question is never "is this prefix big?" but "will anything read it back?".
7
+ *
8
+ * A stage that answers in one turn — a fan-out item, a verdict — never issues a
9
+ * second request, so caching it is a pure surcharge on every token of the prefix.
10
+ * A stage that must call tools comes back through the loop with the same system
11
+ * prompt and the same tool definitions in front of it, and every turn after the
12
+ * first reads what the first one wrote.
13
+ *
14
+ * Hence the `auto` rule: cache when the stage's own contract says it has to use
15
+ * tools. That is the one declaration in `.studio/` that predicts a second turn
16
+ * before the first one has happened — tools merely being *available* does not,
17
+ * which is exactly the case that was paying for caches nothing ever read.
18
+ */
19
+ import type { OutputContract, PromptCacheMode } from '@studio-foundation/contracts';
20
+ export interface PromptCacheDecision {
21
+ /** Whether the stage's contract obliges it to call tools (so the loop will run again). */
22
+ hasTools: boolean;
23
+ contract?: OutputContract;
24
+ mode?: PromptCacheMode;
25
+ }
26
+ /**
27
+ * True when the contract cannot be satisfied without at least one tool call —
28
+ * a floor on `minimum`, or a named tool/tool group the agent has to reach for.
29
+ */
30
+ export declare function contractRequiresToolCalls(contract?: OutputContract): boolean;
31
+ /** Resolve the agent's `prompt_cache` setting against what the stage actually looks like. */
32
+ export declare function shouldCachePrompt({ hasTools, contract, mode }: PromptCacheDecision): boolean;
33
+ //# sourceMappingURL=prompt-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.d.ts","sourceRoot":"","sources":["../src/prompt-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpF,MAAM,WAAW,mBAAmB;IAClC,0FAA0F;IAC1F,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAM5E;AAED,6FAA6F;AAC7F,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAK5F"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * When a call's stable prefix is worth caching.
4
+ *
5
+ * A prompt cache is not free storage: the write is billed above the plain input
6
+ * rate and only earns that back when a later call reads the same prefix. So the
7
+ * question is never "is this prefix big?" but "will anything read it back?".
8
+ *
9
+ * A stage that answers in one turn — a fan-out item, a verdict — never issues a
10
+ * second request, so caching it is a pure surcharge on every token of the prefix.
11
+ * A stage that must call tools comes back through the loop with the same system
12
+ * prompt and the same tool definitions in front of it, and every turn after the
13
+ * first reads what the first one wrote.
14
+ *
15
+ * Hence the `auto` rule: cache when the stage's own contract says it has to use
16
+ * tools. That is the one declaration in `.studio/` that predicts a second turn
17
+ * before the first one has happened — tools merely being *available* does not,
18
+ * which is exactly the case that was paying for caches nothing ever read.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.contractRequiresToolCalls = contractRequiresToolCalls;
22
+ exports.shouldCachePrompt = shouldCachePrompt;
23
+ /**
24
+ * True when the contract cannot be satisfied without at least one tool call —
25
+ * a floor on `minimum`, or a named tool/tool group the agent has to reach for.
26
+ */
27
+ function contractRequiresToolCalls(contract) {
28
+ const requirements = contract?.tool_calls;
29
+ if (!requirements)
30
+ return false;
31
+ if ((requirements.minimum ?? 0) > 0)
32
+ return true;
33
+ if ((requirements.required_tools?.length ?? 0) > 0)
34
+ return true;
35
+ return (requirements.required_tool_groups?.length ?? 0) > 0;
36
+ }
37
+ /** Resolve the agent's `prompt_cache` setting against what the stage actually looks like. */
38
+ function shouldCachePrompt({ hasTools, contract, mode }) {
39
+ if (mode === 'on')
40
+ return true;
41
+ if (mode === 'off')
42
+ return false;
43
+ // auto (and anything unset): a prefix no second turn can read is not worth writing.
44
+ return hasTools && contractRequiresToolCalls(contract);
45
+ }
46
+ //# sourceMappingURL=prompt-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.js","sourceRoot":"","sources":["../src/prompt-cache.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;AAeH,8DAMC;AAGD,8CAKC;AAlBD;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,QAAyB;IACjE,MAAM,YAAY,GAAG,QAAQ,EAAE,UAAU,CAAC;IAC1C,IAAI,CAAC,YAAY;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,6FAA6F;AAC7F,SAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAuB;IACjF,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACjC,oFAAoF;IACpF,OAAO,QAAQ,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prompt-cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.test.d.ts","sourceRoot":"","sources":["../src/prompt-cache.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const prompt_cache_js_1 = require("./prompt-cache.js");
5
+ const contract = (tool_calls) => ({
6
+ name: 'c',
7
+ version: 1,
8
+ ...(tool_calls ? { tool_calls } : {}),
9
+ });
10
+ (0, vitest_1.describe)('contractRequiresToolCalls', () => {
11
+ (0, vitest_1.it)('is false without a contract, or without tool requirements', () => {
12
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(undefined)).toBe(false);
13
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract())).toBe(false);
14
+ });
15
+ (0, vitest_1.it)('is false when the contract only caps tool calls', () => {
16
+ // A maximum permits zero — it predicts nothing about a second turn.
17
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract({ maximum: 5 }))).toBe(false);
18
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract({ minimum: 0 }))).toBe(false);
19
+ });
20
+ (0, vitest_1.it)('is true for a floor, a named tool, or a tool group', () => {
21
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract({ minimum: 1 }))).toBe(true);
22
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract({ required_tools: ['repo_manager.write_file'] }))).toBe(true);
23
+ (0, vitest_1.expect)((0, prompt_cache_js_1.contractRequiresToolCalls)(contract({ required_tool_groups: [['a', 'b']] }))).toBe(true);
24
+ });
25
+ });
26
+ (0, vitest_1.describe)('shouldCachePrompt', () => {
27
+ (0, vitest_1.it)('does not cache a single-shot call — the case that was overpaying', () => {
28
+ // A map item or a verdict: tools may be on the table, nothing obliges a
29
+ // second turn, so the cache write would never be read back.
30
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: true, contract: contract() })).toBe(false);
31
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: false, contract: undefined })).toBe(false);
32
+ });
33
+ (0, vitest_1.it)('caches when the contract obliges the stage to call tools', () => {
34
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: true, contract: contract({ minimum: 1 }) })).toBe(true);
35
+ });
36
+ (0, vitest_1.it)('does not cache a tool-requiring contract when the agent has no tools', () => {
37
+ // Misconfigured stage — it will fail validation, not loop.
38
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: false, contract: contract({ minimum: 1 }) })).toBe(false);
39
+ });
40
+ (0, vitest_1.it)('lets an agent force caching on for a measured shared prefix', () => {
41
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: false, contract: undefined, mode: 'on' })).toBe(true);
42
+ });
43
+ (0, vitest_1.it)('lets an agent force caching off even where auto would cache', () => {
44
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: true, contract: contract({ minimum: 1 }), mode: 'off' })).toBe(false);
45
+ });
46
+ (0, vitest_1.it)('treats an explicit auto exactly as an absent setting', () => {
47
+ for (const c of [contract(), contract({ minimum: 1 })]) {
48
+ (0, vitest_1.expect)((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: true, contract: c, mode: 'auto' }))
49
+ .toBe((0, prompt_cache_js_1.shouldCachePrompt)({ hasTools: true, contract: c }));
50
+ }
51
+ });
52
+ });
53
+ //# sourceMappingURL=prompt-cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.test.js","sourceRoot":"","sources":["../src/prompt-cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=anthropic-batch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-batch.test.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic-batch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const anthropic_js_1 = require("./anthropic.js");
5
+ // A scriptable stand-in for client.messages.batches. Every test drives it by
6
+ // setting `statuses` (one processing_status per retrieve) and `results`.
7
+ const state = {
8
+ created: [],
9
+ statuses: [],
10
+ results: [],
11
+ cancelled: [],
12
+ retrieves: 0,
13
+ };
14
+ const createMock = vitest_1.vi.fn(async (body) => {
15
+ state.created.push(body);
16
+ return {
17
+ id: 'msgbatch_test',
18
+ processing_status: state.statuses.shift() ?? 'ended',
19
+ request_counts: { succeeded: 0, errored: 0, processing: 0, canceled: 0, expired: 0 },
20
+ };
21
+ });
22
+ vitest_1.vi.mock('@anthropic-ai/sdk', () => ({
23
+ default: class FakeAnthropic {
24
+ messages = {
25
+ batches: {
26
+ create: createMock,
27
+ retrieve: async (id) => {
28
+ state.retrieves++;
29
+ return {
30
+ id,
31
+ processing_status: state.statuses.shift() ?? 'ended',
32
+ request_counts: { succeeded: 1, errored: 0, processing: 1, canceled: 0, expired: 0 },
33
+ };
34
+ },
35
+ results: async () => ({
36
+ async *[Symbol.asyncIterator]() {
37
+ for (const entry of state.results)
38
+ yield entry;
39
+ },
40
+ }),
41
+ cancel: async (id) => {
42
+ state.cancelled.push(id);
43
+ return { id };
44
+ },
45
+ },
46
+ };
47
+ },
48
+ }));
49
+ function message(text) {
50
+ return {
51
+ content: [{ type: 'text', text }],
52
+ stop_reason: 'end_turn',
53
+ model: 'claude-haiku-4-5-20251001',
54
+ usage: { input_tokens: 10, output_tokens: 5, cache_read_input_tokens: 3, cache_creation_input_tokens: 2 },
55
+ };
56
+ }
57
+ function req(text) {
58
+ return { model: 'claude-haiku-4-5-20251001', messages: [{ role: 'user', content: text }], max_tokens: 256 };
59
+ }
60
+ (0, vitest_1.beforeEach)(() => {
61
+ vitest_1.vi.clearAllMocks();
62
+ state.created = [];
63
+ state.statuses = [];
64
+ state.results = [];
65
+ state.cancelled = [];
66
+ state.retrieves = 0;
67
+ });
68
+ (0, vitest_1.describe)('AnthropicProvider.submitBatch', () => {
69
+ (0, vitest_1.it)('advertises the batch capability', () => {
70
+ const provider = new anthropic_js_1.AnthropicProvider('key');
71
+ (0, vitest_1.expect)(typeof provider.submitBatch).toBe('function');
72
+ (0, vitest_1.expect)(provider.maxBatchSize).toBe(100_000);
73
+ });
74
+ (0, vitest_1.it)('submits one job and matches results back by custom_id, whatever their order', async () => {
75
+ state.results = [
76
+ // Deliberately reversed: the API makes no ordering promise.
77
+ { custom_id: 'b', result: { type: 'succeeded', message: message('second') } },
78
+ { custom_id: 'a', result: { type: 'succeeded', message: message('first') } },
79
+ ];
80
+ const provider = new anthropic_js_1.AnthropicProvider('key');
81
+ const results = await provider.submitBatch([
82
+ { custom_id: 'a', request: req('one') },
83
+ { custom_id: 'b', request: req('two') },
84
+ ]);
85
+ (0, vitest_1.expect)(createMock).toHaveBeenCalledTimes(1);
86
+ const body = state.created[0];
87
+ (0, vitest_1.expect)(body.requests.map(r => r.custom_id)).toEqual(['a', 'b']);
88
+ (0, vitest_1.expect)(body.requests[0].params).toMatchObject({ model: 'claude-haiku-4-5-20251001', max_tokens: 256 });
89
+ (0, vitest_1.expect)(results.map(r => r.custom_id)).toEqual(['a', 'b']);
90
+ (0, vitest_1.expect)(results[0].response?.content).toBe('first');
91
+ (0, vitest_1.expect)(results[1].response?.content).toBe('second');
92
+ });
93
+ (0, vitest_1.it)('reports batch-billed token usage per request', async () => {
94
+ state.results = [{ custom_id: 'a', result: { type: 'succeeded', message: message('hi') } }];
95
+ const provider = new anthropic_js_1.AnthropicProvider('key');
96
+ const [result] = await provider.submitBatch([{ custom_id: 'a', request: req('one') }]);
97
+ // Batched results come back through the same normalization as a live call:
98
+ // the total counts the cache tokens too, and the model that answered is named
99
+ // — a batched fan-out is exactly where a per-model cost breakdown is wanted.
100
+ (0, vitest_1.expect)(result.response?.usage).toEqual({
101
+ prompt_tokens: 10,
102
+ completion_tokens: 5,
103
+ total_tokens: 20,
104
+ cached_input_tokens: 3,
105
+ cache_creation_tokens: 2,
106
+ by_model: {
107
+ 'claude-haiku-4-5-20251001': {
108
+ prompt_tokens: 10,
109
+ completion_tokens: 5,
110
+ total_tokens: 20,
111
+ cached_input_tokens: 3,
112
+ cache_creation_tokens: 2,
113
+ },
114
+ },
115
+ });
116
+ });
117
+ (0, vitest_1.it)('polls until the batch has ended', async () => {
118
+ state.statuses = ['in_progress', 'in_progress', 'ended'];
119
+ state.results = [{ custom_id: 'a', result: { type: 'succeeded', message: message('done') } }];
120
+ const onProgress = vitest_1.vi.fn();
121
+ const provider = new anthropic_js_1.AnthropicProvider('key');
122
+ const results = await provider.submitBatch([{ custom_id: 'a', request: req('one') }], {
123
+ poll_interval_ms: 1,
124
+ onProgress,
125
+ });
126
+ // create returned 'in_progress', then two retrieves ('in_progress', 'ended').
127
+ (0, vitest_1.expect)(state.retrieves).toBe(2);
128
+ (0, vitest_1.expect)(onProgress).toHaveBeenCalledTimes(2);
129
+ (0, vitest_1.expect)(results[0].response?.content).toBe('done');
130
+ });
131
+ (0, vitest_1.it)('reports a per-request failure as an error, not a rejection', async () => {
132
+ state.results = [
133
+ { custom_id: 'ok', result: { type: 'succeeded', message: message('fine') } },
134
+ { custom_id: 'err', result: { type: 'errored', error: { type: 'invalid_request_error' } } },
135
+ { custom_id: 'gone', result: { type: 'expired' } },
136
+ { custom_id: 'stop', result: { type: 'canceled' } },
137
+ ];
138
+ const provider = new anthropic_js_1.AnthropicProvider('key');
139
+ const results = await provider.submitBatch([
140
+ { custom_id: 'ok', request: req('a') },
141
+ { custom_id: 'err', request: req('b') },
142
+ { custom_id: 'gone', request: req('c') },
143
+ { custom_id: 'stop', request: req('d') },
144
+ ]);
145
+ (0, vitest_1.expect)(results[0].response).toBeDefined();
146
+ (0, vitest_1.expect)(results[1].error).toMatch(/invalid_request_error/);
147
+ (0, vitest_1.expect)(results[2].error).toMatch(/expired/);
148
+ (0, vitest_1.expect)(results[3].error).toMatch(/canceled/i);
149
+ });
150
+ (0, vitest_1.it)('answers for a request the API never reported', async () => {
151
+ state.results = [{ custom_id: 'a', result: { type: 'succeeded', message: message('fine') } }];
152
+ const provider = new anthropic_js_1.AnthropicProvider('key');
153
+ const results = await provider.submitBatch([
154
+ { custom_id: 'a', request: req('a') },
155
+ { custom_id: 'ghost', request: req('b') },
156
+ ]);
157
+ (0, vitest_1.expect)(results).toHaveLength(2);
158
+ (0, vitest_1.expect)(results[1]).toMatchObject({ custom_id: 'ghost' });
159
+ (0, vitest_1.expect)(results[1].error).toMatch(/no result/);
160
+ });
161
+ (0, vitest_1.it)('gives up on the wait budget and cancels the batch so it stops billing', async () => {
162
+ state.statuses = ['in_progress', 'in_progress', 'in_progress', 'in_progress'];
163
+ const provider = new anthropic_js_1.AnthropicProvider('key');
164
+ await (0, vitest_1.expect)(provider.submitBatch([{ custom_id: 'a', request: req('a') }], { poll_interval_ms: 5, max_wait_ms: 1 })).rejects.toThrow(/did not end within/);
165
+ (0, vitest_1.expect)(state.cancelled).toEqual(['msgbatch_test']);
166
+ });
167
+ (0, vitest_1.it)('never calls the API for an empty batch', async () => {
168
+ const provider = new anthropic_js_1.AnthropicProvider('key');
169
+ await (0, vitest_1.expect)(provider.submitBatch([])).resolves.toEqual([]);
170
+ (0, vitest_1.expect)(createMock).not.toHaveBeenCalled();
171
+ });
172
+ (0, vitest_1.it)('refuses ids the API would reject, before submitting anything', async () => {
173
+ const provider = new anthropic_js_1.AnthropicProvider('key');
174
+ await (0, vitest_1.expect)(provider.submitBatch([{ custom_id: 'not valid', request: req('a') }])).rejects.toThrow(/custom_id/);
175
+ (0, vitest_1.expect)(createMock).not.toHaveBeenCalled();
176
+ });
177
+ });
178
+ //# sourceMappingURL=anthropic-batch.test.js.map