lonny-agent 0.1.9 → 0.2.2

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 (68) hide show
  1. package/.kilo/plans/1780293725888-quick-wizard.md +62 -0
  2. package/.lonny/plan-web-cwd-status.md +38 -0
  3. package/README.md +63 -10
  4. package/dist/agent/compaction.d.ts +5 -0
  5. package/dist/agent/compaction.d.ts.map +1 -1
  6. package/dist/agent/compaction.js +5 -0
  7. package/dist/agent/compaction.js.map +1 -1
  8. package/dist/agent/prompt-builder.d.ts.map +1 -1
  9. package/dist/agent/prompt-builder.js +39 -4
  10. package/dist/agent/prompt-builder.js.map +1 -1
  11. package/dist/agent/providers/google.js +1 -1
  12. package/dist/agent/providers/google.js.map +1 -1
  13. package/dist/agent/providers/openai.js +1 -1
  14. package/dist/agent/providers/openai.js.map +1 -1
  15. package/dist/agent/session.d.ts.map +1 -1
  16. package/dist/agent/session.js +18 -2
  17. package/dist/agent/session.js.map +1 -1
  18. package/dist/config/__tests__/context-window.test.d.ts +2 -0
  19. package/dist/config/__tests__/context-window.test.d.ts.map +1 -0
  20. package/dist/config/__tests__/context-window.test.js +80 -0
  21. package/dist/config/__tests__/context-window.test.js.map +1 -0
  22. package/dist/config/index.d.ts +7 -0
  23. package/dist/config/index.d.ts.map +1 -1
  24. package/dist/config/index.js +211 -0
  25. package/dist/config/index.js.map +1 -1
  26. package/dist/pi-tui/tui.d.ts.map +1 -1
  27. package/dist/pi-tui/tui.js +7 -16
  28. package/dist/pi-tui/tui.js.map +1 -1
  29. package/dist/tools/__tests__/edit.test.js +254 -0
  30. package/dist/tools/__tests__/edit.test.js.map +1 -1
  31. package/dist/tools/__tests__/fetch.test.js +11 -9
  32. package/dist/tools/__tests__/fetch.test.js.map +1 -1
  33. package/dist/tools/edit.d.ts.map +1 -1
  34. package/dist/tools/edit.js +205 -41
  35. package/dist/tools/edit.js.map +1 -1
  36. package/dist/tools/install_superpowers.d.ts +3 -0
  37. package/dist/tools/install_superpowers.d.ts.map +1 -0
  38. package/dist/tools/install_superpowers.js +207 -0
  39. package/dist/tools/install_superpowers.js.map +1 -0
  40. package/dist/tui/index.d.ts.map +1 -1
  41. package/dist/tui/index.js +25 -1
  42. package/dist/tui/index.js.map +1 -1
  43. package/dist/web/index.d.ts.map +1 -1
  44. package/dist/web/index.js +65 -0
  45. package/dist/web/index.js.map +1 -1
  46. package/dist/web/public/app.js +9 -0
  47. package/dist/web/public/index.html +6 -0
  48. package/dist/web/public/style.css +11 -0
  49. package/package.json +1 -1
  50. package/src/agent/compaction.ts +6 -0
  51. package/src/agent/prompt-builder.ts +40 -4
  52. package/src/agent/providers/google.ts +1 -1
  53. package/src/agent/providers/openai.ts +1 -1
  54. package/src/agent/session.ts +19 -2
  55. package/src/config/__tests__/context-window.test.ts +94 -0
  56. package/src/config/index.ts +243 -0
  57. package/src/pi-tui/tui.ts +8 -14
  58. package/src/tools/__tests__/edit.test.ts +283 -0
  59. package/src/tools/__tests__/fetch.test.ts +12 -10
  60. package/src/tools/edit.ts +225 -42
  61. package/src/tools/registry.ts +265 -265
  62. package/src/tui/index.ts +23 -1
  63. package/src/web/index.ts +71 -0
  64. package/src/web/public/app.js +9 -0
  65. package/src/web/public/index.html +6 -0
  66. package/src/web/public/style.css +11 -0
  67. package/.lonny/fix-new-command-session-cleanup.md +0 -65
  68. package/.lonny/tui-autocomplete-above.md +0 -62
