multi-agents-cli 1.1.26 → 1.1.28
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/core/workflow/agent.js +1 -132
- package/lib/agent-config.js +147 -0
- package/lib/writers.js +1 -9
- package/package.json +1 -1
package/core/workflow/agent.js
CHANGED
|
@@ -14,6 +14,7 @@ const path = require('path');
|
|
|
14
14
|
const { execSync } = require('child_process');
|
|
15
15
|
const guards = require('./guards');
|
|
16
16
|
const tasksHistory = require('./tasks_history');
|
|
17
|
+
const { AGENTS, AGENT_DESCRIPTIONS, AGENT_TASK_SUFFIX, SCAFFOLD_REQUIRED, CONTRACTS_REQUIRED, AGENT_PREREQUISITES, DOD_ITEMS, AGENT_QUESTIONS } = require('../../lib/agent-config');
|
|
17
18
|
|
|
18
19
|
// ── Prompts (arrow-key navigation) ───────────────────────────────────────────
|
|
19
20
|
|
|
@@ -218,69 +219,6 @@ const displayWorkspaceTree = (worktreeName, worktreePath, project, agent, framew
|
|
|
218
219
|
console.log('');
|
|
219
220
|
};
|
|
220
221
|
|
|
221
|
-
// ── Agent map ─────────────────────────────────────────────────────────────────
|
|
222
|
-
|
|
223
|
-
const AGENTS = {
|
|
224
|
-
client: ['UI', 'LOGIC', 'FORMS', 'ROUTING', 'TESTING', 'ACCESSIBILITY'],
|
|
225
|
-
backend: ['INIT', 'API', 'LOGIC', 'AUTH', 'DB', 'TESTING', 'EVENTS', 'JOBS'],
|
|
226
|
-
shared: ['SECURITY'],
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
// Short descriptions per agent
|
|
230
|
-
const AGENT_DESCRIPTIONS = {
|
|
231
|
-
client: {
|
|
232
|
-
UI: 'scaffolds the full project structure',
|
|
233
|
-
LOGIC: 'state management, API integration, custom hooks',
|
|
234
|
-
FORMS: 'form components, validation, submission handling',
|
|
235
|
-
ROUTING: 'page routing, navigation, URL structure',
|
|
236
|
-
TESTING: 'unit and integration tests',
|
|
237
|
-
ACCESSIBILITY: 'a11y compliance, keyboard navigation',
|
|
238
|
-
},
|
|
239
|
-
backend: {
|
|
240
|
-
INIT: 'scaffolds backend architecture, folder structure, DB setup, wiring config and contracts',
|
|
241
|
-
API: 'REST/GraphQL endpoints, request/response handling',
|
|
242
|
-
LOGIC: 'business logic, services, data processing',
|
|
243
|
-
AUTH: 'authentication, authorization, session management',
|
|
244
|
-
DB: 'database schemas, migrations, queries',
|
|
245
|
-
TESTING: 'API and integration tests',
|
|
246
|
-
EVENTS: 'event queues, pub/sub, webhooks',
|
|
247
|
-
JOBS: 'background jobs, scheduled tasks, workers',
|
|
248
|
-
},
|
|
249
|
-
shared: {
|
|
250
|
-
SECURITY: 'shared auth utilities, encryption, input validation',
|
|
251
|
-
},
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
// Scope constraints appended to every task description - agent cannot bypass its own task
|
|
255
|
-
const AGENT_TASK_SUFFIX = {
|
|
256
|
-
client: {
|
|
257
|
-
UI: ' - scaffold project structure and component shells ONLY. No business logic, state management, or API calls. Use <!-- TODO: LOGIC agent --> where logic will be needed.',
|
|
258
|
-
LOGIC: ' - implement state, services, and API integration ONLY. No UI markup or styling changes. No route definitions.',
|
|
259
|
-
FORMS: ' - implement form components, validation rules, and submission handlers ONLY. No UI redesign. No state outside forms.',
|
|
260
|
-
ROUTING: ' - implement routes, guards, lazy loading, and navigation ONLY. No business logic. No UI changes.',
|
|
261
|
-
TESTING: ' - write unit and integration tests ONLY. Do not modify production code except to fix bugs directly revealed by failing tests.',
|
|
262
|
-
ACCESSIBILITY: ' - implement ARIA attributes, keyboard navigation, and semantic HTML ONLY. No visual redesign. No business logic changes.',
|
|
263
|
-
},
|
|
264
|
-
backend: {
|
|
265
|
-
INIT: ' - scaffold the backend architecture ONLY. Decide folder structure, MVC/service pattern, DB connection setup, and framework configuration. Bootstrap CONTRACTS.md with initial shared types. Write wiring.config.json backend section with all required runtime vars per environment. No endpoint implementation. No business logic.',
|
|
266
|
-
API: ' - read CONTRACTS.md and wiring.config.json first as binding contracts before implementing anything. Implement route handlers, controllers, and DTOs ONLY. No business logic services. No auth middleware. No database queries. No architectural changes.',
|
|
267
|
-
LOGIC: ' - implement services and business logic ONLY. No route definitions. No auth middleware. No database schema changes.',
|
|
268
|
-
AUTH: ' - implement authentication and authorization ONLY. No business logic. No database schema changes. No API route restructuring.',
|
|
269
|
-
DB: ' - implement database schema, migrations, and queries ONLY. No business logic. No API handlers. No auth.',
|
|
270
|
-
TESTING: ' - write unit and integration tests ONLY. Do not modify production code except to fix bugs directly revealed by failing tests.',
|
|
271
|
-
EVENTS: ' - implement event queues, pub/sub, and webhooks ONLY. No business logic. No API endpoint changes.',
|
|
272
|
-
JOBS: ' - implement background jobs and scheduled tasks ONLY. No business logic services. No API endpoints.',
|
|
273
|
-
},
|
|
274
|
-
shared: {
|
|
275
|
-
SECURITY: ' - implement shared auth utilities, encryption, and input validation ONLY. No scope-specific business logic.',
|
|
276
|
-
},
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
// Agents that require an existing scope scaffold before they can run
|
|
280
|
-
const SCAFFOLD_REQUIRED = ['LOGIC', 'FORMS', 'ROUTING', 'TESTING', 'ACCESSIBILITY', 'API', 'AUTH', 'DB', 'EVENTS', 'JOBS'];
|
|
281
|
-
|
|
282
|
-
// Agents that depend on shared contracts (CONTRACTS.md)
|
|
283
|
-
const CONTRACTS_REQUIRED = ['LOGIC', 'AUTH', 'API', 'FORMS', 'INIT'];
|
|
284
222
|
|
|
285
223
|
// ── CLOUD prereq evaluator ────────────────────────────────────────────────────
|
|
286
224
|
|
|
@@ -301,75 +239,6 @@ const evalCloudPrereqs = (entries) => {
|
|
|
301
239
|
return { prereqMet, clientUI, clientLogic, backendINIT, isClientOnly, isBackendOnly };
|
|
302
240
|
};
|
|
303
241
|
|
|
304
|
-
// Prerequisite agents that must be COMPLETED before an agent can run
|
|
305
|
-
const AGENT_PREREQUISITES = {
|
|
306
|
-
client: {
|
|
307
|
-
LOGIC: ['UI'],
|
|
308
|
-
FORMS: ['UI'],
|
|
309
|
-
ROUTING: ['UI'],
|
|
310
|
-
TESTING: ['UI', 'LOGIC'],
|
|
311
|
-
ACCESSIBILITY: ['UI'],
|
|
312
|
-
},
|
|
313
|
-
backend: {
|
|
314
|
-
API: ['INIT'],
|
|
315
|
-
LOGIC: ['INIT', 'DB'],
|
|
316
|
-
AUTH: ['INIT', 'LOGIC'],
|
|
317
|
-
DB: ['INIT'],
|
|
318
|
-
EVENTS: ['INIT', 'API'],
|
|
319
|
-
JOBS: ['INIT', 'DB'],
|
|
320
|
-
TESTING: ['INIT', 'API', 'LOGIC'],
|
|
321
|
-
},
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
const DOD_ITEMS = {
|
|
325
|
-
UI: ['All planned components exist and render correctly', 'No business logic inside components', 'All values derive from design tokens', 'Shared types consumed from CONTRACTS.md'],
|
|
326
|
-
LOGIC: ['All planned logic units exist and function correctly', 'No API calls outside the service layer', 'All response types from CONTRACTS.md', 'State and data fetching concerns separated'],
|
|
327
|
-
FORMS: ['All fields exist with correct validation rules', 'Error messages are clear and user-facing', 'Submission payload matches CONTRACTS.md', 'Double submission is prevented'],
|
|
328
|
-
ROUTING: ['All routes resolve to correct components', 'Every protected route declares its guard', 'All routes are lazy loaded unless justified', 'Route paths are centralized'],
|
|
329
|
-
TESTING: ['All planned test cases exist and pass', 'Happy path, edge cases, and failure states covered', 'Test data shapes from CONTRACTS.md', 'No implementation changes made'],
|
|
330
|
-
ACCESSIBILITY: ['All audit findings resolved', 'Every interactive element keyboard reachable', 'Focus managed after dynamic content changes', 'Color contrast meets WCAG 2.1 AA'],
|
|
331
|
-
API: ['All endpoints exist with correct HTTP methods', 'DTOs own all input validation', 'All types in CONTRACTS.md', 'Every endpoint declares access control'],
|
|
332
|
-
AUTH: ['All strategies and guards function correctly', 'No secrets in code', 'All tokens have expiry set', 'Auth failures return consistent responses'],
|
|
333
|
-
DB: ['All entities and relationships defined', 'Migration generated and surfaced', 'Repository methods own all queries', 'No ORM auto-sync used'],
|
|
334
|
-
EVENTS: ['All emitters and handlers exist', 'Receivers acknowledge immediately', 'All handlers are idempotent', 'Failure handling defined'],
|
|
335
|
-
JOBS: ['All jobs exist with correct triggers', 'Schedule expressions from config', 'All jobs are idempotent', 'Failure strategy defined for every job'],
|
|
336
|
-
SECURITY: ['All findings documented with severity', 'Every finding has a remediation proposal', 'OWASP Top 10 coverage confirmed', 'No fixes implemented directly'],
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
// ── Agent context questions ───────────────────────────────────────────────────
|
|
340
|
-
|
|
341
|
-
const AGENT_QUESTIONS = {
|
|
342
|
-
LOGIC: [
|
|
343
|
-
{ key: 'entities', prompt: 'What entities / models are involved?', consequence: 'agent may generate incompatible types' },
|
|
344
|
-
{ key: 'endpoints', prompt: 'What API endpoints need to be integrated?', consequence: 'agent may assume incorrect contracts' },
|
|
345
|
-
{ key: 'state', prompt: 'What state needs to be managed?', consequence: 'agent may miss state requirements' },
|
|
346
|
-
{ key: 'contracts', prompt: 'Any contracts from CONTRACTS.md to reference?', consequence: 'shared types may need rework after' },
|
|
347
|
-
],
|
|
348
|
-
FORMS: [
|
|
349
|
-
{ key: 'fields', prompt: 'What form fields are required?', consequence: 'agent may miss field requirements' },
|
|
350
|
-
{ key: 'validation', prompt: 'What validation rules apply?', consequence: 'validation logic may be incomplete' },
|
|
351
|
-
{ key: 'endpoint', prompt: 'What endpoint does this form submit to?', consequence: 'submission payload may not match contracts' },
|
|
352
|
-
],
|
|
353
|
-
AUTH: [
|
|
354
|
-
{ key: 'strategy', prompt: 'What auth strategy is needed? (JWT / OAuth / etc.)', consequence: 'auth implementation may use incorrect strategy' },
|
|
355
|
-
{ key: 'guards', prompt: 'What entities or routes need auth guards?', consequence: 'access control may be incomplete' },
|
|
356
|
-
{ key: 'tokens', prompt: 'What token / session requirements apply?', consequence: 'token handling may not match contracts' },
|
|
357
|
-
],
|
|
358
|
-
API: [
|
|
359
|
-
{ key: 'endpoints', prompt: 'What endpoints need to be created?', consequence: 'endpoint coverage may be incomplete' },
|
|
360
|
-
{ key: 'dtos', prompt: 'What request / response DTOs are needed?', consequence: 'DTOs may not match client contracts' },
|
|
361
|
-
{ key: 'auth', prompt: 'Which endpoints require auth guards?', consequence: 'access control may be missing' },
|
|
362
|
-
],
|
|
363
|
-
DB: [
|
|
364
|
-
{ key: 'entities', prompt: 'What entities / tables need to be defined?', consequence: 'schema may be incomplete' },
|
|
365
|
-
{ key: 'relations', prompt: 'What relationships exist between entities?', consequence: 'relations may be missing or incorrect' },
|
|
366
|
-
{ key: 'migrations', prompt: 'Any specific migration requirements?', consequence: 'migration may not match expected schema' },
|
|
367
|
-
],
|
|
368
|
-
TESTING: [
|
|
369
|
-
{ key: 'scenarios', prompt: 'What scenarios / flows need test coverage?', consequence: 'test coverage may be insufficient' },
|
|
370
|
-
{ key: 'edge', prompt: 'What edge cases should be covered?', consequence: 'edge cases may be missed' },
|
|
371
|
-
],
|
|
372
|
-
};
|
|
373
242
|
|
|
374
243
|
// ── BUILD_STATE parser ────────────────────────────────────────────────────────
|
|
375
244
|
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// ── Agent definitions ─────────────────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
const AGENTS = {
|
|
6
|
+
client: ['UI', 'LOGIC', 'FORMS', 'ROUTING', 'TESTING', 'ACCESSIBILITY'],
|
|
7
|
+
backend: ['INIT', 'API', 'LOGIC', 'AUTH', 'DB', 'TESTING', 'EVENTS', 'JOBS'],
|
|
8
|
+
shared: ['SECURITY'],
|
|
9
|
+
};
|
|
10
|
+
// Short descriptions per agent
|
|
11
|
+
const AGENT_DESCRIPTIONS = {
|
|
12
|
+
client: {
|
|
13
|
+
UI: 'scaffolds the full project structure',
|
|
14
|
+
LOGIC: 'state management, API integration, custom hooks',
|
|
15
|
+
FORMS: 'form components, validation, submission handling',
|
|
16
|
+
ROUTING: 'page routing, navigation, URL structure',
|
|
17
|
+
TESTING: 'unit and integration tests',
|
|
18
|
+
ACCESSIBILITY: 'a11y compliance, keyboard navigation',
|
|
19
|
+
},
|
|
20
|
+
backend: {
|
|
21
|
+
INIT: 'scaffolds backend architecture, folder structure, DB setup, wiring config and contracts',
|
|
22
|
+
API: 'REST/GraphQL endpoints, request/response handling',
|
|
23
|
+
LOGIC: 'business logic, services, data processing',
|
|
24
|
+
AUTH: 'authentication, authorization, session management',
|
|
25
|
+
DB: 'database schemas, migrations, queries',
|
|
26
|
+
TESTING: 'API and integration tests',
|
|
27
|
+
EVENTS: 'event queues, pub/sub, webhooks',
|
|
28
|
+
JOBS: 'background jobs, scheduled tasks, workers',
|
|
29
|
+
},
|
|
30
|
+
shared: {
|
|
31
|
+
SECURITY: 'shared auth utilities, encryption, input validation',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// Scope constraints appended to every task description - agent cannot bypass its own task
|
|
36
|
+
const AGENT_TASK_SUFFIX = {
|
|
37
|
+
client: {
|
|
38
|
+
UI: ' - scaffold project structure and component shells ONLY. No business logic, state management, or API calls. Use <!-- TODO: LOGIC agent --> where logic will be needed.',
|
|
39
|
+
LOGIC: ' - implement state, services, and API integration ONLY. No UI markup or styling changes. No route definitions.',
|
|
40
|
+
FORMS: ' - implement form components, validation rules, and submission handlers ONLY. No UI redesign. No state outside forms.',
|
|
41
|
+
ROUTING: ' - implement routes, guards, lazy loading, and navigation ONLY. No business logic. No UI changes.',
|
|
42
|
+
TESTING: ' - write unit and integration tests ONLY. Do not modify production code except to fix bugs directly revealed by failing tests.',
|
|
43
|
+
ACCESSIBILITY: ' - implement ARIA attributes, keyboard navigation, and semantic HTML ONLY. No visual redesign. No business logic changes.',
|
|
44
|
+
},
|
|
45
|
+
backend: {
|
|
46
|
+
INIT: ' - scaffold the backend architecture ONLY. Decide folder structure, MVC/service pattern, DB connection setup, and framework configuration. Bootstrap CONTRACTS.md with initial shared types. Write wiring.config.json backend section with all required runtime vars per environment. No endpoint implementation. No business logic.',
|
|
47
|
+
API: ' - read CONTRACTS.md and wiring.config.json first as binding contracts before implementing anything. Implement route handlers, controllers, and DTOs ONLY. No business logic services. No auth middleware. No database queries. No architectural changes.',
|
|
48
|
+
LOGIC: ' - implement services and business logic ONLY. No route definitions. No auth middleware. No database schema changes.',
|
|
49
|
+
AUTH: ' - implement authentication and authorization ONLY. No business logic. No database schema changes. No API route restructuring.',
|
|
50
|
+
DB: ' - implement database schema, migrations, and queries ONLY. No business logic. No API handlers. No auth.',
|
|
51
|
+
TESTING: ' - write unit and integration tests ONLY. Do not modify production code except to fix bugs directly revealed by failing tests.',
|
|
52
|
+
EVENTS: ' - implement event queues, pub/sub, and webhooks ONLY. No business logic. No API endpoint changes.',
|
|
53
|
+
JOBS: ' - implement background jobs and scheduled tasks ONLY. No business logic services. No API endpoints.',
|
|
54
|
+
},
|
|
55
|
+
shared: {
|
|
56
|
+
SECURITY: ' - implement shared auth utilities, encryption, and input validation ONLY. No scope-specific business logic.',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Agents that require an existing scope scaffold before they can run
|
|
61
|
+
const SCAFFOLD_REQUIRED = ['LOGIC', 'FORMS', 'ROUTING', 'TESTING', 'ACCESSIBILITY', 'API', 'AUTH', 'DB', 'EVENTS', 'JOBS'];
|
|
62
|
+
|
|
63
|
+
// Agents that depend on shared contracts (CONTRACTS.md)
|
|
64
|
+
const CONTRACTS_REQUIRED = ['LOGIC', 'AUTH', 'API', 'FORMS', 'INIT'];
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
// Prerequisite agents that must be COMPLETED before an agent can run
|
|
69
|
+
const AGENT_PREREQUISITES = {
|
|
70
|
+
client: {
|
|
71
|
+
LOGIC: ['UI'],
|
|
72
|
+
FORMS: ['UI'],
|
|
73
|
+
ROUTING: ['UI'],
|
|
74
|
+
TESTING: ['UI', 'LOGIC'],
|
|
75
|
+
ACCESSIBILITY: ['UI'],
|
|
76
|
+
},
|
|
77
|
+
backend: {
|
|
78
|
+
API: ['INIT'],
|
|
79
|
+
LOGIC: ['INIT', 'DB'],
|
|
80
|
+
AUTH: ['INIT', 'LOGIC'],
|
|
81
|
+
DB: ['INIT'],
|
|
82
|
+
EVENTS: ['INIT', 'API'],
|
|
83
|
+
JOBS: ['INIT', 'DB'],
|
|
84
|
+
TESTING: ['INIT', 'API', 'LOGIC'],
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const DOD_ITEMS = {
|
|
89
|
+
UI: ['All planned components exist and render correctly', 'No business logic inside components', 'All values derive from design tokens', 'Shared types consumed from CONTRACTS.md'],
|
|
90
|
+
LOGIC: ['All planned logic units exist and function correctly', 'No API calls outside the service layer', 'All response types from CONTRACTS.md', 'State and data fetching concerns separated'],
|
|
91
|
+
FORMS: ['All fields exist with correct validation rules', 'Error messages are clear and user-facing', 'Submission payload matches CONTRACTS.md', 'Double submission is prevented'],
|
|
92
|
+
ROUTING: ['All routes resolve to correct components', 'Every protected route declares its guard', 'All routes are lazy loaded unless justified', 'Route paths are centralized'],
|
|
93
|
+
TESTING: ['All planned test cases exist and pass', 'Happy path, edge cases, and failure states covered', 'Test data shapes from CONTRACTS.md', 'No implementation changes made'],
|
|
94
|
+
ACCESSIBILITY: ['All audit findings resolved', 'Every interactive element keyboard reachable', 'Focus managed after dynamic content changes', 'Color contrast meets WCAG 2.1 AA'],
|
|
95
|
+
API: ['All endpoints exist with correct HTTP methods', 'DTOs own all input validation', 'All types in CONTRACTS.md', 'Every endpoint declares access control'],
|
|
96
|
+
AUTH: ['All strategies and guards function correctly', 'No secrets in code', 'All tokens have expiry set', 'Auth failures return consistent responses'],
|
|
97
|
+
DB: ['All entities and relationships defined', 'Migration generated and surfaced', 'Repository methods own all queries', 'No ORM auto-sync used'],
|
|
98
|
+
EVENTS: ['All emitters and handlers exist', 'Receivers acknowledge immediately', 'All handlers are idempotent', 'Failure handling defined'],
|
|
99
|
+
JOBS: ['All jobs exist with correct triggers', 'Schedule expressions from config', 'All jobs are idempotent', 'Failure strategy defined for every job'],
|
|
100
|
+
SECURITY: ['All findings documented with severity', 'Every finding has a remediation proposal', 'OWASP Top 10 coverage confirmed', 'No fixes implemented directly'],
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// ── Agent context questions ───────────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
const AGENT_QUESTIONS = {
|
|
106
|
+
LOGIC: [
|
|
107
|
+
{ key: 'entities', prompt: 'What entities / models are involved?', consequence: 'agent may generate incompatible types' },
|
|
108
|
+
{ key: 'endpoints', prompt: 'What API endpoints need to be integrated?', consequence: 'agent may assume incorrect contracts' },
|
|
109
|
+
{ key: 'state', prompt: 'What state needs to be managed?', consequence: 'agent may miss state requirements' },
|
|
110
|
+
{ key: 'contracts', prompt: 'Any contracts from CONTRACTS.md to reference?', consequence: 'shared types may need rework after' },
|
|
111
|
+
],
|
|
112
|
+
FORMS: [
|
|
113
|
+
{ key: 'fields', prompt: 'What form fields are required?', consequence: 'agent may miss field requirements' },
|
|
114
|
+
{ key: 'validation', prompt: 'What validation rules apply?', consequence: 'validation logic may be incomplete' },
|
|
115
|
+
{ key: 'endpoint', prompt: 'What endpoint does this form submit to?', consequence: 'submission payload may not match contracts' },
|
|
116
|
+
],
|
|
117
|
+
AUTH: [
|
|
118
|
+
{ key: 'strategy', prompt: 'What auth strategy is needed? (JWT / OAuth / etc.)', consequence: 'auth implementation may use incorrect strategy' },
|
|
119
|
+
{ key: 'guards', prompt: 'What entities or routes need auth guards?', consequence: 'access control may be incomplete' },
|
|
120
|
+
{ key: 'tokens', prompt: 'What token / session requirements apply?', consequence: 'token handling may not match contracts' },
|
|
121
|
+
],
|
|
122
|
+
API: [
|
|
123
|
+
{ key: 'endpoints', prompt: 'What endpoints need to be created?', consequence: 'endpoint coverage may be incomplete' },
|
|
124
|
+
{ key: 'dtos', prompt: 'What request / response DTOs are needed?', consequence: 'DTOs may not match client contracts' },
|
|
125
|
+
{ key: 'auth', prompt: 'Which endpoints require auth guards?', consequence: 'access control may be missing' },
|
|
126
|
+
],
|
|
127
|
+
DB: [
|
|
128
|
+
{ key: 'entities', prompt: 'What entities / tables need to be defined?', consequence: 'schema may be incomplete' },
|
|
129
|
+
{ key: 'relations', prompt: 'What relationships exist between entities?', consequence: 'relations may be missing or incorrect' },
|
|
130
|
+
{ key: 'migrations', prompt: 'Any specific migration requirements?', consequence: 'migration may not match expected schema' },
|
|
131
|
+
],
|
|
132
|
+
TESTING: [
|
|
133
|
+
{ key: 'scenarios', prompt: 'What scenarios / flows need test coverage?', consequence: 'test coverage may be insufficient' },
|
|
134
|
+
{ key: 'edge', prompt: 'What edge cases should be covered?', consequence: 'edge cases may be missed' },
|
|
135
|
+
],
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
module.exports = {
|
|
139
|
+
AGENTS,
|
|
140
|
+
AGENT_DESCRIPTIONS,
|
|
141
|
+
AGENT_TASK_SUFFIX,
|
|
142
|
+
SCAFFOLD_REQUIRED,
|
|
143
|
+
CONTRACTS_REQUIRED,
|
|
144
|
+
AGENT_PREREQUISITES,
|
|
145
|
+
DOD_ITEMS,
|
|
146
|
+
AGENT_QUESTIONS,
|
|
147
|
+
};
|
package/lib/writers.js
CHANGED
|
@@ -117,15 +117,7 @@ const setupUserRemote = (ROOT, projectName) => {
|
|
|
117
117
|
{ cwd: ROOT, encoding: 'utf8', stdio: 'pipe' }).trim();
|
|
118
118
|
} catch {}
|
|
119
119
|
|
|
120
|
-
if (currentOrigin
|
|
121
|
-
|
|
122
|
-
if (currentOrigin?.includes('multi-agents-template')) {
|
|
123
|
-
try {
|
|
124
|
-
execSync('git remote remove origin', { cwd: ROOT, stdio: 'pipe' });
|
|
125
|
-
execSync(`git remote add upstream ${currentOrigin}`, { cwd: ROOT, stdio: 'pipe' });
|
|
126
|
-
console.log(dim(' ℹ Template remote moved to upstream'));
|
|
127
|
-
} catch {}
|
|
128
|
-
}
|
|
120
|
+
if (currentOrigin) return;
|
|
129
121
|
|
|
130
122
|
const flagPath = path.join(ROOT, '.scaffold', '.remote-setup-needed');
|
|
131
123
|
fs.writeFileSync(flagPath, JSON.stringify({
|
package/package.json
CHANGED