tryassay 0.12.1 → 0.14.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.
Files changed (44) hide show
  1. package/dist/api/server.d.ts +4 -0
  2. package/dist/api/server.js +138 -1
  3. package/dist/api/server.js.map +1 -1
  4. package/dist/cli.js +20 -2
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/create.d.ts +16 -0
  7. package/dist/commands/create.js +103 -0
  8. package/dist/commands/create.js.map +1 -0
  9. package/dist/commands/runtime.js +1 -1
  10. package/dist/commands/runtime.js.map +1 -1
  11. package/dist/runtime/agents/code-agent.d.ts +7 -0
  12. package/dist/runtime/agents/code-agent.js +54 -14
  13. package/dist/runtime/agents/code-agent.js.map +1 -1
  14. package/dist/runtime/agents/coordinator-agent.d.ts +7 -0
  15. package/dist/runtime/agents/coordinator-agent.js +98 -34
  16. package/dist/runtime/agents/coordinator-agent.js.map +1 -1
  17. package/dist/runtime/agents/planner-agent.d.ts +18 -0
  18. package/dist/runtime/agents/planner-agent.js +201 -0
  19. package/dist/runtime/agents/planner-agent.js.map +1 -0
  20. package/dist/runtime/agents/research-agent.d.ts +4 -0
  21. package/dist/runtime/agents/research-agent.js +37 -13
  22. package/dist/runtime/agents/research-agent.js.map +1 -1
  23. package/dist/runtime/agents/review-agent.d.ts +4 -0
  24. package/dist/runtime/agents/review-agent.js +36 -12
  25. package/dist/runtime/agents/review-agent.js.map +1 -1
  26. package/dist/runtime/agents/test-agent.d.ts +4 -0
  27. package/dist/runtime/agents/test-agent.js +38 -14
  28. package/dist/runtime/agents/test-agent.js.map +1 -1
  29. package/dist/runtime/app-create-orchestrator.d.ts +45 -0
  30. package/dist/runtime/app-create-orchestrator.js +722 -0
  31. package/dist/runtime/app-create-orchestrator.js.map +1 -0
  32. package/dist/runtime/composition-verifier.d.ts +46 -0
  33. package/dist/runtime/composition-verifier.js +313 -3
  34. package/dist/runtime/composition-verifier.js.map +1 -1
  35. package/dist/runtime/multi-agent-loop.d.ts +16 -0
  36. package/dist/runtime/multi-agent-loop.js +244 -78
  37. package/dist/runtime/multi-agent-loop.js.map +1 -1
  38. package/dist/runtime/specialized-agent.js +1 -1
  39. package/dist/runtime/specialized-agent.js.map +1 -1
  40. package/dist/runtime/two-agent-loop.d.ts +3 -0
  41. package/dist/runtime/two-agent-loop.js +41 -0
  42. package/dist/runtime/two-agent-loop.js.map +1 -1
  43. package/dist/runtime/types.d.ts +166 -2
  44. package/package.json +1 -1