@@ -17,36 +17,97 @@ function generateDiff(oldStr, newStr) {
17
17
  }
18
18
  return lines.join('\n');
19
19
  }
20
+ /**
21
+ * Normalize a line for whitespace-tolerant comparison:
22
+ * 1. Trim leading/trailing whitespace
23
+ * 2. Collapse runs of 2+ spaces/tabs into a single space
24
+ *
25
+ * This handles whitespace differences ANYWHERE on the line:
26
+ * - Leading/trailing spaces → `trim()` removes them
27
+ * - Extra internal spaces → `"foo bar"` → `"foo bar"`
28
+ * - Blank lines with spaces → `" "` → `""`
29
+ */
30
+ function normalizeLine(s) {
31
+ return s.trim().replace(/[ \t]{2,}/g, ' ');
32
+ }
33
+ /**
34
+ * Sliding-window line search that ignores whitespace differences
35
+ * (leading, trailing, and internal runs).
36
+ *
37
+ * Returns all match positions in the ORIGINAL (unnormalized) content,
38
+ * so the caller can do content.slice(match.index, match.index + match.length)
39
+ * to extract the actual matched text (with its original whitespace).
40
+ */
41
+ function findAllLinesTolerant(content, oldString) {
42
+ if (oldString === '')
43
+ return [];
44
+ const contentLines = content.split('\n');
45
+ const oldLines = oldString.split('\n');
46
+ if (oldLines.length > contentLines.length)
47
+ return [];
48
+ // Pre-normalize for speed
49
+ const normContent = contentLines.map(normalizeLine);
50
+ const normOld = oldLines.map(normalizeLine);
51
+ const matches = [];
52
+ for (let start = 0; start <= normContent.length - normOld.length; start++) {
53
+ let match = true;
54
+ for (let j = 0; j < normOld.length; j++) {
55
+ if (normContent[start + j] !== normOld[j]) {
56
+ match = false;
57
+ break;
58
+ }
59
+ }
60
+ if (match) {
61
+ // Compute byte position in ORIGINAL (unnormalized) content
62
+ let charPos = 0;
63
+ for (let k = 0; k < start; k++) {
64
+ charPos += contentLines[k].length + 1; // +1 for the \n
65
+ }
66
+ // Compute matched text length in ORIGINAL content
67
+ let matchedLen = 0;
68
+ for (let j = 0; j < oldLines.length; j++) {
69
+ matchedLen += contentLines[start + j].length;
70
+ if (j < oldLines.length - 1)
71
+ matchedLen += 1; // +1 for the \n
72
+ }
73
+ matches.push({ index: charPos, length: matchedLen });
74
+ }
75
+ }
76
+ return matches;
77
+ }
20
78
  export function createEditTool(applier, cwd) {
21
79
  return {
22
80
  definition: {
23
81
  name: 'edit',
24
- description: `Replace exact text in files. Parameter is {"edits": [{"file_path": "...", "old_string": "...", "new_string": "..."}]}.
82
+ description: `Replace exact text in files. Each edit object is a COMPLETE find-and-replace pair.
83
+ Parameter: {"edits": [{"file_path": "...", "old_string": "...", "new_string": "..."}]}
25
84
 
26
85
  HOW TO USE:
27
86
  1. Read the file first with \`read\`
28
87
  2. Copy the EXACT text to replace — include 2-3 lines of context before/after
29
88
  3. Call: edit({ edits: [{ file_path, old_string, new_string }] })
30
89
 
31
- RULES:
90
+ CRITICAL RULES:
91
+ - Each edit MUST have BOTH old_string AND new_string (a complete find-replace pair)
32
92
  - old_string must match EXACTLY (whitespace, indentation, line breaks)
33
93
  - old_string must be UNIQUE — include enough surrounding context
34
94
  - Do NOT include the "<lineNumber>: " prefix from read output
35
- - CRITICAL: \`edits\` is always an array. Never pass file_path/old_string/new_string as top-level keys.
95
+ - \`edits\` is always an array. Never pass file_path/old_string/new_string as top-level keys.
96
+ - To batch multiple independent edits, add multiple objects to the array
36
97
 
37
98
  EXAMPLES:
38
- edit({ edits: [{ file_path: "src/config.ts", old_string: "mode: 'code'", new_string: "mode: 'plan'" }] })
99
+ Single edit: edit({ edits: [{ file_path: "src/config.ts", old_string: "mode: 'code'", new_string: "mode: 'plan'" }] })
39
100
 
40
- edit({ edits: [
101
+ Batch edits: edit({ edits: [
41
102
  { file_path: "src/a.ts", old_string: "foo", new_string: "bar" },
42
103
  { file_path: "src/b.ts", old_string: "x", new_string: "y" }
43
104
  ] })
44
105
 
45
- edit({ edits: [{ file_path: "src/new.ts", old_string: "", new_string: "const x = 1" }] })`,
106
+ Create file: edit({ edits: [{ file_path: "src/new.ts", old_string: "", new_string: "const x = 1" }] })`,
46
107
  parameters: {
47
108
  edits: {
48
109
  type: 'array',
49
- description: 'REQUIRED. Array of edits. ALWAYS an array. Example: [{ file_path: "src/file.ts", old_string: "old", new_string: "new" }]',
110
+ description: 'REQUIRED. Array of complete find-replace pairs. Each edit MUST have BOTH old_string AND new_string. Example: [{ file_path: "src/file.ts", old_string: "old", new_string: "new" }]',
50
111
  required: true,
51
112
  items: {
52
113
  type: 'object',
@@ -54,9 +115,12 @@ EXAMPLES:
54
115
  file_path: { type: 'string', description: 'Path to the file' },
55
116
  old_string: {
56
117
  type: 'string',
57
- description: 'Text to replace (pass empty string "" to create a new file). Required.',
118
+ description: 'Text to FIND in the file. REQUIRED. Pair with new_string to form a complete find-replace. Pass "" to create a new file.',
119
+ },
120
+ new_string: {
121
+ type: 'string',
122
+ description: 'Replacement text. REQUIRED. Pair with old_string to form a complete find-replace. Pass "" to delete content.',
58
123
  },
59
- new_string: { type: 'string', description: 'Replacement text' },
60
124
  },
61
125
  },
62
126
  },
@@ -125,10 +189,40 @@ EXAMPLES:
125
189
  }
126
190
  const edits = input.edits;
127
191
  if (edits.length === 0) {
192
+ // Build a diagnostic: show what the AI received vs expected
193
+ const receivedKeys = Object.keys(rawInput);
194
+ const hint = receivedKeys.length === 1 && receivedKeys[0] === 'edits'
195
+ ? 'The edits array exists but is empty — include at least one edit object with file_path, old_string, and new_string.'
196
+ : receivedKeys.includes('file_path')
197
+ ? 'Top-level file_path/old_string/new_string detected — wrap them in an edits array: { edits: [{ file_path, old_string, new_string }] }'
198
+ : 'No usable edit data found in the input. Provide an edits array with at least one edit.';
199
+ return {
200
+ success: false,
201
+ output: '',
202
+ error: `edit FAILED — no edits to apply. Raw input: ${JSON.stringify(rawInput)}. ${hint}`,
203
+ };
204
+ }
205
+ // Validate each edit object — catch missing old_string/new_string early
206
+ const editErrors = [];
207
+ for (let i = 0; i < edits.length; i++) {
208
+ const e = edits[i];
209
+ const missing = [];
210
+ if (typeof e.file_path !== 'string' || !e.file_path)
211
+ missing.push('file_path');
212
+ if (typeof e.old_string !== 'string')
213
+ missing.push('old_string');
214
+ if (typeof e.new_string !== 'string')
215
+ missing.push('new_string');
216
+ if (missing.length > 0) {
217
+ editErrors.push(` edit #${i + 1}: missing ${missing.join(', ')} (has: ${Object.keys(e).join(', ')})`);
218
+ }
219
+ }
220
+ if (editErrors.length > 0) {
128
221
  return {
129
222
  success: false,
130
223
  output: '',
131
- error: `edits array is empty. Example: edit({ edits: [{ file_path: "src/file.ts", old_string: "old", new_string: "new" }] })`,
224
+ error: `edit FAILED ${editErrors.length} of ${edits.length} edit(s) have missing fields.\n${editErrors.join('\n')}\n\nReceived: ${JSON.stringify(rawInput)}\n\nEach edit object must be a COMPLETE find-replace pair with BOTH old_string AND new_string.
225
+ Do NOT split old_string (text to find) and new_string (replacement) across different edit objects.`,
132
226
  };
133
227
  }
134
228
  const fileGroups = new Map();
@@ -153,6 +247,8 @@ EXAMPLES:
153
247
  for (const [resolved, group] of fileGroups) {
154
248
  const relPath = path.relative(cwd, resolved).replace(/\\/g, '/');
155
249
  let content = group.originalContent !== null ? group.originalContent.replace(/\r\n/g, '\n') : null;
250
+ // Check if file was read (for stale-content diagnostics)
251
+ const readWarning = content !== null ? applier.checkModified(resolved) : null;
156
252
  for (let i = group.edits.length - 1; i >= 0; i--) {
157
253
  const e = group.edits[i];
158
254
  // Normalize CRLF → LF in AI-provided strings (critical on Windows)
@@ -165,10 +261,13 @@ EXAMPLES:
165
261
  old_string: '',
166
262
  new_string: e.new_string,
167
263
  });
168
- results.push(` FAIL ${relPath}: File already exists ${diag}`);
264
+ const suggestion = ` Use edit with old_string to replace existing content, or choose a different path.`;
265
+ results.push(` FAIL ${relPath}: File already exists — Raw input: ${JSON.stringify(rawInput)}
266
+ Edit: ${diag}
267
+ ${suggestion}`);
169
268
  if (!anyFailed) {
170
269
  anyFailed = true;
171
- firstError = `File already exists: ${relPath} — ${diag}`;
270
+ firstError = `File already exists: ${relPath}`;
172
271
  }
173
272
  break;
174
273
  }
