@ariso-ai/ivan 1.0.26 → 1.0.29

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 (69) hide show
  1. package/dist/config.d.ts +20 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +35 -11
  4. package/dist/config.js.map +1 -1
  5. package/dist/database/migrations/016_create_session_analyses_table.d.ts +3 -0
  6. package/dist/database/migrations/016_create_session_analyses_table.d.ts.map +1 -0
  7. package/dist/database/migrations/016_create_session_analyses_table.js +19 -0
  8. package/dist/database/migrations/016_create_session_analyses_table.js.map +1 -0
  9. package/dist/database/migrations/index.d.ts.map +1 -1
  10. package/dist/database/migrations/index.js +3 -1
  11. package/dist/database/migrations/index.js.map +1 -1
  12. package/dist/database.d.ts +2 -0
  13. package/dist/database.d.ts.map +1 -1
  14. package/dist/database.js +3 -0
  15. package/dist/database.js.map +1 -1
  16. package/dist/index.js +19 -5
  17. package/dist/index.js.map +1 -1
  18. package/dist/learnings/coding-sessions-command.d.ts +12 -0
  19. package/dist/learnings/coding-sessions-command.d.ts.map +1 -0
  20. package/dist/learnings/coding-sessions-command.js +274 -0
  21. package/dist/learnings/coding-sessions-command.js.map +1 -0
  22. package/dist/learnings/database.js +1 -1
  23. package/dist/learnings/database.js.map +1 -1
  24. package/dist/learnings/embeddings.d.ts.map +1 -1
  25. package/dist/learnings/embeddings.js +15 -2
  26. package/dist/learnings/embeddings.js.map +1 -1
  27. package/dist/learnings/index.d.ts +1 -1
  28. package/dist/learnings/index.d.ts.map +1 -1
  29. package/dist/learnings/index.js +23 -11
  30. package/dist/learnings/index.js.map +1 -1
  31. package/dist/learnings/install-hooks-command.js +2 -2
  32. package/dist/learnings/session-analyzer.d.ts +39 -0
  33. package/dist/learnings/session-analyzer.d.ts.map +1 -0
  34. package/dist/learnings/session-analyzer.js +339 -0
  35. package/dist/learnings/session-analyzer.js.map +1 -0
  36. package/dist/learnings/session-parser.d.ts +46 -0
  37. package/dist/learnings/session-parser.d.ts.map +1 -0
  38. package/dist/learnings/session-parser.js +235 -0
  39. package/dist/learnings/session-parser.js.map +1 -0
  40. package/dist/services/claude-cli-executor.d.ts +3 -6
  41. package/dist/services/claude-cli-executor.d.ts.map +1 -1
  42. package/dist/services/claude-cli-executor.js +21 -5
  43. package/dist/services/claude-cli-executor.js.map +1 -1
  44. package/dist/services/claude-executor.d.ts +3 -6
  45. package/dist/services/claude-executor.d.ts.map +1 -1
  46. package/dist/services/claude-executor.js +21 -7
  47. package/dist/services/claude-executor.js.map +1 -1
  48. package/dist/services/collaborative-executor.d.ts +67 -0
  49. package/dist/services/collaborative-executor.d.ts.map +1 -0
  50. package/dist/services/collaborative-executor.js +325 -0
  51. package/dist/services/collaborative-executor.js.map +1 -0
  52. package/dist/services/executor-factory.d.ts +28 -5
  53. package/dist/services/executor-factory.d.ts.map +1 -1
  54. package/dist/services/executor-factory.js.map +1 -1
  55. package/dist/services/repository-manager-cli.d.ts +0 -2
  56. package/dist/services/repository-manager-cli.d.ts.map +1 -1
  57. package/dist/services/repository-manager-cli.js +2 -27
  58. package/dist/services/repository-manager-cli.js.map +1 -1
  59. package/dist/services/repository-manager-pat.d.ts +0 -2
  60. package/dist/services/repository-manager-pat.d.ts.map +1 -1
  61. package/dist/services/repository-manager-pat.js +2 -27
  62. package/dist/services/repository-manager-pat.js.map +1 -1
  63. package/dist/services/task-executor.d.ts +15 -1
  64. package/dist/services/task-executor.d.ts.map +1 -1
  65. package/dist/services/task-executor.js +63 -5
  66. package/dist/services/task-executor.js.map +1 -1
  67. package/dist/types/non-interactive-config.d.ts +7 -0
  68. package/dist/types/non-interactive-config.d.ts.map +1 -1
  69. package/package.json +2 -2
