@loomfsm/bundle-code 0.1.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/LICENSE +201 -0
- package/agents/acceptance.md +141 -0
- package/agents/api-contract.md +89 -0
- package/agents/architect.md +52 -0
- package/agents/challenger-reviewer.md +104 -0
- package/agents/classifier.md +74 -0
- package/agents/code-analyzer.md +43 -0
- package/agents/context-doc-verifier.md +94 -0
- package/agents/dependency-auditor.md +42 -0
- package/agents/implementer.md +135 -0
- package/agents/logic-reviewer.md +132 -0
- package/agents/migration.md +55 -0
- package/agents/performance.md +95 -0
- package/agents/plan-conformance.md +127 -0
- package/agents/plan-grounding-check.md +106 -0
- package/agents/planner.md +143 -0
- package/agents/playwright.md +68 -0
- package/agents/research.md +52 -0
- package/agents/security.md +88 -0
- package/agents/style-reviewer.md +85 -0
- package/agents/test.md +206 -0
- package/agents/ui-consistency.md +75 -0
- package/dist/manifest.d.ts +2 -0
- package/dist/manifest.js +34 -0
- package/dist/manifest.js.map +1 -0
- package/dist/src/bundle.d.ts +2 -0
- package/dist/src/bundle.js +424 -0
- package/dist/src/bundle.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/invariants.d.ts +10 -0
- package/dist/src/invariants.js +208 -0
- package/dist/src/invariants.js.map +1 -0
- package/dist/src/policy-resolver.d.ts +2 -0
- package/dist/src/policy-resolver.js +65 -0
- package/dist/src/policy-resolver.js.map +1 -0
- package/dist/src/sandbox-rules.d.ts +2 -0
- package/dist/src/sandbox-rules.js +40 -0
- package/dist/src/sandbox-rules.js.map +1 -0
- package/dist/test/bundle.test.d.ts +1 -0
- package/dist/test/bundle.test.js +289 -0
- package/dist/test/bundle.test.js.map +1 -0
- package/dist/test/sandbox-rules.test.d.ts +1 -0
- package/dist/test/sandbox-rules.test.js +73 -0
- package/dist/test/sandbox-rules.test.js.map +1 -0
- package/knowledge/references/api-design.md +188 -0
- package/knowledge/references/arch-patterns.md +106 -0
- package/knowledge/references/caching.md +190 -0
- package/knowledge/references/concurrency.md +195 -0
- package/knowledge/references/db-postgres.md +153 -0
- package/knowledge/references/e2e-flutter.md +56 -0
- package/knowledge/references/e2e-playwright.md +53 -0
- package/knowledge/references/error-handling.md +208 -0
- package/knowledge/references/next-app-router.md +231 -0
- package/knowledge/references/observability.md +169 -0
- package/knowledge/references/optimization-strategy.md +197 -0
- package/knowledge/references/perf-flutter.md +62 -0
- package/knowledge/references/perf-nestjs.md +59 -0
- package/knowledge/references/perf-python.md +50 -0
- package/knowledge/references/perf-react.md +52 -0
- package/knowledge/references/react19.md +176 -0
- package/knowledge/references/redis.md +175 -0
- package/knowledge/references/security-backend.md +219 -0
- package/knowledge/references/test-flutter.md +65 -0
- package/knowledge/references/test-nestjs.md +82 -0
- package/knowledge/references/test-python.md +76 -0
- package/knowledge/references/test-react.md +66 -0
- package/knowledge/references/test-strategy.md +175 -0
- package/knowledge/references/ui-flutter.md +56 -0
- package/knowledge/references/ui-web.md +51 -0
- package/package.json +34 -0
- package/schemas/agent-feedback.schema.json +80 -0
- package/schemas/category-vocab.json +170 -0
- package/schemas/classifier-output.schema.json +53 -0
- package/schemas/finding.schema.json +92 -0
- package/schemas/pipeline-state.schema.json +238 -0
- package/schemas/reviewer-output.schema.json +62 -0
- package/schemas/state-extension.schema.json +53 -0
- package/schemas/validator-output.schema.json +48 -0
- package/stack-candidates.yaml +248 -0
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
// Code-review / implementation bundle — declarative wiring.
|
|
2
|
+
//
|
|
3
|
+
// This file is the whole orchestration: phases, the agent roster, the
|
|
4
|
+
// stage graph, three flows of increasing rigor, the gate vocabulary, the
|
|
5
|
+
// post-commit observers, and the domain invariants. Reading it top to
|
|
6
|
+
// bottom tells you what a code task does. The substrate is declarative,
|
|
7
|
+
// so the wiring is compact; the weight is in the helper bodies (gate
|
|
8
|
+
// messages, deterministic state derivations) and in the migrated content
|
|
9
|
+
// (agent prompts, schemas, knowledge) that live beside this file.
|
|
10
|
+
//
|
|
11
|
+
// Applicability lives on the AGENT, not the stage: the substrate's
|
|
12
|
+
// SpawnStage is intentionally just {kind,name,phase,agent}, so a stage
|
|
13
|
+
// never carries its own condition. Every agent that runs only under some
|
|
14
|
+
// state shape declares one `applies_to` predicate; an agent reused across
|
|
15
|
+
// stages keeps a single, collision-free responsibility.
|
|
16
|
+
import { defineBundle } from "@loomfsm/kernel";
|
|
17
|
+
import { codeBundleInvariants } from "./invariants.js";
|
|
18
|
+
import { codePolicyResolver } from "./policy-resolver.js";
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Decision helpers — pure reads over the narrow state projection
|
|
21
|
+
// ============================================================================
|
|
22
|
+
function decisionEquals(state, key, value) {
|
|
23
|
+
return state.decisions[key] === value;
|
|
24
|
+
}
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Positional StepStage run bodies — deterministic state derivation only.
|
|
27
|
+
//
|
|
28
|
+
// A `run` body executes inside the stage transaction: no shell-out, no
|
|
29
|
+
// network, no LLM call, no clock. It derives state from what the substrate
|
|
30
|
+
// already tracks and writes through the scratch façade. The kernel may
|
|
31
|
+
// re-enter a Step after a crash, so each body is idempotent against its
|
|
32
|
+
// own prior committed effect.
|
|
33
|
+
// ============================================================================
|
|
34
|
+
async function writeClassifyDecisions(state, ctx) {
|
|
35
|
+
const task = state.task.toLowerCase();
|
|
36
|
+
const len = task.length;
|
|
37
|
+
let complexity;
|
|
38
|
+
if (/\b(refactor|migrate|migration|architecture|redesign|rewrite)\b/.test(task) || len > 400) {
|
|
39
|
+
complexity = "complex";
|
|
40
|
+
}
|
|
41
|
+
else if (len < 120 && /\b(typo|rename|bump|comment|docs?|readme)\b/.test(task)) {
|
|
42
|
+
complexity = "simple";
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
complexity = "medium";
|
|
46
|
+
}
|
|
47
|
+
const tests_mode = /\btdd\b|tests? first|test-first/.test(task) ? "tdd" : "after";
|
|
48
|
+
ctx.tx.set_decision?.("complexity", complexity);
|
|
49
|
+
ctx.tx.set_decision?.("tests_mode", tests_mode);
|
|
50
|
+
}
|
|
51
|
+
// Derive the review-shaping flags from the substrate's own file accounting
|
|
52
|
+
// (which paths the run has touched). The reviewer fanout reads these via
|
|
53
|
+
// each reviewer agent's `applies_to`.
|
|
54
|
+
async function derivePreReview(state, ctx) {
|
|
55
|
+
const files = state.files_modified;
|
|
56
|
+
const ui_touched = files.some((f) => /\.(tsx|jsx|vue|svelte|css|scss|html)$|(^|\/)components?\//i.test(f));
|
|
57
|
+
const api_touched = files.some((f) => /(^|\/)(api|routes?|controllers?|endpoints?|handlers?)\/|\.(proto|graphql)$|openapi|schema/i.test(f));
|
|
58
|
+
const security_needed = files.some((f) => /(auth|login|password|secret|token|crypto|session|permission|acl|jwt)/i.test(f));
|
|
59
|
+
ctx.tx.set_decision?.("ui_touched", ui_touched);
|
|
60
|
+
ctx.tx.set_decision?.("api_touched", api_touched);
|
|
61
|
+
ctx.tx.set_decision?.("security_needed", security_needed);
|
|
62
|
+
}
|
|
63
|
+
// Snapshot the substrate's file accounting for the reviewer fanout to read.
|
|
64
|
+
// This is a snapshot of what the run has touched, not a raw VCS diff — the
|
|
65
|
+
// VCS diff itself is the host's to gather; the bundle records the
|
|
66
|
+
// substrate-tracked surface so reviewers see a stable, replayable picture.
|
|
67
|
+
async function snapshotDiff(state, ctx) {
|
|
68
|
+
ctx.tx.set_bundle_state_field?.("diff_snapshot", {
|
|
69
|
+
files_modified: state.files_modified,
|
|
70
|
+
files_created: state.files_created,
|
|
71
|
+
modified_count: state.files_modified.length,
|
|
72
|
+
created_count: state.files_created.length,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Sacred-tests check: record which test files the run modified, so the
|
|
76
|
+
// final-gate invariant can refuse a silent auto-approve of work that
|
|
77
|
+
// rewrote its own tests. Deterministic over the file accounting.
|
|
78
|
+
async function verifyTestFileHashes(state, ctx) {
|
|
79
|
+
const TEST_FILE = /(^|\/)(tests?|specs?|__tests__)\/|\.(test|spec)\.[a-z]+$/i;
|
|
80
|
+
const touched = state.files_modified.filter((f) => TEST_FILE.test(f));
|
|
81
|
+
ctx.tx.set_bundle_state_field?.("test_files_modified_by_implementer", touched);
|
|
82
|
+
ctx.tx.audit({ type: "sacred-tests-checked", modified_test_files: touched.length });
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Gate messages, answer schemas, and resume control flow
|
|
86
|
+
// ============================================================================
|
|
87
|
+
const APPROVE_OPTION = {
|
|
88
|
+
verbs: ["approve", "yes", "y", "lgtm"],
|
|
89
|
+
label: "Approve",
|
|
90
|
+
produces: { decision: "accept" },
|
|
91
|
+
};
|
|
92
|
+
const REVISE_OPTION = {
|
|
93
|
+
verbs: ["revise", "changes", "rework"],
|
|
94
|
+
label: "Request changes",
|
|
95
|
+
produces: { decision: "reject", reject_intent: "revise", requires_message: true },
|
|
96
|
+
};
|
|
97
|
+
const ABANDON_OPTION = {
|
|
98
|
+
verbs: ["abandon", "stop", "cancel"],
|
|
99
|
+
label: "Abandon task",
|
|
100
|
+
produces: { decision: "reject", reject_intent: "abandon" },
|
|
101
|
+
};
|
|
102
|
+
function taskLabel(state) {
|
|
103
|
+
return state.task_short ?? state.task;
|
|
104
|
+
}
|
|
105
|
+
function gateClassifyMsg(state) {
|
|
106
|
+
const complexity = String(state.decisions["complexity"] ?? "unknown");
|
|
107
|
+
const tests = String(state.decisions["tests_mode"] ?? "unknown");
|
|
108
|
+
return `Classification ready for "${taskLabel(state)}": complexity=${complexity}, tests=${tests}. Approve to proceed to planning, or request changes.`;
|
|
109
|
+
}
|
|
110
|
+
function classifyGateAnswers(_state) {
|
|
111
|
+
return { options: [APPROVE_OPTION, REVISE_OPTION] };
|
|
112
|
+
}
|
|
113
|
+
function gatePlanMsg(state) {
|
|
114
|
+
return `Plan ready for "${taskLabel(state)}". Approve to begin implementation, request changes to revise the plan, or abandon.`;
|
|
115
|
+
}
|
|
116
|
+
function planGateAnswers(_state) {
|
|
117
|
+
return { options: [APPROVE_OPTION, REVISE_OPTION, ABANDON_OPTION] };
|
|
118
|
+
}
|
|
119
|
+
async function gatePlanResume(state, answer, _ctx) {
|
|
120
|
+
if (answer.decision === "accept")
|
|
121
|
+
return { type: "advance" };
|
|
122
|
+
if (answer.reject_intent === "abandon") {
|
|
123
|
+
return {
|
|
124
|
+
type: "complete",
|
|
125
|
+
directive: { task_id: state.task_id, verdict: "rejected", summary: "plan abandoned at gate-plan" },
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return { type: "walk_back_to", step: "plan", reason: "plan rejected — revising" };
|
|
129
|
+
}
|
|
130
|
+
function gateFinalMsg(state) {
|
|
131
|
+
return `Implementation complete for "${taskLabel(state)}". Approve to finalize, request changes to iterate, or abandon.`;
|
|
132
|
+
}
|
|
133
|
+
function finalGateAnswers(_state) {
|
|
134
|
+
return { options: [APPROVE_OPTION, REVISE_OPTION, ABANDON_OPTION] };
|
|
135
|
+
}
|
|
136
|
+
async function gateFinalResume(state, answer, _ctx) {
|
|
137
|
+
if (answer.decision === "accept")
|
|
138
|
+
return { type: "advance" };
|
|
139
|
+
if (answer.reject_intent === "abandon") {
|
|
140
|
+
return {
|
|
141
|
+
type: "complete",
|
|
142
|
+
directive: { task_id: state.task_id, verdict: "rejected", summary: "task abandoned at gate-final" },
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
return { type: "walk_back_to", step: "implement", reason: "final review rejected — re-implementing" };
|
|
146
|
+
}
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Post-commit observers — side-effect-only, idempotent, no kernel writes
|
|
149
|
+
// ============================================================================
|
|
150
|
+
async function observeImplementerOutput(ctx) {
|
|
151
|
+
const out = ctx.agent_output ?? "";
|
|
152
|
+
const hasDebtSignal = /\b(TODO|FIXME|HACK|XXX)\b/.test(out) || /tech[ -]?debt/i.test(out);
|
|
153
|
+
if (hasDebtSignal) {
|
|
154
|
+
await ctx.emit_event("tech-debt-signal", { agent: ctx.agent ?? "implementer" });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async function observeReviewFanout(ctx) {
|
|
158
|
+
await ctx.emit_event("review-fanout-observed", { stage: ctx.stage ?? "review" });
|
|
159
|
+
}
|
|
160
|
+
// ============================================================================
|
|
161
|
+
// Bundle declaration
|
|
162
|
+
// ============================================================================
|
|
163
|
+
export default defineBundle({
|
|
164
|
+
name: "code",
|
|
165
|
+
version: "3.0.0",
|
|
166
|
+
description: "Code generation pipeline — classify, plan, implement, multi-reviewer fanout, gate, and finalize across TypeScript / Python / Go / Rust and friends.",
|
|
167
|
+
phases: ["context", "planning", "test_first", "implementation", "validation", "final"],
|
|
168
|
+
default_flow: "medium",
|
|
169
|
+
// Honest baseline: every role gates on open blockers. A deployment may
|
|
170
|
+
// override any role to `auto` (full-autonomous) per task or via preset;
|
|
171
|
+
// the policyResolver + safety-floor invariants below make that path
|
|
172
|
+
// load cleanly and stay defensible.
|
|
173
|
+
default_gate_policies: { classify: "on-blockers", plan: "on-blockers", final: "on-blockers" },
|
|
174
|
+
policyResolver: codePolicyResolver,
|
|
175
|
+
replan_budget: { kind: "attempt", max_iterations: 3, on_exhaustion: "human" },
|
|
176
|
+
// The default zero-config provider (no API key) — a deployment can route
|
|
177
|
+
// elsewhere by registering another provider and overriding at run time.
|
|
178
|
+
default_provider: "claude-code-shuttle",
|
|
179
|
+
gate_roles: {
|
|
180
|
+
"gate-classify": "classify",
|
|
181
|
+
"gate-plan": "plan",
|
|
182
|
+
"gate-final": "final",
|
|
183
|
+
},
|
|
184
|
+
declared_change_kinds: [
|
|
185
|
+
"logic",
|
|
186
|
+
"ui",
|
|
187
|
+
"perf-sensitive",
|
|
188
|
+
"security-sensitive",
|
|
189
|
+
"config-only",
|
|
190
|
+
"docs-only",
|
|
191
|
+
"refactor",
|
|
192
|
+
"deps",
|
|
193
|
+
],
|
|
194
|
+
extends_vocab: {
|
|
195
|
+
error_classes: [
|
|
196
|
+
"impl-blockers",
|
|
197
|
+
"classifier-intent-vs-diff-mismatch",
|
|
198
|
+
"reviewer-skipped-change-kind",
|
|
199
|
+
"auto-close-validation",
|
|
200
|
+
"auto-close-final",
|
|
201
|
+
"llm-classification-needed",
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
agents: [
|
|
205
|
+
{ name: "classifier", template_path: "agents/classifier.md", output_kind: "classifier", default_model: "fast" },
|
|
206
|
+
{ name: "planner", template_path: "agents/planner.md", output_kind: "nonreview", default_model: "premium" },
|
|
207
|
+
{ name: "implementer", template_path: "agents/implementer.md", output_kind: "nonreview", default_model: "premium" },
|
|
208
|
+
{ name: "code-analyzer", template_path: "agents/code-analyzer.md", output_kind: "nonreview", default_model: "balanced" },
|
|
209
|
+
{
|
|
210
|
+
name: "architect",
|
|
211
|
+
template_path: "agents/architect.md",
|
|
212
|
+
output_kind: "nonreview",
|
|
213
|
+
default_model: "premium",
|
|
214
|
+
applies_to: (s) => decisionEquals(s, "complexity", "complex"),
|
|
215
|
+
},
|
|
216
|
+
{ name: "logic-reviewer", template_path: "agents/logic-reviewer.md", output_kind: "reviewer", default_model: "premium" },
|
|
217
|
+
{ name: "challenger-reviewer", template_path: "agents/challenger-reviewer.md", output_kind: "reviewer", default_model: "premium" },
|
|
218
|
+
{
|
|
219
|
+
name: "style-reviewer",
|
|
220
|
+
template_path: "agents/style-reviewer.md",
|
|
221
|
+
output_kind: "reviewer",
|
|
222
|
+
default_model: "fast",
|
|
223
|
+
relevant_for_change_kinds: ["logic", "ui", "perf-sensitive", "security-sensitive"],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
name: "security",
|
|
227
|
+
template_path: "agents/security.md",
|
|
228
|
+
output_kind: "reviewer",
|
|
229
|
+
default_model: "balanced",
|
|
230
|
+
applies_to: (s) => s.decisions["security_needed"] !== false,
|
|
231
|
+
relevant_for_change_kinds: ["logic", "ui", "security-sensitive", "perf-sensitive", "config-only"],
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: "performance",
|
|
235
|
+
template_path: "agents/performance.md",
|
|
236
|
+
output_kind: "reviewer",
|
|
237
|
+
default_model: "balanced",
|
|
238
|
+
relevant_for_change_kinds: ["logic", "ui", "perf-sensitive", "security-sensitive"],
|
|
239
|
+
},
|
|
240
|
+
{ name: "plan-grounding-check", template_path: "agents/plan-grounding-check.md", output_kind: "validator", default_model: "fast" },
|
|
241
|
+
{ name: "plan-conformance", template_path: "agents/plan-conformance.md", output_kind: "validator", default_model: "fast" },
|
|
242
|
+
{
|
|
243
|
+
name: "context-doc-verifier",
|
|
244
|
+
template_path: "agents/context-doc-verifier.md",
|
|
245
|
+
output_kind: "validator",
|
|
246
|
+
default_model: "fast",
|
|
247
|
+
applies_to: (s) => !decisionEquals(s, "complexity", "simple"),
|
|
248
|
+
},
|
|
249
|
+
{ name: "acceptance", template_path: "agents/acceptance.md", output_kind: "validator", default_model: "fast" },
|
|
250
|
+
{
|
|
251
|
+
name: "test",
|
|
252
|
+
template_path: "agents/test.md",
|
|
253
|
+
output_kind: "validator",
|
|
254
|
+
default_model: "fast",
|
|
255
|
+
applies_to: (s) => decisionEquals(s, "tests_mode", "tdd"),
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: "ui-consistency",
|
|
259
|
+
template_path: "agents/ui-consistency.md",
|
|
260
|
+
output_kind: "validator",
|
|
261
|
+
default_model: "fast",
|
|
262
|
+
applies_to: (s) => decisionEquals(s, "ui_touched", true),
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "api-contract",
|
|
266
|
+
template_path: "agents/api-contract.md",
|
|
267
|
+
output_kind: "validator",
|
|
268
|
+
default_model: "fast",
|
|
269
|
+
applies_to: (s) => decisionEquals(s, "api_touched", true),
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: "playwright",
|
|
273
|
+
template_path: "agents/playwright.md",
|
|
274
|
+
output_kind: "validator",
|
|
275
|
+
default_model: "fast",
|
|
276
|
+
applies_to: (s) => decisionEquals(s, "ui_touched", true),
|
|
277
|
+
},
|
|
278
|
+
{ name: "research", template_path: "agents/research.md", output_kind: "nonreview", default_model: "premium" },
|
|
279
|
+
{ name: "migration", template_path: "agents/migration.md", output_kind: "nonreview", default_model: "premium" },
|
|
280
|
+
{ name: "dependency-auditor", template_path: "agents/dependency-auditor.md", output_kind: "nonreview", default_model: "fast" },
|
|
281
|
+
],
|
|
282
|
+
stages: {
|
|
283
|
+
initialize: { kind: "step", name: "initialize", phase: "context", position: "positional", effects: [] },
|
|
284
|
+
classify: {
|
|
285
|
+
kind: "step",
|
|
286
|
+
name: "classify",
|
|
287
|
+
phase: "context",
|
|
288
|
+
position: "positional",
|
|
289
|
+
effects: [
|
|
290
|
+
{ kind: "decisions.set", key: "complexity" },
|
|
291
|
+
{ kind: "decisions.set", key: "tests_mode" },
|
|
292
|
+
],
|
|
293
|
+
run: writeClassifyDecisions,
|
|
294
|
+
},
|
|
295
|
+
"classify-agent": { kind: "spawn", name: "classify-agent", phase: "context", agent: "classifier" },
|
|
296
|
+
"gate-classify": { kind: "gate", name: "gate-classify", phase: "context", message: gateClassifyMsg, valid_answers: classifyGateAnswers },
|
|
297
|
+
enrich: { kind: "spawn", name: "enrich", phase: "context", agent: "code-analyzer" },
|
|
298
|
+
"context-verify": { kind: "spawn", name: "context-verify", phase: "context", agent: "context-doc-verifier" },
|
|
299
|
+
architect: { kind: "spawn", name: "architect", phase: "context", agent: "architect" },
|
|
300
|
+
plan: { kind: "spawn", name: "plan", phase: "planning", agent: "planner" },
|
|
301
|
+
"plan-grounding": { kind: "spawn", name: "plan-grounding", phase: "planning", agent: "plan-grounding-check" },
|
|
302
|
+
"plan-review": {
|
|
303
|
+
kind: "fanout",
|
|
304
|
+
name: "plan-review",
|
|
305
|
+
phase: "planning",
|
|
306
|
+
agents: ["plan-grounding-check", "logic-reviewer"],
|
|
307
|
+
iteration_budget: { kind: "attempt", max_iterations: 2, on_exhaustion: "audit-only" },
|
|
308
|
+
},
|
|
309
|
+
"gate-plan": {
|
|
310
|
+
kind: "gate",
|
|
311
|
+
name: "gate-plan",
|
|
312
|
+
phase: "planning",
|
|
313
|
+
message: gatePlanMsg,
|
|
314
|
+
valid_answers: planGateAnswers,
|
|
315
|
+
on_resume: gatePlanResume,
|
|
316
|
+
},
|
|
317
|
+
"test-first": { kind: "spawn", name: "test-first", phase: "test_first", agent: "test" },
|
|
318
|
+
"git-stash": { kind: "step", name: "git-stash", phase: "implementation", position: "positional", effects: [] },
|
|
319
|
+
implement: { kind: "spawn", name: "implement", phase: "implementation", agent: "implementer" },
|
|
320
|
+
"git-diff": {
|
|
321
|
+
kind: "step",
|
|
322
|
+
name: "git-diff",
|
|
323
|
+
phase: "implementation",
|
|
324
|
+
position: "positional",
|
|
325
|
+
effects: [{ kind: "bundle_state.set", path: "diff_snapshot" }],
|
|
326
|
+
run: snapshotDiff,
|
|
327
|
+
},
|
|
328
|
+
"pre-review": {
|
|
329
|
+
kind: "step",
|
|
330
|
+
name: "pre-review",
|
|
331
|
+
phase: "implementation",
|
|
332
|
+
position: "positional",
|
|
333
|
+
effects: [
|
|
334
|
+
{ kind: "decisions.set", key: "security_needed" },
|
|
335
|
+
{ kind: "decisions.set", key: "ui_touched" },
|
|
336
|
+
{ kind: "decisions.set", key: "api_touched" },
|
|
337
|
+
],
|
|
338
|
+
run: derivePreReview,
|
|
339
|
+
},
|
|
340
|
+
review: {
|
|
341
|
+
kind: "fanout",
|
|
342
|
+
name: "review",
|
|
343
|
+
phase: "implementation",
|
|
344
|
+
agents: ["logic-reviewer", "challenger-reviewer", "style-reviewer", "security", "performance"],
|
|
345
|
+
filter_by_change_kind: true,
|
|
346
|
+
iteration_budget: { kind: "attempt", max_iterations: 3, on_exhaustion: "audit-only" },
|
|
347
|
+
},
|
|
348
|
+
reconcile: { kind: "step", name: "reconcile", phase: "implementation", position: "positional", effects: [] },
|
|
349
|
+
iterate: { kind: "step", name: "iterate", phase: "implementation", position: "positional", effects: [] },
|
|
350
|
+
"sacred-tests": {
|
|
351
|
+
kind: "step",
|
|
352
|
+
name: "sacred-tests",
|
|
353
|
+
phase: "implementation",
|
|
354
|
+
position: "positional",
|
|
355
|
+
effects: [
|
|
356
|
+
{ kind: "audit.emit", type: "sacred-tests-checked" },
|
|
357
|
+
{ kind: "bundle_state.set", path: "test_files_modified_by_implementer" },
|
|
358
|
+
],
|
|
359
|
+
run: verifyTestFileHashes,
|
|
360
|
+
},
|
|
361
|
+
"final-checks": { kind: "spawn", name: "final-checks", phase: "validation", agent: "acceptance" },
|
|
362
|
+
"test-verify": { kind: "step", name: "test-verify", phase: "validation", position: "positional", effects: [] },
|
|
363
|
+
"gate-final": {
|
|
364
|
+
kind: "gate",
|
|
365
|
+
name: "gate-final",
|
|
366
|
+
phase: "validation",
|
|
367
|
+
message: gateFinalMsg,
|
|
368
|
+
valid_answers: finalGateAnswers,
|
|
369
|
+
on_resume: gateFinalResume,
|
|
370
|
+
},
|
|
371
|
+
finalize: { kind: "finalize", name: "finalize" },
|
|
372
|
+
},
|
|
373
|
+
flows: {
|
|
374
|
+
simple: [
|
|
375
|
+
"initialize", "classify", "classify-agent",
|
|
376
|
+
"plan", "plan-grounding", "implement", "git-diff", "pre-review",
|
|
377
|
+
"review", "final-checks", "gate-final", "finalize",
|
|
378
|
+
],
|
|
379
|
+
medium: [
|
|
380
|
+
"initialize", "classify", "classify-agent", "gate-classify",
|
|
381
|
+
"enrich", "plan", "plan-review", "gate-plan",
|
|
382
|
+
"git-stash", "implement", "git-diff", "pre-review", "review",
|
|
383
|
+
"reconcile", "iterate", "final-checks", "test-verify",
|
|
384
|
+
"gate-final", "finalize",
|
|
385
|
+
],
|
|
386
|
+
complex: [
|
|
387
|
+
"initialize", "classify", "classify-agent", "gate-classify",
|
|
388
|
+
"enrich", "context-verify", "architect",
|
|
389
|
+
"plan", "plan-review", "gate-plan",
|
|
390
|
+
"test-first", "git-stash", "implement", "git-diff", "pre-review", "review",
|
|
391
|
+
"reconcile", "iterate", "sacred-tests",
|
|
392
|
+
"final-checks", "test-verify", "gate-final", "finalize",
|
|
393
|
+
],
|
|
394
|
+
},
|
|
395
|
+
hooks: [
|
|
396
|
+
{ name: "observe-implementer-output", event: "after-agent-result", filter: (ctx) => ctx.agent === "implementer", run: observeImplementerOutput, idempotent: true },
|
|
397
|
+
{ name: "observe-review-fanout", event: "before-fanout", filter: (ctx) => ctx.stage === "review", run: observeReviewFanout, idempotent: true },
|
|
398
|
+
],
|
|
399
|
+
invariants: codeBundleInvariants,
|
|
400
|
+
schema_extension: "schemas/state-extension.schema.json",
|
|
401
|
+
knowledge_dir: "knowledge/",
|
|
402
|
+
prompts_dir: "prompts/",
|
|
403
|
+
migrations_dir: "migrations/",
|
|
404
|
+
// Static context the classifier reads to pick refs + a stack from real
|
|
405
|
+
// catalogs (never invent). Scoped to the classifier so the bulky listings
|
|
406
|
+
// stay out of every other agent's prompt. The renderer materializes these
|
|
407
|
+
// off the bundle source tree at load and appends them to the spawn context.
|
|
408
|
+
spawn_context_assets: [
|
|
409
|
+
{
|
|
410
|
+
heading: "Refs catalog",
|
|
411
|
+
kind: "frontmatter-catalog",
|
|
412
|
+
dir: "knowledge/references",
|
|
413
|
+
agents: ["classifier"],
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
heading: "Stack candidate registry",
|
|
417
|
+
kind: "file",
|
|
418
|
+
path: "stack-candidates.yaml",
|
|
419
|
+
fence: "yaml",
|
|
420
|
+
agents: ["classifier"],
|
|
421
|
+
},
|
|
422
|
+
],
|
|
423
|
+
});
|
|
424
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default } from "./bundle.js";
|
|
2
|
+
export { default as codeManifest } from "../manifest.js";
|
|
3
|
+
export { CODE_BUNDLE_SENSITIVE_PATH_RULES } from "./sandbox-rules.js";
|
|
4
|
+
export { codePolicyResolver } from "./policy-resolver.js";
|
|
5
|
+
export { codeBundleInvariants, invCode101, invCode102, invCode103, invCode104, invLintClean, invTestsPass, invTypecheckClean, invSafetyFloorFinal, } from "./invariants.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Package surface for the code bundle.
|
|
2
|
+
//
|
|
3
|
+
// The default export is the bundle the loader registers; the named
|
|
4
|
+
// exports let a host wire the sandbox path-rules into the tool context
|
|
5
|
+
// and let tests reach the invariant + resolver internals.
|
|
6
|
+
export { default } from "./bundle.js";
|
|
7
|
+
// The installed manifest, re-exported so a host can reconcile it into a
|
|
8
|
+
// project's extension table before loading the bundle (the loader refuses
|
|
9
|
+
// a bundle whose manifest row is absent).
|
|
10
|
+
export { default as codeManifest } from "../manifest.js";
|
|
11
|
+
export { CODE_BUNDLE_SENSITIVE_PATH_RULES } from "./sandbox-rules.js";
|
|
12
|
+
export { codePolicyResolver } from "./policy-resolver.js";
|
|
13
|
+
export { codeBundleInvariants, invCode101, invCode102, invCode103, invCode104, invLintClean, invTestsPass, invTypecheckClean, invSafetyFloorFinal, } from "./invariants.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,0DAA0D;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,wEAAwE;AACxE,0EAA0E;AAC1E,0CAA0C;AAC1C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Invariant } from "@loomfsm/kernel";
|
|
2
|
+
export declare const invCode101: Invariant;
|
|
3
|
+
export declare const invCode102: Invariant;
|
|
4
|
+
export declare const invCode103: Invariant;
|
|
5
|
+
export declare const invCode104: Invariant;
|
|
6
|
+
export declare const invLintClean: Invariant;
|
|
7
|
+
export declare const invTestsPass: Invariant;
|
|
8
|
+
export declare const invTypecheckClean: Invariant;
|
|
9
|
+
export declare const invSafetyFloorFinal: Invariant;
|
|
10
|
+
export declare const codeBundleInvariants: Invariant[];
|