@@ -0,0 +1,201 @@
1
+ // ============================================================
2
+ // Planner Agent — Designs application architecture
3
+ // Produces ArchitecturePlan artifacts with verifiable claims
4
+ // about schema completeness, API coverage, and dependency order.
5
+ // ============================================================
6
+ import { SpecializedAgent, } from '../specialized-agent.js';
7
+ export class PlannerAgent extends SpecializedAgent {
8
+ constructor(messageBus, opts) {
9
+ super('planner-agent', 'planner', [
10
+ { name: 'architecture_design', description: 'Design full application architecture', tools: [] },
11
+ { name: 'schema_design', description: 'Design database schemas with relations', tools: [] },
12
+ { name: 'feature_decomposition', description: 'Decompose features into buildable units with dependency order', tools: [] },
13
+ ], messageBus, { model: opts?.model, initialTrust: 'untrusted' });
14
+ }
15
+ onMessage(_message) {
16
+ // Planner receives context from coordinator or research agent
17
+ }
18
+ async executeTask(task) {
19
+ const contextSnippets = task.contextRefs
20
+ .map(ref => `Context: ${ref.summary}\n${ref.content ?? ''}`)
21
+ .join('\n\n');
22
+ const systemPrompt = `You are a Planning Agent — a specialized AI that designs application architectures.
23
+
24
+ Your job: Given an app description with tech stack, features, and constraints, produce a complete ArchitecturePlan.
25
+
26
+ The plan MUST include:
27
+ 1. Schema entities with fields, types, and relations
28
+ 2. API routes with methods, paths, auth requirements, and request/response types
29
+ 3. Pages with paths, components, and auth requirements
30
+ 4. Features decomposed into buildable units with dependency order
31
+ 5. Auth plan if authentication is required
32
+ 6. Deploy config for the target platform
33
+
34
+ Rules:
35
+ 1. The dependency order must be acyclic — features must be buildable in sequence.
36
+ 2. Auth features must come first in the dependency order.
37
+ 3. Every feature must reference its schema entities, API routes, and pages.
38
+ 4. Every schema entity must be referenced by at least one feature.
39
+ 5. Every API route must be referenced by at least one feature.
40
+ 6. State explicit claims about your plan's completeness — they will be verified.
41
+ 7. FEATURE GRANULARITY: Target 3-5 features total. Combine trivially related functionality into single features:
42
+ - Auth signup + login + logout + session management = one "authentication" feature
43
+ - All CRUD operations on a single entity = one feature (e.g., "todo-management")
44
+ - Landing page + layout + navigation = one "app-shell" feature
45
+ - A complexityEstimate of "trivial" is a code smell — merge trivial features into their parent feature.
46
+ 8. DEPENDENCY MINIMIZATION: If two features COULD be built independently, they SHOULD have empty dependsOn arrays. Maximize parallelism — only add dependencies when a feature literally cannot compile without another feature's output (e.g., todo-management depends on authentication because it needs the user session).
47
+
48
+ Respond with JSON:
49
+ {
50
+ "schema": [
51
+ {
52
+ "name": "...",
53
+ "fields": [{ "name": "...", "type": "...", "nullable": false, "primaryKey": true }],
54
+ "relations": [{ "target": "...", "type": "one-to-many", "foreignKey": "..." }]
55
+ }
56
+ ],
57
+ "apiRoutes": [
58
+ {
59
+ "method": "GET|POST|PUT|DELETE|PATCH",
60
+ "path": "/api/...",
61
+ "description": "...",
62
+ "auth": true,
63
+ "requestType": "...",
64
+ "responseType": "...",
65
+ "featureId": "..."
66
+ }
67
+ ],
68
+ "pages": [
69
+ {
70
+ "path": "/...",
71
+ "component": "...",
72
+ "auth": true,
73
+ "featureId": "...",
74
+ "description": "..."
75
+ }
76
+ ],
77
+ "features": [
78
+ {
79
+ "id": "feature-id",
80
+ "name": "...",
81
+ "dependsOn": ["other-feature-id"],
82
+ "schemaEntities": ["EntityName"],
83
+ "apiRoutes": ["/api/..."],
84
+ "pages": ["/..."],
85
+ "complexityEstimate": "trivial|small|medium|large"
86
+ }
87
+ ],
88
+ "dependencyOrder": ["feature-id-1", "feature-id-2", ...],
89
+ "authPlan": {
90
+ "provider": "...",
91
+ "methods": ["email", "google"],
92
+ "roles": ["user", "admin"],
93
+ "protectedRoutes": ["/dashboard", "/api/..."]
94
+ },
95
+ "deployConfig": {
96
+ "platform": "vercel",
97
+ "buildCommand": "npm run build",
98
+ "envVars": ["DATABASE_URL", "..."]
99
+ },
100
+ "summary": "...",
101
+ "claims": [
102
+ "Schema covers all N entities required by the features",
103
+ "API has M routes covering all CRUD operations",
104
+ "Dependency order is acyclic with auth first",
105
+ "Every feature references its schema entities and API routes"
106
+ ]
107
+ }`;
108
+ const userPrompt = `TASK: ${task.goal}
109
+
110
+ CONSTRAINTS:
111
+ ${task.constraints.map(c => `- ${c}`).join('\n')}
112
+
113
+ CONTEXT:
114
+ ${contextSnippets || 'No additional context provided.'}
115
+
116
+ Design the complete architecture now. Remember to state your claims explicitly.`;
117
+ try {
118
+ const { content } = await this.callClaude(systemPrompt, userPrompt);
119
+ const parsed = this.parsePlanResponse(content);
120
+ const features = Array.isArray(parsed.plan.features) ? parsed.plan.features : [];
121
+ const artifact = this.makeArtifact('architecture_plan', JSON.stringify(parsed.plan, null, 2), { metadata: { featureCount: features.length } });
122
+ return {
123
+ taskId: task.taskId,
124
+ status: 'completed',
125
+ artifacts: [artifact],
126
+ summary: parsed.summary,
127
+ claimsAboutArtifacts: parsed.claims,
128
+ };
129
+ }
130
+ catch (err) {
131
+ return {
132
+ taskId: task.taskId,
133
+ status: 'failed',
134
+ artifacts: [],
135
+ summary: `Architecture planning failed: ${err instanceof Error ? err.message : String(err)}`,
136
+ claimsAboutArtifacts: [],
137
+ blockers: [err instanceof Error ? err.message : String(err)],
138
+ };
139
+ }
140
+ }
141
+ parsePlanResponse(raw) {
142
+ const parsed = this.extractJson(raw);
143
+ if (parsed) {
144
+ return {
145
+ plan: {
146
+ schema: Array.isArray(parsed.schema) ? parsed.schema : [],
147
+ apiRoutes: Array.isArray(parsed.apiRoutes) ? parsed.apiRoutes : [],
148
+ pages: Array.isArray(parsed.pages) ? parsed.pages : [],
149
+ features: Array.isArray(parsed.features) ? parsed.features : [],
150
+ dependencyOrder: Array.isArray(parsed.dependencyOrder) ? parsed.dependencyOrder : [],
151
+ authPlan: parsed.authPlan ?? null,
152
+ deployConfig: parsed.deployConfig ?? null,
153
+ },
154
+ summary: typeof parsed.summary === 'string' ? parsed.summary : 'Architecture plan generated',
155
+ claims: Array.isArray(parsed.claims) ? parsed.claims : [],
156
+ };
157
+ }
158
+ return {
159
+ plan: { schema: [], apiRoutes: [], pages: [], features: [], dependencyOrder: [] },
160
+ summary: 'Failed to parse architecture plan response',
161
+ claims: [],
162
+ };
163
+ }
164
+ /**
165
+ * Try multiple strategies to extract JSON from LLM response:
166
+ * 1. Direct parse
167
+ * 2. Strip markdown code fences
168
+ * 3. Find first { ... } balanced block
169
+ */
170
+ extractJson(raw) {
171
+ const cleaned = raw.trim();
172
+ // Strategy 1: Direct parse
173
+ try {
174
+ return JSON.parse(cleaned);
175
+ }
176
+ catch { /* continue */ }
177
+ // Strategy 2: Strip outermost markdown code fences
178
+ if (cleaned.startsWith('```')) {
179
+ const firstNewline = cleaned.indexOf('\n');
180
+ const lastFence = cleaned.lastIndexOf('```');
181
+ if (firstNewline > 0 && lastFence > firstNewline) {
182
+ const inner = cleaned.slice(firstNewline + 1, lastFence).trim();
183
+ try {
184
+ return JSON.parse(inner);
185
+ }
186
+ catch { /* continue */ }
187
+ }
188
+ }
189
+ // Strategy 3: Find first { to last } and try parsing
190
+ const firstBrace = cleaned.indexOf('{');
191
+ const lastBrace = cleaned.lastIndexOf('}');
192
+ if (firstBrace >= 0 && lastBrace > firstBrace) {
193
+ try {
194
+ return JSON.parse(cleaned.slice(firstBrace, lastBrace + 1));
195
+ }
196
+ catch { /* continue */ }
197
+ }
198
+ return null;
199
+ }
200
+ }
201
+ //# sourceMappingURL=planner-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/planner-agent.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,8 @@ export declare class ResearchAgent extends SpecializedAgent {
8
8
  protected onMessage(_message: AgentMessage): void;
