@kernel.chat/kbot 2.5.0 → 2.8.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/README.md +98 -42
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +140 -21
- package/dist/agent.js.map +1 -1
- package/dist/architect.d.ts +44 -0
- package/dist/architect.d.ts.map +1 -0
- package/dist/architect.js +403 -0
- package/dist/architect.js.map +1 -0
- package/dist/auth.d.ts +11 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +165 -7
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +251 -22
- package/dist/cli.js.map +1 -1
- package/dist/graph-memory.d.ts +98 -0
- package/dist/graph-memory.d.ts.map +1 -0
- package/dist/graph-memory.js +926 -0
- package/dist/graph-memory.js.map +1 -0
- package/dist/ide/acp-server.js +2 -2
- package/dist/ide/mcp-server.js +1 -1
- package/dist/lsp-client.d.ts +167 -0
- package/dist/lsp-client.d.ts.map +1 -0
- package/dist/lsp-client.js +679 -0
- package/dist/lsp-client.js.map +1 -0
- package/dist/matrix.d.ts +6 -0
- package/dist/matrix.d.ts.map +1 -1
- package/dist/matrix.js +98 -0
- package/dist/matrix.js.map +1 -1
- package/dist/mcp-plugins.d.ts +62 -0
- package/dist/mcp-plugins.d.ts.map +1 -0
- package/dist/mcp-plugins.js +551 -0
- package/dist/mcp-plugins.js.map +1 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +29 -0
- package/dist/planner.js.map +1 -1
- package/dist/provider-fallback.d.ts +51 -0
- package/dist/provider-fallback.d.ts.map +1 -0
- package/dist/provider-fallback.js +237 -0
- package/dist/provider-fallback.js.map +1 -0
- package/dist/repo-map.d.ts +9 -0
- package/dist/repo-map.d.ts.map +1 -0
- package/dist/repo-map.js +280 -0
- package/dist/repo-map.js.map +1 -0
- package/dist/self-eval.d.ts +45 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +232 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +22 -2
- package/dist/streaming.js.map +1 -1
- package/dist/task-ledger.d.ts +71 -0
- package/dist/task-ledger.d.ts.map +1 -0
- package/dist/task-ledger.js +282 -0
- package/dist/task-ledger.js.map +1 -0
- package/dist/tools/computer.js +3 -3
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/e2b-sandbox.d.ts +2 -0
- package/dist/tools/e2b-sandbox.d.ts.map +1 -0
- package/dist/tools/e2b-sandbox.js +460 -0
- package/dist/tools/e2b-sandbox.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +15 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/lsp-tools.d.ts +2 -0
- package/dist/tools/lsp-tools.d.ts.map +1 -0
- package/dist/tools/lsp-tools.js +268 -0
- package/dist/tools/lsp-tools.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +2 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +228 -0
- package/dist/tools/memory-tools.js.map +1 -0
- package/dist/tools/quality.d.ts +2 -0
- package/dist/tools/quality.d.ts.map +1 -0
- package/dist/tools/quality.js +313 -0
- package/dist/tools/quality.js.map +1 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +33 -18
- package/dist/ui.js.map +1 -1
- package/package.json +27 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect.d.ts","sourceRoot":"","sources":["../src/architect.ts"],"names":[],"mappings":"AAaA,OAAO,EAAY,KAAK,YAAY,EAAsB,MAAM,YAAY,CAAA;AAgB5E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAA;CACrC;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;CAC3C;AA+VD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,eAAe,CAAC,CA6F1B"}
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
// K:BOT Architect Mode — Dual-Agent Plan-Review-Implement Loop
|
|
2
|
+
//
|
|
3
|
+
// Splits complex tasks between two roles:
|
|
4
|
+
// Architect: plans, reviews, approves/rejects
|
|
5
|
+
// Editor: implements one step at a time using tools
|
|
6
|
+
//
|
|
7
|
+
// Similar to Aider's architect mode. The architect never writes code directly;
|
|
8
|
+
// the editor never makes architectural decisions.
|
|
9
|
+
//
|
|
10
|
+
// Activation (to be wired in cli.ts):
|
|
11
|
+
// $ kbot --architect "refactor the auth system"
|
|
12
|
+
// > /architect refactor the auth system
|
|
13
|
+
import { runAgent } from './agent.js';
|
|
14
|
+
import { gatherContext, formatContextForPrompt } from './context.js';
|
|
15
|
+
import { getRepoMapForContext } from './repo-map.js';
|
|
16
|
+
import { createSpinner, printInfo, printSuccess, printError, printWarn } from './ui.js';
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
const AMETHYST = chalk.hex('#6B5B95');
|
|
19
|
+
// ── Safety Limits ──
|
|
20
|
+
const MAX_PLAN_STEPS = 10;
|
|
21
|
+
const MAX_RETRIES_PER_STEP = 2;
|
|
22
|
+
// ── System Prompts ──
|
|
23
|
+
const ARCHITECT_PLAN_PROMPT = `You are the Architect in a dual-agent coding system. Your job is to PLAN, not implement.
|
|
24
|
+
|
|
25
|
+
Given a task and project context, produce a structured JSON plan. You must output ONLY valid JSON matching this schema:
|
|
26
|
+
|
|
27
|
+
{
|
|
28
|
+
"summary": "One-sentence summary of the overall change",
|
|
29
|
+
"files_to_modify": ["list of existing files that will be edited"],
|
|
30
|
+
"files_to_create": ["list of new files to create"],
|
|
31
|
+
"steps": [
|
|
32
|
+
{
|
|
33
|
+
"description": "Precise description of what to do in this step",
|
|
34
|
+
"file": "path/to/file.ts",
|
|
35
|
+
"action": "create | edit | delete"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"constraints": [
|
|
39
|
+
"Things the editor must NOT do (e.g., 'do not change the public API', 'preserve backward compatibility')"
|
|
40
|
+
],
|
|
41
|
+
"test_strategy": "How to verify the changes work (e.g., 'run npx tsc --noEmit', 'run npm test')"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
Rules:
|
|
45
|
+
- Maximum ${MAX_PLAN_STEPS} steps. Break large changes into focused, atomic steps.
|
|
46
|
+
- Each step targets exactly ONE file with ONE action.
|
|
47
|
+
- Order steps by dependency — if step 3 depends on step 1, step 1 comes first.
|
|
48
|
+
- For edits, describe WHAT to change specifically (function names, line ranges, logic changes).
|
|
49
|
+
- For creates, describe the full purpose, exports, and structure of the new file.
|
|
50
|
+
- Include constraints that prevent the editor from making unintended changes.
|
|
51
|
+
- The test_strategy should be a concrete command, not a vague suggestion.
|
|
52
|
+
- Output ONLY the JSON object. No markdown fences, no explanation.`;
|
|
53
|
+
const ARCHITECT_REVIEW_PROMPT = `You are the Architect reviewing an Editor's implementation of one step in your plan.
|
|
54
|
+
|
|
55
|
+
You will see:
|
|
56
|
+
1. The original step description
|
|
57
|
+
2. The file and action
|
|
58
|
+
3. The editor's output (what they did)
|
|
59
|
+
|
|
60
|
+
Evaluate whether the implementation:
|
|
61
|
+
- Correctly implements the step as described
|
|
62
|
+
- Does not violate any constraints
|
|
63
|
+
- Does not introduce bugs, type errors, or security issues
|
|
64
|
+
- Is clean, idiomatic code
|
|
65
|
+
|
|
66
|
+
Respond with ONLY valid JSON:
|
|
67
|
+
{
|
|
68
|
+
"approved": true | false,
|
|
69
|
+
"feedback": "If rejected: specific, actionable feedback for the editor to fix. If approved: brief confirmation."
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
Be strict but fair. Approve good-enough work. Reject only if there are real problems.`;
|
|
73
|
+
const EDITOR_SYSTEM_PROMPT = `You are the Editor in a dual-agent coding system. You IMPLEMENT, you do not plan.
|
|
74
|
+
|
|
75
|
+
You receive a single step to execute. Use your tools to implement it precisely.
|
|
76
|
+
|
|
77
|
+
Rules:
|
|
78
|
+
- Follow the step description exactly. Do not add unrequested features.
|
|
79
|
+
- Do not make architectural decisions. If something is ambiguous, implement the simplest version.
|
|
80
|
+
- Use edit_file for existing files, write_file for new files, bash for commands.
|
|
81
|
+
- After implementing, briefly describe what you did (1-2 sentences).
|
|
82
|
+
- If the Architect gave you feedback on a previous attempt, address ALL of the feedback points.
|
|
83
|
+
- Do not modify files outside the scope of your current step.`;
|
|
84
|
+
// ── Utility: chatOnce ──
|
|
85
|
+
// A simplified single-turn call. Uses runAgent under the hood but with a
|
|
86
|
+
// specific system prompt injected via the agent message itself (since runAgent
|
|
87
|
+
// builds its own system context, we prepend our role instructions).
|
|
88
|
+
async function chatOnce(systemPrompt, userMessage, agentOpts) {
|
|
89
|
+
// Combine our role-specific system prompt with the user message so
|
|
90
|
+
// runAgent processes it through the full provider pipeline (including tools
|
|
91
|
+
// for the editor). The system prompt goes first as context framing.
|
|
92
|
+
const combined = `${systemPrompt}\n\n---\n\n${userMessage}`;
|
|
93
|
+
const response = await runAgent(combined, {
|
|
94
|
+
...agentOpts,
|
|
95
|
+
agent: agentOpts.agent || 'coder',
|
|
96
|
+
});
|
|
97
|
+
return response.content;
|
|
98
|
+
}
|
|
99
|
+
// ── Phase 1: Architect Creates Plan ──
|
|
100
|
+
async function createPlan(task, agentOpts) {
|
|
101
|
+
const spinner = createSpinner('Architect analyzing task...');
|
|
102
|
+
spinner.start();
|
|
103
|
+
// Gather project context and repo map for the architect
|
|
104
|
+
let contextStr = '';
|
|
105
|
+
try {
|
|
106
|
+
const context = gatherContext();
|
|
107
|
+
contextStr = formatContextForPrompt(context);
|
|
108
|
+
}
|
|
109
|
+
catch { /* context is non-critical */ }
|
|
110
|
+
let repoMap = '';
|
|
111
|
+
try {
|
|
112
|
+
repoMap = await getRepoMapForContext();
|
|
113
|
+
}
|
|
114
|
+
catch { /* repo map is non-critical */ }
|
|
115
|
+
const userMessage = `Project context:
|
|
116
|
+
${contextStr}
|
|
117
|
+
|
|
118
|
+
Repository structure:
|
|
119
|
+
${repoMap || '(unavailable)'}
|
|
120
|
+
|
|
121
|
+
Task: ${task}
|
|
122
|
+
|
|
123
|
+
Output your plan as JSON:`;
|
|
124
|
+
spinner.stop();
|
|
125
|
+
const raw = await chatOnce(ARCHITECT_PLAN_PROMPT, userMessage, agentOpts);
|
|
126
|
+
// Parse the JSON plan from the response
|
|
127
|
+
let plan;
|
|
128
|
+
try {
|
|
129
|
+
// Extract JSON — AI might wrap it in markdown fences
|
|
130
|
+
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
|
131
|
+
if (!jsonMatch)
|
|
132
|
+
throw new Error('No JSON found in architect response');
|
|
133
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
134
|
+
plan = {
|
|
135
|
+
summary: parsed.summary || task,
|
|
136
|
+
files_to_modify: parsed.files_to_modify || [],
|
|
137
|
+
files_to_create: parsed.files_to_create || [],
|
|
138
|
+
steps: (parsed.steps || []).slice(0, MAX_PLAN_STEPS).map((s) => ({
|
|
139
|
+
description: s.description || '',
|
|
140
|
+
file: s.file || '',
|
|
141
|
+
action: (['create', 'edit', 'delete'].includes(s.action) ? s.action : 'edit'),
|
|
142
|
+
})),
|
|
143
|
+
constraints: parsed.constraints || [],
|
|
144
|
+
test_strategy: parsed.test_strategy || 'npx tsc --noEmit',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Fallback: single-step plan if AI didn't return valid JSON
|
|
149
|
+
plan = {
|
|
150
|
+
summary: task,
|
|
151
|
+
files_to_modify: [],
|
|
152
|
+
files_to_create: [],
|
|
153
|
+
steps: [{
|
|
154
|
+
description: task,
|
|
155
|
+
file: '',
|
|
156
|
+
action: 'edit',
|
|
157
|
+
}],
|
|
158
|
+
constraints: [],
|
|
159
|
+
test_strategy: 'npx tsc --noEmit',
|
|
160
|
+
};
|
|
161
|
+
printWarn('Architect produced non-JSON response. Using simplified plan.');
|
|
162
|
+
}
|
|
163
|
+
// Safety: enforce step limit
|
|
164
|
+
if (plan.steps.length > MAX_PLAN_STEPS) {
|
|
165
|
+
plan.steps = plan.steps.slice(0, MAX_PLAN_STEPS);
|
|
166
|
+
printWarn(`Plan truncated to ${MAX_PLAN_STEPS} steps (safety limit).`);
|
|
167
|
+
}
|
|
168
|
+
return plan;
|
|
169
|
+
}
|
|
170
|
+
// ── Phase 2: Editor Implements a Step ──
|
|
171
|
+
async function editorImplement(step, stepIndex, totalSteps, plan, feedback, agentOpts) {
|
|
172
|
+
const feedbackSection = feedback
|
|
173
|
+
? `\n\nPREVIOUS ATTEMPT REJECTED. Architect feedback:\n${feedback}\n\nAddress ALL feedback points in this attempt.`
|
|
174
|
+
: '';
|
|
175
|
+
const constraintsSection = plan.constraints.length > 0
|
|
176
|
+
? `\nConstraints (do NOT violate these):\n${plan.constraints.map(c => `- ${c}`).join('\n')}`
|
|
177
|
+
: '';
|
|
178
|
+
const userMessage = `Step ${stepIndex + 1} of ${totalSteps}:
|
|
179
|
+
|
|
180
|
+
Action: ${step.action.toUpperCase()} file: ${step.file}
|
|
181
|
+
Description: ${step.description}
|
|
182
|
+
${constraintsSection}
|
|
183
|
+
${feedbackSection}
|
|
184
|
+
|
|
185
|
+
Implement this step now using your tools. Be precise.`;
|
|
186
|
+
return chatOnce(EDITOR_SYSTEM_PROMPT, userMessage, agentOpts);
|
|
187
|
+
}
|
|
188
|
+
// ── Phase 3: Architect Reviews Editor Output ──
|
|
189
|
+
async function architectReview(step, editorOutput, plan, agentOpts) {
|
|
190
|
+
const constraintsSection = plan.constraints.length > 0
|
|
191
|
+
? `\nConstraints that must be respected:\n${plan.constraints.map(c => `- ${c}`).join('\n')}`
|
|
192
|
+
: '';
|
|
193
|
+
const userMessage = `Step under review:
|
|
194
|
+
Action: ${step.action.toUpperCase()} file: ${step.file}
|
|
195
|
+
Description: ${step.description}
|
|
196
|
+
${constraintsSection}
|
|
197
|
+
|
|
198
|
+
Editor's output:
|
|
199
|
+
${editorOutput.slice(0, 4000)}
|
|
200
|
+
|
|
201
|
+
Evaluate and respond with JSON (approved: true/false, feedback: string):`;
|
|
202
|
+
const raw = await chatOnce(ARCHITECT_REVIEW_PROMPT, userMessage, agentOpts);
|
|
203
|
+
try {
|
|
204
|
+
const jsonMatch = raw.match(/\{[\s\S]*\}/);
|
|
205
|
+
if (!jsonMatch)
|
|
206
|
+
throw new Error('No JSON in review');
|
|
207
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
208
|
+
return {
|
|
209
|
+
approved: !!parsed.approved,
|
|
210
|
+
feedback: parsed.feedback || '',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// If review parsing fails, approve by default to avoid blocking
|
|
215
|
+
printWarn('Architect review returned non-JSON. Auto-approving step.');
|
|
216
|
+
return { approved: true, feedback: 'Auto-approved (review parse failure).' };
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// ── Phase 4: Verification ──
|
|
220
|
+
async function runVerification(plan, agentOpts) {
|
|
221
|
+
const spinner = createSpinner('Running verification...');
|
|
222
|
+
spinner.start();
|
|
223
|
+
try {
|
|
224
|
+
// Use the editor agent to run the test strategy command
|
|
225
|
+
const verifyMessage = `Run this verification command and report the results:\n\n${plan.test_strategy}\n\nIf there are errors, list them. If everything passes, say so.`;
|
|
226
|
+
const result = await chatOnce(EDITOR_SYSTEM_PROMPT, verifyMessage, agentOpts);
|
|
227
|
+
spinner.stop();
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
spinner.stop();
|
|
232
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
233
|
+
return `Verification failed: ${errMsg}`;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// ── Display Helpers ──
|
|
237
|
+
function displayPlan(plan) {
|
|
238
|
+
console.log();
|
|
239
|
+
console.log(` ${AMETHYST('◆ Architect Plan')}: ${plan.summary}`);
|
|
240
|
+
console.log(` ${chalk.dim('─'.repeat(60))}`);
|
|
241
|
+
console.log();
|
|
242
|
+
if (plan.files_to_modify.length > 0) {
|
|
243
|
+
console.log(` ${chalk.dim('Modify:')} ${plan.files_to_modify.join(', ')}`);
|
|
244
|
+
}
|
|
245
|
+
if (plan.files_to_create.length > 0) {
|
|
246
|
+
console.log(` ${chalk.dim('Create:')} ${plan.files_to_create.join(', ')}`);
|
|
247
|
+
}
|
|
248
|
+
if (plan.files_to_modify.length > 0 || plan.files_to_create.length > 0) {
|
|
249
|
+
console.log();
|
|
250
|
+
}
|
|
251
|
+
for (let i = 0; i < plan.steps.length; i++) {
|
|
252
|
+
const step = plan.steps[i];
|
|
253
|
+
const actionIcon = { create: chalk.green('+'), edit: chalk.yellow('~'), delete: chalk.red('-') }[step.action];
|
|
254
|
+
console.log(` ${chalk.dim(`${i + 1}.`)} ${actionIcon} ${chalk.cyan(step.file)} ${chalk.dim('—')} ${step.description}`);
|
|
255
|
+
}
|
|
256
|
+
if (plan.constraints.length > 0) {
|
|
257
|
+
console.log();
|
|
258
|
+
console.log(` ${chalk.dim('Constraints:')}`);
|
|
259
|
+
for (const c of plan.constraints) {
|
|
260
|
+
console.log(` ${chalk.red('!')} ${c}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
console.log();
|
|
264
|
+
console.log(` ${chalk.dim('Verify:')} ${plan.test_strategy}`);
|
|
265
|
+
console.log(` ${chalk.dim(`${plan.steps.length} steps`)}`);
|
|
266
|
+
console.log();
|
|
267
|
+
}
|
|
268
|
+
function displayStepResult(stepIndex, total, step, approved, attempt) {
|
|
269
|
+
const prefix = `Step ${stepIndex + 1}/${total}`;
|
|
270
|
+
if (approved) {
|
|
271
|
+
printSuccess(`${prefix}: ${step.description}`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
printWarn(`${prefix}: rejected (attempt ${attempt}/${MAX_RETRIES_PER_STEP + 1})`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function displayReport(report) {
|
|
278
|
+
console.log();
|
|
279
|
+
console.log(` ${AMETHYST('◆ Architect Report')}`);
|
|
280
|
+
console.log(` ${chalk.dim('─'.repeat(60))}`);
|
|
281
|
+
console.log();
|
|
282
|
+
console.log(` ${chalk.dim('Summary:')} ${report.plan.summary}`);
|
|
283
|
+
console.log(` ${chalk.dim('Status:')} ${report.status === 'completed' ? chalk.green(report.status) : report.status === 'partial' ? chalk.yellow(report.status) : chalk.red(report.status)}`);
|
|
284
|
+
console.log();
|
|
285
|
+
for (const outcome of report.outcomes) {
|
|
286
|
+
const icon = outcome.status === 'approved' ? chalk.green('✓') : chalk.red('✗');
|
|
287
|
+
const retries = outcome.attempts > 1 ? chalk.dim(` (${outcome.attempts} attempts)`) : '';
|
|
288
|
+
console.log(` ${icon} ${outcome.step.description}${retries}`);
|
|
289
|
+
if (outcome.status === 'failed' && outcome.reviewFeedback) {
|
|
290
|
+
console.log(` ${chalk.dim('Last feedback:')} ${outcome.reviewFeedback.slice(0, 120)}`);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (report.verification) {
|
|
294
|
+
console.log();
|
|
295
|
+
console.log(` ${chalk.dim('Verification:')}`);
|
|
296
|
+
// Show first few lines of verification output
|
|
297
|
+
const lines = report.verification.split('\n').slice(0, 8);
|
|
298
|
+
for (const line of lines) {
|
|
299
|
+
console.log(` ${line}`);
|
|
300
|
+
}
|
|
301
|
+
if (report.verification.split('\n').length > 8) {
|
|
302
|
+
console.log(` ${chalk.dim(`... (${report.verification.split('\n').length - 8} more lines)`)}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
console.log();
|
|
306
|
+
}
|
|
307
|
+
// ── Main Entry Point ──
|
|
308
|
+
/**
|
|
309
|
+
* Run architect mode: a dual-agent loop where the Architect plans and reviews
|
|
310
|
+
* while the Editor implements each step.
|
|
311
|
+
*
|
|
312
|
+
* Flow:
|
|
313
|
+
* 1. Architect analyzes the task and creates a structured plan
|
|
314
|
+
* 2. For each step: Editor implements -> Architect reviews -> approve or redo
|
|
315
|
+
* 3. After all steps: Architect runs verification (type check, tests)
|
|
316
|
+
* 4. Returns a full report
|
|
317
|
+
*
|
|
318
|
+
* @param task - The user's task description
|
|
319
|
+
* @param options - Agent options (model, streaming, etc.)
|
|
320
|
+
* @returns Full report of the architect session
|
|
321
|
+
*/
|
|
322
|
+
export async function runArchitectMode(task, options = {}) {
|
|
323
|
+
printInfo('Entering architect mode...');
|
|
324
|
+
console.log();
|
|
325
|
+
// Phase 1: Architect creates plan
|
|
326
|
+
printInfo('Phase 1: Architect planning...');
|
|
327
|
+
const plan = await createPlan(task, options);
|
|
328
|
+
displayPlan(plan);
|
|
329
|
+
// Phase 2: Editor implements each step with architect review
|
|
330
|
+
printInfo('Phase 2: Editor implementing...');
|
|
331
|
+
console.log();
|
|
332
|
+
const outcomes = [];
|
|
333
|
+
for (let i = 0; i < plan.steps.length; i++) {
|
|
334
|
+
const step = plan.steps[i];
|
|
335
|
+
let approved = false;
|
|
336
|
+
let attempts = 0;
|
|
337
|
+
let lastEditorOutput = '';
|
|
338
|
+
let lastFeedback = null;
|
|
339
|
+
while (!approved && attempts <= MAX_RETRIES_PER_STEP) {
|
|
340
|
+
attempts++;
|
|
341
|
+
// Editor implements
|
|
342
|
+
const spinner = createSpinner(`Step ${i + 1}/${plan.steps.length}: ${step.description}`);
|
|
343
|
+
spinner.start();
|
|
344
|
+
try {
|
|
345
|
+
lastEditorOutput = await editorImplement(step, i, plan.steps.length, plan, lastFeedback, options);
|
|
346
|
+
spinner.stop();
|
|
347
|
+
}
|
|
348
|
+
catch (err) {
|
|
349
|
+
spinner.stop();
|
|
350
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
351
|
+
printError(`Editor failed on step ${i + 1}: ${errMsg}`);
|
|
352
|
+
lastEditorOutput = `Error: ${errMsg}`;
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
// Architect reviews
|
|
356
|
+
const review = await architectReview(step, lastEditorOutput, plan, options);
|
|
357
|
+
approved = review.approved;
|
|
358
|
+
lastFeedback = review.feedback;
|
|
359
|
+
displayStepResult(i, plan.steps.length, step, approved, attempts);
|
|
360
|
+
if (!approved && attempts <= MAX_RETRIES_PER_STEP) {
|
|
361
|
+
printInfo(`Architect feedback: ${review.feedback.slice(0, 200)}`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
outcomes.push({
|
|
365
|
+
step,
|
|
366
|
+
status: approved ? 'approved' : 'failed',
|
|
367
|
+
attempts,
|
|
368
|
+
editorOutput: lastEditorOutput,
|
|
369
|
+
reviewFeedback: lastFeedback || undefined,
|
|
370
|
+
});
|
|
371
|
+
// If a step fails after all retries, continue with remaining steps
|
|
372
|
+
// (the architect plan may have independent steps that can still succeed)
|
|
373
|
+
if (!approved) {
|
|
374
|
+
printWarn(`Step ${i + 1} failed after ${attempts} attempts. Continuing with remaining steps.`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// Phase 3: Verification
|
|
378
|
+
const approvedCount = outcomes.filter(o => o.status === 'approved').length;
|
|
379
|
+
let verification = null;
|
|
380
|
+
if (approvedCount > 0) {
|
|
381
|
+
printInfo('Phase 3: Running verification...');
|
|
382
|
+
verification = await runVerification(plan, options);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
printWarn('All steps failed. Skipping verification.');
|
|
386
|
+
}
|
|
387
|
+
// Determine overall status
|
|
388
|
+
const failedCount = outcomes.filter(o => o.status === 'failed').length;
|
|
389
|
+
let status;
|
|
390
|
+
if (failedCount === 0) {
|
|
391
|
+
status = 'completed';
|
|
392
|
+
}
|
|
393
|
+
else if (approvedCount > 0) {
|
|
394
|
+
status = 'partial';
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
status = 'failed';
|
|
398
|
+
}
|
|
399
|
+
const report = { plan, outcomes, verification, status };
|
|
400
|
+
displayReport(report);
|
|
401
|
+
return report;
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=architect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../src/architect.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
declare const KBOT_DIR: string;
|
|
2
2
|
declare const CONFIG_PATH: string;
|
|
3
|
-
export type ByokProvider = 'anthropic' | 'openai' | 'google' | 'mistral' | 'xai' | 'deepseek' | 'groq' | 'together' | 'fireworks' | 'perplexity' | 'cohere' | 'nvidia' | 'ollama' | 'openclaw';
|
|
3
|
+
export type ByokProvider = 'anthropic' | 'openai' | 'google' | 'mistral' | 'xai' | 'deepseek' | 'groq' | 'together' | 'fireworks' | 'perplexity' | 'cohere' | 'nvidia' | 'sambanova' | 'cerebras' | 'openrouter' | 'lmstudio' | 'jan' | 'ollama' | 'openclaw';
|
|
4
4
|
export interface ProviderConfig {
|
|
5
5
|
name: string;
|
|
6
6
|
apiUrl: string;
|
|
@@ -60,6 +60,16 @@ export declare function isOllamaRunning(): Promise<boolean>;
|
|
|
60
60
|
export declare function listOllamaModels(): Promise<string[]>;
|
|
61
61
|
/** Set up Ollama as the active provider */
|
|
62
62
|
export declare function setupOllama(model?: string): Promise<boolean>;
|
|
63
|
+
/** Check if LM Studio is running locally (default port 1234) */
|
|
64
|
+
export declare function isLmStudioRunning(): Promise<boolean>;
|
|
65
|
+
/** Check if Jan is running locally (default port 1337) */
|
|
66
|
+
export declare function isJanRunning(): Promise<boolean>;
|
|
67
|
+
/** Set up LM Studio as the active provider */
|
|
68
|
+
export declare function setupLmStudio(): Promise<boolean>;
|
|
69
|
+
/** Set up Jan as the active provider */
|
|
70
|
+
export declare function setupJan(): Promise<boolean>;
|
|
71
|
+
/** Detect any running local AI runtime (Ollama, LM Studio, Jan, OpenClaw) */
|
|
72
|
+
export declare function detectLocalRuntime(): Promise<ByokProvider | null>;
|
|
63
73
|
/** Set up OpenClaw as the active provider */
|
|
64
74
|
export declare function setupOpenClaw(token?: string): Promise<boolean>;
|
|
65
75
|
export { KBOT_DIR, CONFIG_PATH };
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|