@@ -183,44 +282,107 @@ EXAMPLES:
183
282
  old_string: e.old_string,
184
283
  new_string: e.new_string,
185
284
  });
186
- results.push(` FAIL ${relPath}: File not found ${diag}`);
285
+ const suggestion = ` Check the file path, or create it first with old_string: "" (empty string).`;
286
+ results.push(` FAIL ${relPath}: File not found — Raw input: ${JSON.stringify(rawInput)}
287
+ Edit: ${diag}
288
+ ${suggestion}`);
187
289
  if (!anyFailed) {
188
290
  anyFailed = true;
189
- firstError = `File not found: ${relPath} — ${diag}`;
291
+ firstError = `File not found: ${relPath}`;
190
292
  }
191
293
  break;
192
294
  }
193
- const idx = content.indexOf(e.old_string);
194
- if (idx === -1) {
195
- const diag = JSON.stringify({
196
- file_path: e.file_path,
197
- old_string: e.old_string,
198
- new_string: e.new_string,
199
- });
200
- results.push(` FAIL ${relPath}: old_string not found — ${diag}`);
201
- if (!anyFailed) {
202
- anyFailed = true;
203
- firstError = `old_string not found in ${relPath} — ${diag}`;
295
+ // ── Tier 1: Exact match ──────────────────────────────────────
296
+ const exactIdx = content.indexOf(e.old_string);
297
+ let matchInfo = null;
298
+ if (exactIdx !== -1) {
299
+ // Exact match found — check for duplicates
300
+ const lastIdx = content.lastIndexOf(e.old_string);
301
+ if (exactIdx !== lastIdx) {
302
+ const diag = JSON.stringify({
303
+ file_path: e.file_path,
304
+ old_string: e.old_string,
305
+ new_string: e.new_string,
306
+ });
307
+ const suggestion = ` → Include more surrounding context lines (2-3 lines before and after) in old_string to make the match unique.`;
308
+ results.push(` FAIL ${relPath}: old_string appears MULTIPLE times — Raw input: ${JSON.stringify(rawInput)}
309
+ Edit: ${diag}
310
+ ${suggestion}`);
311
+ if (!anyFailed) {
312
+ anyFailed = true;
313
+ firstError = `old_string appears MULTIPLE times in ${relPath}`;
314
+ }
315
+ break;
204
316
  }
205
- break;
317
+ matchInfo = { index: exactIdx, length: e.old_string.length, strategy: 'exact' };
206
318
  }
207
- const lastIdx = content.lastIndexOf(e.old_string);
208
- if (idx !== lastIdx) {
209
- const diag = JSON.stringify({
210
- file_path: e.file_path,
211
- old_string: e.old_string,
212
- new_string: e.new_string,
213
- });
214
- results.push(` FAIL ${relPath}: old_string appears MULTIPLE times — ${diag}`);
215
- if (!anyFailed) {
216
- anyFailed = true;
217
- firstError = `old_string appears MULTIPLE times in ${relPath} ${diag}`;
319
+ else {
320
+ // ── Tier 2: Whitespace-normalized fallback ─────────────────
321
+ const tolerant = findAllLinesTolerant(content, e.old_string);
322
+ if (tolerant.length === 0) {
323
+ // Not found by any strategy — include proximity hint
324
+ const contentLines = content.split('\n');
325
+ let hint = '';
326
+ const firstLine = (e.old_string.split('\n')[0] || '').trim();
327
+ if (firstLine) {
328
+ const normFirst = normalizeLine(firstLine);
329
+ // Try to find a line that contains the first line text
330
+ const similarIdx = contentLines.findIndex(l => l.length > 0 && normFirst.length > 0 && normalizeLine(l).includes(normFirst));
331
+ if (similarIdx !== -1) {
332
+ const start = Math.max(0, similarIdx - 1);
333
+ const end = Math.min(contentLines.length, similarIdx + 2);
334
+ const snippet = contentLines.slice(start, end).join('\n');
335
+ hint = `\n Near line ${similarIdx + 1}:\n """\n${snippet}\n """`;
336
+ }
337
+ }
338
+ // Always show top of file for context, unless already shown via match
339
+ if (!hint && contentLines.length > 0) {
340
+ const lines = contentLines.slice(0, Math.min(contentLines.length, 5));
341
+ hint = `\n File content (first ${lines.length} lines):\n """\n${lines.join('\n')}\n """`;
342
+ }
343
+ const diag = JSON.stringify({
344
+ file_path: e.file_path,
345
+ old_string: e.old_string,
346
+ new_string: e.new_string,
347
+ });
348
+ const readHint = readWarning ? `\n ${readWarning}` : '';
349
+ const suggestion = ` → Read the file again with read({ paths: ["${e.file_path}"] }) to get current content, then retry with exact matching text. Include 2-3 lines of surrounding context for uniqueness.${readHint}`;
350
+ results.push(` FAIL ${relPath}: old_string not found — Raw input: ${JSON.stringify(rawInput)}
351
+ Edit: ${diag}${hint}
352
+ ${suggestion}`);
353
+ if (!anyFailed) {
354
+ anyFailed = true;
355
+ firstError = `old_string not found in ${relPath}${hint}`;
356
+ }
357
+ break;
218
358
  }
219
- break;
359
+ if (tolerant.length > 1) {
360
+ const diag = JSON.stringify({
361
+ file_path: e.file_path,
362
+ old_string: e.old_string,
363
+ new_string: e.new_string,
364
+ });
365
+ const suggestion = ` → Include more surrounding context lines (2-3 lines before and after) in old_string to make the match unique.`;
366
+ results.push(` FAIL ${relPath}: old_string appears MULTIPLE times (whitespace-normalized) — Raw input: ${JSON.stringify(rawInput)}\n Edit: ${diag}\n${suggestion}`);
367
+ if (!anyFailed) {
368
+ anyFailed = true;
369
+ firstError = `old_string appears MULTIPLE times in ${relPath} (whitespace-normalized)`;
370
+ }
371
+ break;
372
+ }
373
+ matchInfo = {
374
+ index: tolerant[0].index,
375
+ length: tolerant[0].length,
376
+ strategy: 'tolerant',
377
+ };
220
378
  }
379
+ const strategyLabel = matchInfo.strategy === 'tolerant' ? ' (whitespace-normalized)' : '';
221
380
  const diff = generateDiff(e.old_string, e.new_string);
222
- results.push(` Edited ${relPath}:\n${diff}`);
223
- content = content.slice(0, idx) + e.new_string + content.slice(idx + e.old_string.length);
381
+ results.push(` Edited ${relPath}${strategyLabel}:\n${diff}`);
382
+ content =
383
+ content.slice(0, matchInfo.index) +
384
+ e.new_string +
385
+ content.slice(matchInfo.index + matchInfo.length);
224
386
  }
225
387
  if (anyFailed)
226
388
  break;
@@ -248,10 +410,12 @@ EXAMPLES:
248
410
  }
249
411
  applier.markRead(filePath);
250
412
  }
413
+ // Only show FAIL lines in the error (successful edits were rolled back)
414
+ const failLines = results.filter(r => r.startsWith(' FAIL ')).join('\n');
251
415
  return {
252
416
  success: false,
253
417
  output: '',
254
- error: `Edit batch failed — all changes rolled back.\n${results.join('\n')}\n\nFirst error: ${firstError}`,
418
+ error: `Edit FAILED — all changes rolled back. Raw input: ${JSON.stringify(rawInput)}\n${failLines}\n\n${firstError}`,
255
419
  };
256
420
  }