9
9
  executeTask(task: TaskAssignmentPayload): Promise<TaskResultPayload>;
10
10
  private parseResearchResponse;
11
+ /**
12
+ * Try multiple strategies to extract JSON from LLM response.
13
+ */
14
+ private extractJson;
11
15
  }
@@ -88,12 +88,8 @@ Research this now. Cite your sources. Flag anything you cannot verify.`;
88
88
  }
89
89
  }
90
90
  parseResearchResponse(raw) {
91
- let cleaned = raw.trim();
92
- if (cleaned.startsWith('```')) {
93
- cleaned = cleaned.replace(/^```(?:json)?\s*/, '').replace(/\s*```$/, '');
94
- }
95
- try {
96
- const parsed = JSON.parse(cleaned);
91
+ const parsed = this.extractJson(raw);
92
+ if (parsed) {
97
93
  return {
98
94
  findings: Array.isArray(parsed.findings) ? parsed.findings : [],
99
95
  summary: typeof parsed.summary === 'string' ? parsed.summary : 'No summary',
@@ -101,14 +97,42 @@ Research this now. Cite your sources. Flag anything you cannot verify.`;
101
97
  unanswered: Array.isArray(parsed.unanswered) ? parsed.unanswered : [],
102
98
  };
103
99
  }
104
- catch {
105
- return {
106
- findings: [],
107
- summary: 'Failed to parse research response',
108
- claims: [],
109
- unanswered: [],
110
- };
100
+ return {
101
+ findings: [],
102
+ summary: 'Failed to parse research response',
103
+ claims: [],
104
+ unanswered: [],
105
+ };
106
+ }
107
+ /**
108
+ * Try multiple strategies to extract JSON from LLM response.
109
+ */
110
+ extractJson(raw) {
111
+ const cleaned = raw.trim();
112
+ try {
113
+ return JSON.parse(cleaned);
114
+ }
115
+ catch { /* continue */ }
116
+ if (cleaned.startsWith('```')) {
117
+ const firstNewline = cleaned.indexOf('\n');
118
+ const lastFence = cleaned.lastIndexOf('```');
119
+ if (firstNewline > 0 && lastFence > firstNewline) {
120
+ const inner = cleaned.slice(firstNewline + 1, lastFence).trim();
121
+ try {
122
+ return JSON.parse(inner);
123
+ }
124
+ catch { /* continue */ }
125
+ }
126
+ }
127
+ const firstBrace = cleaned.indexOf('{');
128
+ const lastBrace = cleaned.lastIndexOf('}');
129
+ if (firstBrace >= 0 && lastBrace > firstBrace) {
130
+ try {
131
+ return JSON.parse(cleaned.slice(firstBrace, lastBrace + 1));
132
+ }
133
+ catch { /* continue */ }
111
134
  }
135
+ return null;
112
136
  }
113
137
  }
