@cat-factory/agents 0.7.2 → 0.8.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/agents/kinds/registry.d.ts +43 -2
- package/dist/agents/kinds/registry.d.ts.map +1 -1
- package/dist/agents/kinds/registry.js +28 -2
- package/dist/agents/kinds/registry.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/repo-ops/render.d.ts +90 -0
- package/dist/repo-ops/render.d.ts.map +1 -0
- package/dist/repo-ops/render.js +471 -0
- package/dist/repo-ops/render.js.map +1 -0
- package/package.json +8 -5
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { AgentConfigDescriptor, AgentKind, AgentRunContext } from '@cat-factory/kernel';
|
|
1
|
+
import type { AgentConfigDescriptor, AgentKind, AgentRunContext, AgentStepSpec, RepoOp } from '@cat-factory/kernel';
|
|
2
|
+
import type { AgentPresentation } from '@cat-factory/contracts';
|
|
2
3
|
import type { AgentTrait } from './traits.js';
|
|
3
4
|
export interface AgentKindDefinition {
|
|
4
5
|
/** The free-form agent-kind id used in pipelines and steps (e.g. `security-auditor`). */
|
|
@@ -46,6 +47,34 @@ export interface AgentKindDefinition {
|
|
|
46
47
|
* their own traits registered via `registerAgentTrait`. Omitted ⇒ no traits.
|
|
47
48
|
*/
|
|
48
49
|
traits?: AgentTrait[];
|
|
50
|
+
/**
|
|
51
|
+
* The optional LLM step's execution surface + output/clone spec (inline, or a
|
|
52
|
+
* container explore/coding run). Present ⇒ the kind runs an agent step; omitted ⇒ the
|
|
53
|
+
* kind is pure pre/post-op work (no LLM). A container surface implies the kind needs a
|
|
54
|
+
* checkout — see {@link registeredKindRequiresContainer}, which now also derives the
|
|
55
|
+
* container requirement from this — so `requiresContainer` need not be set alongside it.
|
|
56
|
+
*/
|
|
57
|
+
agent?: AgentStepSpec;
|
|
58
|
+
/**
|
|
59
|
+
* Deterministic backend operations run BEFORE the agent step (over a checkout-free
|
|
60
|
+
* {@link RepoOp} context): read a baseline artifact into the prompt, etc. Plain TS,
|
|
61
|
+
* runs on the backend — never in the container. Omitted ⇒ no pre-op.
|
|
62
|
+
*/
|
|
63
|
+
preOps?: RepoOp[];
|
|
64
|
+
/**
|
|
65
|
+
* Deterministic backend operations run AFTER the agent step, consuming its structured
|
|
66
|
+
* result: render artifact files and commit them via the RepoFiles port (the
|
|
67
|
+
* blueprint/spec renderers live in `repo-ops/render.ts`). Plain TS — never in the
|
|
68
|
+
* container. Omitted ⇒ no post-op.
|
|
69
|
+
*/
|
|
70
|
+
postOps?: RepoOp[];
|
|
71
|
+
/**
|
|
72
|
+
* Frontend display metadata (label / icon / colour / category / result view). The
|
|
73
|
+
* server serialises this into the workspace snapshot so a registered kind becomes a
|
|
74
|
+
* first-class palette block instead of the generic fallback. Omitted ⇒ the SPA renders
|
|
75
|
+
* the kind with its generic fallback metadata.
|
|
76
|
+
*/
|
|
77
|
+
presentation?: AgentPresentation;
|
|
49
78
|
}
|
|
50
79
|
/** Register a custom agent kind. A later registration of the same id replaces the earlier one. */
|
|
51
80
|
export declare function registerAgentKind(definition: AgentKindDefinition): void;
|
|
@@ -55,7 +84,11 @@ export declare function registerAgentKinds(definitions: Iterable<AgentKindDefini
|
|
|
55
84
|
export declare function registeredAgentKind(kind: AgentKind): AgentKindDefinition | undefined;
|
|
56
85
|
/** All registered custom agent kinds (registration order). */
|
|
57
86
|
export declare function registeredAgentKinds(): AgentKindDefinition[];
|
|
58
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Whether a registered kind runs in a container — either it set `requiresContainer`
|
|
89
|
+
* explicitly, or its `agent` step declares a container surface. False for built-in /
|
|
90
|
+
* unregistered kinds.
|
|
91
|
+
*/
|
|
59
92
|
export declare function registeredKindRequiresContainer(kind: AgentKind): boolean;
|
|
60
93
|
/** Drop all registered kinds. Intended for tests that exercise registration. */
|
|
61
94
|
export declare function clearRegisteredAgentKinds(): void;
|
|
@@ -67,4 +100,12 @@ export declare function registeredUserPrompt(context: AgentRunContext): string |
|
|
|
67
100
|
export declare function registeredWebResearchHint(kind: AgentKind): string | undefined;
|
|
68
101
|
/** A registered kind's contributed config descriptors, or an empty array when none. */
|
|
69
102
|
export declare function registeredConfigContributions(kind: AgentKind): AgentConfigDescriptor[];
|
|
103
|
+
/** A registered kind's agent-step spec (surface/output/clone), or undefined when none. */
|
|
104
|
+
export declare function registeredAgentStep(kind: AgentKind): AgentStepSpec | undefined;
|
|
105
|
+
/** A registered kind's pre-op hooks (run before the agent step), or an empty array. */
|
|
106
|
+
export declare function registeredPreOps(kind: AgentKind): RepoOp[];
|
|
107
|
+
/** A registered kind's post-op hooks (run after the agent step), or an empty array. */
|
|
108
|
+
export declare function registeredPostOps(kind: AgentKind): RepoOp[];
|
|
109
|
+
/** A registered kind's frontend presentation metadata, or undefined when not supplied. */
|
|
110
|
+
export declare function registeredAgentPresentation(kind: AgentKind): AgentPresentation | undefined;
|
|
70
111
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,aAAa,EACb,MAAM,EACP,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAY7C,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,CAAA;IACpD;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,MAAM,CAAA;IACjD;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAC7C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;IACrB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC;AAOD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAEvE;AAED,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAEnF;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAEpF;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,IAAI,mBAAmB,EAAE,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAMxE;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEjF;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED,uFAAuF;AACvF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,EAAE,CAEtF;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS,CAE9E;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAE1D;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,CAE3D;AAED,0FAA0F;AAC1F,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAE1F"}
|
|
@@ -19,9 +19,19 @@ export function registeredAgentKind(kind) {
|
|
|
19
19
|
export function registeredAgentKinds() {
|
|
20
20
|
return [...registry.values()];
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Whether a registered kind runs in a container — either it set `requiresContainer`
|
|
24
|
+
* explicitly, or its `agent` step declares a container surface. False for built-in /
|
|
25
|
+
* unregistered kinds.
|
|
26
|
+
*/
|
|
23
27
|
export function registeredKindRequiresContainer(kind) {
|
|
24
|
-
|
|
28
|
+
const definition = registry.get(kind);
|
|
29
|
+
if (!definition)
|
|
30
|
+
return false;
|
|
31
|
+
if (definition.requiresContainer === true)
|
|
32
|
+
return true;
|
|
33
|
+
const surface = definition.agent?.surface;
|
|
34
|
+
return surface === 'container-explore' || surface === 'container-coding';
|
|
25
35
|
}
|
|
26
36
|
/** Drop all registered kinds. Intended for tests that exercise registration. */
|
|
27
37
|
export function clearRegisteredAgentKinds() {
|
|
@@ -48,4 +58,20 @@ export function registeredWebResearchHint(kind) {
|
|
|
48
58
|
export function registeredConfigContributions(kind) {
|
|
49
59
|
return registry.get(kind)?.configContributions ?? [];
|
|
50
60
|
}
|
|
61
|
+
/** A registered kind's agent-step spec (surface/output/clone), or undefined when none. */
|
|
62
|
+
export function registeredAgentStep(kind) {
|
|
63
|
+
return registry.get(kind)?.agent;
|
|
64
|
+
}
|
|
65
|
+
/** A registered kind's pre-op hooks (run before the agent step), or an empty array. */
|
|
66
|
+
export function registeredPreOps(kind) {
|
|
67
|
+
return registry.get(kind)?.preOps ?? [];
|
|
68
|
+
}
|
|
69
|
+
/** A registered kind's post-op hooks (run after the agent step), or an empty array. */
|
|
70
|
+
export function registeredPostOps(kind) {
|
|
71
|
+
return registry.get(kind)?.postOps ?? [];
|
|
72
|
+
}
|
|
73
|
+
/** A registered kind's frontend presentation metadata, or undefined when not supplied. */
|
|
74
|
+
export function registeredAgentPresentation(kind) {
|
|
75
|
+
return registry.get(kind)?.presentation;
|
|
76
|
+
}
|
|
51
77
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agents/kinds/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { type InlineWebSearchOptions, DEFAULT_INLINE_WEB_SEARCH_KINDS, DEFAULT_I
|
|
|
3
3
|
export { type AgentModelConfig, type AgentRouting, type StepModelResolvers, type StepModelInputs, resolveAgentConfig, resolveStepModelRef, resolveInlineModelRef, } from './agents/runtime/routing.js';
|
|
4
4
|
export { systemPromptFor, userPromptFor } from './agents/catalog.js';
|
|
5
5
|
export { TASK_ESTIMATOR_AGENT_KIND } from './agents/prompts/roles.js';
|
|
6
|
-
export { type AgentKindDefinition, registerAgentKind, registerAgentKinds, registeredAgentKind, registeredAgentKinds, registeredKindRequiresContainer, registeredConfigContributions, clearRegisteredAgentKinds, } from './agents/kinds/registry.js';
|
|
6
|
+
export { type AgentKindDefinition, registerAgentKind, registerAgentKinds, registeredAgentKind, registeredAgentKinds, registeredKindRequiresContainer, registeredConfigContributions, registeredAgentStep, registeredPreOps, registeredPostOps, registeredAgentPresentation, clearRegisteredAgentKinds, } from './agents/kinds/registry.js';
|
|
7
7
|
export { type AgentTrait, type AgentTraitDefinition, CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT, SPEC_AWARE_GUIDANCE, STANDARD_AGENT_TRAITS, registerAgentTrait, registerAgentTraits, registeredAgentTrait, clearRegisteredAgentTraits, assignAgentTraits, clearAssignedAgentTraits, traitsFor, hasTrait, traitGuidanceFor, } from './agents/kinds/traits.js';
|
|
8
8
|
export { TESTER_ENVIRONMENT_CONFIG_ID, PLAYWRIGHT_E2E_TARGET_CONFIG_ID, configContributionsFor, configContributionCatalog, } from './agents/kinds/configs.js';
|
|
9
9
|
export { isTestingKind, testingSystemPrompt, testerEnvironmentSection, } from './agents/prompts/testing.js';
|
|
@@ -20,6 +20,7 @@ export { MOCK_AGENT_KIND, isMockKind, mockSystemPrompt } from './agents/prompts/
|
|
|
20
20
|
export { type BusinessLogicAgentKind, BUSINESS_LOGIC_AGENT_KINDS, BUSINESS_DOCUMENTER_KIND, BUSINESS_REVIEWER_KIND, BUSINESS_LOGIC_DOCS_DIR, isBusinessLogicKind, businessLogicSystemPrompt, } from './agents/prompts/business-logic.js';
|
|
21
21
|
export { PLATFORM_DELIVERY_CONTRACT } from './agents/prompts/delivery-contract.js';
|
|
22
22
|
export { FINAL_ANSWER_IN_REPLY, STANDARDS_FOOTER } from './agents/prompts/shared.js';
|
|
23
|
+
export { type RenderedFile, coerceBlueprintService, moduleSlug, canonicalBlueprintJson, hashBlueprint, renderBlueprintFiles, renderBlueprintVersionFile, nextBlueprintVersion, coerceSpecDoc, dedupeSpecIds, canonicalSpecJson, hashSpec, renderSpecFiles, renderSpecFeatureFiles, renderSpecVersionFile, nextSpecVersion, } from './repo-ops/render.js';
|
|
23
24
|
export { CompositeModelProvider, InstrumentedModelProvider, catFactoryObservability, type InlineObservabilityContext, type ModelResolver, type ProviderRegistry, anthropicResolver, baseProviderRegistry, cloudflareRestResolver, openAiCompatibleResolver, openAiResolver, DEEPSEEK_BASE_URL, DEFAULT_OPENAI_COMPATIBLE_BASE_URLS, MOONSHOT_BASE_URL, OPENAI_BASE_URL, OPENROUTER_BASE_URL, QWEN_BASE_URL, type CachePolicy, cachedTokensFromUsage, inlineCacheProviderOptions, promptCacheParams, providerCachePolicy, } from './providers/index.js';
|
|
24
25
|
export { FragmentLibraryService, type FragmentLibraryServiceDependencies, } from './fragmentLibrary/FragmentLibraryService.js';
|
|
25
26
|
export { FragmentSourceService, type FragmentSourceServiceDependencies, type ResolveFragmentInstallationId, } from './fragmentLibrary/FragmentSourceService.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAChG,OAAO,EACL,KAAK,sBAAsB,EAC3B,+BAA+B,EAC/B,kCAAkC,EAClC,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAIrE,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAC/B,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAA;AAGnC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,EACxB,SAAS,EACT,QAAQ,EACR,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,EAC/B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAE7F,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,GAC7B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,eAAe,GACrB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EACL,KAAK,aAAa,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,KAAK,mBAAmB,EACxB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,GACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AACxF,OAAO,EACL,KAAK,sBAAsB,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export { TASK_ESTIMATOR_AGENT_KIND } from './agents/prompts/roles.js';
|
|
|
6
6
|
// Installation-level extension point for custom agent kinds (mirrors the model-provider
|
|
7
7
|
// registry seam): a deployment registers extra kinds at startup and the prompt catalog +
|
|
8
8
|
// the Worker's executor routing pick them up.
|
|
9
|
-
export { registerAgentKind, registerAgentKinds, registeredAgentKind, registeredAgentKinds, registeredKindRequiresContainer, registeredConfigContributions, clearRegisteredAgentKinds, } from './agents/kinds/registry.js';
|
|
9
|
+
export { registerAgentKind, registerAgentKinds, registeredAgentKind, registeredAgentKinds, registeredKindRequiresContainer, registeredConfigContributions, registeredAgentStep, registeredPreOps, registeredPostOps, registeredAgentPresentation, clearRegisteredAgentKinds, } from './agents/kinds/registry.js';
|
|
10
10
|
// Agent capability traits (standard + custom). `code-aware` gates the engine's folding
|
|
11
11
|
// of the service's best-practice fragments; `spec-aware` appends the in-repo-spec guidance.
|
|
12
12
|
export { CODE_AWARE_TRAIT, SPEC_AWARE_TRAIT, SPEC_AWARE_GUIDANCE, STANDARD_AGENT_TRAITS, registerAgentTrait, registerAgentTraits, registeredAgentTrait, clearRegisteredAgentTraits, assignAgentTraits, clearAssignedAgentTraits, traitsFor, hasTrait, traitGuidanceFor, } from './agents/kinds/traits.js';
|
|
@@ -30,6 +30,11 @@ export { MOCK_AGENT_KIND, isMockKind, mockSystemPrompt } from './agents/prompts/
|
|
|
30
30
|
export { BUSINESS_LOGIC_AGENT_KINDS, BUSINESS_DOCUMENTER_KIND, BUSINESS_REVIEWER_KIND, BUSINESS_LOGIC_DOCS_DIR, isBusinessLogicKind, businessLogicSystemPrompt, } from './agents/prompts/business-logic.js';
|
|
31
31
|
export { PLATFORM_DELIVERY_CONTRACT } from './agents/prompts/delivery-contract.js';
|
|
32
32
|
export { FINAL_ANSWER_IN_REPLY, STANDARDS_FOOTER } from './agents/prompts/shared.js';
|
|
33
|
+
// Deterministic, container-free rendering + lenient coercion of the in-repo
|
|
34
|
+
// `blueprints/`/`spec/` artifacts (lifted out of the executor-harness image). Invoked
|
|
35
|
+
// from an agent's post-op: coerce the model's JSON, render the files, commit via the
|
|
36
|
+
// RepoFiles port. Pure functions — same input → same bytes.
|
|
37
|
+
export { coerceBlueprintService, moduleSlug, canonicalBlueprintJson, hashBlueprint, renderBlueprintFiles, renderBlueprintVersionFile, nextBlueprintVersion, coerceSpecDoc, dedupeSpecIds, canonicalSpecJson, hashSpec, renderSpecFiles, renderSpecFeatureFiles, renderSpecVersionFile, nextSpecVersion, } from './repo-ops/render.js';
|
|
33
38
|
// The generic AI provisioning facade: a mixable provider registry + the base,
|
|
34
39
|
// runtime-neutral resolvers. Optional/heavier backends ship as their own packages
|
|
35
40
|
// (e.g. @cat-factory/provider-bedrock) and are mixed into a CompositeModelProvider.
|
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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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type BlueprintService, type BlueprintVersion, type SpecDoc, type SpecVersion } from '@cat-factory/contracts';
|
|
2
|
+
/** A repo-relative file to write (path + UTF-8 content). */
|
|
3
|
+
export interface RenderedFile {
|
|
4
|
+
path: string;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Coerce an agent's parsed JSON into a well-formed {@link BlueprintService},
|
|
9
|
+
* dropping anything malformed. Returns null when no usable service name remains.
|
|
10
|
+
* Tolerates either a bare service object or `{ service: {...} }`. The strict Valibot
|
|
11
|
+
* `parseBlueprintService` re-validates the result before it touches the board.
|
|
12
|
+
*/
|
|
13
|
+
export declare function coerceBlueprintService(parsed: unknown, fallbackName: string): BlueprintService | null;
|
|
14
|
+
/** Turn a module name into a stable, filesystem-safe slug for its deep-dive file. */
|
|
15
|
+
export declare function moduleSlug(name: string): string;
|
|
16
|
+
/** The exact canonical JSON bytes written to `blueprint.json` (and hashed). */
|
|
17
|
+
export declare function canonicalBlueprintJson(service: BlueprintService): string;
|
|
18
|
+
/** A stable content hash of the blueprint tree, used for quick staleness checks. */
|
|
19
|
+
export declare function hashBlueprint(service: BlueprintService): Promise<string>;
|
|
20
|
+
/** Render the lightweight `version.json` manifest for `service`. */
|
|
21
|
+
export declare function renderBlueprintVersionFile(service: BlueprintService, meta: {
|
|
22
|
+
version: number;
|
|
23
|
+
generatedAt: string;
|
|
24
|
+
}): Promise<RenderedFile>;
|
|
25
|
+
/**
|
|
26
|
+
* Decide the version manifest for a freshly generated tree: when the content is
|
|
27
|
+
* byte-identical to the previous generation the version + timestamp are kept (so an
|
|
28
|
+
* unchanged blueprint produces no diff and no commit); otherwise the counter is
|
|
29
|
+
* bumped and the timestamp refreshed.
|
|
30
|
+
*/
|
|
31
|
+
export declare function nextBlueprintVersion(service: BlueprintService, previous: BlueprintVersion | null, now: Date): Promise<{
|
|
32
|
+
version: number;
|
|
33
|
+
generatedAt: string;
|
|
34
|
+
}>;
|
|
35
|
+
/**
|
|
36
|
+
* Deterministically render a blueprint tree into the in-repo artifact files: the
|
|
37
|
+
* canonical `blueprint.json`, a high-level `overview.md` (service + each module with
|
|
38
|
+
* a one-line summary — what agents read first), and one `modules/<slug>.md` deep-dive
|
|
39
|
+
* per module (summary + code references). Pure: same tree → same bytes.
|
|
40
|
+
*/
|
|
41
|
+
export declare function renderBlueprintFiles(service: BlueprintService): RenderedFile[];
|
|
42
|
+
/**
|
|
43
|
+
* Force every requirement / acceptance / rule id in the doc to be globally unique (in
|
|
44
|
+
* place), suffixing `-2`, `-3` … on collision — the same scheme the feature-file slugs
|
|
45
|
+
* use. Ids double as Gherkin scenario / test names and provenance anchors, so
|
|
46
|
+
* duplicates would otherwise silently alias. Deterministic: same tree → same ids.
|
|
47
|
+
*/
|
|
48
|
+
export declare function dedupeSpecIds(doc: SpecDoc): void;
|
|
49
|
+
/**
|
|
50
|
+
* Coerce an agent's parsed JSON into a well-formed {@link SpecDoc}, dropping anything
|
|
51
|
+
* malformed. Returns null when no usable service name remains. Tolerates either a bare
|
|
52
|
+
* doc object or `{ requirements: {...} }`. The strict `parseSpecDoc` re-validates the
|
|
53
|
+
* returned doc before use.
|
|
54
|
+
*/
|
|
55
|
+
export declare function coerceSpecDoc(parsed: unknown, fallbackName: string): SpecDoc | null;
|
|
56
|
+
/** The exact canonical JSON bytes written to `spec.json` (and hashed). */
|
|
57
|
+
export declare function canonicalSpecJson(doc: SpecDoc): string;
|
|
58
|
+
/** A stable content hash of the spec doc, used for quick staleness checks. */
|
|
59
|
+
export declare function hashSpec(doc: SpecDoc): Promise<string>;
|
|
60
|
+
/** Render the lightweight `version.json` manifest for `doc`. */
|
|
61
|
+
export declare function renderSpecVersionFile(doc: SpecDoc, meta: {
|
|
62
|
+
version: number;
|
|
63
|
+
generatedAt: string;
|
|
64
|
+
}): Promise<RenderedFile>;
|
|
65
|
+
/**
|
|
66
|
+
* Decide the version manifest for a freshly generated doc: when the content is
|
|
67
|
+
* byte-identical to the previous generation the version + timestamp are kept (so an
|
|
68
|
+
* unchanged doc produces no diff and no commit); otherwise the counter is bumped and
|
|
69
|
+
* the timestamp refreshed. Mirrors {@link nextBlueprintVersion}.
|
|
70
|
+
*/
|
|
71
|
+
export declare function nextSpecVersion(doc: SpecDoc, previous: SpecVersion | null, now: Date): Promise<{
|
|
72
|
+
version: number;
|
|
73
|
+
generatedAt: string;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* Deterministically render a spec doc into the in-repo artifact files: the canonical
|
|
77
|
+
* `spec.json`, a high-level `overview.md` (intent + every group's requirements), and a
|
|
78
|
+
* `rules.md` of the cross-cutting domain rules. Pure: same doc → same bytes.
|
|
79
|
+
*/
|
|
80
|
+
export declare function renderSpecFiles(doc: SpecDoc): RenderedFile[];
|
|
81
|
+
/**
|
|
82
|
+
* Pass-1 (mechanical) Gherkin render: one `.feature` file per requirement group, one
|
|
83
|
+
* `Scenario` per acceptance criterion. Deterministic (same doc → same bytes), so the
|
|
84
|
+
* feature files can never silently drift from `spec.json`; a `must` requirement's
|
|
85
|
+
* scenarios are tagged `@must`. The `acceptance` agent later polishes these (pass 2).
|
|
86
|
+
* Groups with no acceptance criteria produce no feature file. The caller seeds these
|
|
87
|
+
* once (writes only when absent) so pass-2 polish survives a re-run.
|
|
88
|
+
*/
|
|
89
|
+
export declare function renderSpecFeatureFiles(doc: SpecDoc): RenderedFile[];
|
|
90
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/repo-ops/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAMrB,KAAK,OAAO,EACZ,KAAK,WAAW,EAUjB,MAAM,wBAAwB,CAAA;AAkB/B,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAyDD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,MAAM,GACnB,gBAAgB,GAAG,IAAI,CAqBzB;AAED,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAExE;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE;AAED,oEAAoE;AACpE,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,YAAY,CAAC,CAQvB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,EACjC,GAAG,EAAE,IAAI,GACR,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAKnD;AAOD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAqC9E;AA2HD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAShD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAsBnF;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtD;AAMD,gEAAgE;AAChE,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,YAAY,CAAC,CASvB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,GAAG,EAAE,IAAI,GACR,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAKnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,CA6C5D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,CAiCnE"}
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { BLUEPRINT_JSON_PATH, BLUEPRINT_MODULES_DIR, BLUEPRINT_OVERVIEW_PATH, BLUEPRINT_VERSION_PATH, SPEC_FEATURES_DIR, SPEC_JSON_PATH, SPEC_OVERVIEW_PATH, SPEC_RULES_PATH, SPEC_VERSION_PATH, } from '@cat-factory/contracts';
|
|
2
|
+
/** SHA-256 hex digest — Web Crypto, runs on both runtimes. */
|
|
3
|
+
async function sha256Hex(input) {
|
|
4
|
+
const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(input));
|
|
5
|
+
return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
6
|
+
}
|
|
7
|
+
function asString(value) {
|
|
8
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
9
|
+
}
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Blueprint (service → modules)
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Coercion limits, mirroring the board-scan schema so a committed blueprint can
|
|
14
|
+
// never balloon past what the board/schema accept.
|
|
15
|
+
const MAX_MODULES = 40;
|
|
16
|
+
const MAX_REFERENCES = 40;
|
|
17
|
+
// The board frame types a service may present as. Kept in lockstep with
|
|
18
|
+
// @cat-factory/contracts `blockTypeSchema`.
|
|
19
|
+
const BLOCK_TYPES = [
|
|
20
|
+
'frontend',
|
|
21
|
+
'service',
|
|
22
|
+
'api',
|
|
23
|
+
'database',
|
|
24
|
+
'queue',
|
|
25
|
+
'integration',
|
|
26
|
+
'external',
|
|
27
|
+
'environment',
|
|
28
|
+
];
|
|
29
|
+
function coerceReferences(value) {
|
|
30
|
+
if (!Array.isArray(value))
|
|
31
|
+
return [];
|
|
32
|
+
const seen = new Set();
|
|
33
|
+
for (const raw of value) {
|
|
34
|
+
const path = asString(raw);
|
|
35
|
+
if (path)
|
|
36
|
+
seen.add(path);
|
|
37
|
+
if (seen.size >= MAX_REFERENCES)
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
return [...seen];
|
|
41
|
+
}
|
|
42
|
+
function coerceModule(value) {
|
|
43
|
+
if (typeof value !== 'object' || value === null)
|
|
44
|
+
return null;
|
|
45
|
+
const obj = value;
|
|
46
|
+
const name = asString(obj.name);
|
|
47
|
+
if (!name)
|
|
48
|
+
return null;
|
|
49
|
+
return {
|
|
50
|
+
name,
|
|
51
|
+
summary: asString(obj.summary) ?? '',
|
|
52
|
+
references: coerceReferences(obj.references),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Coerce an agent's parsed JSON into a well-formed {@link BlueprintService},
|
|
57
|
+
* dropping anything malformed. Returns null when no usable service name remains.
|
|
58
|
+
* Tolerates either a bare service object or `{ service: {...} }`. The strict Valibot
|
|
59
|
+
* `parseBlueprintService` re-validates the result before it touches the board.
|
|
60
|
+
*/
|
|
61
|
+
export function coerceBlueprintService(parsed, fallbackName) {
|
|
62
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
63
|
+
return null;
|
|
64
|
+
const root = parsed;
|
|
65
|
+
const obj = typeof root.service === 'object' && root.service !== null
|
|
66
|
+
? root.service
|
|
67
|
+
: root;
|
|
68
|
+
const name = asString(obj.name) ?? asString(fallbackName);
|
|
69
|
+
if (!name)
|
|
70
|
+
return null;
|
|
71
|
+
const type = BLOCK_TYPES.includes(obj.type) ? obj.type : 'service';
|
|
72
|
+
const modules = (Array.isArray(obj.modules) ? obj.modules : [])
|
|
73
|
+
.map(coerceModule)
|
|
74
|
+
.filter((m) => m !== null)
|
|
75
|
+
.slice(0, MAX_MODULES);
|
|
76
|
+
return {
|
|
77
|
+
type,
|
|
78
|
+
name,
|
|
79
|
+
summary: asString(obj.summary) ?? '',
|
|
80
|
+
references: coerceReferences(obj.references),
|
|
81
|
+
modules,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Turn a module name into a stable, filesystem-safe slug for its deep-dive file. */
|
|
85
|
+
export function moduleSlug(name) {
|
|
86
|
+
const slug = name
|
|
87
|
+
.toLowerCase()
|
|
88
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
89
|
+
.replace(/^-+|-+$/g, '');
|
|
90
|
+
return slug || 'module';
|
|
91
|
+
}
|
|
92
|
+
/** The exact canonical JSON bytes written to `blueprint.json` (and hashed). */
|
|
93
|
+
export function canonicalBlueprintJson(service) {
|
|
94
|
+
return `${JSON.stringify(service, null, 2)}\n`;
|
|
95
|
+
}
|
|
96
|
+
/** A stable content hash of the blueprint tree, used for quick staleness checks. */
|
|
97
|
+
export function hashBlueprint(service) {
|
|
98
|
+
return sha256Hex(canonicalBlueprintJson(service));
|
|
99
|
+
}
|
|
100
|
+
/** Render the lightweight `version.json` manifest for `service`. */
|
|
101
|
+
export async function renderBlueprintVersionFile(service, meta) {
|
|
102
|
+
const manifest = {
|
|
103
|
+
version: meta.version,
|
|
104
|
+
generatedAt: meta.generatedAt,
|
|
105
|
+
hash: await hashBlueprint(service),
|
|
106
|
+
modules: (service.modules ?? []).length,
|
|
107
|
+
};
|
|
108
|
+
return { path: BLUEPRINT_VERSION_PATH, content: `${JSON.stringify(manifest, null, 2)}\n` };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Decide the version manifest for a freshly generated tree: when the content is
|
|
112
|
+
* byte-identical to the previous generation the version + timestamp are kept (so an
|
|
113
|
+
* unchanged blueprint produces no diff and no commit); otherwise the counter is
|
|
114
|
+
* bumped and the timestamp refreshed.
|
|
115
|
+
*/
|
|
116
|
+
export async function nextBlueprintVersion(service, previous, now) {
|
|
117
|
+
if (previous && previous.hash === (await hashBlueprint(service))) {
|
|
118
|
+
return { version: previous.version, generatedAt: previous.generatedAt };
|
|
119
|
+
}
|
|
120
|
+
return { version: (previous?.version ?? 0) + 1, generatedAt: now.toISOString() };
|
|
121
|
+
}
|
|
122
|
+
function renderReferences(references) {
|
|
123
|
+
if (references.length === 0)
|
|
124
|
+
return [];
|
|
125
|
+
return ['', '**Code references:**', ...references.map((r) => `- \`${r}\``)];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Deterministically render a blueprint tree into the in-repo artifact files: the
|
|
129
|
+
* canonical `blueprint.json`, a high-level `overview.md` (service + each module with
|
|
130
|
+
* a one-line summary — what agents read first), and one `modules/<slug>.md` deep-dive
|
|
131
|
+
* per module (summary + code references). Pure: same tree → same bytes.
|
|
132
|
+
*/
|
|
133
|
+
export function renderBlueprintFiles(service) {
|
|
134
|
+
const files = [];
|
|
135
|
+
const modules = service.modules ?? [];
|
|
136
|
+
files.push({ path: BLUEPRINT_JSON_PATH, content: canonicalBlueprintJson(service) });
|
|
137
|
+
const overview = [`# ${service.name}`, ''];
|
|
138
|
+
overview.push('> Generated service blueprint. Read this overview first for the');
|
|
139
|
+
overview.push('> high-level structure; open `modules/<name>.md` only for a module');
|
|
140
|
+
overview.push('> directly relevant to your task.');
|
|
141
|
+
overview.push('');
|
|
142
|
+
if (service.summary)
|
|
143
|
+
overview.push(service.summary, '');
|
|
144
|
+
if (modules.length === 0) {
|
|
145
|
+
overview.push('_No modules mapped yet._');
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
overview.push('## Modules', '');
|
|
149
|
+
for (const m of modules) {
|
|
150
|
+
const slug = moduleSlug(m.name);
|
|
151
|
+
overview.push(`### [${m.name}](modules/${slug}.md)`);
|
|
152
|
+
if (m.summary)
|
|
153
|
+
overview.push('', m.summary);
|
|
154
|
+
overview.push('');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
files.push({ path: BLUEPRINT_OVERVIEW_PATH, content: `${overview.join('\n').trimEnd()}\n` });
|
|
158
|
+
for (const m of modules) {
|
|
159
|
+
const slug = moduleSlug(m.name);
|
|
160
|
+
const lines = [`# ${m.name}`, ''];
|
|
161
|
+
if (m.summary)
|
|
162
|
+
lines.push(m.summary, '');
|
|
163
|
+
lines.push(...renderReferences(m.references ?? []));
|
|
164
|
+
files.push({
|
|
165
|
+
path: `${BLUEPRINT_MODULES_DIR}/${slug}.md`,
|
|
166
|
+
content: `${lines.join('\n').trimEnd()}\n`,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return files;
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Spec (service → groups → requirements → acceptance, + domain rules)
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
const MAX_GROUPS = 40;
|
|
175
|
+
const MAX_REQUIREMENTS_PER_GROUP = 60;
|
|
176
|
+
const MAX_ACCEPTANCE = 20;
|
|
177
|
+
const MAX_RULES = 100;
|
|
178
|
+
const PRIORITIES = ['must', 'should', 'could'];
|
|
179
|
+
const KINDS = ['functional', 'nonfunctional', 'constraint'];
|
|
180
|
+
function slugify(name, fallback) {
|
|
181
|
+
const slug = name
|
|
182
|
+
.toLowerCase()
|
|
183
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
184
|
+
.replace(/^-+|-+$/g, '');
|
|
185
|
+
return slug || fallback;
|
|
186
|
+
}
|
|
187
|
+
function coerceStringList(value, max) {
|
|
188
|
+
if (!Array.isArray(value))
|
|
189
|
+
return [];
|
|
190
|
+
const out = [];
|
|
191
|
+
for (const raw of value) {
|
|
192
|
+
const s = asString(raw);
|
|
193
|
+
if (s)
|
|
194
|
+
out.push(s);
|
|
195
|
+
if (out.length >= max)
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
return out;
|
|
199
|
+
}
|
|
200
|
+
// A fallback acceptance id is derived deterministically from its owning requirement
|
|
201
|
+
// id + position (`<reqId>-ac-<n>`), so the SAME doc always renders the SAME bytes — no
|
|
202
|
+
// module-global counter that leaks state across calls. A model-supplied id still wins.
|
|
203
|
+
function coerceAcceptance(value, reqId, index) {
|
|
204
|
+
if (typeof value !== 'object' || value === null)
|
|
205
|
+
return null;
|
|
206
|
+
const o = value;
|
|
207
|
+
const given = typeof o.given === 'string' ? o.given.trim() : '';
|
|
208
|
+
const when = typeof o.when === 'string' ? o.when.trim() : '';
|
|
209
|
+
// Accept either `outcome` (canonical) or a model-emitted `then` as the Then clause.
|
|
210
|
+
const outcome = typeof o.outcome === 'string'
|
|
211
|
+
? o.outcome.trim()
|
|
212
|
+
: typeof o.then === 'string'
|
|
213
|
+
? o.then.trim()
|
|
214
|
+
: '';
|
|
215
|
+
// A criterion with no Then clause is not testable; drop it.
|
|
216
|
+
if (outcome === '')
|
|
217
|
+
return null;
|
|
218
|
+
return { id: asString(o.id) ?? `${reqId}-ac-${index + 1}`, given, when, outcome };
|
|
219
|
+
}
|
|
220
|
+
function coerceRequirement(value, index) {
|
|
221
|
+
if (typeof value !== 'object' || value === null)
|
|
222
|
+
return null;
|
|
223
|
+
const o = value;
|
|
224
|
+
const title = asString(o.title);
|
|
225
|
+
const statement = asString(o.statement) ?? asString(o.title);
|
|
226
|
+
if (!statement)
|
|
227
|
+
return null;
|
|
228
|
+
const priority = PRIORITIES.includes(o.priority)
|
|
229
|
+
? o.priority
|
|
230
|
+
: 'should';
|
|
231
|
+
const kind = KINDS.includes(o.kind)
|
|
232
|
+
? o.kind
|
|
233
|
+
: 'functional';
|
|
234
|
+
const id = asString(o.id) ?? `req-${slugify(title ?? statement.slice(0, 40), `${index + 1}`)}`;
|
|
235
|
+
const acceptance = (Array.isArray(o.acceptance) ? o.acceptance : [])
|
|
236
|
+
.map((a, i) => coerceAcceptance(a, id, i))
|
|
237
|
+
.filter((a) => a !== null)
|
|
238
|
+
.slice(0, MAX_ACCEPTANCE);
|
|
239
|
+
return {
|
|
240
|
+
id,
|
|
241
|
+
title: title ?? statement.slice(0, 120),
|
|
242
|
+
statement,
|
|
243
|
+
kind,
|
|
244
|
+
priority,
|
|
245
|
+
sourceBlockIds: coerceStringList(o.sourceBlockIds, 40),
|
|
246
|
+
acceptance,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function coerceGroup(value) {
|
|
250
|
+
if (typeof value !== 'object' || value === null)
|
|
251
|
+
return null;
|
|
252
|
+
const o = value;
|
|
253
|
+
const name = asString(o.name);
|
|
254
|
+
if (!name)
|
|
255
|
+
return null;
|
|
256
|
+
const requirements = (Array.isArray(o.requirements) ? o.requirements : [])
|
|
257
|
+
.map((r, i) => coerceRequirement(r, i))
|
|
258
|
+
.filter((r) => r !== null)
|
|
259
|
+
.slice(0, MAX_REQUIREMENTS_PER_GROUP);
|
|
260
|
+
return { name, summary: asString(o.summary) ?? '', requirements };
|
|
261
|
+
}
|
|
262
|
+
function coerceRule(value, index) {
|
|
263
|
+
if (typeof value !== 'object' || value === null)
|
|
264
|
+
return null;
|
|
265
|
+
const o = value;
|
|
266
|
+
const rule = asString(o.rule);
|
|
267
|
+
if (!rule)
|
|
268
|
+
return null;
|
|
269
|
+
return {
|
|
270
|
+
id: asString(o.id) ?? `rule-${index + 1}`,
|
|
271
|
+
rule,
|
|
272
|
+
rationale: asString(o.rationale) ?? '',
|
|
273
|
+
sourceBlockIds: coerceStringList(o.sourceBlockIds, 40),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/** Return `id` if unseen, else the first `id-2` / `id-3` … not already in `used`. */
|
|
277
|
+
function uniqueId(id, used) {
|
|
278
|
+
if (!used.has(id)) {
|
|
279
|
+
used.add(id);
|
|
280
|
+
return id;
|
|
281
|
+
}
|
|
282
|
+
let n = 2;
|
|
283
|
+
while (used.has(`${id}-${n}`))
|
|
284
|
+
n++;
|
|
285
|
+
const unique = `${id}-${n}`;
|
|
286
|
+
used.add(unique);
|
|
287
|
+
return unique;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Force every requirement / acceptance / rule id in the doc to be globally unique (in
|
|
291
|
+
* place), suffixing `-2`, `-3` … on collision — the same scheme the feature-file slugs
|
|
292
|
+
* use. Ids double as Gherkin scenario / test names and provenance anchors, so
|
|
293
|
+
* duplicates would otherwise silently alias. Deterministic: same tree → same ids.
|
|
294
|
+
*/
|
|
295
|
+
export function dedupeSpecIds(doc) {
|
|
296
|
+
const used = new Set();
|
|
297
|
+
for (const g of doc.groups ?? []) {
|
|
298
|
+
for (const r of g.requirements ?? []) {
|
|
299
|
+
r.id = uniqueId(r.id, used);
|
|
300
|
+
for (const a of r.acceptance ?? [])
|
|
301
|
+
a.id = uniqueId(a.id, used);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
for (const rule of doc.rules ?? [])
|
|
305
|
+
rule.id = uniqueId(rule.id, used);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Coerce an agent's parsed JSON into a well-formed {@link SpecDoc}, dropping anything
|
|
309
|
+
* malformed. Returns null when no usable service name remains. Tolerates either a bare
|
|
310
|
+
* doc object or `{ requirements: {...} }`. The strict `parseSpecDoc` re-validates the
|
|
311
|
+
* returned doc before use.
|
|
312
|
+
*/
|
|
313
|
+
export function coerceSpecDoc(parsed, fallbackName) {
|
|
314
|
+
if (typeof parsed !== 'object' || parsed === null)
|
|
315
|
+
return null;
|
|
316
|
+
const root = parsed;
|
|
317
|
+
const obj = typeof root.requirements === 'object' &&
|
|
318
|
+
root.requirements !== null &&
|
|
319
|
+
!Array.isArray(root.requirements)
|
|
320
|
+
? root.requirements
|
|
321
|
+
: root;
|
|
322
|
+
const service = asString(obj.service) ?? asString(fallbackName);
|
|
323
|
+
if (!service)
|
|
324
|
+
return null;
|
|
325
|
+
const groups = (Array.isArray(obj.groups) ? obj.groups : [])
|
|
326
|
+
.map(coerceGroup)
|
|
327
|
+
.filter((g) => g !== null)
|
|
328
|
+
.slice(0, MAX_GROUPS);
|
|
329
|
+
const rules = (Array.isArray(obj.rules) ? obj.rules : [])
|
|
330
|
+
.map((r, i) => coerceRule(r, i))
|
|
331
|
+
.filter((r) => r !== null)
|
|
332
|
+
.slice(0, MAX_RULES);
|
|
333
|
+
const doc = { service, summary: asString(obj.summary) ?? '', groups, rules };
|
|
334
|
+
dedupeSpecIds(doc);
|
|
335
|
+
return doc;
|
|
336
|
+
}
|
|
337
|
+
/** The exact canonical JSON bytes written to `spec.json` (and hashed). */
|
|
338
|
+
export function canonicalSpecJson(doc) {
|
|
339
|
+
return `${JSON.stringify(doc, null, 2)}\n`;
|
|
340
|
+
}
|
|
341
|
+
/** A stable content hash of the spec doc, used for quick staleness checks. */
|
|
342
|
+
export function hashSpec(doc) {
|
|
343
|
+
return sha256Hex(canonicalSpecJson(doc));
|
|
344
|
+
}
|
|
345
|
+
function countRequirements(doc) {
|
|
346
|
+
return (doc.groups ?? []).reduce((n, g) => n + (g.requirements ?? []).length, 0);
|
|
347
|
+
}
|
|
348
|
+
/** Render the lightweight `version.json` manifest for `doc`. */
|
|
349
|
+
export async function renderSpecVersionFile(doc, meta) {
|
|
350
|
+
const manifest = {
|
|
351
|
+
version: meta.version,
|
|
352
|
+
generatedAt: meta.generatedAt,
|
|
353
|
+
hash: await hashSpec(doc),
|
|
354
|
+
requirements: countRequirements(doc),
|
|
355
|
+
rules: (doc.rules ?? []).length,
|
|
356
|
+
};
|
|
357
|
+
return { path: SPEC_VERSION_PATH, content: `${JSON.stringify(manifest, null, 2)}\n` };
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Decide the version manifest for a freshly generated doc: when the content is
|
|
361
|
+
* byte-identical to the previous generation the version + timestamp are kept (so an
|
|
362
|
+
* unchanged doc produces no diff and no commit); otherwise the counter is bumped and
|
|
363
|
+
* the timestamp refreshed. Mirrors {@link nextBlueprintVersion}.
|
|
364
|
+
*/
|
|
365
|
+
export async function nextSpecVersion(doc, previous, now) {
|
|
366
|
+
if (previous && previous.hash === (await hashSpec(doc))) {
|
|
367
|
+
return { version: previous.version, generatedAt: previous.generatedAt };
|
|
368
|
+
}
|
|
369
|
+
return { version: (previous?.version ?? 0) + 1, generatedAt: now.toISOString() };
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Deterministically render a spec doc into the in-repo artifact files: the canonical
|
|
373
|
+
* `spec.json`, a high-level `overview.md` (intent + every group's requirements), and a
|
|
374
|
+
* `rules.md` of the cross-cutting domain rules. Pure: same doc → same bytes.
|
|
375
|
+
*/
|
|
376
|
+
export function renderSpecFiles(doc) {
|
|
377
|
+
const files = [];
|
|
378
|
+
const groups = doc.groups ?? [];
|
|
379
|
+
const domainRules = doc.rules ?? [];
|
|
380
|
+
files.push({ path: SPEC_JSON_PATH, content: canonicalSpecJson(doc) });
|
|
381
|
+
const overview = [`# ${doc.service} — Requirements`, ''];
|
|
382
|
+
overview.push('> Generated, prescriptive requirements for this service (what MUST be');
|
|
383
|
+
overview.push('> true). Read this first. `rules.md` lists cross-cutting invariants;');
|
|
384
|
+
overview.push('> `features/*.feature` are the acceptance scenarios your work must satisfy.');
|
|
385
|
+
overview.push('');
|
|
386
|
+
if (doc.summary)
|
|
387
|
+
overview.push(doc.summary, '');
|
|
388
|
+
if (groups.length === 0) {
|
|
389
|
+
overview.push('_No requirements captured yet._');
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
for (const g of groups) {
|
|
393
|
+
overview.push(`## ${g.name}`);
|
|
394
|
+
if (g.summary)
|
|
395
|
+
overview.push('', g.summary);
|
|
396
|
+
overview.push('');
|
|
397
|
+
for (const r of g.requirements ?? []) {
|
|
398
|
+
overview.push(`- **${r.title}** _(${r.priority}, ${r.kind})_ — ${r.statement}`);
|
|
399
|
+
for (const a of r.acceptance ?? []) {
|
|
400
|
+
overview.push(` - _Given_ ${a.given} _When_ ${a.when} _Then_ ${a.outcome}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
overview.push('');
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
files.push({ path: SPEC_OVERVIEW_PATH, content: `${overview.join('\n').trimEnd()}\n` });
|
|
407
|
+
const rules = [`# ${doc.service} — Domain rules`, ''];
|
|
408
|
+
rules.push('> Cross-cutting invariants and constraints this service must never violate.');
|
|
409
|
+
rules.push('');
|
|
410
|
+
if (domainRules.length === 0) {
|
|
411
|
+
rules.push('_No domain rules captured yet._');
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
for (const r of domainRules) {
|
|
415
|
+
rules.push(`- **${r.rule}**`);
|
|
416
|
+
if (r.rationale)
|
|
417
|
+
rules.push(` - _Why:_ ${r.rationale}`);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
files.push({ path: SPEC_RULES_PATH, content: `${rules.join('\n').trimEnd()}\n` });
|
|
421
|
+
return files;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Pass-1 (mechanical) Gherkin render: one `.feature` file per requirement group, one
|
|
425
|
+
* `Scenario` per acceptance criterion. Deterministic (same doc → same bytes), so the
|
|
426
|
+
* feature files can never silently drift from `spec.json`; a `must` requirement's
|
|
427
|
+
* scenarios are tagged `@must`. The `acceptance` agent later polishes these (pass 2).
|
|
428
|
+
* Groups with no acceptance criteria produce no feature file. The caller seeds these
|
|
429
|
+
* once (writes only when absent) so pass-2 polish survives a re-run.
|
|
430
|
+
*/
|
|
431
|
+
export function renderSpecFeatureFiles(doc) {
|
|
432
|
+
const files = [];
|
|
433
|
+
const used = new Set();
|
|
434
|
+
for (const g of doc.groups ?? []) {
|
|
435
|
+
const scenarios = [];
|
|
436
|
+
for (const r of g.requirements ?? []) {
|
|
437
|
+
const acceptance = r.acceptance ?? [];
|
|
438
|
+
for (let i = 0; i < acceptance.length; i++) {
|
|
439
|
+
const a = acceptance[i];
|
|
440
|
+
const name = acceptance.length > 1 ? `${r.title} (#${i + 1})` : r.title;
|
|
441
|
+
if (r.priority === 'must')
|
|
442
|
+
scenarios.push(' @must');
|
|
443
|
+
scenarios.push(` Scenario: ${name}`);
|
|
444
|
+
if (a.given)
|
|
445
|
+
scenarios.push(` Given ${a.given}`);
|
|
446
|
+
if (a.when)
|
|
447
|
+
scenarios.push(` When ${a.when}`);
|
|
448
|
+
scenarios.push(` Then ${a.outcome}`);
|
|
449
|
+
scenarios.push('');
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (scenarios.length === 0)
|
|
453
|
+
continue;
|
|
454
|
+
let slug = slugify(g.name, 'feature');
|
|
455
|
+
let n = 2;
|
|
456
|
+
while (used.has(slug))
|
|
457
|
+
slug = `${slugify(g.name, 'feature')}-${n++}`;
|
|
458
|
+
used.add(slug);
|
|
459
|
+
const lines = [`Feature: ${g.name}`];
|
|
460
|
+
if (g.summary)
|
|
461
|
+
lines.push(` ${g.summary}`);
|
|
462
|
+
lines.push('');
|
|
463
|
+
lines.push(...scenarios);
|
|
464
|
+
files.push({
|
|
465
|
+
path: `${SPEC_FEATURES_DIR}/${slug}.feature`,
|
|
466
|
+
content: `${lines.join('\n').trimEnd()}\n`,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
return files;
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/repo-ops/render.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.8.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/kibertoad/cat-factory.git",
|
|
@@ -29,16 +29,19 @@
|
|
|
29
29
|
"@ai-sdk/openai-compatible": "^2.0.51",
|
|
30
30
|
"ai": "^6.0.208",
|
|
31
31
|
"handlebars": "^4.7.9",
|
|
32
|
-
"@cat-factory/contracts": "0.
|
|
33
|
-
"@cat-factory/kernel": "0.
|
|
34
|
-
"@cat-factory/prompt-fragments": "0.7.
|
|
32
|
+
"@cat-factory/contracts": "0.8.0",
|
|
33
|
+
"@cat-factory/kernel": "0.8.0",
|
|
34
|
+
"@cat-factory/prompt-fragments": "0.7.3"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"typescript": "7.0.1-rc"
|
|
37
|
+
"typescript": "7.0.1-rc",
|
|
38
|
+
"vitest": "^4.1.9"
|
|
38
39
|
},
|
|
39
40
|
"scripts": {
|
|
40
41
|
"build": "tsc -b tsconfig.build.json",
|
|
41
42
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
43
|
+
"test": "vitest run",
|
|
44
|
+
"test:run": "vitest run",
|
|
42
45
|
"precompile:templates": "node scripts/precompile-prompts.mjs"
|
|
43
46
|
}
|
|
44
47
|
}
|