@cat-factory/agents 0.45.0 → 0.47.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.
package/dist/index.d.ts CHANGED
@@ -37,7 +37,7 @@ export { type RenderedFile, coerceBlueprintService, moduleSlug, canonicalBluepri
37
37
  export { runRepoOps } from './repo-ops/run.js';
38
38
  export { blueprintPostOp, specPostOp } from './repo-ops/builtin.js';
39
39
  export { coerceInitiativePlan, canonicalInitiativeJson, hashInitiative, initiativeContentView, renderInitiativeFiles, renderInitiativeTrackerMarkdown, parseInitiativeVersionFile, commitInitiativeTracker, } from './repo-ops/initiative.js';
40
- export { CompositeModelProvider, CliInlineLanguageModel, type InlineCliRequest, type InlineCliResult, type InlineCliRunner, InstrumentedModelProvider, catFactoryObservability, type InlineObservabilityContext, type ModelResolver, type ProviderRegistry, anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, type CachePolicy, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './providers/index.js';
40
+ export { CompositeModelProvider, CliInlineLanguageModel, type InlineCliRequest, type InlineCliResult, type InlineCliRunner, InstrumentedModelProvider, catFactoryObservability, type InlineObservabilityContext, VendorConcurrencyLimiter, limitModelProvider, vendorConcurrencyLimiterFromEnv, type ModelResolver, type ProviderRegistry, anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, type CachePolicy, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './providers/index.js';
41
41
  export { FragmentLibraryService, type FragmentLibraryServiceDependencies, } from './fragmentLibrary/FragmentLibraryService.js';
42
42
  export { FragmentSourceService, type FragmentSourceServiceDependencies, type ResolveFragmentInstallationId, } from './fragmentLibrary/FragmentSourceService.js';
43
43
  export { DeterministicFragmentSelector } from './fragmentLibrary/DeterministicFragmentSelector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -96,7 +96,7 @@ export { coerceInitiativePlan, canonicalInitiativeJson, hashInitiative, initiati
96
96
  // The generic AI provisioning facade: a mixable provider registry + the base,
97
97
  // runtime-neutral resolvers. Optional/heavier backends ship as their own packages
98
98
  // (e.g. @cat-factory/provider-bedrock) and are mixed into a CompositeModelProvider.
99
- export { CompositeModelProvider, CliInlineLanguageModel, InstrumentedModelProvider, catFactoryObservability, anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './providers/index.js';
99
+ export { CompositeModelProvider, CliInlineLanguageModel, InstrumentedModelProvider, catFactoryObservability, VendorConcurrencyLimiter, limitModelProvider, vendorConcurrencyLimiterFromEnv, anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './providers/index.js';
100
100
  export { FragmentLibraryService, } from './fragmentLibrary/FragmentLibraryService.js';
101
101
  export { FragmentSourceService, } from './fragmentLibrary/FragmentSourceService.js';
102
102
  export { DeterministicFragmentSelector } from './fragmentLibrary/DeterministicFragmentSelector.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,10 @@ import type { InitiativePresetRegistration } from '@cat-factory/kernel';
3
3
  export declare const DOCS_REFRESH_PRESET_ID = "preset_docs_refresh";
4
4
  /**
5
5
  * The per-run gate-override array for a spawned documentation pipeline when human review is opted
6
- * in — a FULL boolean array parallel to the pipeline's own `agentKinds` (the slice-2 gate-override
7
- * contract: `ExecutionService.start` rejects a length mismatch). The gate is placed on the `merger`
8
- * step so the human reviews the CI-green PR right BEFORE it merges the same point for every doc
9
- * pipeline, matching the form's "review each documentation change before it merges" promise (rather
10
- * than gating a mid-pipeline `doc-reviewer` that still auto-merges afterwards).
11
- *
12
- * The placement is DERIVED from the pipeline's `agentKinds` (the merge step's index), so it stays
13
- * correct by construction if a pipeline's shape changes — never a hand-maintained array parallel to
14
- * a pipeline this preset doesn't own. `undefined` (human review OFF, the default, or a pipeline with
15
- * no merge step) leaves the pipeline's own gates — none for all three — so a run stays unattended.
6
+ * in — the human reviews the CI-green PR right BEFORE it merges, matching the form's "review each
7
+ * documentation change before it merges" promise. The placement is the shared {@link mergeGateOverride}
8
+ * (single derivation across presets); `undefined` when human review is OFF (the default) so the
9
+ * run stays unattended.
16
10
  */
17
11
  export declare function docsReviewGates(pipelineId: string, humanReview: boolean): boolean[] | undefined;
18
12
  /** The docs-refresh preset registration bundle (descriptor + code hooks). */
@@ -1 +1 @@
1
- {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../../src/presets/docs-refresh/preset.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAmCvE,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,wBAAwB,CAAA;AA4N3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,SAAS,CAO/F;AAwKD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,4BAQjC,CAAA;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../../src/presets/docs-refresh/preset.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAkCvE,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,wBAAwB,CAAA;AAsL3D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,SAAS,CAE/F;AAwKD,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,4BAQjC,CAAA;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD"}
@@ -1,6 +1,6 @@
1
- import { BUSINESS_DOCS_PIPELINE_ID, CODE_COMMENTS_PIPELINE_ID, DOCUMENT_QUICK_PIPELINE_ID, INITIATIVE_DOCS_PIPELINE_ID, joinRepoPath, registerInitiativePreset, seedPipelines, } from '@cat-factory/kernel';
1
+ import { BUSINESS_DOCS_PIPELINE_ID, CODE_COMMENTS_PIPELINE_ID, DOCUMENT_QUICK_PIPELINE_ID, INITIATIVE_DOCS_PIPELINE_ID, joinRepoPath, registerInitiativePreset, } from '@cat-factory/kernel';
2
2
  import { DEFAULT_DOCUMENT_STYLE_FRAGMENT_IDS, styleFragments } from '@cat-factory/prompt-fragments';
3
- import { moduleSlug } from '../../repo-ops/render.js';
3
+ import { fileSlug, mergeGateOverride, strInput, uniqueDocPath } from '../plan-helpers.js';
4
4
  import { detectDocsLayout } from './docs-detect.logic.js';
5
5
  // ---------------------------------------------------------------------------
6
6
  // The Documentation-refresh initiative preset (initiative-presets slice 8) — the pilot that
@@ -193,65 +193,15 @@ const detect = async (repo) => {
193
193
  // ---------------------------------------------------------------------------
194
194
  // `seedPlan` — per-item spawn DECORATION only (never plan shape — that is the template's job).
195
195
  // ---------------------------------------------------------------------------
196
- /** Read a string input, falling back to `fallback` when absent/blank/non-string. */
197
- function strInput(inputs, key, fallback) {
198
- const value = inputs[key];
199
- return typeof value === 'string' && value.trim() ? value.trim() : fallback;
200
- }
201
- /**
202
- * A filesystem-safe, lower-kebab file slug for a derived `.md` target path — the package's shared
203
- * {@link moduleSlug} (single slug implementation) capped to a filename-sane length. A degenerate
204
- * (empty / all-punctuation) title falls back to `moduleSlug`'s `module`; `seedPlan` deduplicates
205
- * the composed path anyway, so two such items never collide on one file.
206
- */
207
- function fileSlug(title) {
208
- return moduleSlug(title).slice(0, 60);
209
- }
210
- /**
211
- * Ensure a derived `.md` path is unique within one plan: on collision, insert `-2`, `-3`, … before
212
- * the extension (the {@link uniqueSlugId} pattern) and record it. Two items whose titles slug to the
213
- * same name under the same directory would otherwise stamp the SAME `targetPath`, spawning two doc
214
- * tasks that open competing PRs writing one file. Only derived paths are deduped (planner-authored
215
- * placement rides the item description, not `targetPath`).
216
- */
217
- function uniqueDocPath(path, taken) {
218
- if (!taken.has(path)) {
219
- taken.add(path);
220
- return path;
221
- }
222
- const dot = path.lastIndexOf('.');
223
- const base = dot === -1 ? path : path.slice(0, dot);
224
- const ext = dot === -1 ? '' : path.slice(dot);
225
- let n = 2;
226
- let candidate = `${base}-${n}${ext}`;
227
- while (taken.has(candidate))
228
- candidate = `${base}-${++n}${ext}`;
229
- taken.add(candidate);
230
- return candidate;
231
- }
232
196
  /**
233
197
  * The per-run gate-override array for a spawned documentation pipeline when human review is opted
234
- * in — a FULL boolean array parallel to the pipeline's own `agentKinds` (the slice-2 gate-override
235
- * contract: `ExecutionService.start` rejects a length mismatch). The gate is placed on the `merger`
236
- * step so the human reviews the CI-green PR right BEFORE it merges the same point for every doc
237
- * pipeline, matching the form's "review each documentation change before it merges" promise (rather
238
- * than gating a mid-pipeline `doc-reviewer` that still auto-merges afterwards).
239
- *
240
- * The placement is DERIVED from the pipeline's `agentKinds` (the merge step's index), so it stays
241
- * correct by construction if a pipeline's shape changes — never a hand-maintained array parallel to
242
- * a pipeline this preset doesn't own. `undefined` (human review OFF, the default, or a pipeline with
243
- * no merge step) leaves the pipeline's own gates — none for all three — so a run stays unattended.
198
+ * in — the human reviews the CI-green PR right BEFORE it merges, matching the form's "review each
199
+ * documentation change before it merges" promise. The placement is the shared {@link mergeGateOverride}
200
+ * (single derivation across presets); `undefined` when human review is OFF (the default) so the
201
+ * run stays unattended.
244
202
  */
245
203
  export function docsReviewGates(pipelineId, humanReview) {
246
- if (!humanReview)
247
- return undefined;
248
- const kinds = seedPipelines().find((p) => p.id === pipelineId)?.agentKinds;
249
- if (!kinds)
250
- return undefined;
251
- const gateIdx = kinds.lastIndexOf('merger');
252
- if (gateIdx === -1)
253
- return undefined;
254
- return kinds.map((_, i) => i === gateIdx);
204
+ return humanReview ? mergeGateOverride(pipelineId) : undefined;
255
205
  }
256
206
  const PHASE_DECORATIONS = {
257
207
  // Foundations: a lean doc under the docs root (writing it creates/normalizes the placement dir).
@@ -339,7 +289,7 @@ function seedPlan(draft, inputs) {
339
289
  // Merge OVER any planner-authored spawn (so a planner `agentConfig` etc. survives) — the
340
290
  // decorated fields we own win.
341
291
  const spawn = {
342
- ...(item.spawn ?? {}),
292
+ ...item.spawn,
343
293
  ...(deco.taskType ? { taskType: deco.taskType } : {}),
344
294
  ...(Object.keys(taskTypeFields).length ? { taskTypeFields } : {}),
345
295
  ...(styleFragmentIds.length ? { fragmentIds: styleFragmentIds } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../src/presets/docs-refresh/preset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../src/presets/docs-refresh/preset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { InitiativePresetInputs } from '@cat-factory/contracts';
2
+ /** Read a string input, falling back to `fallback` when absent/blank/non-string. */
3
+ export declare function strInput(inputs: InitiativePresetInputs, key: string, fallback: string): string;
4
+ /**
5
+ * A filesystem-safe, lower-kebab file slug for a derived `.md` target path — the package's shared
6
+ * {@link moduleSlug} (single slug implementation) capped to a filename-sane length. A degenerate
7
+ * (empty / all-punctuation) title falls back to `moduleSlug`'s `module`; the caller deduplicates the
8
+ * composed path via {@link uniqueDocPath} anyway, so two such items never collide on one file.
9
+ */
10
+ export declare function fileSlug(title: string): string;
11
+ /**
12
+ * Ensure a derived `.md` path is unique within one plan: on collision, insert `-2`, `-3`, … before
13
+ * the extension (the `uniqueSlugId` pattern) and record it. Two items whose titles slug to the same
14
+ * name under the same directory would otherwise stamp the SAME `targetPath`, spawning two doc tasks
15
+ * that open competing PRs writing one file. Only derived paths are deduped (planner-authored
16
+ * placement rides the item description, not `targetPath`).
17
+ */
18
+ export declare function uniqueDocPath(path: string, taken: Set<string>): string;
19
+ /**
20
+ * The per-run gate-override array that human-gates a spawned pipeline at its MERGE step — a FULL
21
+ * boolean array parallel to the pipeline's own `agentKinds` (the [S2] gate-override contract:
22
+ * `ExecutionService.start` rejects a length mismatch), the single `true` on the last `merger` step
23
+ * so the human reviews the CI-green PR right BEFORE it merges. DERIVED from the pipeline's shape
24
+ * (never a hand-maintained parallel array), so it stays correct by construction if a pipeline's
25
+ * shape changes. `undefined` when the pipeline is unknown or has no merge step (leaving its own
26
+ * gates untouched).
27
+ */
28
+ export declare function mergeGateOverride(pipelineId: string): boolean[] | undefined;
29
+ //# sourceMappingURL=plan-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-helpers.d.ts","sourceRoot":"","sources":["../../src/presets/plan-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAapE,oFAAoF;AACpF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG9F;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAatE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,SAAS,CAM3E"}
@@ -0,0 +1,65 @@
1
+ import { seedPipelines } from '@cat-factory/kernel';
2
+ import { moduleSlug } from '../repo-ops/render.js';
3
+ // ---------------------------------------------------------------------------
4
+ // Shared helpers for initiative-preset `seedPlan` post-processors (docs-refresh, tech-migration, …).
5
+ // A preset's `seedPlan` stamps per-item spawn DECORATION at ingest; these are the primitives every
6
+ // such hook needs — reading a frozen form value, deriving a repo-safe `.md` filename, de-duplicating
7
+ // derived paths so no two documents target one file, and deriving the merge-step gate override.
8
+ // Kept here (one implementation) rather than copied per preset so a fix to the single-writer dedup or
9
+ // the [S2] gate-override contract lands once and can't drift between presets.
10
+ // ---------------------------------------------------------------------------
11
+ /** Read a string input, falling back to `fallback` when absent/blank/non-string. */
12
+ export function strInput(inputs, key, fallback) {
13
+ const value = inputs[key];
14
+ return typeof value === 'string' && value.trim() ? value.trim() : fallback;
15
+ }
16
+ /**
17
+ * A filesystem-safe, lower-kebab file slug for a derived `.md` target path — the package's shared
18
+ * {@link moduleSlug} (single slug implementation) capped to a filename-sane length. A degenerate
19
+ * (empty / all-punctuation) title falls back to `moduleSlug`'s `module`; the caller deduplicates the
20
+ * composed path via {@link uniqueDocPath} anyway, so two such items never collide on one file.
21
+ */
22
+ export function fileSlug(title) {
23
+ return moduleSlug(title).slice(0, 60);
24
+ }
25
+ /**
26
+ * Ensure a derived `.md` path is unique within one plan: on collision, insert `-2`, `-3`, … before
27
+ * the extension (the `uniqueSlugId` pattern) and record it. Two items whose titles slug to the same
28
+ * name under the same directory would otherwise stamp the SAME `targetPath`, spawning two doc tasks
29
+ * that open competing PRs writing one file. Only derived paths are deduped (planner-authored
30
+ * placement rides the item description, not `targetPath`).
31
+ */
32
+ export function uniqueDocPath(path, taken) {
33
+ if (!taken.has(path)) {
34
+ taken.add(path);
35
+ return path;
36
+ }
37
+ const dot = path.lastIndexOf('.');
38
+ const base = dot === -1 ? path : path.slice(0, dot);
39
+ const ext = dot === -1 ? '' : path.slice(dot);
40
+ let n = 2;
41
+ let candidate = `${base}-${n}${ext}`;
42
+ while (taken.has(candidate))
43
+ candidate = `${base}-${++n}${ext}`;
44
+ taken.add(candidate);
45
+ return candidate;
46
+ }
47
+ /**
48
+ * The per-run gate-override array that human-gates a spawned pipeline at its MERGE step — a FULL
49
+ * boolean array parallel to the pipeline's own `agentKinds` (the [S2] gate-override contract:
50
+ * `ExecutionService.start` rejects a length mismatch), the single `true` on the last `merger` step
51
+ * so the human reviews the CI-green PR right BEFORE it merges. DERIVED from the pipeline's shape
52
+ * (never a hand-maintained parallel array), so it stays correct by construction if a pipeline's
53
+ * shape changes. `undefined` when the pipeline is unknown or has no merge step (leaving its own
54
+ * gates untouched).
55
+ */
56
+ export function mergeGateOverride(pipelineId) {
57
+ const kinds = seedPipelines().find((p) => p.id === pipelineId)?.agentKinds;
58
+ if (!kinds)
59
+ return undefined;
60
+ const gateIdx = kinds.lastIndexOf('merger');
61
+ if (gateIdx === -1)
62
+ return undefined;
63
+ return kinds.map((_, i) => i === gateIdx);
64
+ }
65
+ //# sourceMappingURL=plan-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-helpers.js","sourceRoot":"","sources":["../../src/presets/plan-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,8EAA8E;AAC9E,qGAAqG;AACrG,mGAAmG;AACnG,qGAAqG;AACrG,gGAAgG;AAChG,sGAAsG;AACtG,8EAA8E;AAC9E,8EAA8E;AAE9E,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAC,MAA8B,EAAE,GAAW,EAAE,QAAgB;IACpF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAkB;IAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,SAAS,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAA;IAC/D,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACpB,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,UAAU,CAAA;IAC1E,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,OAAO,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { InitiativePlanDraft, InitiativePresetInputs } from '@cat-factory/contracts';
2
+ /** Field key on the frozen `presetInputs`: where the migration's `.md` artifacts are committed. */
3
+ export declare const FIELD_MIGRATION_DOCS_DIR = "migrationDocsDir";
4
+ /** Field key on the frozen `presetInputs`: the human-review opt-in (defaults ON for a migration). */
5
+ export declare const FIELD_HUMAN_REVIEW = "humanReview";
6
+ /** The default in-repo directory the migration artifacts live under (the pilot value). */
7
+ export declare const DEFAULT_MIGRATION_DOCS_DIR = "docs/migration";
8
+ /**
9
+ * The per-run gate-override that human-gates the doc-quick pipeline at its merge step, kept as a
10
+ * named export so T8's descriptor review mapping reuses the SAME derivation. Delegates to the shared
11
+ * {@link mergeGateOverride} (single implementation across presets).
12
+ */
13
+ export declare function migrationReviewGates(pipelineId: string): boolean[] | undefined;
14
+ /**
15
+ * The plan post-processor for `preset_tech_migration`. See the file header for the per-phase
16
+ * archetypes and the four responsibilities. Pure + total; never mutates its input.
17
+ */
18
+ export declare function seedMigrationPlan(draft: InitiativePlanDraft, inputs: InitiativePresetInputs): InitiativePlanDraft;
19
+ //# sourceMappingURL=seed-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-plan.d.ts","sourceRoot":"","sources":["../../../src/presets/tech-migration/seed-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,wBAAwB,CAAA;AA6C/B,mGAAmG;AACnG,eAAO,MAAM,wBAAwB,qBAAqB,CAAA;AAC1D,qGAAqG;AACrG,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAC/C,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,mBAAmB,CAAA;AA6D1D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,SAAS,CAE9E;AAkDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,sBAAsB,GAC7B,mBAAmB,CAqGrB"}
@@ -0,0 +1,207 @@
1
+ import { DOCUMENT_QUICK_PIPELINE_ID, joinRepoPath } from '@cat-factory/kernel';
2
+ import { migrationFragmentIdsFor } from '@cat-factory/prompt-fragments';
3
+ import { fileSlug, mergeGateOverride, strInput, uniqueDocPath } from '../plan-helpers.js';
4
+ import { MIGRATION_PHASE_IDS } from './phases.js';
5
+ // ---------------------------------------------------------------------------
6
+ // `seedMigrationPlan` (tech-migration slice T7) — the `preset_tech_migration` plan POST-PROCESSOR.
7
+ //
8
+ // It runs at ingest AFTER the generic phase-template normalizer (T2 owns plan SHAPE — which phases,
9
+ // in what order) and stamps per-item spawn DECORATION only, exactly the T2-does-shape / T7-does-
10
+ // decoration split the parent's docs-refresh pilot established (see `../docs-refresh/preset.ts`).
11
+ // It NEVER touches phases: shape enforcement is the template's job, re-run after this hook.
12
+ //
13
+ // The migration methodology gives each phase a fixed archetype (see `phases.ts`):
14
+ // 1. `migration-blast-zone` — a single blast-zone REPORT document.
15
+ // 2. `migration-coverage` — coverage CODING items (characterization tests) closed by the
16
+ // single human-gated CONFIDENCE-CASE document.
17
+ // 3. `migration-transition-design`— the human-gated transition-design DOCUMENT(s).
18
+ // 4. `migration-delivery` — delivery CODING items (the swap itself).
19
+ // 5. `migration-verify-decommission` — parity / CI-flip / decommission CODING items.
20
+ //
21
+ // So `seedMigrationPlan`'s responsibilities are:
22
+ // (a) stamp each item's spawn decoration keyed off its phase — the report/design/confidence
23
+ // DOCUMENTS (declared once in `DOC_PHASE_DECORATIONS`) get `taskType: 'document'` + a `.md`
24
+ // `targetPath` under the frozen `migrationDocsDir` and the `pl_document_quick` pipeline; the
25
+ // CODING items are left for the policy's estimate rules to route (no forced pipeline). Each
26
+ // item gets the `migration.*` fragments that APPLY to its primary producer (`doc-writer` for
27
+ // documents, `coder` for coding) — honouring each fragment's `appliesTo` (see `withFragments`).
28
+ // (b) wire the confidence case — ensure phase 2 closes with a single confidence-case document
29
+ // that `dependsOn` every surviving phase-2 coverage item and is human-gated (injecting it if
30
+ // the planner omitted it).
31
+ // (c) apply the phase-2 coverage granularity cap (≤ 8 items), scrubbing dropped ids from every
32
+ // surviving item's `dependsOn` so no dangling reference reaches `validatePlanDraft`.
33
+ // (d) honour the `humanReview` input on the informational (blast-zone) document, while the
34
+ // confidence-case + transition-design documents stay human-gated ALWAYS (they are the
35
+ // methodology's coverage→delivery control points, per the tracker gotcha — never optional).
36
+ //
37
+ // Pure + total: a deterministic function of the (shaped) draft + frozen inputs, so it is
38
+ // replay-safe and its output is re-parsed + re-normalized at the ingest trust boundary (an unsafe
39
+ // `targetPath` a bug composed is rejected there by `isSafeDocPath`, exactly as in docs-refresh).
40
+ // Lands UNWIRED (no preset registration) — T8 registers `preset_tech_migration` and hooks this in.
41
+ // See `docs/initiatives/tech-migration-preset-and-mssql-postgres-pilot.md`.
42
+ // ---------------------------------------------------------------------------
43
+ /** Field key on the frozen `presetInputs`: where the migration's `.md` artifacts are committed. */
44
+ export const FIELD_MIGRATION_DOCS_DIR = 'migrationDocsDir';
45
+ /** Field key on the frozen `presetInputs`: the human-review opt-in (defaults ON for a migration). */
46
+ export const FIELD_HUMAN_REVIEW = 'humanReview';
47
+ /** The default in-repo directory the migration artifacts live under (the pilot value). */
48
+ export const DEFAULT_MIGRATION_DOCS_DIR = 'docs/migration';
49
+ /** The single canonical artifact filenames — one writer per file (the tracker's single-writer rule). */
50
+ const BLAST_ZONE_DOC = 'blast-zone.md';
51
+ const CONFIDENCE_CASE_DOC = 'confidence-case.md';
52
+ const TRANSITION_DESIGN_DOC = 'transition-design.md';
53
+ /** The maximum number of coverage items phase 2 keeps (the granularity cap; extras are dropped). */
54
+ const MAX_COVERAGE_ITEMS = 8;
55
+ /** The base id the injected confidence-case item is derived from (made unique on collision). */
56
+ const CONFIDENCE_CASE_ITEM_BASE = 'confidence-case';
57
+ const DOC_PHASE_DECORATIONS = {
58
+ // The blast-zone REPORT — informational, so its gate follows the `humanReview` opt-in.
59
+ [MIGRATION_PHASE_IDS.blastZone]: {
60
+ docKind: 'technical',
61
+ canonicalDoc: BLAST_ZONE_DOC,
62
+ gate: 'humanReview',
63
+ },
64
+ // The transition-design DOCUMENT(s) — always human-gated (the compat-posture control point).
65
+ [MIGRATION_PHASE_IDS.transitionDesign]: {
66
+ docKind: 'design',
67
+ canonicalDoc: TRANSITION_DESIGN_DOC,
68
+ gate: 'always',
69
+ },
70
+ };
71
+ /**
72
+ * Whether a phase-2 item is (already) the confidence case the planner was steered to author — the
73
+ * closing coverage item. Matched on the title (the only signal that survives `coerceInitiativePlan`,
74
+ * which drops planner-authored `spawn`), ANCHORED at the title start (after optional leading verbs /
75
+ * articles) so a coverage CODING item that merely MENTIONS the confidence case (e.g. "Characterize
76
+ * the orders API against the confidence case") is NOT misclassified and silently hijacked into the
77
+ * single confidence document. The planner is steered to title it plainly ("Confidence case" /
78
+ * "Author the confidence case"), which this still matches; a match is canonicalized rather than
79
+ * duplicated, and when none matches `seedMigrationPlan` injects one.
80
+ */
81
+ function isConfidenceCaseItem(item) {
82
+ return /^(?:(?:author|write|compile|assemble|prepare|build|create|draft|the|a)\s+)*confidence[-\s]?case\b/i.test(item.title.trim());
83
+ }
84
+ /**
85
+ * The per-run gate-override that human-gates the doc-quick pipeline at its merge step, kept as a
86
+ * named export so T8's descriptor review mapping reuses the SAME derivation. Delegates to the shared
87
+ * {@link mergeGateOverride} (single implementation across presets).
88
+ */
89
+ export function migrationReviewGates(pipelineId) {
90
+ return mergeGateOverride(pipelineId);
91
+ }
92
+ /** Assign a unique id derived from `base`, suffixing `-2`, `-3`, … on collision (the coerce pattern). */
93
+ function uniqueId(base, taken) {
94
+ let candidate = base;
95
+ let n = 2;
96
+ while (taken.has(candidate))
97
+ candidate = `${base}-${n++}`;
98
+ taken.add(candidate);
99
+ return candidate;
100
+ }
101
+ /** Stamp the migration fragments that apply to `agentKind` onto an item's spawn, preserving the rest. */
102
+ function withFragments(item, agentKind) {
103
+ return { ...item, spawn: { ...item.spawn, fragmentIds: migrationFragmentIdsFor(agentKind) } };
104
+ }
105
+ /**
106
+ * Decorate an item as a committed migration DOCUMENT: `taskType: 'document'` + the doc-quick
107
+ * pipeline + the given `.md` `targetPath` and `docKind`, the doc-writer migration fragments, and
108
+ * the merge gate per the `gate` policy. An `'always'`-gated document whose pipeline has NO merge
109
+ * step to place the review on is a misconfiguration that would silently ship the control point
110
+ * unattended, so it THROWS rather than degrading to ungated (the invariant is enforced, not hoped).
111
+ */
112
+ function asDocument(item, docKind, targetPath, gate, humanReview) {
113
+ const gates = gate === 'always' || humanReview ? mergeGateOverride(DOCUMENT_QUICK_PIPELINE_ID) : undefined;
114
+ if (gate === 'always' && !gates) {
115
+ throw new Error(`Migration document pipeline '${DOCUMENT_QUICK_PIPELINE_ID}' has no merge step to gate — the always-gated confidence-case / transition-design control point cannot be enforced.`);
116
+ }
117
+ return {
118
+ ...item,
119
+ pipelineId: DOCUMENT_QUICK_PIPELINE_ID,
120
+ spawn: {
121
+ ...item.spawn,
122
+ taskType: 'document',
123
+ taskTypeFields: { docKind, targetPath },
124
+ fragmentIds: migrationFragmentIdsFor('doc-writer'),
125
+ ...(gates ? { gates } : {}),
126
+ },
127
+ };
128
+ }
129
+ /**
130
+ * The plan post-processor for `preset_tech_migration`. See the file header for the per-phase
131
+ * archetypes and the four responsibilities. Pure + total; never mutates its input.
132
+ */
133
+ export function seedMigrationPlan(draft, inputs) {
134
+ const docsDir = strInput(inputs, FIELD_MIGRATION_DOCS_DIR, DEFAULT_MIGRATION_DOCS_DIR);
135
+ // Human review defaults ON for a migration (a `false` value opts out); the confidence-case +
136
+ // design gates below ignore this — they are intrinsic control points, gated regardless.
137
+ const humanReview = inputs[FIELD_HUMAN_REVIEW] !== false;
138
+ // --- (c) Phase-2 coverage cap + confidence-case identification --------------------------------
139
+ const coverageAll = draft.items.filter((i) => i.phaseId === MIGRATION_PHASE_IDS.coverage && !isConfidenceCaseItem(i));
140
+ const coverageKept = coverageAll.slice(0, MAX_COVERAGE_ITEMS);
141
+ const droppedIds = new Set(coverageAll
142
+ .slice(MAX_COVERAGE_ITEMS)
143
+ .map((i) => i.id)
144
+ .filter((id) => !!id));
145
+ const keptCoverageIds = coverageKept.map((i) => i.id).filter((id) => !!id);
146
+ // The existing planner-authored confidence case (if any); the FIRST match is canonicalized, any
147
+ // further matches fall through to coverage decoration (harmless extra coding items).
148
+ const existingConfidence = draft.items.find((i) => i.phaseId === MIGRATION_PHASE_IDS.coverage && isConfidenceCaseItem(i));
149
+ const takenIds = new Set(draft.items.map((i) => i.id).filter((id) => !!id));
150
+ const confidenceId = existingConfidence?.id ?? uniqueId(CONFIDENCE_CASE_ITEM_BASE, takenIds);
151
+ // The items we will decorate (everything except the capped-away coverage and the confidence case,
152
+ // which is held out to be appended LAST). Order is preserved from the draft.
153
+ const keptItems = draft.items.filter((item) => !(item.id && droppedIds.has(item.id)) && item !== existingConfidence);
154
+ // Pre-assign each document item's derived `.md` path: the first item of a document phase gets the
155
+ // phase's canonical filename, extras a title-derived slug, all de-duplicated across the whole plan
156
+ // so no two documents ever target one file (the single-writer rule). Derived up front (indexed by
157
+ // position within the phase) rather than tracked with mutable "first seen" flags in the decorate
158
+ // pass. The confidence-case path is allocated after, from the same `usedPaths` set.
159
+ const usedPaths = new Set();
160
+ const docPaths = new Map();
161
+ for (const [phaseId, deco] of Object.entries(DOC_PHASE_DECORATIONS)) {
162
+ keptItems
163
+ .filter((item) => item.phaseId === phaseId)
164
+ .forEach((item, idx) => {
165
+ const derived = idx === 0
166
+ ? joinRepoPath(docsDir, deco.canonicalDoc)
167
+ : `${joinRepoPath(docsDir, fileSlug(item.title))}.md`;
168
+ docPaths.set(item, uniqueDocPath(derived, usedPaths));
169
+ });
170
+ }
171
+ /** Scrub `dependsOn` of any capped-away coverage ids so no dangling reference reaches ingest. */
172
+ const scrubDeps = (item) => item.dependsOn?.some((d) => droppedIds.has(d))
173
+ ? { ...item, dependsOn: item.dependsOn.filter((d) => !droppedIds.has(d)) }
174
+ : item;
175
+ const decorate = (raw) => {
176
+ const item = scrubDeps(raw);
177
+ const deco = DOC_PHASE_DECORATIONS[item.phaseId];
178
+ if (deco)
179
+ return asDocument(item, deco.docKind, docPaths.get(item), deco.gate, humanReview);
180
+ // Coverage / delivery / verify-decommission are ordinary CODING items: no forced pipeline (the
181
+ // policy's estimate rules route them), just the coder migration fragments. The coverage→delivery
182
+ // human control is the confidence-case gate, not a per-PR gate.
183
+ return withFragments(item, 'coder');
184
+ };
185
+ const items = keptItems.map(decorate);
186
+ // --- (b) The confidence case: the single, human-gated coverage→delivery proof -----------------
187
+ const confidenceBase = existingConfidence
188
+ ? { ...existingConfidence, id: confidenceId }
189
+ : {
190
+ id: confidenceId,
191
+ phaseId: MIGRATION_PHASE_IDS.coverage,
192
+ title: 'Confidence case',
193
+ description: 'Sweep the coverage over the blast zone and commit the evidence-backed confidence case (per-touchpoint named tests, gaps and waivers justified against the coverage bar, risk mitigations, safety nets) a human audits before delivery begins.',
194
+ dependsOn: [],
195
+ };
196
+ // Depend on every surviving coverage item (deduped), preserving any planner-authored deps but
197
+ // scrubbing references to capped-away items (an existing confidence case skips `decorate`).
198
+ const confidenceDeps = [
199
+ ...new Set([
200
+ ...(confidenceBase.dependsOn ?? []).filter((d) => !droppedIds.has(d)),
201
+ ...keptCoverageIds,
202
+ ]),
203
+ ];
204
+ items.push(asDocument({ ...confidenceBase, dependsOn: confidenceDeps }, 'technical', uniqueDocPath(joinRepoPath(docsDir, CONFIDENCE_CASE_DOC), usedPaths), 'always', humanReview));
205
+ return { ...draft, items };
206
+ }
207
+ //# sourceMappingURL=seed-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-plan.js","sourceRoot":"","sources":["../../../src/presets/tech-migration/seed-plan.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export { CompositeModelProvider, type ModelResolver, type ProviderRegistry } from './registry.js';
2
2
  export { CliInlineLanguageModel, type InlineCliRequest, type InlineCliResult, type InlineCliRunner, } from './cli-inline.js';
3
3
  export { InstrumentedModelProvider, catFactoryObservability, type InlineObservabilityContext, } from './instrumented.js';
4
+ export { VendorConcurrencyLimiter, limitModelProvider, vendorConcurrencyLimiterFromEnv, } from './limited.js';
4
5
  export { anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, } from './resolvers.js';
5
6
  export { DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, } from './endpoints.js';
6
7
  export { type CachePolicy, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './cache.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,GAC/B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACjG,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,+BAA+B,GAChC,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,GAC/B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,WAAW,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
@@ -1,6 +1,7 @@
1
1
  export { CompositeModelProvider } from './registry.js';
2
2
  export { CliInlineLanguageModel, } from './cli-inline.js';
3
3
  export { InstrumentedModelProvider, catFactoryObservability, } from './instrumented.js';
4
+ export { VendorConcurrencyLimiter, limitModelProvider, vendorConcurrencyLimiterFromEnv, } from './limited.js';
4
5
  export { anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, } from './resolvers.js';
5
6
  export { DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, isProxyableProvider, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, resolveOpenAiCompatibleBaseUrl, } from './endpoints.js';
6
7
  export { cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './cache.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6C,MAAM,eAAe,CAAA;AACjG,OAAO,EACL,sBAAsB,GAIvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GAExB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,GAC/B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEL,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA6C,MAAM,eAAe,CAAA;AACjG,OAAO,EACL,sBAAsB,GAIvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,GAExB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,+BAA+B,GAChC,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,8BAA8B,GAC/B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAEL,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,48 @@
1
+ import type { LanguageModel } from 'ai';
2
+ import type { SubscriptionVendor } from '@cat-factory/contracts';
3
+ import type { ModelProvider, ModelRef } from '@cat-factory/kernel';
4
+ import { type PermitRelease } from './semaphore.js';
5
+ /** Per-vendor max in-flight inline calls. A vendor absent (or ≤ 0) is uncapped. */
6
+ export type VendorConcurrencyLimits = Partial<Record<SubscriptionVendor, number>>;
7
+ /** Build a {@link VendorConcurrencyLimiter} from the environment. Build it ONCE per facade. */
8
+ export declare function vendorConcurrencyLimiterFromEnv(get: (key: string) => string | undefined): VendorConcurrencyLimiter;
9
+ /**
10
+ * Holds one {@link Semaphore} per capped vendor. Build it ONCE per process (Node) / per
11
+ * isolate (Worker) and share it across every `forScope` result so all inline calls to a
12
+ * vendor contend for the same permits.
13
+ */
14
+ export declare class VendorConcurrencyLimiter {
15
+ private readonly semaphores;
16
+ constructor(limits: VendorConcurrencyLimits);
17
+ /** The configured cap for a vendor, or undefined when it is uncapped. */
18
+ limitFor(vendor: SubscriptionVendor): number | undefined;
19
+ /** No vendor is capped — the limiter is a pure pass-through. */
20
+ get isEmpty(): boolean;
21
+ /**
22
+ * Acquire a permit for `vendor`, resolving with its release; an uncapped vendor resolves with
23
+ * a no-op release immediately. Pass `signal` so a queued acquire for a cancelled call bails.
24
+ */
25
+ acquire(vendor: SubscriptionVendor, signal?: AbortSignal): Promise<PermitRelease>;
26
+ /** Run `fn` under the vendor's permit, or immediately if the vendor is uncapped. */
27
+ run<T>(vendor: SubscriptionVendor, fn: () => PromiseLike<T>, signal?: AbortSignal): Promise<T>;
28
+ }
29
+ /**
30
+ * A {@link ModelProvider} decorator that gates each resolved subscription-vendor model behind
31
+ * the shared {@link VendorConcurrencyLimiter}. Mirrors {@link InstrumentedModelProvider}'s
32
+ * shape (wrap the resolved model with an AI SDK middleware); apply it as the OUTERMOST wrap so
33
+ * the queue wait is excluded from the instrumentation's generation timing. Both the buffered
34
+ * (`wrapGenerate`) and streaming (`wrapStream`) paths are gated: a permit is held for the whole
35
+ * generation, and for a stream it is held until the stream ends / errors / is cancelled — so a
36
+ * streamed call counts against the cap exactly like a buffered one. A queued call whose request
37
+ * is aborted releases its slot instead of head-of-line blocking behind it.
38
+ */
39
+ export declare class LimitedModelProvider implements ModelProvider {
40
+ private readonly inner;
41
+ private readonly limiter;
42
+ constructor(inner: ModelProvider, limiter: VendorConcurrencyLimiter);
43
+ resolve(ref: ModelRef): LanguageModel;
44
+ private middlewareFor;
45
+ }
46
+ /** Wrap `inner` with a per-vendor concurrency cap. A pass-through limiter returns `inner`. */
47
+ export declare function limitModelProvider(inner: ModelProvider, limiter: VendorConcurrencyLimiter): ModelProvider;
48
+ //# sourceMappingURL=limited.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limited.d.ts","sourceRoot":"","sources":["../../src/providers/limited.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,IAAI,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,KAAK,aAAa,EAAa,MAAM,gBAAgB,CAAA;AAmB9D,mFAAmF;AACnF,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;AA0CjF,+FAA+F;AAC/F,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GACvC,wBAAwB,CAE1B;AAKD;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;IAEtE,YAAY,MAAM,EAAE,uBAAuB,EAI1C;IAED,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS,CAEvD;IAED,gEAAgE;IAChE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAGhF;IAED,oFAAoF;IAC9E,GAAG,CAAC,CAAC,EACT,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC,CAGZ;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAF1B,YACmB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,wBAAwB,EAChD;IAEJ,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAYpC;IAED,OAAO,CAAC,aAAa;CAmBtB;AA2BD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,wBAAwB,GAChC,aAAa,CAEf"}
@@ -0,0 +1,158 @@
1
+ import { wrapLanguageModel } from 'ai';
2
+ import { ALL_SUBSCRIPTION_VENDORS, subscriptionVendorForRef } from '@cat-factory/kernel';
3
+ import { Semaphore } from './semaphore.js';
4
+ /** Default cap applied per subscription vendor when a facade doesn't override it. */
5
+ const DEFAULT_SUBSCRIPTION_INLINE_CONCURRENCY = 3;
6
+ /** Env var for the default cap; `${VAR}_<VENDOR>` (e.g. `_CLAUDE`) overrides one vendor. */
7
+ const SUBSCRIPTION_INLINE_CONCURRENCY_ENV = 'LLM_SUBSCRIPTION_MAX_CONCURRENCY';
8
+ /**
9
+ * Parse an env value into a cap. A numeric value clamps to `>= 0`, so any non-positive number
10
+ * (`0`, `-1`, …) means "uncapped" — an operator who writes `-1` for "no limit" gets exactly
11
+ * that rather than a silent fallback to the default cap. A blank or non-numeric value returns
12
+ * `undefined` so the caller falls back to the layer below it (per-vendor → global → default).
13
+ */
14
+ function parseLimit(raw) {
15
+ if (raw === undefined || raw.trim() === '')
16
+ return undefined;
17
+ const n = Number(raw);
18
+ return Number.isFinite(n) ? Math.max(0, Math.floor(n)) : undefined;
19
+ }
20
+ /**
21
+ * Read the per-vendor caps from the environment (shared by every facade so the two runtimes
22
+ * parse identically). `LLM_SUBSCRIPTION_MAX_CONCURRENCY` sets the default cap for all five
23
+ * subscription vendors (falls back to {@link DEFAULT_SUBSCRIPTION_INLINE_CONCURRENCY}); a
24
+ * `LLM_SUBSCRIPTION_MAX_CONCURRENCY_<VENDOR>` (e.g. `_KIMI`) overrides that ONE vendor and always
25
+ * wins (specific beats general). Any value `<= 0` is uncapped, so setting the default to `0`
26
+ * uncaps every vendor that has no explicit per-vendor override; to disable limiting entirely,
27
+ * leave the per-vendor overrides unset (or `0`) as well.
28
+ */
29
+ function vendorConcurrencyLimitsFromEnv(get) {
30
+ const base = parseLimit(get(SUBSCRIPTION_INLINE_CONCURRENCY_ENV)) ?? DEFAULT_SUBSCRIPTION_INLINE_CONCURRENCY;
31
+ const limits = {};
32
+ for (const vendor of ALL_SUBSCRIPTION_VENDORS) {
33
+ limits[vendor] =
34
+ parseLimit(get(`${SUBSCRIPTION_INLINE_CONCURRENCY_ENV}_${vendor.toUpperCase()}`)) ?? base;
35
+ }
36
+ return limits;
37
+ }
38
+ /** Build a {@link VendorConcurrencyLimiter} from the environment. Build it ONCE per facade. */
39
+ export function vendorConcurrencyLimiterFromEnv(get) {
40
+ return new VendorConcurrencyLimiter(vendorConcurrencyLimitsFromEnv(get));
41
+ }
42
+ /** A release that returns nothing to reclaim — the no-op for an uncapped vendor. */
43
+ const NOOP_RELEASE = () => { };
44
+ /**
45
+ * Holds one {@link Semaphore} per capped vendor. Build it ONCE per process (Node) / per
46
+ * isolate (Worker) and share it across every `forScope` result so all inline calls to a
47
+ * vendor contend for the same permits.
48
+ */
49
+ export class VendorConcurrencyLimiter {
50
+ semaphores = new Map();
51
+ constructor(limits) {
52
+ for (const [vendor, limit] of Object.entries(limits)) {
53
+ if (limit && limit > 0)
54
+ this.semaphores.set(vendor, new Semaphore(limit));
55
+ }
56
+ }
57
+ /** The configured cap for a vendor, or undefined when it is uncapped. */
58
+ limitFor(vendor) {
59
+ return this.semaphores.has(vendor) ? this.semaphores.get(vendor).permits : undefined;
60
+ }
61
+ /** No vendor is capped — the limiter is a pure pass-through. */
62
+ get isEmpty() {
63
+ return this.semaphores.size === 0;
64
+ }
65
+ /**
66
+ * Acquire a permit for `vendor`, resolving with its release; an uncapped vendor resolves with
67
+ * a no-op release immediately. Pass `signal` so a queued acquire for a cancelled call bails.
68
+ */
69
+ acquire(vendor, signal) {
70
+ const sem = this.semaphores.get(vendor);
71
+ return sem ? sem.acquire(signal) : Promise.resolve(NOOP_RELEASE);
72
+ }
73
+ /** Run `fn` under the vendor's permit, or immediately if the vendor is uncapped. */
74
+ async run(vendor, fn, signal) {
75
+ const sem = this.semaphores.get(vendor);
76
+ return sem ? sem.run(fn, signal) : fn();
77
+ }
78
+ }
79
+ /**
80
+ * A {@link ModelProvider} decorator that gates each resolved subscription-vendor model behind
81
+ * the shared {@link VendorConcurrencyLimiter}. Mirrors {@link InstrumentedModelProvider}'s
82
+ * shape (wrap the resolved model with an AI SDK middleware); apply it as the OUTERMOST wrap so
83
+ * the queue wait is excluded from the instrumentation's generation timing. Both the buffered
84
+ * (`wrapGenerate`) and streaming (`wrapStream`) paths are gated: a permit is held for the whole
85
+ * generation, and for a stream it is held until the stream ends / errors / is cancelled — so a
86
+ * streamed call counts against the cap exactly like a buffered one. A queued call whose request
87
+ * is aborted releases its slot instead of head-of-line blocking behind it.
88
+ */
89
+ export class LimitedModelProvider {
90
+ inner;
91
+ limiter;
92
+ constructor(inner, limiter) {
93
+ this.inner = inner;
94
+ this.limiter = limiter;
95
+ }
96
+ resolve(ref) {
97
+ const model = this.inner.resolve(ref);
98
+ const vendor = subscriptionVendorForRef(ref);
99
+ // Only wrap when this ref actually targets a capped subscription vendor; a string ref
100
+ // (unusual for inline) and any uncapped vendor pass straight through untouched.
101
+ if (typeof model === 'string' || !vendor || this.limiter.limitFor(vendor) === undefined) {
102
+ return model;
103
+ }
104
+ return wrapLanguageModel({
105
+ model: model,
106
+ middleware: this.middlewareFor(vendor),
107
+ });
108
+ }
109
+ middlewareFor(vendor) {
110
+ return {
111
+ specificationVersion: 'v3',
112
+ wrapGenerate: ({ doGenerate, params }) => this.limiter.run(vendor, doGenerate, params.abortSignal),
113
+ wrapStream: async ({ doStream, params }) => {
114
+ // Hold the permit across the whole stream, not just the doStream() call: acquire before
115
+ // starting and release when the stream terminates (drained / errored / cancelled).
116
+ const release = await this.limiter.acquire(vendor, params.abortSignal);
117
+ try {
118
+ const result = await doStream();
119
+ return { ...result, stream: releaseWhenDone(result.stream, release) };
120
+ }
121
+ catch (err) {
122
+ release();
123
+ throw err;
124
+ }
125
+ },
126
+ };
127
+ }
128
+ }
129
+ /** Pipe `stream` through so `release` fires exactly once when it ends, errors, or is cancelled. */
130
+ function releaseWhenDone(stream, release) {
131
+ const reader = stream.getReader();
132
+ return new ReadableStream({
133
+ async pull(controller) {
134
+ try {
135
+ const { done, value } = await reader.read();
136
+ if (done) {
137
+ release();
138
+ controller.close();
139
+ return;
140
+ }
141
+ controller.enqueue(value);
142
+ }
143
+ catch (err) {
144
+ release();
145
+ controller.error(err);
146
+ }
147
+ },
148
+ cancel(reason) {
149
+ release();
150
+ return reader.cancel(reason);
151
+ },
152
+ });
153
+ }
154
+ /** Wrap `inner` with a per-vendor concurrency cap. A pass-through limiter returns `inner`. */
155
+ export function limitModelProvider(inner, limiter) {
156
+ return limiter.isEmpty ? inner : new LimitedModelProvider(inner, limiter);
157
+ }
158
+ //# sourceMappingURL=limited.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limited.js","sourceRoot":"","sources":["../../src/providers/limited.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** Releases a held permit back to the semaphore. Idempotent — calling it twice is a no-op. */
2
+ export type PermitRelease = () => void;
3
+ export declare class Semaphore {
4
+ /** The total permit count the semaphore was built with (its max concurrency). */
5
+ readonly permits: number;
6
+ private available;
7
+ private readonly waiters;
8
+ constructor(permits: number);
9
+ /**
10
+ * Acquire a permit, resolving with the {@link PermitRelease} that returns it. If `signal` is
11
+ * already aborted, or aborts while this call is still queued, the returned promise rejects with
12
+ * the signal's reason and no permit is taken. Once a permit is granted the signal no longer
13
+ * cancels it (the caller owns the permit and must `release()` it).
14
+ */
15
+ acquire(signal?: AbortSignal): Promise<PermitRelease>;
16
+ /** Build a single-use release for one granted permit. */
17
+ private makeRelease;
18
+ private release;
19
+ /**
20
+ * Acquire a permit, run `fn`, and release the permit even if `fn` throws. Pass `signal` to
21
+ * cancel the wait while still queued (the acquire rejects and `fn` never runs).
22
+ */
23
+ run<T>(fn: () => PromiseLike<T>, signal?: AbortSignal): Promise<T>;
24
+ }
25
+ //# sourceMappingURL=semaphore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semaphore.d.ts","sourceRoot":"","sources":["../../src/providers/semaphore.ts"],"names":[],"mappings":"AAaA,8FAA8F;AAC9F,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,CAAA;AAEtC,qBAAa,SAAS;IACpB,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,YAAY,OAAO,EAAE,MAAM,EAM1B;IAED;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAuBpD;IAED,yDAAyD;IACzD,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,OAAO;IAUf;;;OAGG;IACG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAOvE;CACF"}
@@ -0,0 +1,94 @@
1
+ // A minimal async counting semaphore: bound how many async operations run at once.
2
+ // Hand-rolled on purpose — the repo prefers a tiny in-tree limiter (the GitHub-read
3
+ // `mapLimit`, the `withDirLock` mutex) over pulling `p-limit`/`Bottleneck`, which would
4
+ // add a dependency behind the `minimumReleaseAge` install gate plus a `knip` ignore.
5
+ //
6
+ // Fairness is FIFO: waiters are released in the order they blocked, and a released permit
7
+ // is handed straight to the next waiter (never returned to the pool and re-raced), so a
8
+ // steady stream of arrivals can't starve an earlier waiter.
9
+ //
10
+ // A queued waiter can be cancelled with an `AbortSignal` — it leaves the queue and rejects
11
+ // without ever taking a permit, so an aborted caller (e.g. a cancelled run) never head-of-line
12
+ // blocks the others behind a slot it will not use.
13
+ export class Semaphore {
14
+ /** The total permit count the semaphore was built with (its max concurrency). */
15
+ permits;
16
+ available;
17
+ waiters = [];
18
+ constructor(permits) {
19
+ if (!Number.isInteger(permits) || permits < 1) {
20
+ throw new Error(`Semaphore needs a positive integer permit count, got ${permits}`);
21
+ }
22
+ this.permits = permits;
23
+ this.available = permits;
24
+ }
25
+ /**
26
+ * Acquire a permit, resolving with the {@link PermitRelease} that returns it. If `signal` is
27
+ * already aborted, or aborts while this call is still queued, the returned promise rejects with
28
+ * the signal's reason and no permit is taken. Once a permit is granted the signal no longer
29
+ * cancels it (the caller owns the permit and must `release()` it).
30
+ */
31
+ acquire(signal) {
32
+ if (signal?.aborted)
33
+ return Promise.reject(abortReason(signal));
34
+ if (this.available > 0) {
35
+ this.available -= 1;
36
+ return Promise.resolve(this.makeRelease());
37
+ }
38
+ return new Promise((resolve, reject) => {
39
+ const grant = () => {
40
+ cleanup();
41
+ resolve(this.makeRelease());
42
+ };
43
+ const onAbort = () => {
44
+ const i = this.waiters.indexOf(grant);
45
+ // Already granted (shifted out of the queue) — the permit is ours; let it stand.
46
+ if (i < 0)
47
+ return;
48
+ this.waiters.splice(i, 1);
49
+ cleanup();
50
+ reject(abortReason(signal));
51
+ };
52
+ const cleanup = () => signal?.removeEventListener('abort', onAbort);
53
+ this.waiters.push(grant);
54
+ signal?.addEventListener('abort', onAbort, { once: true });
55
+ });
56
+ }
57
+ /** Build a single-use release for one granted permit. */
58
+ makeRelease() {
59
+ let released = false;
60
+ return () => {
61
+ if (released)
62
+ return;
63
+ released = true;
64
+ this.release();
65
+ };
66
+ }
67
+ release() {
68
+ const next = this.waiters.shift();
69
+ if (next) {
70
+ // Transfer the permit directly to the waiter (available stays put).
71
+ next();
72
+ }
73
+ else {
74
+ this.available += 1;
75
+ }
76
+ }
77
+ /**
78
+ * Acquire a permit, run `fn`, and release the permit even if `fn` throws. Pass `signal` to
79
+ * cancel the wait while still queued (the acquire rejects and `fn` never runs).
80
+ */
81
+ async run(fn, signal) {
82
+ const release = await this.acquire(signal);
83
+ try {
84
+ return await fn();
85
+ }
86
+ finally {
87
+ release();
88
+ }
89
+ }
90
+ }
91
+ function abortReason(signal) {
92
+ return signal.reason ?? new DOMException('Aborted', 'AbortError');
93
+ }
94
+ //# sourceMappingURL=semaphore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semaphore.js","sourceRoot":"","sources":["../../src/providers/semaphore.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/agents",
3
- "version": "0.45.0",
3
+ "version": "0.47.0",
4
4
  "description": "Agent catalog, routing, prompts and fragment library for the Agent Architecture Board.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -33,7 +33,7 @@
33
33
  "valibot": "^1.4.2",
34
34
  "@cat-factory/contracts": "0.118.0",
35
35
  "@cat-factory/kernel": "0.108.0",
36
- "@cat-factory/prompt-fragments": "0.12.0"
36
+ "@cat-factory/prompt-fragments": "0.13.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "typescript": "7.0.1-rc",