114
138
  //# sourceMappingURL=research-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"research-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/research-agent.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAC/D,wDAAwD;AACxD,+DAA+D;AAE/D,OAAO,EACL,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACjD,YAAY,UAAsB,EAAE,IAAyB;QAC3D,KAAK,CACH,gBAAgB,EAChB,UAAU,EACV;YACE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,yCAAyC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;YACrG,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,uCAAuC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;YACjG,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,wCAAwC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;SACzG,EACD,UAAU,EACV,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAClD,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,QAAsB;QACxC,mEAAmE;IACrE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW;aACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;aAC3D,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;EAyBvB,CAAC;QAEC,MAAM,UAAU,GAAG,kBAAkB,IAAI,CAAC,IAAI;;;EAGhD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG9C,eAAe,IAAI,iCAAiC;;uEAEiB,CAAC;QAEpE,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE;gBAC9D,QAAQ,EAAE;oBACR,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;oBACpC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;oBACzC,gBAAgB,EAAE;wBAChB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,MAAM;wBACjE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,MAAM;wBACrE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,MAAM;qBAChE;iBACF;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;gBAC9F,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM;gBACnC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;aACvE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,oBAAoB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC/E,oBAAoB,EAAE,EAAE;gBACxB,QAAQ,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,GAAW;QAYvC,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAC/D,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;gBAC3E,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACzD,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;aACtE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,mCAAmC;gBAC5C,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,EAAE;aACf,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"research-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/research-agent.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,8 @@ export declare class ReviewAgent extends SpecializedAgent {