@@ -0,0 +1,325 @@
1
+ import chalk from 'chalk';
2
+ import { queryLearnings } from '../learnings/index.js';
3
+ /**
4
+ * The architect persona. A separate Claude session adopts this role to critique
5
+ * the implementer across design and review rounds — Ivan acting as a principal
6
+ * engineer / critical-thinking partner rather than a one-shot dispatcher.
7
+ */
8
+ const ARCHITECT_SYSTEM_PROMPT = `You are a principal engineer reviewing a teammate's work. You hold your team's hard-won institutional knowledge and you care about correctness, simplicity, and long-term maintainability.
9
+
10
+ You are not the implementer — you do not write the code. Your job is to think critically: challenge questionable decisions, surface risks and edge cases, point out where the work diverges from the team's established lessons, and propose simpler or safer alternatives. Be specific and concrete; vague approval is worse than useless. You may read and inspect the codebase, but never modify it.
11
+
12
+ When you finish, end your message with exactly one line, nothing after it — one of:
13
+ VERDICT: APPROVE (the work is sound; proceed)
14
+ VERDICT: APPROVE_WITH_NITS (only minor, non-blocking suggestions remain — they can be folded in without another round)
15
+ VERDICT: REVISE (a blocking problem must be fixed before proceeding)
16
+
17
+ Calibrate your verdict deliberately, because each REVISE costs a full revision round:
18
+ - Reserve REVISE for genuinely blocking issues: incorrectness, a wrong or risky approach, violated conventions, or real unaddressed risk.
19
+ - If the work is good enough to proceed and your remaining concerns are minor, stylistic, speculative, or better handled later, use APPROVE_WITH_NITS instead of spending another round.
20
+ - Iterate as many rounds as the problem genuinely needs, but do not manufacture concerns to keep iterating. When a design is sound, approve it.`;
21
+ const MAX_DIFF_CHARS = 60000;
22
+ /**
23
+ * Drives an "expert"-mode collaboration: a separate architect Claude session
24
+ * critiques an implementer Claude session across a design dialogue, then the
25
+ * implementation, then a code-review dialogue — informed by the team's
26
+ * institutional learnings. The implementer's final session is returned so
27
+ * callers can thread context across tasks (single-PR mode).
28
+ */
29
+ export class CollaborativeExecutor {
30
+ executor;
31
+ config;
32
+ constructor(executor, config) {
33
+ this.executor = executor;
34
+ this.config = config;
35
+ }
36
+ async run(params) {
37
+ const { taskDescription, executionPath, learningsRepoPath, getDiff, incomingSessionId } = params;
38
+ const transcript = [];
39
+ const record = (heading, body) => {
40
+ transcript.push(`\n=== ${heading} ===\n${body}`);
41
+ };
42
+ this.header('🧠 Expert mode: assembling institutional knowledge');
43
+ const brief = await this.buildBrief(learningsRepoPath, taskDescription);
44
+ if (brief) {
45
+ console.log(chalk.gray(brief));
46
+ record('Institutional knowledge', brief);
47
+ }
48
+ else {
49
+ console.log(chalk.gray('No relevant learnings found — proceeding without a brief.'));
50
+ }
51
+ let implSession = incomingSessionId;
52
+ let architectSession;
53
+ // Set when a phase proceeds despite an unresolved blocking (REVISE) verdict
54
+ // (round cap or stuck-detection). Surfaced to the caller so the reviewer
55
+ // sees what the architect rejected, without aborting the autonomous run.
56
+ let unresolvedConcerns;
57
+ // ----- Phase 1: design dialogue -----
58
+ // The number of rounds is not fixed: the loop ends as soon as the architect
59
+ // approves (or approves with nits), stops early if a concern is repeated
60
+ // unresolved, and only otherwise runs up to maxDesignRounds as a safety cap.
61
+ this.header('📐 Design dialogue');
62
+ let plan = await this.turn(this.planPrompt(taskDescription, brief), executionPath, { sessionId: implSession, permissionMode: 'plan' }, (r) => (implSession = r.sessionId));
63
+ record('Implementer — proposed plan', plan);
64
+ let designNits;
65
+ let previousDesignConcern;
66
+ for (let round = 1; round <= this.config.maxDesignRounds; round++) {
67
+ this.header(`🏛️ Architect — design review (round ${round})`);
68
+ const review = await this.turn(this.designReviewPrompt(taskDescription, plan, brief), executionPath, {
69
+ sessionId: architectSession,
70
+ permissionMode: 'plan',
71
+ readOnly: true,
72
+ systemPrompt: ARCHITECT_SYSTEM_PROMPT,
73
+ model: this.config.architectModel
74
+ }, (r) => (architectSession = r.sessionId));
75
+ const verdict = this.parseVerdict(review);
76
+ record(`Architect — design review (round ${round})`, review);
77
+ if (verdict.decision === 'approve') {
78
+ console.log(chalk.green('✅ Architect approved the design.'));
79
+ break;
80
+ }
81
+ if (verdict.decision === 'nits') {
82
+ console.log(chalk.green('✅ Architect approved the design with minor notes (folded into implementation).'));
83
+ designNits = verdict.notes;
84
+ break;
85
+ }
86
+ // Blocking (revise).
87
+ if (round === this.config.maxDesignRounds) {
88
+ console.log(chalk.yellow(`⚠️ Design still has blocking concerns after ${round} round(s) (safety cap reached); proceeding with the latest plan.`));
89
+ unresolvedConcerns = verdict.notes;
90
+ break;
91
+ }
92
+ if (previousDesignConcern &&
93
+ this.isRepeatConcern(previousDesignConcern, verdict.notes)) {
94
+ console.log(chalk.yellow('⚠️ Architect repeated the same unresolved concern; further design rounds are unlikely to help. Proceeding.'));
95
+ unresolvedConcerns = verdict.notes;
96
+ break;
97
+ }
98
+ previousDesignConcern = verdict.notes;
99
+ this.header(`🔨 Implementer — revising plan (round ${round})`);
100
+ plan = await this.turn(this.revisePlanPrompt(verdict.notes), executionPath, { sessionId: implSession, permissionMode: 'plan' }, (r) => (implSession = r.sessionId));
101
+ record(`Implementer — revised plan (round ${round})`, plan);
102
+ }
103
+ // ----- Phase 2: implementation -----
104
+ this.header('🛠️ Implementation');
105
+ const implLog = await this.turn(this.implementPrompt(designNits), executionPath, { sessionId: implSession, permissionMode: 'bypassPermissions' }, (r) => (implSession = r.sessionId));
106
+ record('Implementer — implementation', implLog);
107
+ // Tracks the most recent implementer output so the returned lastMessage
108
+ // reflects the final code after any review revisions, not the first turn.
109
+ let latestImplLog = implLog;
110
+ // ----- Phase 3: code-review dialogue -----
111
+ // Same dynamic termination as the design phase: ends on approval, accepts
112
+ // minor nits without another round, stops on a repeated unresolved concern,
113
+ // and uses maxReviewRounds only as a safety cap.
114
+ let previousReviewConcern;
115
+ for (let round = 1; round <= this.config.maxReviewRounds; round++) {
116
+ const diff = this.truncateDiff(getDiff());
117
+ if (!diff.trim()) {
118
+ console.log(chalk.yellow('⚠️ No changes to review; skipping code review.'));
119
+ break;
120
+ }
121
+ this.header(`🏛️ Architect — code review (round ${round})`);
122
+ const review = await this.turn(this.codeReviewPrompt(taskDescription, plan, diff, brief), executionPath, {
123
+ sessionId: architectSession,
124
+ permissionMode: 'plan',
125
+ readOnly: true,
126
+ systemPrompt: ARCHITECT_SYSTEM_PROMPT,
127
+ model: this.config.architectModel
128
+ }, (r) => (architectSession = r.sessionId));
129
+ const verdict = this.parseVerdict(review);
130
+ record(`Architect — code review (round ${round})`, review);
131
+ if (verdict.decision === 'approve') {
132
+ console.log(chalk.green('✅ Architect approved the implementation.'));
133
+ break;
134
+ }
135
+ if (verdict.decision === 'nits') {
136
+ console.log(chalk.green('✅ Architect approved the implementation with minor notes; applying them without another review round.'));
137
+ this.header('🔨 Implementer — applying review nits');
138
+ latestImplLog = await this.turn(this.applyNitsPrompt(verdict.notes), executionPath, { sessionId: implSession, permissionMode: 'bypassPermissions' }, (r) => (implSession = r.sessionId));
139
+ record('Implementer — applied review nits', latestImplLog);
140
+ break;
141
+ }
142
+ // Blocking (revise).
143
+ if (round === this.config.maxReviewRounds) {
144
+ console.log(chalk.yellow(`⚠️ Implementation still has blocking concerns after ${round} round(s) (safety cap reached); proceeding.`));
145
+ unresolvedConcerns = verdict.notes;
146
+ break;
147
+ }
148
+ if (previousReviewConcern &&
149
+ this.isRepeatConcern(previousReviewConcern, verdict.notes)) {
150
+ console.log(chalk.yellow('⚠️ Architect repeated the same unresolved concern; further review rounds are unlikely to help. Proceeding.'));
151
+ unresolvedConcerns = verdict.notes;
152
+ break;
153
+ }
154
+ previousReviewConcern = verdict.notes;
155
+ this.header(`🔨 Implementer — applying review changes (round ${round})`);
156
+ latestImplLog = await this.turn(this.reviseCodePrompt(verdict.notes), executionPath, { sessionId: implSession, permissionMode: 'bypassPermissions' }, (r) => (implSession = r.sessionId));
157
+ record(`Implementer — revisions (round ${round})`, latestImplLog);
158
+ }
159
+ return {
160
+ log: transcript.join('\n'),
161
+ lastMessage: latestImplLog,
162
+ sessionId: implSession || '',
163
+ ...(unresolvedConcerns ? { unresolvedConcerns } : {})
164
+ };
165
+ }
166
+ /**
167
+ * Runs a turn, captures its session id via the callback, and returns the
168
+ * full output text. We use `log` (the complete transcript) rather than
169
+ * `lastMessage` because the CLI executor only captures the last stdout line
170
+ * there, which would truncate the architect's critique and verdict.
171
+ */
172
+ async turn(prompt, executionPath, options, onResult) {
173
+ const r = await this.executor.executeTurn(prompt, executionPath, options);
174
+ onResult(r);
175
+ return r.log?.trim() || r.lastMessage;
176
+ }
177
+ async buildBrief(learningsRepoPath, taskDescription) {
178
+ let learnings = [];
179
+ try {
180
+ learnings = await queryLearnings(learningsRepoPath, taskDescription, {
181
+ limit: 8
182
+ });
183
+ }
184
+ catch {
185
+ // No learnings store, or it failed to open — expert mode still works.
186
+ return '';
187
+ }
188
+ if (learnings.length === 0)
189
+ return '';
190
+ return learnings
191
+ .map((l) => {
192
+ const label = l.title || l.kind;
193
+ const parts = [`- [${label}] ${l.statement}`];
194
+ if (l.rationale)
195
+ parts.push(` Why: ${l.rationale}`);
196
+ if (l.applicability)
197
+ parts.push(` When: ${l.applicability}`);
198
+ if (l.source_url)
199
+ parts.push(` Source: ${l.source_url}`);
200
+ return parts.join('\n');
201
+ })
202
+ .join('\n');
203
+ }
204
+ parseVerdict(message) {
205
+ // Order matters: APPROVE_WITH_NITS must be tested before APPROVE.
206
+ const match = message.match(/VERDICT:\s*(APPROVE_WITH_NITS|APPROVE|APPROVED|REVISE)/i);
207
+ // A missing/malformed verdict is treated as non-approval (revise): a
208
+ // substantive critique with a forgotten trailer must never be read as
209
+ // approval. The round cap bounds the downside of an over-cautious default.
210
+ let decision = 'revise';
211
+ if (match) {
212
+ const token = match[1].toUpperCase();
213
+ if (token === 'REVISE')
214
+ decision = 'revise';
215
+ else if (token === 'APPROVE_WITH_NITS')
216
+ decision = 'nits';
217
+ else
218
+ decision = 'approve';
219
+ }
220
+ return { decision, notes: message };
221
+ }
222
+ /**
223
+ * Best-effort detection of a repeated, unresolved concern. If the architect's
224
+ * new critique is lexically near-identical to the previous round's, the
225
+ * implementer likely could not resolve it and further rounds won't help, so we
226
+ * stop and proceed. The threshold is high to avoid halting on genuinely new
227
+ * feedback; the round cap remains the ultimate backstop.
228
+ */
229
+ isRepeatConcern(previous, current) {
230
+ const tokenize = (s) => new Set(s
231
+ .toLowerCase()
232
+ .replace(/verdict:\s*\w+/gi, '')
233
+ .replace(/[^a-z0-9\s]/g, ' ')
234
+ .split(/\s+/)
235
+ .filter((w) => w.length > 3));
236
+ const a = tokenize(previous);
237
+ const b = tokenize(current);
238
+ if (a.size === 0 || b.size === 0)
239
+ return false;
240
+ let intersection = 0;
241
+ for (const word of a)
242
+ if (b.has(word))
243
+ intersection++;
244
+ const union = a.size + b.size - intersection;
245
+ return union > 0 && intersection / union >= 0.85;
246
+ }
247
+ truncateDiff(diff) {
248
+ if (diff.length <= MAX_DIFF_CHARS)
249
+ return diff;
250
+ return (diff.slice(0, MAX_DIFF_CHARS) +
251
+ `\n\n[... diff truncated at ${MAX_DIFF_CHARS} characters. Read the files directly to review the rest. ...]`);
252
+ }
253
+ header(text) {
254
+ console.log('');
255
+ console.log(chalk.magenta.bold(text));
256
+ }
257
+ // ----- Prompt builders -----
258
+ briefBlock(brief) {
259
+ return brief
260
+ ? `\nRelevant institutional knowledge (lessons from this team's past PRs and coding sessions — weigh these heavily):\n${brief}\n`
261
+ : '';
262
+ }
263
+ planPrompt(task, brief) {
264
+ return `${task}
265
+ ${this.briefBlock(brief)}
266
+ Before writing any code, think like you're pairing with a senior engineer. Produce a concise technical plan: your intended approach, the key files you'll touch, the edge cases you'll handle, and any risks or trade-offs. Do NOT implement anything yet — respond with the plan only.`;
267
+ }
268
+ designReviewPrompt(task, plan, brief) {
269
+ return `Review a teammate's PROPOSED PLAN for the following task. No code has been written yet.
270
+
271
+ TASK:
272
+ ${task}
273
+ ${this.briefBlock(brief)}
274
+ PROPOSED PLAN:
275
+ ${plan}
276
+
277
+ Scrutinize the plan. Inspect the codebase (read-only) as needed to ground your critique. Look for: a wrong or over-complicated approach, missed edge cases, anything that violates the institutional knowledge above, unaddressed risks, and simpler alternatives.`;
278
+ }
279
+ revisePlanPrompt(notes) {
280
+ return `Your reviewer (a principal engineer) raised the following on your plan:
281
+
282
+ ${notes}
283
+
284
+ Revise your technical plan to address this feedback. Do NOT implement yet — respond with the updated plan only.`;
285
+ }
286
+ implementPrompt(nits) {
287
+ const base = `Your plan has been approved by the reviewer. Implement it in full now. Follow the agreed approach and honor the institutional knowledge discussed earlier.`;
288
+ if (!nits)
289
+ return base;
290
+ return `${base}
291
+
292
+ The reviewer approved the design but left minor, non-blocking notes. Address them where reasonable as you implement:
293
+
294
+ ${nits}`;
295
+ }
296
+ codeReviewPrompt(task, plan, diff, brief) {
297
+ return `Review your teammate's IMPLEMENTATION (the diff below) for this task.
298
+
299
+ TASK:
300
+ ${task}
301
+
302
+ AGREED PLAN:
303
+ ${plan}
304
+ ${this.briefBlock(brief)}
305
+ DIFF:
306
+ ${diff}
307
+
308
+ Review for correctness bugs, deviations from the agreed plan, violations of the institutional knowledge, missing tests or edge cases, and simplification opportunities. You may inspect the codebase read-only.`;
309
+ }
310
+ reviseCodePrompt(notes) {
311
+ return `Your reviewer (a principal engineer) requested changes:
312
+
313
+ ${notes}
314
+
315
+ Apply these changes to the implementation now.`;
316
+ }
317
+ applyNitsPrompt(notes) {
318
+ return `Your reviewer approved the implementation with only minor, non-blocking notes:
319
+
320
+ ${notes}
321
+
322
+ Apply these minor improvements now where reasonable. Keep the changes small and focused — do not undertake larger rework.`;
323
+ }
324
+ }
325
+ //# sourceMappingURL=collaborative-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collaborative-executor.js","sourceRoot":"","sources":["../../src/services/collaborative-executor.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,33 @@
1
+ export interface TurnResult {
2
+ log: string;
3
+ lastMessage: string;
4
+ sessionId: string;
5
+ }
6
+ export interface TurnOptions {
7
+ /** Resume an existing Claude session to preserve conversational context. */
8
+ sessionId?: string;
9
+ /** Permission mode for this turn. 'plan' prevents edits (design dialogue). */
10
+ permissionMode?: 'plan' | 'acceptEdits' | 'bypassPermissions';
11
+ /** Optional system prompt to shape the turn (e.g. the architect persona). */
12
+ systemPrompt?: string;
13
+ /** Override the configured model for this turn (e.g. the architect model). */
14
+ model?: string;
15
+ /**
16
+ * When true, disallow file-mutating tools (Edit/Write/NotebookEdit) so the
17
+ * session can read, grep, and inspect but not modify the worktree. Used for
18
+ * the architect/reviewer role.
19
+ */
20
+ readOnly?: boolean;
21
+ }
1
22
  export interface IClaudeExecutor {
2
23
  quietMode: boolean;
3
- executeTask(taskDescription: string, workingDir: string, sessionId?: string): Promise<{
4
- log: string;
5
- lastMessage: string;
6
- sessionId: string;
7
- }>;
24
+ executeTask(taskDescription: string, workingDir: string, sessionId?: string): Promise<TurnResult>;
25
+ /**
26
+ * Execute a single conversational turn with fine-grained control over
27
+ * session continuity, permission mode, system prompt, model, and tool access.
28
+ * `executeTask` is a thin wrapper over this with implementer defaults.
29
+ */
30
+ executeTurn(prompt: string, workingDir: string, options?: TurnOptions): Promise<TurnResult>;
8
31
  generateTaskBreakdown(jobDescription: string, workingDir: string): Promise<string[]>;
9
32
  validateClaudeCodeInstallation(): Promise<void>;
10
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"executor-factory.d.ts","sourceRoot":"","sources":["../../src/services/executor-factory.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CACT,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,qBAAqB,CACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuB;IAEnD,MAAM,CAAC,WAAW,IAAI,eAAe;CAStC"}
1
+ {"version":3,"file":"executor-factory.d.ts","sourceRoot":"","sources":["../../src/services/executor-factory.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,mBAAmB,CAAC;IAC9D,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CACT,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB;;;;OAIG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,qBAAqB,CACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrB,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuB;IAEnD,MAAM,CAAC,WAAW,IAAI,eAAe;CAStC"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor-factory.js","sourceRoot":"","sources":["../../src/services/executor-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgB7C,MAAM,OAAO,eAAe;IAClB,MAAM,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnD,MAAM,CAAC,WAAW;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAE1D,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC"}
1
+ {"version":3,"file":"executor-factory.js","sourceRoot":"","sources":["../../src/services/executor-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAiD7C,MAAM,OAAO,eAAe;IAClB,MAAM,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnD,MAAM,CAAC,WAAW;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QAE1D,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC"}
@@ -6,8 +6,6 @@ export declare class RepositoryManagerCLI implements IRepositoryManager {
6
6
  constructor();
7
7
  getValidWorkingDirectory(): Promise<string>;
8
8
  private isGitRepository;
9
- private isIvanRepository;
10
- private isValidTargetRepository;
11
9
  private promptForRepositoryPath;
12
10
  getRepositoryInfo(workingDir: string): RepositoryInfo;
13
11
  private getRemoteUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"repository-manager-cli.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager-cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,SAAS,CAAkB;;IAK7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBjD,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,uBAAuB;YAIjB,uBAAuB;IAgDrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAcrD,OAAO,CAAC,YAAY;IAYd,qBAAqB,CACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAqClC,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"repository-manager-cli.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager-cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,SAAS,CAAkB;;IAK7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAejD,OAAO,CAAC,eAAe;YAYT,uBAAuB;IA2CrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAcrD,OAAO,CAAC,YAAY;IAYd,qBAAqB,CACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAqClC,KAAK,IAAI,IAAI;CAGd"}
@@ -11,16 +11,11 @@ export class RepositoryManagerCLI {
11
11
  }
12
12
  async getValidWorkingDirectory() {
13
13
  const currentDir = process.cwd();
14
- if (this.isValidTargetRepository(currentDir)) {
14
+ if (this.isGitRepository(currentDir)) {
15
15
  return currentDir;
16
16
  }
17
17
  console.log(chalk.yellow('⚠️ Current directory is not a valid target repository'));
18
- if (!this.isGitRepository(currentDir)) {
19
- console.log(chalk.red('❌ Not a git repository'));
20
- }
21
- else if (this.isIvanRepository(currentDir)) {
22
- console.log(chalk.red('❌ Cannot run Ivan on itself'));
23
- }
18
+ console.log(chalk.red('❌ Not a git repository'));
24
19
  return await this.promptForRepositoryPath();
25
20
  }
26
21
  isGitRepository(dir) {
@@ -35,22 +30,6 @@ export class RepositoryManagerCLI {
35
30
  return false;
36
31
  }
37
32
  }
38
- isIvanRepository(dir) {
39
- try {
40
- const packageJsonPath = path.join(dir, 'package.json');
41
- if (!fs.existsSync(packageJsonPath)) {
42
- return false;
43
- }
44
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
45
- return (packageJson.name === '@ariso-ai/ivan' || packageJson.name === 'ivan');
46
- }
47
- catch {
48
- return false;
49
- }
50
- }
51
- isValidTargetRepository(dir) {
52
- return this.isGitRepository(dir) && !this.isIvanRepository(dir);
53
- }
54
33
  async promptForRepositoryPath() {
55
34
  console.log('');
56
35
  console.log(chalk.blue('📁 Please specify the repository where Ivan should work'));
@@ -81,10 +60,6 @@ export class RepositoryManagerCLI {
81
60
  console.log(chalk.red('❌ Path is not a git repository'));
82
61
  continue;
83
62
  }
84
- if (this.isIvanRepository(fullPath)) {
85
- console.log(chalk.red('❌ Cannot run Ivan on itself'));
86
- continue;
87
- }
88
63
  console.log(chalk.green(`✅ Using repository: ${fullPath}`));
89
64
  return fullPath;
90
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository-manager-cli.js","sourceRoot":"","sources":["../../src/services/repository-manager-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-manager-cli.js","sourceRoot":"","sources":["../../src/services/repository-manager-cli.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,6 @@ export declare class RepositoryManagerPAT implements IRepositoryManager {
6
6
  constructor();
7
7
  getValidWorkingDirectory(): Promise<string>;
8
8
  private isGitRepository;
9
- private isIvanRepository;
10
- private isValidTargetRepository;
11
9
  private promptForRepositoryPath;
12
10
  getRepositoryInfo(workingDir: string): RepositoryInfo;
13
11
  private getRemoteUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"repository-manager-pat.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,SAAS,CAAkB;;IAM7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBjD,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,uBAAuB;YAIjB,uBAAuB;IAgDrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAcrD,OAAO,CAAC,YAAY;IAYd,qBAAqB,CACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAqClC,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"repository-manager-pat.d.ts","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,SAAS,CAAkB;;IAM7B,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAejD,OAAO,CAAC,eAAe;YAYT,uBAAuB;IA2CrC,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;IAcrD,OAAO,CAAC,YAAY;IAYd,qBAAqB,CACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAqClC,KAAK,IAAI,IAAI;CAGd"}
@@ -11,16 +11,11 @@ export class RepositoryManagerPAT {
11
11
  }
12
12
  async getValidWorkingDirectory() {
13
13
  const currentDir = process.cwd();
14
- if (this.isValidTargetRepository(currentDir)) {
14
+ if (this.isGitRepository(currentDir)) {
15
15
  return currentDir;
16
16
  }
17
17
  console.log(chalk.yellow('⚠️ Current directory is not a valid target repository'));
18
- if (!this.isGitRepository(currentDir)) {
19
- console.log(chalk.red('❌ Not a git repository'));
20
- }
21
- else if (this.isIvanRepository(currentDir)) {
22
- console.log(chalk.red('❌ Cannot run Ivan on itself'));
23
- }
18
+ console.log(chalk.red('❌ Not a git repository'));
24
19
  return await this.promptForRepositoryPath();
25
20
  }
26
21
  isGitRepository(dir) {
@@ -35,22 +30,6 @@ export class RepositoryManagerPAT {
35
30
  return false;
36
31
  }
37
32
  }
38
- isIvanRepository(dir) {
39
- try {
40
- const packageJsonPath = path.join(dir, 'package.json');
41
- if (!fs.existsSync(packageJsonPath)) {
42
- return false;
43
- }
44
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
45
- return (packageJson.name === '@ariso-ai/ivan' || packageJson.name === 'ivan');
46
- }
47
- catch {
48
- return false;
49
- }
50
- }
51
- isValidTargetRepository(dir) {
52
- return this.isGitRepository(dir) && !this.isIvanRepository(dir);
53
- }
54
33
  async promptForRepositoryPath() {
55
34
  console.log('');
56
35
  console.log(chalk.blue('📁 Please specify the repository where Ivan should work'));
@@ -81,10 +60,6 @@ export class RepositoryManagerPAT {
81
60
  console.log(chalk.red('❌ Path is not a git repository'));
82
61
  continue;
83
62
  }
84
- if (this.isIvanRepository(fullPath)) {
85
- console.log(chalk.red('❌ Cannot run Ivan on itself'));
86
- continue;
87
- }
88
63
  console.log(chalk.green(`✅ Using repository: ${fullPath}`));
89
64
  return fullPath;
90
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repository-manager-pat.js","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository-manager-pat.js","sourceRoot":"","sources":["../../src/services/repository-manager-pat.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { NonInteractiveConfig } from '../types/non-interactive-config.js';
2
+ import type { ExecutionMode } from '../types/non-interactive-config.js';
2
3
  export declare class TaskExecutor {
3
4
  private jobManager;
4
5
  private gitManager;
@@ -9,10 +10,23 @@ export declare class TaskExecutor {
9
10
  private workingDir;
10
11
  private repoInstructions;
11
12
  private baseBranch;
13
+ private executionMode;
12
14
  constructor();
15
+ /**
16
+ * Prepends an architect's unresolved-concern warning to a PR body when expert
17
+ * mode proceeded past its review limit with blocking concerns still open. Keeps
18
+ * the run autonomous while making sure the human reviewer sees what was rejected.
19
+ */
20
+ private prependConcerns;
21
+ /**
22
+ * Runs the implementation for a task, branching on execution mode:
23
+ * - 'simple': a single one-shot hand-off to Claude Code (default)
24
+ * - 'expert': a collaborative architect↔implementer loop informed by learnings
25
+ */
26
+ private runImplementation;
13
27
  private getClaudeExecutor;
14
28
  private getOpenAIService;
15
- executeWorkflow(rewritePrompt?: boolean, baseBranch?: string): Promise<void>;
29
+ executeWorkflow(rewritePrompt?: boolean, baseBranch?: string, mode?: ExecutionMode): Promise<void>;
16
30
  private checkAndCreateAddressTasks;
17
31
  private executeTask;
18
32
  private executeTasksWithSinglePR;
@@ -1 +1 @@
1
- {"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/services/task-executor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAa/E,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAqB;;IAWvC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAOlB,eAAe,CACnB,aAAa,GAAE,OAAe,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;YAoQF,0BAA0B;YA6D1B,WAAW;YAqRX,wBAAwB;IA6ThC,6BAA6B,CACjC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAoJjB"}
1
+ {"version":3,"file":"task-executor.d.ts","sourceRoot":"","sources":["../../src/services/task-executor.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAa/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAIxE,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,aAAa,CAAgB;;IAYrC;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;OAIG;YACW,iBAAiB;IA8B/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,gBAAgB;IAOlB,eAAe,CACnB,aAAa,GAAE,OAAe,EAC9B,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,GAAE,aAAwB,GAC7B,OAAO,CAAC,IAAI,CAAC;YA8QF,0BAA0B;YA6D1B,WAAW;YAyRX,wBAAwB;IAoUhC,6BAA6B,CACjC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;CAqJjB"}