@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 +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/presets/docs-refresh/preset.d.ts +4 -10
- package/dist/presets/docs-refresh/preset.d.ts.map +1 -1
- package/dist/presets/docs-refresh/preset.js +8 -58
- package/dist/presets/docs-refresh/preset.js.map +1 -1
- package/dist/presets/plan-helpers.d.ts +29 -0
- package/dist/presets/plan-helpers.d.ts.map +1 -0
- package/dist/presets/plan-helpers.js +65 -0
- package/dist/presets/plan-helpers.js.map +1 -0
- package/dist/presets/tech-migration/seed-plan.d.ts +19 -0
- package/dist/presets/tech-migration/seed-plan.d.ts.map +1 -0
- package/dist/presets/tech-migration/seed-plan.js +207 -0
- package/dist/presets/tech-migration/seed-plan.js.map +1 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/limited.d.ts +48 -0
- package/dist/providers/limited.d.ts.map +1 -0
- package/dist/providers/limited.js +158 -0
- package/dist/providers/limited.js.map +1 -0
- package/dist/providers/semaphore.d.ts +25 -0
- package/dist/providers/semaphore.d.ts.map +1 -0
- package/dist/providers/semaphore.js +94 -0
- package/dist/providers/semaphore.js.map +1 -0
- package/package.json +2 -2
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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 —
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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;
|
|
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,
|
|
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 {
|
|
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 —
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
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
|
-
|
|
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
|
-
...
|
|
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":"AAOA,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,YAAY,EACZ,wBAAwB,
|
|
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"}
|
package/dist/providers/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
36
|
+
"@cat-factory/prompt-fragments": "0.13.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"typescript": "7.0.1-rc",
|