8
8
  protected onMessage(_message: AgentMessage): void;
9
9
  executeTask(task: TaskAssignmentPayload): Promise<TaskResultPayload>;
10
10
  private parseReviewResponse;
11
+ /**
12
+ * Try multiple strategies to extract JSON from LLM response.
13
+ */
14
+ private extractJson;
11
15
  }
@@ -72,25 +72,49 @@ Review the code now. Be thorough but honest — don't invent issues.`;
72
72
  }
73
73
  }
74
74
  parseReviewResponse(raw) {
75
- let cleaned = raw.trim();
76
- if (cleaned.startsWith('```')) {
77
- cleaned = cleaned.replace(/^```(?:json)?\s*/, '').replace(/\s*```$/, '');
78
- }
79
- try {
80
- const parsed = JSON.parse(cleaned);
75
+ const parsed = this.extractJson(raw);
76
+ if (parsed) {
81
77
  return {
82
78
  findings: Array.isArray(parsed.findings) ? parsed.findings : [],
83
79
  summary: typeof parsed.summary === 'string' ? parsed.summary : 'No summary',
84
80
  claims: Array.isArray(parsed.claims) ? parsed.claims : [],
85
81
  };
86
82
  }
87
- catch {
88
- return {
89
- findings: [],
90
- summary: 'Failed to parse review response',
91
- claims: [],
92
- };
83
+ return {
84
+ findings: [],
85
+ summary: 'Failed to parse review response',
86
+ claims: [],
87
+ };
88
+ }
89
+ /**
90
+ * Try multiple strategies to extract JSON from LLM response.
91
+ */
92
+ extractJson(raw) {
93
+ const cleaned = raw.trim();
94
+ try {
95
+ return JSON.parse(cleaned);
96
+ }
97
+ catch { /* continue */ }
98
+ if (cleaned.startsWith('```')) {
99
+ const firstNewline = cleaned.indexOf('\n');
100
+ const lastFence = cleaned.lastIndexOf('```');
101
+ if (firstNewline > 0 && lastFence > firstNewline) {
102
+ const inner = cleaned.slice(firstNewline + 1, lastFence).trim();
103
+ try {
104
+ return JSON.parse(inner);
105
+ }
106
+ catch { /* continue */ }
107
+ }
108
+ }
109
+ const firstBrace = cleaned.indexOf('{');
110
+ const lastBrace = cleaned.lastIndexOf('}');
111
+ if (firstBrace >= 0 && lastBrace > firstBrace) {
112
+ try {
113
+ return JSON.parse(cleaned.slice(firstBrace, lastBrace + 1));
114
+ }
115
+ catch { /* continue */ }
93
116
  }
117
+ return null;
94
118
  }
95
119
  }
96
120
  //# sourceMappingURL=review-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"review-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/review-agent.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,8DAA8D;AAC9D,+DAA+D;AAE/D,OAAO,EACL,gBAAgB,GAIjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAC/C,YAAY,UAAsB,EAAE,IAAyB;QAC3D,KAAK,CACH,cAAc,EACd,QAAQ,EACR;YACE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,0CAA0C,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;YACtG,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE;SACrG,EACD,UAAU,EACV,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAClD,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,QAAsB;QACxC,mDAAmD;IACrD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,2DAA2D;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW;aAClC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,wBAAwB,EAAE,CAAC;aAC9E,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,MAAM,YAAY,GAAG;;;;;;;;;;;6MAWoL,CAAC;QAE1M,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,IAAI;;;EAGvC,YAAY;;;EAGZ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;mEAEmB,CAAC;QAEhE,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,EAAE;gBAC3D,QAAQ,EAAE;oBACR,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;oBACpC,cAAc,EAAE;wBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;wBACvE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;wBAC/D,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM;wBACnE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM;qBAC9D;iBACF;aACF,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,CAAC,QAAQ,CAAC;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC7E,oBAAoB,EAAE,EAAE;gBACxB,QAAQ,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,GAAW;QAKrC,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAC/D,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;gBAC3E,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;aAC1D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,iCAAiC;gBAC1C,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"review-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/review-agent.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,8 @@ export declare class TestAgent extends SpecializedAgent {
8
8
  protected onMessage(_message: AgentMessage): void;
9
9
  executeTask(task: TaskAssignmentPayload): Promise<TaskResultPayload>;
10
10
  private parseTestResponse;
11
+ /**
12
+ * Try multiple strategies to extract JSON from LLM response.
13
+ */
14
+ private extractJson;
11
15
  }
