@telora/factory 0.4.5
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/audit.d.ts +69 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +376 -0
- package/dist/audit.js.map +1 -0
- package/dist/builder-completion.d.ts +35 -0
- package/dist/builder-completion.d.ts.map +1 -0
- package/dist/builder-completion.js +375 -0
- package/dist/builder-completion.js.map +1 -0
- package/dist/builder-spawner.d.ts +40 -0
- package/dist/builder-spawner.d.ts.map +1 -0
- package/dist/builder-spawner.js +493 -0
- package/dist/builder-spawner.js.map +1 -0
- package/dist/completion-gate.d.ts +52 -0
- package/dist/completion-gate.d.ts.map +1 -0
- package/dist/completion-gate.js +336 -0
- package/dist/completion-gate.js.map +1 -0
- package/dist/completion-report.d.ts +36 -0
- package/dist/completion-report.d.ts.map +1 -0
- package/dist/completion-report.js +348 -0
- package/dist/completion-report.js.map +1 -0
- package/dist/completion.d.ts +58 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +287 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/context-manager.d.ts +152 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +421 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/crash-detection.d.ts +70 -0
- package/dist/crash-detection.d.ts.map +1 -0
- package/dist/crash-detection.js +123 -0
- package/dist/crash-detection.js.map +1 -0
- package/dist/crash-recovery.d.ts +83 -0
- package/dist/crash-recovery.d.ts.map +1 -0
- package/dist/crash-recovery.js +522 -0
- package/dist/crash-recovery.js.map +1 -0
- package/dist/crash-resolution.d.ts +34 -0
- package/dist/crash-resolution.d.ts.map +1 -0
- package/dist/crash-resolution.js +382 -0
- package/dist/crash-resolution.js.map +1 -0
- package/dist/escalation.d.ts +150 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +352 -0
- package/dist/escalation.js.map +1 -0
- package/dist/execution-target.d.ts +31 -0
- package/dist/execution-target.d.ts.map +1 -0
- package/dist/execution-target.js +71 -0
- package/dist/execution-target.js.map +1 -0
- package/dist/execution-unit-init.d.ts +28 -0
- package/dist/execution-unit-init.d.ts.map +1 -0
- package/dist/execution-unit-init.js +115 -0
- package/dist/execution-unit-init.js.map +1 -0
- package/dist/execution.d.ts +17 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +20 -0
- package/dist/execution.js.map +1 -0
- package/dist/factory-engine.d.ts +100 -0
- package/dist/factory-engine.d.ts.map +1 -0
- package/dist/factory-engine.js +243 -0
- package/dist/factory-engine.js.map +1 -0
- package/dist/gap-detection.d.ts +43 -0
- package/dist/gap-detection.d.ts.map +1 -0
- package/dist/gap-detection.js +149 -0
- package/dist/gap-detection.js.map +1 -0
- package/dist/gate-context.d.ts +23 -0
- package/dist/gate-context.d.ts.map +1 -0
- package/dist/gate-context.js +63 -0
- package/dist/gate-context.js.map +1 -0
- package/dist/gate-engine.d.ts +55 -0
- package/dist/gate-engine.d.ts.map +1 -0
- package/dist/gate-engine.js +191 -0
- package/dist/gate-engine.js.map +1 -0
- package/dist/gates/adversarial.d.ts +59 -0
- package/dist/gates/adversarial.d.ts.map +1 -0
- package/dist/gates/adversarial.js +426 -0
- package/dist/gates/adversarial.js.map +1 -0
- package/dist/gates/adversary-spawner.d.ts +35 -0
- package/dist/gates/adversary-spawner.d.ts.map +1 -0
- package/dist/gates/adversary-spawner.js +286 -0
- package/dist/gates/adversary-spawner.js.map +1 -0
- package/dist/gates/adversary-test-dir.d.ts +41 -0
- package/dist/gates/adversary-test-dir.d.ts.map +1 -0
- package/dist/gates/adversary-test-dir.js +150 -0
- package/dist/gates/adversary-test-dir.js.map +1 -0
- package/dist/gates/behavioral-parser.d.ts +32 -0
- package/dist/gates/behavioral-parser.d.ts.map +1 -0
- package/dist/gates/behavioral-parser.js +190 -0
- package/dist/gates/behavioral-parser.js.map +1 -0
- package/dist/gates/behavioral-runner.d.ts +36 -0
- package/dist/gates/behavioral-runner.d.ts.map +1 -0
- package/dist/gates/behavioral-runner.js +306 -0
- package/dist/gates/behavioral-runner.js.map +1 -0
- package/dist/gates/behavioral.d.ts +37 -0
- package/dist/gates/behavioral.d.ts.map +1 -0
- package/dist/gates/behavioral.js +485 -0
- package/dist/gates/behavioral.js.map +1 -0
- package/dist/gates/deterministic.d.ts +24 -0
- package/dist/gates/deterministic.d.ts.map +1 -0
- package/dist/gates/deterministic.js +186 -0
- package/dist/gates/deterministic.js.map +1 -0
- package/dist/git-factory.d.ts +59 -0
- package/dist/git-factory.d.ts.map +1 -0
- package/dist/git-factory.js +102 -0
- package/dist/git-factory.js.map +1 -0
- package/dist/guard-evaluation.d.ts +48 -0
- package/dist/guard-evaluation.d.ts.map +1 -0
- package/dist/guard-evaluation.js +416 -0
- package/dist/guard-evaluation.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-completion.d.ts +34 -0
- package/dist/instance-completion.d.ts.map +1 -0
- package/dist/instance-completion.js +366 -0
- package/dist/instance-completion.js.map +1 -0
- package/dist/instance-lifecycle.d.ts +15 -0
- package/dist/instance-lifecycle.d.ts.map +1 -0
- package/dist/instance-lifecycle.js +18 -0
- package/dist/instance-lifecycle.js.map +1 -0
- package/dist/instance-phase-dispatch.d.ts +75 -0
- package/dist/instance-phase-dispatch.d.ts.map +1 -0
- package/dist/instance-phase-dispatch.js +674 -0
- package/dist/instance-phase-dispatch.js.map +1 -0
- package/dist/instance-poll-loop.d.ts +43 -0
- package/dist/instance-poll-loop.d.ts.map +1 -0
- package/dist/instance-poll-loop.js +360 -0
- package/dist/instance-poll-loop.js.map +1 -0
- package/dist/instance-state-machine.d.ts +52 -0
- package/dist/instance-state-machine.d.ts.map +1 -0
- package/dist/instance-state-machine.js +235 -0
- package/dist/instance-state-machine.js.map +1 -0
- package/dist/log-manager.d.ts +28 -0
- package/dist/log-manager.d.ts.map +1 -0
- package/dist/log-manager.js +71 -0
- package/dist/log-manager.js.map +1 -0
- package/dist/pipeline-evaluator.d.ts +61 -0
- package/dist/pipeline-evaluator.d.ts.map +1 -0
- package/dist/pipeline-evaluator.js +107 -0
- package/dist/pipeline-evaluator.js.map +1 -0
- package/dist/pipeline-metrics.d.ts +52 -0
- package/dist/pipeline-metrics.d.ts.map +1 -0
- package/dist/pipeline-metrics.js +40 -0
- package/dist/pipeline-metrics.js.map +1 -0
- package/dist/pipeline-traversal.d.ts +43 -0
- package/dist/pipeline-traversal.d.ts.map +1 -0
- package/dist/pipeline-traversal.js +68 -0
- package/dist/pipeline-traversal.js.map +1 -0
- package/dist/plan-parser.d.ts +76 -0
- package/dist/plan-parser.d.ts.map +1 -0
- package/dist/plan-parser.js +223 -0
- package/dist/plan-parser.js.map +1 -0
- package/dist/planning-phase.d.ts +52 -0
- package/dist/planning-phase.d.ts.map +1 -0
- package/dist/planning-phase.js +444 -0
- package/dist/planning-phase.js.map +1 -0
- package/dist/planning-prompt.d.ts +64 -0
- package/dist/planning-prompt.d.ts.map +1 -0
- package/dist/planning-prompt.js +251 -0
- package/dist/planning-prompt.js.map +1 -0
- package/dist/planning.d.ts +16 -0
- package/dist/planning.d.ts.map +1 -0
- package/dist/planning.js +17 -0
- package/dist/planning.js.map +1 -0
- package/dist/process-runner.d.ts +41 -0
- package/dist/process-runner.d.ts.map +1 -0
- package/dist/process-runner.js +81 -0
- package/dist/process-runner.js.map +1 -0
- package/dist/product-config.d.ts +34 -0
- package/dist/product-config.d.ts.map +1 -0
- package/dist/product-config.js +43 -0
- package/dist/product-config.js.map +1 -0
- package/dist/queries/cycle-evaluations.d.ts +23 -0
- package/dist/queries/cycle-evaluations.d.ts.map +1 -0
- package/dist/queries/cycle-evaluations.js +37 -0
- package/dist/queries/cycle-evaluations.js.map +1 -0
- package/dist/queries/escalations.d.ts +30 -0
- package/dist/queries/escalations.d.ts.map +1 -0
- package/dist/queries/escalations.js +42 -0
- package/dist/queries/escalations.js.map +1 -0
- package/dist/queries/execution-units.d.ts +76 -0
- package/dist/queries/execution-units.d.ts.map +1 -0
- package/dist/queries/execution-units.js +109 -0
- package/dist/queries/execution-units.js.map +1 -0
- package/dist/queries/gate-results.d.ts +32 -0
- package/dist/queries/gate-results.d.ts.map +1 -0
- package/dist/queries/gate-results.js +44 -0
- package/dist/queries/gate-results.js.map +1 -0
- package/dist/queries/instances.d.ts +51 -0
- package/dist/queries/instances.d.ts.map +1 -0
- package/dist/queries/instances.js +77 -0
- package/dist/queries/instances.js.map +1 -0
- package/dist/queries/sessions.d.ts +50 -0
- package/dist/queries/sessions.d.ts.map +1 -0
- package/dist/queries/sessions.js +81 -0
- package/dist/queries/sessions.js.map +1 -0
- package/dist/queries/shared.d.ts +38 -0
- package/dist/queries/shared.d.ts.map +1 -0
- package/dist/queries/shared.js +119 -0
- package/dist/queries/shared.js.map +1 -0
- package/dist/queries/specs.d.ts +12 -0
- package/dist/queries/specs.d.ts.map +1 -0
- package/dist/queries/specs.js +21 -0
- package/dist/queries/specs.js.map +1 -0
- package/dist/queries/strategies.d.ts +14 -0
- package/dist/queries/strategies.d.ts.map +1 -0
- package/dist/queries/strategies.js +18 -0
- package/dist/queries/strategies.js.map +1 -0
- package/dist/queries/work-units.d.ts +42 -0
- package/dist/queries/work-units.d.ts.map +1 -0
- package/dist/queries/work-units.js +57 -0
- package/dist/queries/work-units.js.map +1 -0
- package/dist/queries/workflows.d.ts +29 -0
- package/dist/queries/workflows.d.ts.map +1 -0
- package/dist/queries/workflows.js +103 -0
- package/dist/queries/workflows.js.map +1 -0
- package/dist/remediation-units.d.ts +40 -0
- package/dist/remediation-units.d.ts.map +1 -0
- package/dist/remediation-units.js +263 -0
- package/dist/remediation-units.js.map +1 -0
- package/dist/replanning.d.ts +72 -0
- package/dist/replanning.d.ts.map +1 -0
- package/dist/replanning.js +403 -0
- package/dist/replanning.js.map +1 -0
- package/dist/resource-limits.d.ts +62 -0
- package/dist/resource-limits.d.ts.map +1 -0
- package/dist/resource-limits.js +322 -0
- package/dist/resource-limits.js.map +1 -0
- package/dist/scheduler.d.ts +98 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +203 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/session-adapter.d.ts +89 -0
- package/dist/session-adapter.d.ts.map +1 -0
- package/dist/session-adapter.js +108 -0
- package/dist/session-adapter.js.map +1 -0
- package/dist/sop-generator.d.ts +29 -0
- package/dist/sop-generator.d.ts.map +1 -0
- package/dist/sop-generator.js +235 -0
- package/dist/sop-generator.js.map +1 -0
- package/dist/spec-profiles.d.ts +41 -0
- package/dist/spec-profiles.d.ts.map +1 -0
- package/dist/spec-profiles.js +131 -0
- package/dist/spec-profiles.js.map +1 -0
- package/dist/strategy-design-graph.d.ts +23 -0
- package/dist/strategy-design-graph.d.ts.map +1 -0
- package/dist/strategy-design-graph.js +205 -0
- package/dist/strategy-design-graph.js.map +1 -0
- package/dist/strategy-design-prompt.d.ts +28 -0
- package/dist/strategy-design-prompt.d.ts.map +1 -0
- package/dist/strategy-design-prompt.js +108 -0
- package/dist/strategy-design-prompt.js.map +1 -0
- package/dist/strategy-design-schema.d.ts +767 -0
- package/dist/strategy-design-schema.d.ts.map +1 -0
- package/dist/strategy-design-schema.js +126 -0
- package/dist/strategy-design-schema.js.map +1 -0
- package/dist/strategy-design.d.ts +69 -0
- package/dist/strategy-design.d.ts.map +1 -0
- package/dist/strategy-design.js +411 -0
- package/dist/strategy-design.js.map +1 -0
- package/dist/strategy-gating.d.ts +31 -0
- package/dist/strategy-gating.d.ts.map +1 -0
- package/dist/strategy-gating.js +276 -0
- package/dist/strategy-gating.js.map +1 -0
- package/dist/team-prompt-builder.d.ts +47 -0
- package/dist/team-prompt-builder.d.ts.map +1 -0
- package/dist/team-prompt-builder.js +362 -0
- package/dist/team-prompt-builder.js.map +1 -0
- package/dist/trace-engine.d.ts +40 -0
- package/dist/trace-engine.d.ts.map +1 -0
- package/dist/trace-engine.js +344 -0
- package/dist/trace-engine.js.map +1 -0
- package/dist/types.d.ts +612 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/unit-session-lifecycle.d.ts +78 -0
- package/dist/unit-session-lifecycle.d.ts.map +1 -0
- package/dist/unit-session-lifecycle.js +141 -0
- package/dist/unit-session-lifecycle.js.map +1 -0
- package/dist/unit-session.d.ts +30 -0
- package/dist/unit-session.d.ts.map +1 -0
- package/dist/unit-session.js +370 -0
- package/dist/unit-session.js.map +1 -0
- package/dist/watchdogs.d.ts +33 -0
- package/dist/watchdogs.d.ts.map +1 -0
- package/dist/watchdogs.js +170 -0
- package/dist/watchdogs.js.map +1 -0
- package/dist/work-unit-scheduler.d.ts +34 -0
- package/dist/work-unit-scheduler.d.ts.map +1 -0
- package/dist/work-unit-scheduler.js +91 -0
- package/dist/work-unit-scheduler.js.map +1 -0
- package/dist/workflow-transition.d.ts +90 -0
- package/dist/workflow-transition.d.ts.map +1 -0
- package/dist/workflow-transition.js +340 -0
- package/dist/workflow-transition.js.map +1 -0
- package/package.json +65 -0
package/dist/audit.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-planning codebase audit module.
|
|
3
|
+
*
|
|
4
|
+
* Runs a structured discovery phase that scans the codebase for existing
|
|
5
|
+
* implementations relevant to the specification. The audit produces a
|
|
6
|
+
* report that gets injected into the planning prompt so the planner knows
|
|
7
|
+
* what already exists, what is partially built, and what is truly missing.
|
|
8
|
+
*
|
|
9
|
+
* The audit is best-effort: if it fails for any reason (timeout, parse error,
|
|
10
|
+
* empty output), planning proceeds without the audit report.
|
|
11
|
+
*/
|
|
12
|
+
import type { ResourceGovernor } from '@telora/daemon-core';
|
|
13
|
+
import type { AuditReport, FactoryBlueprint, FactoryConfig } from './types.js';
|
|
14
|
+
import type { PersistedStrategy } from './strategy-design.js';
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the audit timeout from blueprint config.
|
|
17
|
+
* - null field → use default (180s)
|
|
18
|
+
* - 0 → no limit (returns null)
|
|
19
|
+
* - positive → that value
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveAuditTimeout(blueprint: FactoryBlueprint): number | null;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the audit max report chars from blueprint config.
|
|
24
|
+
* - null field → use default (8000)
|
|
25
|
+
* - 0 → no limit (returns null)
|
|
26
|
+
* - positive → that value
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveAuditMaxReportChars(blueprint: FactoryBlueprint): number | null;
|
|
29
|
+
/**
|
|
30
|
+
* Build the prompt that instructs Claude Code to audit the codebase
|
|
31
|
+
* against the specification.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildAuditPrompt(specification: string, blueprint: FactoryBlueprint): string;
|
|
34
|
+
/**
|
|
35
|
+
* Build a scoped audit prompt that focuses on a specific strategy's
|
|
36
|
+
* relevant files and scope rather than the entire codebase.
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildScopedAuditPrompt(strategy: PersistedStrategy, specification: string, blueprint: FactoryBlueprint): string;
|
|
39
|
+
/**
|
|
40
|
+
* Run a scoped codebase audit for a single strategy.
|
|
41
|
+
*
|
|
42
|
+
* Focuses the audit on the strategy's technical context and relevant files
|
|
43
|
+
* rather than scanning the entire codebase. Best-effort: returns null on
|
|
44
|
+
* any failure so planning can proceed without it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function runScopedCodebaseAudit(worktreePath: string, strategy: PersistedStrategy, specification: string, blueprint: FactoryBlueprint, config: FactoryConfig, governor?: ResourceGovernor | null): Promise<AuditReport | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Run a codebase audit by spawning Claude Code in --print mode.
|
|
49
|
+
*
|
|
50
|
+
* Returns a validated AuditReport on success, or null on ANY failure.
|
|
51
|
+
* This function is designed to be best-effort: it never throws and
|
|
52
|
+
* always returns null on failure so planning can proceed without it.
|
|
53
|
+
*
|
|
54
|
+
* @param worktreePath Path to the git worktree (cwd for Claude Code)
|
|
55
|
+
* @param specification The factory instance specification text
|
|
56
|
+
* @param blueprint The factory blueprint (for operational notes)
|
|
57
|
+
* @param config Factory configuration
|
|
58
|
+
* @returns Validated AuditReport or null on failure
|
|
59
|
+
*/
|
|
60
|
+
export declare function runCodebaseAudit(worktreePath: string, specification: string, blueprint: FactoryBlueprint, config: FactoryConfig, governor?: ResourceGovernor | null): Promise<AuditReport | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Format a validated AuditReport as human-readable markdown suitable for
|
|
63
|
+
* injection into the planning prompt.
|
|
64
|
+
*
|
|
65
|
+
* Respects the MAX_REPORT_CHARS budget to avoid blowing up the planning
|
|
66
|
+
* prompt context window.
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatAuditReport(report: AuditReport, blueprint: FactoryBlueprint): string;
|
|
69
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA6C9D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAIrF;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,gBAAgB,GAC1B,MAAM,CAiFR;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,gBAAgB,GAC1B,MAAM,CA8FR;AAMD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAyF7B;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA4F7B;AAMD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAmE1F"}
|
package/dist/audit.js
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-planning codebase audit module.
|
|
3
|
+
*
|
|
4
|
+
* Runs a structured discovery phase that scans the codebase for existing
|
|
5
|
+
* implementations relevant to the specification. The audit produces a
|
|
6
|
+
* report that gets injected into the planning prompt so the planner knows
|
|
7
|
+
* what already exists, what is partially built, and what is truly missing.
|
|
8
|
+
*
|
|
9
|
+
* The audit is best-effort: if it fails for any reason (timeout, parse error,
|
|
10
|
+
* empty output), planning proceeds without the audit report.
|
|
11
|
+
*/
|
|
12
|
+
import { spawnAsync } from './process-runner.js';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { buildPlanningEnv, extractWorkPlanJson } from './planning.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Constants
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/** Default timeout for the audit Claude Code session (3 minutes -- shorter than planning). */
|
|
19
|
+
const DEFAULT_AUDIT_TIMEOUT_MS = 180_000;
|
|
20
|
+
/** Default maximum character length of the formatted audit report to avoid prompt bloat. */
|
|
21
|
+
const DEFAULT_MAX_REPORT_CHARS = 8_000;
|
|
22
|
+
/** Log prefix for this module. */
|
|
23
|
+
const LOG_PREFIX = '[audit]';
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Zod schemas
|
|
26
|
+
// ============================================================================
|
|
27
|
+
const AuditEntrySchema = z.object({
|
|
28
|
+
area: z.string().min(1),
|
|
29
|
+
description: z.string().min(1),
|
|
30
|
+
relevantFiles: z.array(z.string()),
|
|
31
|
+
confidence: z.enum(['high', 'medium', 'low']),
|
|
32
|
+
});
|
|
33
|
+
const AuditConflictSchema = z.object({
|
|
34
|
+
area: z.string().min(1),
|
|
35
|
+
existingBehavior: z.string().min(1),
|
|
36
|
+
specifiedBehavior: z.string().min(1),
|
|
37
|
+
relevantFiles: z.array(z.string()),
|
|
38
|
+
});
|
|
39
|
+
const AuditReportSchema = z.object({
|
|
40
|
+
existingImplementations: z.array(AuditEntrySchema),
|
|
41
|
+
partialImplementations: z.array(AuditEntrySchema),
|
|
42
|
+
gaps: z.array(AuditEntrySchema),
|
|
43
|
+
conflicts: z.array(AuditConflictSchema),
|
|
44
|
+
summary: z.string().min(1),
|
|
45
|
+
});
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Blueprint-driven config resolution
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the audit timeout from blueprint config.
|
|
51
|
+
* - null field → use default (180s)
|
|
52
|
+
* - 0 → no limit (returns null)
|
|
53
|
+
* - positive → that value
|
|
54
|
+
*/
|
|
55
|
+
export function resolveAuditTimeout(blueprint) {
|
|
56
|
+
if (blueprint.auditTimeoutMs === 0)
|
|
57
|
+
return null;
|
|
58
|
+
if (blueprint.auditTimeoutMs !== null && blueprint.auditTimeoutMs !== undefined)
|
|
59
|
+
return blueprint.auditTimeoutMs;
|
|
60
|
+
return DEFAULT_AUDIT_TIMEOUT_MS;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the audit max report chars from blueprint config.
|
|
64
|
+
* - null field → use default (8000)
|
|
65
|
+
* - 0 → no limit (returns null)
|
|
66
|
+
* - positive → that value
|
|
67
|
+
*/
|
|
68
|
+
export function resolveAuditMaxReportChars(blueprint) {
|
|
69
|
+
if (blueprint.auditMaxReportChars === 0)
|
|
70
|
+
return null;
|
|
71
|
+
if (blueprint.auditMaxReportChars !== null && blueprint.auditMaxReportChars !== undefined)
|
|
72
|
+
return blueprint.auditMaxReportChars;
|
|
73
|
+
return DEFAULT_MAX_REPORT_CHARS;
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Audit prompt builder
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Build the prompt that instructs Claude Code to audit the codebase
|
|
80
|
+
* against the specification.
|
|
81
|
+
*/
|
|
82
|
+
export function buildAuditPrompt(specification, blueprint) {
|
|
83
|
+
const parts = [
|
|
84
|
+
'You are a codebase auditor for a software factory system.',
|
|
85
|
+
'Your task is to analyze the EXISTING codebase in the current working directory',
|
|
86
|
+
'against the following specification and produce a structured audit report.',
|
|
87
|
+
'',
|
|
88
|
+
'## Specification',
|
|
89
|
+
specification,
|
|
90
|
+
];
|
|
91
|
+
if (blueprint.operationalNotes) {
|
|
92
|
+
parts.push('', '## Operational Notes (focus areas)', blueprint.operationalNotes);
|
|
93
|
+
}
|
|
94
|
+
if (blueprint.specConstraints) {
|
|
95
|
+
parts.push('', '## Blueprint Infrastructure Requirements', 'The following requirements are mandated by the factory blueprint and take precedence', 'over spec requirements. Do NOT report conflicts or gaps for items covered here.', '', blueprint.specConstraints);
|
|
96
|
+
}
|
|
97
|
+
parts.push('', '## Instructions', '', 'Scan the codebase thoroughly:', '1. Identify features/components from the specification that are ALREADY FULLY implemented', '2. Identify features that are PARTIALLY implemented (started but incomplete)', '3. Identify features that are complete GAPS (nothing exists yet)', '4. Flag any CONFLICTS where existing code contradicts the specification', '', 'For each entry, list the relevant file paths and your confidence level.', '', '## Audit Scope', 'Report gaps for FUNCTIONAL REQUIREMENTS only -- things specified but not built.', 'Do NOT report as gaps:', '- Test coverage or missing test files (validated externally by the factory gate system)', '- TypeScript type correctness (validated by the deterministic gate: typecheck)', '- Build validity (validated by the deterministic gate: build)', '- Linting or code style (validated by the deterministic gate: lint)', '- E2E or behavioral correctness (validated by behavioral and adversarial gates)', 'If the factory gates pass, these dimensions are already verified. Only report gaps', 'where a functional feature described in the specification is absent from the codebase.', '', '## Output Format', 'Return ONLY a JSON object (no markdown fencing, no commentary) with this exact structure:', '```', '{', ' "existingImplementations": [', ' { "area": "Feature name", "description": "What exists", "relevantFiles": ["path/to/file.ts"], "confidence": "high" }', ' ],', ' "partialImplementations": [', ' { "area": "Feature name", "description": "What exists and what is missing", "relevantFiles": ["path/to/file.ts"], "confidence": "medium" }', ' ],', ' "gaps": [', ' { "area": "Feature name", "description": "What needs to be built", "relevantFiles": [], "confidence": "high" }', ' ],', ' "conflicts": [', ' { "area": "Feature name", "existingBehavior": "What the code does", "specifiedBehavior": "What the spec says", "relevantFiles": ["path/to/file.ts"] }', ' ],', ' "summary": "One-paragraph overview of audit findings"', '}', '```', '', 'Rules:', '- Every area must have a non-empty name and description', '- relevantFiles should contain actual file paths from the codebase', '- confidence: "high" = very sure, "medium" = fairly sure, "low" = uncertain', '- If no entries for a category, use an empty array []', '- Return ONLY the JSON object, nothing else');
|
|
98
|
+
return parts.join('\n');
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Scoped audit prompt builder (per-strategy)
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Build a scoped audit prompt that focuses on a specific strategy's
|
|
105
|
+
* relevant files and scope rather than the entire codebase.
|
|
106
|
+
*/
|
|
107
|
+
export function buildScopedAuditPrompt(strategy, specification, blueprint) {
|
|
108
|
+
const parts = [
|
|
109
|
+
'You are a codebase auditor for a software factory system.',
|
|
110
|
+
'Your task is to audit the EXISTING codebase scoped to a specific strategy.',
|
|
111
|
+
`Focus your analysis on the "${strategy.name}" strategy scope.`,
|
|
112
|
+
'',
|
|
113
|
+
'## Strategy Scope',
|
|
114
|
+
`**Name:** ${strategy.name}`,
|
|
115
|
+
];
|
|
116
|
+
if (strategy.description) {
|
|
117
|
+
parts.push(`**Description:** ${strategy.description}`);
|
|
118
|
+
}
|
|
119
|
+
if (strategy.techContext) {
|
|
120
|
+
parts.push('', '**Technical Context (focus areas):**', strategy.techContext);
|
|
121
|
+
}
|
|
122
|
+
parts.push('', '## Full Specification (for reference)', specification);
|
|
123
|
+
if (blueprint.operationalNotes) {
|
|
124
|
+
parts.push('', '## Operational Notes', blueprint.operationalNotes);
|
|
125
|
+
}
|
|
126
|
+
if (blueprint.specConstraints) {
|
|
127
|
+
parts.push('', '## Blueprint Infrastructure Requirements', 'The following requirements are mandated by the factory blueprint and take precedence', 'over spec requirements. Do NOT report conflicts or gaps for items covered here.', '', blueprint.specConstraints);
|
|
128
|
+
}
|
|
129
|
+
parts.push('', '## Instructions', '', `Focus your audit on the "${strategy.name}" strategy scope:`, '1. Identify features within this strategy that are ALREADY FULLY implemented', '2. Identify features that are PARTIALLY implemented', '3. Identify features that are complete GAPS', '4. Flag any CONFLICTS where existing code contradicts the specification', '', 'For each entry, list the relevant file paths and your confidence level.', '', '## Audit Scope', 'Report gaps for FUNCTIONAL REQUIREMENTS only -- things specified but not built.', 'Do NOT report as gaps:', '- Test coverage or missing test files (validated externally by the factory gate system)', '- TypeScript type correctness (validated by the deterministic gate: typecheck)', '- Build validity (validated by the deterministic gate: build)', '- Linting or code style (validated by the deterministic gate: lint)', '- E2E or behavioral correctness (validated by behavioral and adversarial gates)', 'Only report gaps where a functional feature described in the specification is absent.', '', '## Output Format', 'Return ONLY a JSON object (no markdown fencing, no commentary) with this exact structure:', '```', '{', ' "existingImplementations": [', ' { "area": "Feature name", "description": "What exists", "relevantFiles": ["path/to/file.ts"], "confidence": "high" }', ' ],', ' "partialImplementations": [', ' { "area": "Feature name", "description": "What exists and what is missing", "relevantFiles": ["path/to/file.ts"], "confidence": "medium" }', ' ],', ' "gaps": [', ' { "area": "Feature name", "description": "What needs to be built", "relevantFiles": [], "confidence": "high" }', ' ],', ' "conflicts": [', ' { "area": "Feature name", "existingBehavior": "What the code does", "specifiedBehavior": "What the spec says", "relevantFiles": ["path/to/file.ts"] }', ' ],', ' "summary": "One-paragraph overview of audit findings for this strategy"', '}', '```', '', 'Rules:', '- Every area must have a non-empty name and description', '- relevantFiles should contain actual file paths from the codebase', '- confidence: "high" = very sure, "medium" = fairly sure, "low" = uncertain', '- If no entries for a category, use an empty array []', '- Return ONLY the JSON object, nothing else');
|
|
130
|
+
return parts.join('\n');
|
|
131
|
+
}
|
|
132
|
+
// ============================================================================
|
|
133
|
+
// Scoped audit function (per-strategy)
|
|
134
|
+
// ============================================================================
|
|
135
|
+
/**
|
|
136
|
+
* Run a scoped codebase audit for a single strategy.
|
|
137
|
+
*
|
|
138
|
+
* Focuses the audit on the strategy's technical context and relevant files
|
|
139
|
+
* rather than scanning the entire codebase. Best-effort: returns null on
|
|
140
|
+
* any failure so planning can proceed without it.
|
|
141
|
+
*/
|
|
142
|
+
export async function runScopedCodebaseAudit(worktreePath, strategy, specification, blueprint, config, governor) {
|
|
143
|
+
const prompt = buildScopedAuditPrompt(strategy, specification, blueprint);
|
|
144
|
+
let rawOutput;
|
|
145
|
+
if (governor)
|
|
146
|
+
await governor.acquireSlot('factory');
|
|
147
|
+
try {
|
|
148
|
+
const args = ['--print', '--output-format', 'json', '--verbose'];
|
|
149
|
+
const env = buildPlanningEnv(config);
|
|
150
|
+
const timeoutMs = resolveAuditTimeout(blueprint);
|
|
151
|
+
console.log(`${LOG_PREFIX} Spawning scoped audit for strategy "${strategy.name}" ` +
|
|
152
|
+
`(timeout: ${timeoutMs === null ? 'none' : `${timeoutMs / 1000}s`})...`);
|
|
153
|
+
rawOutput = await spawnAsync(config.claudeCodePath, args, {
|
|
154
|
+
input: prompt,
|
|
155
|
+
encoding: 'utf-8',
|
|
156
|
+
timeout: timeoutMs ?? undefined,
|
|
157
|
+
cwd: worktreePath,
|
|
158
|
+
env,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const execErr = err;
|
|
163
|
+
if (execErr.killed || execErr.signal === 'SIGTERM') {
|
|
164
|
+
console.warn(`${LOG_PREFIX} Scoped audit for "${strategy.name}" timed out`);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
console.warn(`${LOG_PREFIX} Scoped audit for "${strategy.name}" failed: ${execErr.message ?? 'unknown error'}`);
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
if (governor)
|
|
173
|
+
governor.releaseSlot('factory');
|
|
174
|
+
}
|
|
175
|
+
if (!rawOutput || rawOutput.trim().length === 0) {
|
|
176
|
+
console.warn(`${LOG_PREFIX} Scoped audit for "${strategy.name}" returned empty output`);
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
let jsonStr;
|
|
180
|
+
try {
|
|
181
|
+
jsonStr = extractWorkPlanJson(rawOutput);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
console.warn(`${LOG_PREFIX} Failed to extract scoped audit JSON for "${strategy.name}": ` +
|
|
185
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
let parsedJson;
|
|
189
|
+
try {
|
|
190
|
+
parsedJson = JSON.parse(jsonStr);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
console.warn(`${LOG_PREFIX} Scoped audit output for "${strategy.name}" is not valid JSON: ` +
|
|
194
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
// Normalize: AI sometimes returns a bare array instead of an object.
|
|
198
|
+
if (Array.isArray(parsedJson)) {
|
|
199
|
+
if (parsedJson.length === 1 && typeof parsedJson[0] === 'object' && parsedJson[0] !== null && !Array.isArray(parsedJson[0])) {
|
|
200
|
+
parsedJson = parsedJson[0];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const validation = AuditReportSchema.safeParse(parsedJson);
|
|
204
|
+
if (!validation.success) {
|
|
205
|
+
const issues = validation.error.issues
|
|
206
|
+
.map((i) => `${i.path.join('.')}: ${i.message}`)
|
|
207
|
+
.join('; ');
|
|
208
|
+
const topKeys = typeof parsedJson === 'object' && parsedJson !== null ? Object.keys(parsedJson) : [];
|
|
209
|
+
console.warn(`${LOG_PREFIX} Scoped audit validation failed for "${strategy.name}": ${issues}`);
|
|
210
|
+
console.warn(`${LOG_PREFIX} Parsed object keys: [${topKeys}], preview: ${JSON.stringify(parsedJson).slice(0, 500)}`);
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
console.log(`${LOG_PREFIX} Scoped audit for "${strategy.name}" completed: ` +
|
|
214
|
+
`${validation.data.existingImplementations.length} existing, ` +
|
|
215
|
+
`${validation.data.partialImplementations.length} partial, ` +
|
|
216
|
+
`${validation.data.gaps.length} gaps`);
|
|
217
|
+
return validation.data;
|
|
218
|
+
}
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// Main audit function
|
|
221
|
+
// ============================================================================
|
|
222
|
+
/**
|
|
223
|
+
* Run a codebase audit by spawning Claude Code in --print mode.
|
|
224
|
+
*
|
|
225
|
+
* Returns a validated AuditReport on success, or null on ANY failure.
|
|
226
|
+
* This function is designed to be best-effort: it never throws and
|
|
227
|
+
* always returns null on failure so planning can proceed without it.
|
|
228
|
+
*
|
|
229
|
+
* @param worktreePath Path to the git worktree (cwd for Claude Code)
|
|
230
|
+
* @param specification The factory instance specification text
|
|
231
|
+
* @param blueprint The factory blueprint (for operational notes)
|
|
232
|
+
* @param config Factory configuration
|
|
233
|
+
* @returns Validated AuditReport or null on failure
|
|
234
|
+
*/
|
|
235
|
+
export async function runCodebaseAudit(worktreePath, specification, blueprint, config, governor) {
|
|
236
|
+
const prompt = buildAuditPrompt(specification, blueprint);
|
|
237
|
+
let rawOutput;
|
|
238
|
+
if (governor)
|
|
239
|
+
await governor.acquireSlot('factory');
|
|
240
|
+
try {
|
|
241
|
+
const args = ['--print', '--output-format', 'json', '--verbose'];
|
|
242
|
+
const env = buildPlanningEnv(config);
|
|
243
|
+
const timeoutMs = resolveAuditTimeout(blueprint);
|
|
244
|
+
console.log(`${LOG_PREFIX} Spawning Claude Code for codebase audit (timeout: ${timeoutMs === null ? 'none' : `${timeoutMs / 1000}s`})...`);
|
|
245
|
+
rawOutput = await spawnAsync(config.claudeCodePath, args, {
|
|
246
|
+
input: prompt,
|
|
247
|
+
encoding: 'utf-8',
|
|
248
|
+
timeout: timeoutMs ?? undefined,
|
|
249
|
+
cwd: worktreePath,
|
|
250
|
+
env,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
const execErr = err;
|
|
255
|
+
if (execErr.killed || execErr.signal === 'SIGTERM') {
|
|
256
|
+
const timeoutMs = resolveAuditTimeout(blueprint);
|
|
257
|
+
console.warn(`${LOG_PREFIX} Audit timed out after ${timeoutMs === null ? '?' : timeoutMs / 1000}s`);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
console.warn(`${LOG_PREFIX} Audit Claude Code session failed: ${execErr.message ?? 'unknown error'}`);
|
|
261
|
+
}
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
finally {
|
|
265
|
+
if (governor)
|
|
266
|
+
governor.releaseSlot('factory');
|
|
267
|
+
}
|
|
268
|
+
if (!rawOutput || rawOutput.trim().length === 0) {
|
|
269
|
+
console.warn(`${LOG_PREFIX} Audit returned empty output`);
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
// Extract and validate JSON
|
|
273
|
+
let jsonStr;
|
|
274
|
+
try {
|
|
275
|
+
jsonStr = extractWorkPlanJson(rawOutput);
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
console.warn(`${LOG_PREFIX} Failed to extract audit JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
let parsedJson;
|
|
282
|
+
try {
|
|
283
|
+
parsedJson = JSON.parse(jsonStr);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
console.warn(`${LOG_PREFIX} Audit output is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
// Normalize: AI sometimes returns a bare array instead of an object.
|
|
290
|
+
if (Array.isArray(parsedJson)) {
|
|
291
|
+
if (parsedJson.length === 1 && typeof parsedJson[0] === 'object' && parsedJson[0] !== null && !Array.isArray(parsedJson[0])) {
|
|
292
|
+
parsedJson = parsedJson[0];
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const validation = AuditReportSchema.safeParse(parsedJson);
|
|
296
|
+
if (!validation.success) {
|
|
297
|
+
const issues = validation.error.issues
|
|
298
|
+
.map((i) => `${i.path.join('.')}: ${i.message}`)
|
|
299
|
+
.join('; ');
|
|
300
|
+
const topKeys = typeof parsedJson === 'object' && parsedJson !== null ? Object.keys(parsedJson) : [];
|
|
301
|
+
console.warn(`${LOG_PREFIX} Audit report validation failed: ${issues}`);
|
|
302
|
+
console.warn(`${LOG_PREFIX} Parsed object keys: [${topKeys}], preview: ${JSON.stringify(parsedJson).slice(0, 500)}`);
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
console.log(`${LOG_PREFIX} Audit completed: ` +
|
|
306
|
+
`${validation.data.existingImplementations.length} existing, ` +
|
|
307
|
+
`${validation.data.partialImplementations.length} partial, ` +
|
|
308
|
+
`${validation.data.gaps.length} gaps, ` +
|
|
309
|
+
`${validation.data.conflicts.length} conflicts`);
|
|
310
|
+
return validation.data;
|
|
311
|
+
}
|
|
312
|
+
// ============================================================================
|
|
313
|
+
// Report formatter
|
|
314
|
+
// ============================================================================
|
|
315
|
+
/**
|
|
316
|
+
* Format a validated AuditReport as human-readable markdown suitable for
|
|
317
|
+
* injection into the planning prompt.
|
|
318
|
+
*
|
|
319
|
+
* Respects the MAX_REPORT_CHARS budget to avoid blowing up the planning
|
|
320
|
+
* prompt context window.
|
|
321
|
+
*/
|
|
322
|
+
export function formatAuditReport(report, blueprint) {
|
|
323
|
+
const sections = [];
|
|
324
|
+
sections.push(report.summary);
|
|
325
|
+
if (report.existingImplementations.length > 0) {
|
|
326
|
+
sections.push('');
|
|
327
|
+
sections.push('### Already Implemented (no work needed)');
|
|
328
|
+
for (const entry of report.existingImplementations) {
|
|
329
|
+
sections.push(`- **${entry.area}** [${entry.confidence}]: ${entry.description}`);
|
|
330
|
+
if (entry.relevantFiles.length > 0) {
|
|
331
|
+
sections.push(` Files: ${entry.relevantFiles.join(', ')}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (report.partialImplementations.length > 0) {
|
|
336
|
+
sections.push('');
|
|
337
|
+
sections.push('### Partially Implemented (complete the missing parts)');
|
|
338
|
+
for (const entry of report.partialImplementations) {
|
|
339
|
+
sections.push(`- **${entry.area}** [${entry.confidence}]: ${entry.description}`);
|
|
340
|
+
if (entry.relevantFiles.length > 0) {
|
|
341
|
+
sections.push(` Files: ${entry.relevantFiles.join(', ')}`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (report.gaps.length > 0) {
|
|
346
|
+
sections.push('');
|
|
347
|
+
sections.push('### Gaps (needs building from scratch)');
|
|
348
|
+
for (const entry of report.gaps) {
|
|
349
|
+
sections.push(`- **${entry.area}** [${entry.confidence}]: ${entry.description}`);
|
|
350
|
+
if (entry.relevantFiles.length > 0) {
|
|
351
|
+
sections.push(` Files: ${entry.relevantFiles.join(', ')}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (report.conflicts.length > 0) {
|
|
356
|
+
sections.push('');
|
|
357
|
+
sections.push('### Conflicts (existing code contradicts specification)');
|
|
358
|
+
for (const conflict of report.conflicts) {
|
|
359
|
+
sections.push(`- **${conflict.area}**`);
|
|
360
|
+
sections.push(` Existing: ${conflict.existingBehavior}`);
|
|
361
|
+
sections.push(` Specified: ${conflict.specifiedBehavior}`);
|
|
362
|
+
if (conflict.relevantFiles.length > 0) {
|
|
363
|
+
sections.push(` Files: ${conflict.relevantFiles.join(', ')}`);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
let formatted = sections.join('\n');
|
|
368
|
+
// Truncate if over budget (null = no limit)
|
|
369
|
+
const maxChars = resolveAuditMaxReportChars(blueprint);
|
|
370
|
+
if (maxChars !== null && formatted.length > maxChars) {
|
|
371
|
+
const truncationNote = '\n\n[Audit report truncated due to size constraints]';
|
|
372
|
+
formatted = formatted.slice(0, maxChars - truncationNote.length) + truncationNote;
|
|
373
|
+
}
|
|
374
|
+
return formatted;
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builder completion handling and main execution cycle.
|
|
3
|
+
*
|
|
4
|
+
* Handles builder session completion (token accounting, status transitions),
|
|
5
|
+
* and orchestrates the main execution cycle that finds ready work units,
|
|
6
|
+
* spawns builders, tracks strategy progress, and detects global completion.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from execution.ts for focused module boundaries.
|
|
9
|
+
*/
|
|
10
|
+
import type { ResourceGovernor } from '@telora/daemon-core';
|
|
11
|
+
import type { FactoryConfig, FactoryInstanceState, BuilderState } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Handle builder session completion.
|
|
14
|
+
*
|
|
15
|
+
* Routes the result through the gate engine (stubbed for now), then:
|
|
16
|
+
* - On gate pass: marks work unit completed, unblocks dependents
|
|
17
|
+
* - On gate fail + retries remaining: feeds output back, increments iteration
|
|
18
|
+
* - On gate fail + retries exhausted: marks work unit failed, escalates
|
|
19
|
+
*/
|
|
20
|
+
export declare function handleBuilderCompletion(builder: BuilderState, exitCode: number, state: FactoryInstanceState, _config: FactoryConfig, _governor?: ResourceGovernor | null): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Run a single execution cycle for a factory instance.
|
|
23
|
+
*
|
|
24
|
+
* This is the main orchestration loop called by the instance lifecycle
|
|
25
|
+
* manager during the "building" phase:
|
|
26
|
+
*
|
|
27
|
+
* 1. Fetch current work units from DB
|
|
28
|
+
* 2. Reconcile orphaned builders and stuck work units
|
|
29
|
+
* 3. Find work units with all dependencies satisfied
|
|
30
|
+
* 4. Spawn builders for ready units (skip if already active)
|
|
31
|
+
* 5. Track strategy progress transitions
|
|
32
|
+
* 6. Detect global completion (all units completed or failed)
|
|
33
|
+
*/
|
|
34
|
+
export declare function runExecutionCycle(state: FactoryInstanceState, config: FactoryConfig, governor?: ResourceGovernor | null): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=builder-completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder-completion.d.ts","sourceRoot":"","sources":["../src/builder-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,YAAY,EAGb,MAAM,YAAY,CAAC;AAoBpB;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,aAAa,EACtB,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAClC,OAAO,CAAC,IAAI,CAAC,CAkFf;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC,IAAI,CAAC,CA2Ff"}
|