257
421
  for (const [resolved, content] of modifiedFiles) {
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from './types.js';
2
+ export declare function createInstallSuperpowersTool(cwd: string): Tool;
3
+ //# sourceMappingURL=install_superpowers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install_superpowers.d.ts","sourceRoot":"","sources":["../../src/tools/install_superpowers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,YAAY,CAAA;AAsHlD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA+G9D"}
@@ -0,0 +1,207 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { fmtErr } from './errors.js';
4
+ // ── Constants ────────────────────────────────────────────────────────────────
5
+ const SKILLS_DIR = '.lonny/skills';
6
+ const SUPER_SKILLS_REPO = 'obra/superpowers';
7
+ const RAW_BASE = `https://raw.githubusercontent.com/${SUPER_SKILLS_REPO}/refs/heads/main`;
8
+ const API_BASE = `https://api.github.com/repos/${SUPER_SKILLS_REPO}/contents`;
9
+ // Skills to install (excluding meta/writing skills that reference Claude-specific features)
10
+ const SKILLS_TO_INSTALL = [
11
+ {
12
+ dir: 'brainstorming',
13
+ name: 'brainstorming',
14
+ description: 'Socratic design refinement — refines rough ideas through questions, explores alternatives, presents design in sections for validation',
15
+ },
16
+ {
17
+ dir: 'writing-plans',
18
+ name: 'writing-plans',
19
+ description: 'Detailed implementation plans — breaks work into bite-sized tasks with exact file paths, complete code, and verification steps',
20
+ },
21
+ {
22
+ dir: 'executing-plans',
23
+ name: 'executing-plans',
24
+ description: 'Batch execution with checkpoints — executes plan tasks in batches with human checkpoints between batches',
25
+ },
26
+ {
27
+ dir: 'test-driven-development',
28
+ name: 'test-driven-development',
29
+ description: 'RED-GREEN-REFACTOR cycle — write failing test, watch it fail, write minimal code, watch it pass, commit',
30
+ },
31
+ {
32
+ dir: 'systematic-debugging',
33
+ name: 'systematic-debugging',
34
+ description: '4-phase root cause process for debugging issues',
35
+ },
36
+ {
37
+ dir: 'verification-before-completion',
38
+ name: 'verification-before-completion',
39
+ description: 'Ensure fixes are actually correct before declaring success',
40
+ },
41
+ {
42
+ dir: 'requesting-code-review',
43
+ name: 'requesting-code-review',
44
+ description: 'Pre-review checklist — reviews code against plan, reports issues by severity',
45
+ },
46
+ {
47
+ dir: 'receiving-code-review',
48
+ name: 'receiving-code-review',
49
+ description: 'Responding to code review feedback constructively',
50
+ },
51
+ {
52
+ dir: 'using-git-worktrees',
53
+ name: 'using-git-worktrees',
54
+ description: 'Parallel development branches using git worktrees for isolated development',
55
+ },
56
+ {
57
+ dir: 'finishing-a-development-branch',
58
+ name: 'finishing-a-development-branch',
59
+ description: 'Merge/PR decision workflow — verifies tests, presents options, cleans up worktree',
60
+ },
61
+ {
62
+ dir: 'dispatching-parallel-agents',
63
+ name: 'dispatching-parallel-agents',
64
+ description: 'Concurrent subagent workflows using exec tool for parallel execution',
65
+ },
66
+ ];
67
+ // ── Helpers ──────────────────────────────────────────────────────────────────
68
+ /** Fetch a file from the Superpowers GitHub repository */
69
+ async function fetchSuperpowerFile(path) {
70
+ try {
71
+ const url = `${RAW_BASE}/${path}`;
72
+ const response = await fetch(url);
73
+ if (!response.ok)
74
+ return null;
75
+ return await response.text();
76
+ }
77
+ catch {
78
+ return null;
79
+ }
80
+ }
81
+ /** Sanitize a name to a valid skill name (lowercase, digits, hyphens) */
82
+ function sanitizeSkillName(name) {
83
+ return name
84
+ .toLowerCase()
85
+ .replace(/@/g, '')
86
+ .replace(/\//g, '-')
87
+ .replace(/[^a-z0-9-]/g, '')
88
+ .replace(/-+/g, '-')
89
+ .replace(/^-|-$/g, '');
90
+ }
91
+ /** Generate skill markdown content with frontmatter */
92
+ function generateSkillContent(name, description, skillMdContent) {
93
+ return `---
94
+ name: ${name}
95
+ description: ${description}
96
+ source: superpowers
97
+ ---
98
+
99
+ # ${name}
100
+
101
+ ${description}
102
+
103
+ ${skillMdContent.trim()}
104
+
105
+ ---
106
+ _Skill installed from [Superpowers](${RAW_BASE.replace('/refs/heads/main', '')}) — an agentic skills framework by Jesse Vincent._
107
+ `;
108
+ }
109
+ // ── Tool ─────────────────────────────────────────────────────────────────────
110
+ export function createInstallSuperpowersTool(cwd) {
111
+ return {
112
+ definition: {
113
+ name: 'install_superpowers',
114
+ description: `Install Superpowers skills from github.com/${SUPER_SKILLS_REPO} into the local .lonny/skills/ directory.
115
+
116
+ Superpowers is a complete software development methodology for coding agents, built on a set of composable skills covering:
117
+ - brainstorming (design refinement)
118
+ - writing-plans (implementation plans)
119
+ - executing-plans (batch execution)
120
+ - test-driven-development (RED-GREEN-REFACTOR)
121
+ - systematic-debugging (root cause analysis)
122
+ - verification-before-completion
123
+ - requesting-code-review / receiving-code-review
124
+ - using-git-worktrees
125
+ - finishing-a-development-branch
126
+ - dispatching-parallel-agents
127
+
128
+ Each skill is downloaded from the Superpowers repository and converted to lonny-agent's skill format.
129
+ Skills are loaded automatically on the next conversation turn.`,
130
+ parameters: {
131
+ force: {
132
+ type: 'boolean',
133
+ description: 'If true, re-download and overwrite existing Superpowers skills even if already installed (default: false)',
134
+ required: false,
135
+ },
136
+ },
137
+ },
138
+ async execute(input) {
139
+ const force = input?.force === true;
140
+ const skillsDir = path.resolve(cwd, SKILLS_DIR);
141
+ const results = [];
142
+ for (const skill of SKILLS_TO_INSTALL) {
143
+ const skillName = sanitizeSkillName(skill.name);
144
+ const skillFilePath = path.join(skillsDir, `${skillName}.md`);
145
+ // Skip if already installed and not forced
146
+ if (!force && fs.existsSync(skillFilePath)) {
147
+ results.push({ name: skillName, status: 'skipped' });
148
+ continue;
149
+ }
150
+ // Fetch SKILL.md from the Superpowers repository
151
+ const skillMdPath = `skills/${skill.dir}/SKILL.md`;
152
+ const content = await fetchSuperpowerFile(skillMdPath);
153
+ if (!content) {
154
+ results.push({
155
+ name: skillName,
156
+ status: 'error',
157
+ error: `Failed to fetch ${skillMdPath}`,
158
+ });
159
+ continue;
160
+ }
161
+ // Write the skill file
162
+ const skillContent = generateSkillContent(skillName, skill.description, content);
163
+ try {
164
+ fs.mkdirSync(skillsDir, { recursive: true });
165
+ fs.writeFileSync(skillFilePath, skillContent, 'utf-8');
166
+ results.push({ name: skillName, status: 'installed' });
167
+ }
168
+ catch (err) {
169
+ results.push({
170
+ name: skillName,
171
+ status: 'error',
172
+ error: `Failed to write skill file: ${fmtErr(err)}`,
173
+ });
174
+ }
175
+ }
176
+ // Build output summary
177
+ const installed = results.filter(r => r.status === 'installed').length;
178
+ const skipped = results.filter(r => r.status === 'skipped').length;
179
+ const errors = results.filter(r => r.status === 'error');
180
+ let output = `Superpowers installation complete.\n`;
181
+ output += `- Installed: ${installed} skills\n`;
182
+ output += `- Skipped (already exists): ${skipped} skills\n`;
183
+ if (errors.length > 0) {
184
+ output += `- Errors: ${errors.length}\n`;
185
+ for (const err of errors) {
186
+ output += ` - ${err.name}: ${err.error}\n`;
187
+ }
188
+ }
189
+ output += `\nSkills are stored in: ${path.relative(cwd, skillsDir).replace(/\\/g, '/')}/\n`;
190
+ output += `\nThe skills will be loaded automatically on the next conversation turn.\n`;
191
+ if (installed > 0) {
192
+ output += `\nRun \`/skills\` to list active skills.`;
193
+ }
194
+ if (skipped > 0 && !force) {
195
+ output += `\nTo re-install existing skills, use install_superpowers({ force: true }).`;
196
+ }
197
+ return {
198
+ success: errors.length === 0,
199
+ output,
200
+ error: errors.length > 0
201
+ ? `${errors.length} skill(s) failed to install. ${errors.map(e => e.error).join('; ')}`
202
+ : undefined,
203
+ };
204
+ },
205
+ };
206
+ }
207
+ //# sourceMappingURL=install_superpowers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install_superpowers.js","sourceRoot":"","sources":["../../src/tools/install_superpowers.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAmChD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAitB5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAgDhD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0tB5D"}