@@ -82,14 +82,10 @@ Write meaningful tests now. Remember: trivial tests (assert true, no-op mocks) w
82
82
  }
83
83
  }
84
84
  parseTestResponse(raw) {
85
- let cleaned = raw.trim();
86
- if (cleaned.startsWith('```')) {
87
- cleaned = cleaned.replace(/^```(?:json)?\s*/, '').replace(/\s*```$/, '');
88
- }
89
- try {
90
- const parsed = JSON.parse(cleaned);
85
+ const parsed = this.extractJson(raw);
86
+ if (parsed && Array.isArray(parsed.testFiles)) {
91
87
  return {
92
- testFiles: Array.isArray(parsed.testFiles) ? parsed.testFiles : [],
88
+ testFiles: parsed.testFiles,
93
89
  summary: typeof parsed.summary === 'string' ? parsed.summary : 'No summary',
94
90
  claims: Array.isArray(parsed.claims) ? parsed.claims : [],
95
91
  testQuality: {
@@ -101,14 +97,42 @@ Write meaningful tests now. Remember: trivial tests (assert true, no-op mocks) w
101
97
  },
102
98
  };
103
99
  }
104
- catch {
105
- return {
106
- testFiles: [{ path: 'test.ts', content: raw, language: 'typescript' }],
107
- summary: 'Raw test output (failed to parse structured response)',
108
- claims: [],
109
- testQuality: { totalTests: 0, meaningfulTests: 0, trivialTests: 0, mockCount: 0, realInteractionCount: 0 },
110
- };
100
+ return {
101
+ testFiles: [{ path: 'test.ts', content: raw, language: 'typescript' }],
102
+ summary: 'Raw test output (failed to parse structured response)',
103
+ claims: [],
104
+ testQuality: { totalTests: 0, meaningfulTests: 0, trivialTests: 0, mockCount: 0, realInteractionCount: 0 },
105
+ };
106
+ }
107
+ /**
108
+ * Try multiple strategies to extract JSON from LLM response.
109
+ */
110
+ extractJson(raw) {
111
+ const cleaned = raw.trim();
112
+ try {
113
+ return JSON.parse(cleaned);
114
+ }
115
+ catch { /* continue */ }
116
+ if (cleaned.startsWith('```')) {
117
+ const firstNewline = cleaned.indexOf('\n');
118
+ const lastFence = cleaned.lastIndexOf('```');
119
+ if (firstNewline > 0 && lastFence > firstNewline) {
120
+ const inner = cleaned.slice(firstNewline + 1, lastFence).trim();
121
+ try {
122
+ return JSON.parse(inner);
123
+ }
124
+ catch { /* continue */ }
125
+ }
126
+ }
127
+ const firstBrace = cleaned.indexOf('{');
128
+ const lastBrace = cleaned.lastIndexOf('}');
129
+ if (firstBrace >= 0 && lastBrace > firstBrace) {
130
+ try {
131
+ return JSON.parse(cleaned.slice(firstBrace, lastBrace + 1));
132
+ }
133
+ catch { /* continue */ }
111
134
  }
135
+ return null;
112
136
  }
113
137
  }
114
138
  //# sourceMappingURL=test-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/test-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-agent.js","sourceRoot":"","sources":["../../../src/runtime/agents/test-agent.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,2DAA2D;AAC3D,yDAAyD;AACzD,+DAA+D;AAE/D,OAAO,EACL,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,OAAO,SAAU,SAAQ,gBAAgB;IAC7C,YAAY,UAAsB,EAAE,IAAyB;QAC3D,KAAK,CACH,YAAY,EACZ,MAAM,EACN;YACE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE;YAC/F,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,oCAAoC,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;YAC1F,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE;SAC1F,EACD,UAAU,EACV,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,CAClD,CAAC;IACJ,CAAC;IAES,SAAS,CAAC,QAAsB;QACxC,iDAAiD;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW;aACrC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;aAC3D,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;EAwBvB,CAAC;QAEC,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,IAAI;;;EAGvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG9C,eAAe,IAAI,iCAAiC;;8GAEwD,CAAC;QAE3G,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACzC,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;gBACxC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE;oBACR,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC;aACF,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,WAAW;gBACnB,SAAS;gBACT,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,oBAAoB,EAAE,MAAM,CAAC,MAAM;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,EAAE;gBACb,OAAO,EAAE,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACtF,oBAAoB,EAAE,EAAE;gBACxB,QAAQ,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,GAAW;QAYnC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,SAAS,EAAE,MAAM,CAAC,SAAuE;gBACzF,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;gBAC3E,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;gBACzD,WAAW,EAAE;oBACX,UAAU,EAAE,OAAQ,MAAM,CAAC,WAAmB,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,WAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACpH,eAAe,EAAE,OAAQ,MAAM,CAAC,WAAmB,EAAE,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,WAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBACnI,YAAY,EAAE,OAAQ,MAAM,CAAC,WAAmB,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,WAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC1H,SAAS,EAAE,OAAQ,MAAM,CAAC,WAAmB,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,WAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACjH,oBAAoB,EAAE,OAAQ,MAAM,CAAC,WAAmB,EAAE,oBAAoB,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,WAAmB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;iBACnJ;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YACtE,OAAO,EAAE,uDAAuD;YAChE,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,oBAAoB,EAAE,CAAC,EAAE;SAC3G,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAW;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,YAAY,GAAG,CAAC,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChE,IAAI,CAAC;oBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,UAAU,IAAI,CAAC,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;YAC9C,IAAI,CAAC;gBAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { AppDescription, AppCreateOptions, AppCreateResult } from './types.js';
3
+ export declare class AppCreateOrchestrator extends EventEmitter {
4
+ private description;
5
+ private options;
6
+ private auditTrail;
7
+ private startTime;
8
+ constructor(description: AppDescription, options: AppCreateOptions);
9
+ /** Run the full app creation pipeline. */
10
+ run(): Promise<AppCreateResult>;
11
+ private runPlanningPhase;
12
+ private verifyPlanStructure;
13
+ private isAcyclic;
14
+ private runScaffoldingPhase;
15
+ private buildFeature;
16
+ private runCrossVerification;
17
+ /**
18
+ * Group features into waves based on dependency graph.
19
+ * Wave 0: features with no dependencies
20
+ * Wave N: features whose deps are all in waves < N
21
+ */
22
+ private computeWaves;
23
+ /**
24
+ * Build a feature using a single CodeAgent call — bypasses MultiAgentLoop.
25
+ * Used for trivial/small features where full team coordination is overkill.
26
+ */
27
+ private buildFeatureDirect;
28
+ /** Whether to use direct generation (single CodeAgent) vs full MultiAgentLoop.
29
+ * For app creation (greenfield), direct mode is used for ALL features by default
30
+ * since there's no existing codebase to review against and the architecture plan
31
+ * already provides full context. Multi-agent mode adds overhead without proportional value. */
32
+ private shouldUseDirect;
33
+ /** Determine verification tier based on feature characteristics. */
34
+ private getVerificationTier;
35
+ /** Build the goal string for a feature (shared between buildFeature and buildFeatureDirect). */
36
+ private buildFeatureGoal;
37
+ private emitPhase;
38
+ private makeResult;
39
+ private audit;
40
+ private slugify;
41
+ private routeToFilePath;
42
+ private pageToFilePath;
43
+ private fileExists;
44
+ private searchForSchemaEntity;
45
+ }