aspectcode 0.3.1 → 0.3.3

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 (72) hide show
  1. package/bin/aspectcode.js +3 -0
  2. package/dist/cli.d.ts +7 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/complaintProcessor.d.ts +16 -0
  6. package/dist/complaintProcessor.d.ts.map +1 -0
  7. package/dist/complaintProcessor.js +134 -0
  8. package/dist/complaintProcessor.js.map +1 -0
  9. package/dist/config.d.ts +7 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +19 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/main.d.ts.map +1 -1
  14. package/dist/main.js +37 -2
  15. package/dist/main.js.map +1 -1
  16. package/dist/optimize.d.ts +7 -1
  17. package/dist/optimize.d.ts.map +1 -1
  18. package/dist/optimize.js +26 -5
  19. package/dist/optimize.js.map +1 -1
  20. package/dist/pipeline.d.ts +8 -0
  21. package/dist/pipeline.d.ts.map +1 -1
  22. package/dist/pipeline.js +89 -18
  23. package/dist/pipeline.js.map +1 -1
  24. package/dist/ui/Dashboard.d.ts +12 -0
  25. package/dist/ui/Dashboard.d.ts.map +1 -0
  26. package/dist/ui/Dashboard.js +162 -0
  27. package/dist/ui/Dashboard.js.map +1 -0
  28. package/dist/ui/inkLogger.d.ts +20 -0
  29. package/dist/ui/inkLogger.d.ts.map +1 -0
  30. package/dist/ui/inkLogger.js +42 -0
  31. package/dist/ui/inkLogger.js.map +1 -0
  32. package/dist/ui/prompts.d.ts +19 -0
  33. package/dist/ui/prompts.d.ts.map +1 -0
  34. package/dist/ui/prompts.js +125 -0
  35. package/dist/ui/prompts.js.map +1 -0
  36. package/dist/ui/store.d.ts +60 -0
  37. package/dist/ui/store.d.ts.map +1 -0
  38. package/dist/ui/store.js +104 -0
  39. package/dist/ui/store.js.map +1 -0
  40. package/dist/ui/theme.d.ts +27 -0
  41. package/dist/ui/theme.d.ts.map +1 -0
  42. package/dist/ui/theme.js +41 -0
  43. package/dist/ui/theme.js.map +1 -0
  44. package/dist/workspace.d.ts +2 -0
  45. package/dist/workspace.d.ts.map +1 -1
  46. package/dist/workspace.js +3 -2
  47. package/dist/workspace.js.map +1 -1
  48. package/dist/writer.d.ts +18 -4
  49. package/dist/writer.d.ts.map +1 -1
  50. package/dist/writer.js +49 -5
  51. package/dist/writer.js.map +1 -1
  52. package/node_modules/@aspectcode/optimizer/dist/agent.d.ts +9 -1
  53. package/node_modules/@aspectcode/optimizer/dist/agent.d.ts.map +1 -1
  54. package/node_modules/@aspectcode/optimizer/dist/agent.js +38 -0
  55. package/node_modules/@aspectcode/optimizer/dist/agent.js.map +1 -1
  56. package/node_modules/@aspectcode/optimizer/dist/index.d.ts +3 -3
  57. package/node_modules/@aspectcode/optimizer/dist/index.d.ts.map +1 -1
  58. package/node_modules/@aspectcode/optimizer/dist/index.js +4 -1
  59. package/node_modules/@aspectcode/optimizer/dist/index.js.map +1 -1
  60. package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts +12 -0
  61. package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts.map +1 -1
  62. package/node_modules/@aspectcode/optimizer/dist/prompts.js +55 -0
  63. package/node_modules/@aspectcode/optimizer/dist/prompts.js.map +1 -1
  64. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js +1 -1
  65. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js.map +1 -1
  66. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js +1 -1
  67. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js.map +1 -1
  68. package/node_modules/@aspectcode/optimizer/dist/types.d.ts +24 -0
  69. package/node_modules/@aspectcode/optimizer/dist/types.d.ts.map +1 -1
  70. package/node_modules/@aspectcode/optimizer/dist/types.js.map +1 -1
  71. package/node_modules/@aspectcode/optimizer/package.json +1 -1
  72. package/package.json +6 -3
package/dist/pipeline.js CHANGED
@@ -44,6 +44,7 @@ var __importStar = (this && this.__importStar) || (function () {
44
44
  };
45
45
  })();
46
46
  Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.resolveOwnership = resolveOwnership;
47
48
  exports.runPipeline = runPipeline;
48
49
  const path = __importStar(require("path"));
49
50
  const core_1 = require("@aspectcode/core");
@@ -56,6 +57,9 @@ const kbBuilder_1 = require("./kbBuilder");
56
57
  const toolIngestion_1 = require("./toolIngestion");
57
58
  const writer_1 = require("./writer");
58
59
  const optimize_1 = require("./optimize");
60
+ const complaintProcessor_1 = require("./complaintProcessor");
61
+ const prompts_1 = require("./ui/prompts");
62
+ const store_1 = require("./ui/store");
59
63
  // ── Watch constants ──────────────────────────────────────────
60
64
  const DEBOUNCE_MS = 2000;
61
65
  const IGNORED_SEGMENTS = [
@@ -72,22 +76,25 @@ function isSupportedSourceFile(filePath) {
72
76
  return core_1.SUPPORTED_EXTENSIONS.includes(ext);
73
77
  }
74
78
  // ── Single pipeline run ──────────────────────────────────────
75
- async function runOnce(ctx) {
79
+ async function runOnce(ctx, ownership) {
76
80
  const { root, flags, log } = ctx;
77
81
  const config = (0, config_1.loadConfig)(root);
78
82
  const startMs = Date.now();
83
+ store_1.store.resetRun();
79
84
  // ── 1. Discover & read files ──────────────────────────────
80
- const workspace = await (0, workspace_1.loadWorkspaceFiles)(root, config, log, { quiet: flags.quiet });
85
+ store_1.store.setPhase('discovering');
86
+ const workspace = await (0, workspace_1.loadWorkspaceFiles)(root, config, log, { quiet: flags.quiet, spin: ctx.spin });
81
87
  if (workspace.discoveredPaths.length === 0) {
82
88
  log.warn('No source files found. Check your workspace or exclude patterns.');
83
- return cli_1.ExitCode.ERROR;
89
+ return { code: cli_1.ExitCode.ERROR, kbContent: '' };
84
90
  }
85
91
  // ── 2. Analyze ────────────────────────────────────────────
86
- const spinAnalyze = (0, logger_1.createSpinner)('Analyzing…', { quiet: flags.quiet });
92
+ const spinAnalyze = ctx.spin('Analyzing…', 'analyzing');
87
93
  const model = await (0, core_1.analyzeRepoWithDependencies)(root, workspace.relativeFiles, workspace.absoluteFiles, workspace.host);
88
94
  spinAnalyze.stop(`Analyzed ${model.files.length} files, ${model.graph.edges.length} edges`);
95
+ store_1.store.setStats(model.files.length, model.graph.edges.length);
89
96
  // ── 3. Build KB content in memory ─────────────────────────
90
- const spinKb = (0, logger_1.createSpinner)('Building knowledge base…', { quiet: flags.quiet });
97
+ const spinKb = ctx.spin('Building knowledge base…', 'building-kb');
91
98
  const kbContent = (0, kbBuilder_1.buildKbContent)(model, root, workspace.relativeFiles);
92
99
  spinKb.stop('Knowledge base built');
93
100
  // ── 4. Read other AI tool instruction files ───────────────
@@ -97,43 +104,85 @@ async function runOnce(ctx) {
97
104
  log.debug(`Read ${toolInstructions.size} AI tool instruction file(s) as context`);
98
105
  }
99
106
  // ── 5. Optimize or fallback ───────────────────────────────
100
- const agentsContent = await (0, optimize_1.tryOptimize)(ctx, kbContent, toolInstructions, config);
107
+ store_1.store.setPhase('optimizing');
108
+ const optimizeResult = await (0, optimize_1.tryOptimize)(ctx, kbContent, toolInstructions, config);
101
109
  // ── 6. Write AGENTS.md ────────────────────────────────────
110
+ store_1.store.setPhase('writing');
102
111
  if (flags.dryRun) {
103
112
  log.info(logger_1.fmt.bold('Dry run — proposed AGENTS.md:'));
104
113
  log.blank();
105
- console.log(agentsContent);
114
+ console.log(optimizeResult.content);
106
115
  log.blank();
107
116
  }
108
117
  else {
109
- await (0, writer_1.writeAgentsMd)(host, root, agentsContent);
110
- const agentsPath = path.relative(root, path.join(root, 'AGENTS.md')).replace(/\\/g, '/');
111
- log.success(`${agentsPath} written`);
118
+ await (0, writer_1.writeAgentsMd)(host, root, optimizeResult.content, ownership);
119
+ const modeLabel = ownership === 'section' ? ' (section)' : '';
120
+ const verb = optimizeResult.reasoning.length > 0 ? 'updated' : 'written';
121
+ store_1.store.addOutput(`AGENTS.md ${verb}${modeLabel}`);
122
+ log.success(`AGENTS.md ${verb}${modeLabel}`);
112
123
  }
113
124
  // ── 7. Optionally write kb.md ─────────────────────────────
114
125
  if (flags.kb && !flags.dryRun) {
115
126
  await (0, writer_1.writeKbMd)(host, root, kbContent);
127
+ store_1.store.addOutput('kb.md written');
116
128
  log.success('kb.md written');
117
129
  }
118
130
  const elapsedMs = Date.now() - startMs;
131
+ store_1.store.setElapsed(`${(elapsedMs / 1000).toFixed(1)}s`);
132
+ store_1.store.setPhase('done');
119
133
  log.info(logger_1.fmt.dim(`Done in ${(elapsedMs / 1000).toFixed(1)}s`));
120
- return cli_1.ExitCode.OK;
134
+ return { code: cli_1.ExitCode.OK, kbContent };
121
135
  }
122
136
  // ── Pipeline entry point ─────────────────────────────────────
137
+ /**
138
+ * Resolve AGENTS.md ownership mode.
139
+ *
140
+ * Called from main() BEFORE the ink dashboard is mounted, because
141
+ * the interactive prompt uses raw stdin which conflicts with ink's useInput.
142
+ */
143
+ async function resolveOwnership(root) {
144
+ const config = (0, config_1.loadConfig)(root);
145
+ if (config?.ownership)
146
+ return config.ownership;
147
+ try {
148
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
149
+ const agentsPath = path.join(root, 'AGENTS.md');
150
+ if (fs.existsSync(agentsPath)) {
151
+ const existing = fs.readFileSync(agentsPath, 'utf-8');
152
+ if ((0, writer_1.hasMarkers)(existing))
153
+ return 'section';
154
+ const idx = await (0, prompts_1.selectPrompt)('AGENTS.md already exists. How should AspectCode manage it?', ['Replace entire file (full ownership)', 'Own a section (preserve your content)'], 0);
155
+ const ownership = idx === 1 ? 'section' : 'full';
156
+ (0, config_1.saveConfig)(root, { ownership });
157
+ return ownership;
158
+ }
159
+ }
160
+ catch {
161
+ // Non-interactive or read error — default to full
162
+ }
163
+ return 'full';
164
+ }
123
165
  async function runPipeline(ctx) {
124
- const { root, flags, log } = ctx;
166
+ const { root, flags, log, ownership } = ctx;
125
167
  log.info(`${logger_1.fmt.bold('aspectcode')} — ${logger_1.fmt.cyan(root)}`);
126
168
  log.blank();
127
169
  // ── Initial run ──────────────────────────────────────────
128
- const code = await runOnce(ctx);
129
- if (code !== cli_1.ExitCode.OK)
130
- return code;
131
- // ── --once: exit immediately ──────────────────────────────
132
- if (flags.once)
170
+ const result = await runOnce(ctx, ownership);
171
+ if (result.code !== cli_1.ExitCode.OK)
172
+ return result.code;
173
+ // Keep track of latest KB for complaint processing
174
+ let latestKb = result.kbContent;
175
+ // ── --once: process any queued complaints, then exit ──────
176
+ if (flags.once) {
177
+ if (store_1.store.state.complaintQueue.length > 0) {
178
+ await (0, complaintProcessor_1.processComplaints)(ctx, ownership, latestKb);
179
+ }
133
180
  return cli_1.ExitCode.OK;
181
+ }
134
182
  // ── Watch mode ────────────────────────────────────────────
135
183
  log.blank();
136
184
  log.info(logger_1.fmt.dim('Watching for changes… (Ctrl+C to stop)'));
185
+ store_1.store.setPhase('watching');
137
186
  const chokidarModule = await Promise.resolve().then(() => __importStar(require('chokidar')));
138
187
  const chokidar = chokidarModule.default ?? chokidarModule;
139
188
  const watcher = chokidar.watch('.', {
@@ -160,7 +209,11 @@ async function runPipeline(ctx) {
160
209
  try {
161
210
  log.blank();
162
211
  log.info(`${logger_1.fmt.bold('change detected:')} ${reason}`);
163
- await runOnce(ctx);
212
+ store_1.store.setLastChange(reason);
213
+ const runResult = await runOnce(ctx, ownership);
214
+ if (runResult.kbContent)
215
+ latestKb = runResult.kbContent;
216
+ store_1.store.setPhase('watching');
164
217
  }
165
218
  catch (error) {
166
219
  const msg = error instanceof Error ? error.message : String(error);
@@ -191,11 +244,29 @@ async function runPipeline(ctx) {
191
244
  watcher.on('error', (e) => log.error(`Watcher error: ${String(e)}`));
192
245
  await new Promise((resolve) => watcher.once('ready', resolve));
193
246
  log.info(logger_1.fmt.dim('Watcher ready.'));
247
+ // ── Complaint polling — check for queued complaints periodically ──
248
+ const COMPLAINT_POLL_MS = 500;
249
+ const complaintPoll = setInterval(async () => {
250
+ if (stopped || running || store_1.store.state.complaintQueue.length === 0)
251
+ return;
252
+ running = true;
253
+ try {
254
+ await (0, complaintProcessor_1.processComplaints)(ctx, ownership, latestKb);
255
+ }
256
+ catch (err) {
257
+ const msg = err instanceof Error ? err.message : String(err);
258
+ log.error(`Complaint processing failed: ${msg}`);
259
+ }
260
+ finally {
261
+ running = false;
262
+ }
263
+ }, COMPLAINT_POLL_MS);
194
264
  return await new Promise((resolve) => {
195
265
  const shutdown = async (signal) => {
196
266
  if (stopped)
197
267
  return;
198
268
  stopped = true;
269
+ clearInterval(complaintPoll);
199
270
  if (timer) {
200
271
  clearTimeout(timer);
201
272
  timer = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Dashboard — condensed ink-based CLI dashboard.
3
+ *
4
+ * Layout:
5
+ * Banner
6
+ * Status line (spinner/icon + phase + stats)
7
+ * [Detail] (change trigger, outputs, warning, reasoning)
8
+ */
9
+ import React from 'react';
10
+ declare const Dashboard: React.FC;
11
+ export default Dashboard;
12
+ //# sourceMappingURL=Dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/ui/Dashboard.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AA0DnD,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAmItB,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * Dashboard — condensed ink-based CLI dashboard.
4
+ *
5
+ * Layout:
6
+ * Banner
7
+ * Status line (spinner/icon + phase + stats)
8
+ * [Detail] (change trigger, outputs, warning, reasoning)
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ const react_1 = __importStar(require("react"));
45
+ const ink_1 = require("ink");
46
+ const theme_1 = require("./theme");
47
+ const store_1 = require("./store");
48
+ // ── Spinner ──────────────────────────────────────────────────
49
+ const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
50
+ function useSpinner(active) {
51
+ const [frame, setFrame] = (0, react_1.useState)(0);
52
+ (0, react_1.useEffect)(() => {
53
+ if (!active)
54
+ return;
55
+ const id = setInterval(() => setFrame((f) => (f + 1) % FRAMES.length), 80);
56
+ return () => clearInterval(id);
57
+ }, [active]);
58
+ return FRAMES[frame];
59
+ }
60
+ // ── Phase labels ─────────────────────────────────────────────
61
+ const PHASE_TEXT = {
62
+ idle: 'Starting…',
63
+ discovering: 'Discovering files…',
64
+ analyzing: 'Analyzing…',
65
+ 'building-kb': 'Building knowledge base…',
66
+ optimizing: 'Optimizing…',
67
+ writing: 'Writing…',
68
+ watching: 'Watching',
69
+ done: 'Done',
70
+ error: 'Error',
71
+ };
72
+ const WORKING = new Set([
73
+ 'idle', 'discovering', 'analyzing', 'building-kb', 'optimizing', 'writing',
74
+ ]);
75
+ // ── Stats string ─────────────────────────────────────────────
76
+ function statsText(s) {
77
+ const parts = [];
78
+ if (s.fileCount > 0)
79
+ parts.push(`${s.fileCount} files`);
80
+ if (s.edgeCount > 0)
81
+ parts.push(`${s.edgeCount} edges`);
82
+ if (s.provider)
83
+ parts.push(s.provider);
84
+ if (s.elapsed)
85
+ parts.push(s.elapsed);
86
+ return parts.length > 0 ? parts.join(' · ') : '';
87
+ }
88
+ // ── Component ────────────────────────────────────────────────
89
+ /** Phases where the complaint input is shown. */
90
+ const INPUT_VISIBLE = new Set([
91
+ 'watching', 'done', 'idle',
92
+ 'discovering', 'analyzing', 'building-kb', 'optimizing', 'writing',
93
+ ]);
94
+ const Dashboard = () => {
95
+ const [s, setS] = (0, react_1.useState)({ ...store_1.store.state });
96
+ (0, react_1.useEffect)(() => {
97
+ const fn = () => setS({ ...store_1.store.state });
98
+ store_1.store.on('change', fn);
99
+ return () => { store_1.store.removeListener('change', fn); };
100
+ }, []);
101
+ // ── Complaint text input via useInput ────────────────────
102
+ (0, ink_1.useInput)((input, key) => {
103
+ if (key.return) {
104
+ const text = store_1.store.state.complaintInput.trim();
105
+ if (text.length > 0) {
106
+ store_1.store.queueComplaint(text);
107
+ }
108
+ return;
109
+ }
110
+ if (key.backspace || key.delete) {
111
+ const cur = store_1.store.state.complaintInput;
112
+ if (cur.length > 0) {
113
+ store_1.store.setComplaintInput(cur.slice(0, -1));
114
+ }
115
+ return;
116
+ }
117
+ if (key.escape) {
118
+ store_1.store.setComplaintInput('');
119
+ return;
120
+ }
121
+ // Ignore control / arrow / meta keys
122
+ if (key.ctrl || key.meta || key.upArrow || key.downArrow || key.leftArrow || key.rightArrow || key.tab) {
123
+ return;
124
+ }
125
+ if (input) {
126
+ store_1.store.setComplaintInput(store_1.store.state.complaintInput + input);
127
+ }
128
+ });
129
+ const working = WORKING.has(s.phase);
130
+ const spinner = useSpinner(working || s.processingComplaint);
131
+ const stats = statsText(s);
132
+ const detail = s.phaseDetail ? ` (${s.phaseDetail})` : '';
133
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
134
+ react_1.default.createElement(ink_1.Box, { marginBottom: 1 },
135
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primary, bold: true }, (0, theme_1.getBannerText)())),
136
+ INPUT_VISIBLE.has(s.phase) && (react_1.default.createElement(ink_1.Box, null,
137
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primary }, ' ❯ '),
138
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.white }, s.complaintInput),
139
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primaryDim }, '▌'))),
140
+ s.complaintQueue.length > 0 && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primaryDim }, ` ${s.complaintQueue.length} complaint${s.complaintQueue.length === 1 ? '' : 's'} queued`)),
141
+ react_1.default.createElement(ink_1.Box, null,
142
+ s.processingComplaint && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primary }, ` ${spinner} Processing complaint…`)),
143
+ !s.processingComplaint && working && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primary }, ` ${spinner} ${PHASE_TEXT[s.phase]}${detail}`)),
144
+ !s.processingComplaint && s.phase === 'watching' && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.green }, ' ● Watching')),
145
+ !s.processingComplaint && s.phase === 'done' && s.outputs.length > 0 && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.green }, ` ✔ ${s.outputs.join(', ')}`)),
146
+ !s.processingComplaint && s.phase === 'done' && s.outputs.length === 0 && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.green }, ' ✔ Done')),
147
+ !s.processingComplaint && s.phase === 'error' && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.red }, ' ✖ Error')),
148
+ stats !== '' && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.gray }, ` ${stats}`))),
149
+ s.lastChange !== '' && working && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.gray }, ` ↳ ${s.lastChange}`)),
150
+ s.warning !== '' && (react_1.default.createElement(ink_1.Box, { marginTop: 0 },
151
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.yellow }, ` ⚠ ${s.warning}`))),
152
+ s.complaintChanges.length > 0 && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 },
153
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primary }, ' Complaint changes applied:'),
154
+ s.complaintChanges.map((c, i) => (react_1.default.createElement(ink_1.Text, { key: i, color: theme_1.COLORS.primaryDim }, ` → ${c}`))))),
155
+ s.reasoning.length > 0 && (s.phase === 'done' || s.phase === 'watching') && (react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 },
156
+ react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.primaryDim }, ' Optimization details:'),
157
+ s.reasoning.map((r, i) => (react_1.default.createElement(ink_1.Text, { key: i, color: theme_1.COLORS.gray }, ` ${r}`))))),
158
+ s.phase === 'watching' && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.gray, dimColor: true }, ' Type a complaint above, or Ctrl+C to stop')),
159
+ s.phase === 'done' && (react_1.default.createElement(ink_1.Text, { color: theme_1.COLORS.gray, dimColor: true }, ' Type a complaint above to refine AGENTS.md'))));
160
+ };
161
+ exports.default = Dashboard;
162
+ //# sourceMappingURL=Dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/ui/Dashboard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Ink logger adapter — implements Logger + Spinner interfaces via the
3
+ * DashboardStore so pipeline output flows through the ink dashboard.
4
+ *
5
+ * Most log calls are absorbed — the dashboard shows structured phases,
6
+ * not individual log lines. Only warnings and errors surface.
7
+ */
8
+ import type { Logger, Spinner } from '../logger';
9
+ import type { PipelinePhase } from './store';
10
+ /**
11
+ * Logger that feeds the dashboard store.
12
+ * Info/success/debug are absorbed; warnings and errors surface.
13
+ */
14
+ export declare function createDashboardLogger(): Logger;
15
+ /**
16
+ * Spinner that sets the dashboard phase. `stop()` is a no-op since the
17
+ * pipeline will advance to the next phase automatically.
18
+ */
19
+ export declare function createDashboardSpinner(phase: PipelinePhase, _initialMsg: string): Spinner;
20
+ //# sourceMappingURL=inkLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inkLogger.d.ts","sourceRoot":"","sources":["../../src/ui/inkLogger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAS9C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAUzF"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Ink logger adapter — implements Logger + Spinner interfaces via the
4
+ * DashboardStore so pipeline output flows through the ink dashboard.
5
+ *
6
+ * Most log calls are absorbed — the dashboard shows structured phases,
7
+ * not individual log lines. Only warnings and errors surface.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createDashboardLogger = createDashboardLogger;
11
+ exports.createDashboardSpinner = createDashboardSpinner;
12
+ const store_1 = require("./store");
13
+ /**
14
+ * Logger that feeds the dashboard store.
15
+ * Info/success/debug are absorbed; warnings and errors surface.
16
+ */
17
+ function createDashboardLogger() {
18
+ return {
19
+ info() { },
20
+ success(_msg) { },
21
+ warn(msg) { store_1.store.setWarning(msg); },
22
+ error(msg) { store_1.store.setWarning(msg); },
23
+ debug() { },
24
+ blank() { },
25
+ };
26
+ }
27
+ /**
28
+ * Spinner that sets the dashboard phase. `stop()` is a no-op since the
29
+ * pipeline will advance to the next phase automatically.
30
+ */
31
+ function createDashboardSpinner(phase, _initialMsg) {
32
+ store_1.store.setPhase(phase);
33
+ return {
34
+ update() { },
35
+ stop() { },
36
+ fail(msg) {
37
+ store_1.store.setPhase('error');
38
+ store_1.store.setWarning(msg);
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=inkLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inkLogger.js","sourceRoot":"","sources":["../../src/ui/inkLogger.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAUH,sDASC;AAMD,wDAUC;AAhCD,mCAAgC;AAGhC;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,OAAO;QACL,IAAI,KAA2D,CAAC;QAChE,OAAO,CAAC,IAAY,IAAgD,CAAC;QACrE,IAAI,CAAC,GAAW,IAAO,aAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,CAAC,GAAW,IAAM,aAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,KAAK,KAAiC,CAAC;QACvC,KAAK,KAA8B,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,KAAoB,EAAE,WAAmB;IAC9E,aAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtB,OAAO;QACL,MAAM,KAAI,CAAC;QACX,IAAI,KAAK,CAAC;QACV,IAAI,CAAC,GAAW;YACd,aAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxB,aAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Simple interactive prompts — readline-based, no dependencies.
3
+ *
4
+ * Falls back to a default when stdin is not a TTY (CI / piped).
5
+ */
6
+ /**
7
+ * Ask the user to pick from a list of options using arrow keys.
8
+ * Returns the 0-based index of the chosen option.
9
+ *
10
+ * Falls back to `defaultIndex` when not interactive.
11
+ */
12
+ export declare function selectPrompt(question: string, options: string[], defaultIndex?: number): Promise<number>;
13
+ /**
14
+ * Ask a yes/no question. Returns `true` for yes.
15
+ *
16
+ * Falls back to `defaultValue` when not interactive.
17
+ */
18
+ export declare function confirmPrompt(question: string, defaultValue?: boolean): Promise<boolean>;
19
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/ui/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,EACjB,YAAY,SAAI,GACf,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,YAAY,UAAO,GAClB,OAAO,CAAC,OAAO,CAAC,CAalB"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * Simple interactive prompts — readline-based, no dependencies.
4
+ *
5
+ * Falls back to a default when stdin is not a TTY (CI / piped).
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.selectPrompt = selectPrompt;
42
+ exports.confirmPrompt = confirmPrompt;
43
+ const readline = __importStar(require("readline"));
44
+ function isInteractive() {
45
+ return Boolean(process.stdin.isTTY && process.stdout.isTTY);
46
+ }
47
+ /**
48
+ * Ask the user to pick from a list of options using arrow keys.
49
+ * Returns the 0-based index of the chosen option.
50
+ *
51
+ * Falls back to `defaultIndex` when not interactive.
52
+ */
53
+ async function selectPrompt(question, options, defaultIndex = 0) {
54
+ if (!isInteractive())
55
+ return defaultIndex;
56
+ return new Promise((resolve) => {
57
+ let selected = defaultIndex;
58
+ const render = () => {
59
+ // Move cursor up to re-render (skip on first paint)
60
+ if (painted) {
61
+ process.stdout.write(`\x1b[${options.length}A`);
62
+ }
63
+ for (let i = 0; i < options.length; i++) {
64
+ const prefix = i === selected ? '\x1b[35m❯\x1b[0m' : ' ';
65
+ const label = i === selected ? `\x1b[1m${options[i]}\x1b[0m` : options[i];
66
+ process.stdout.write(`\x1b[2K ${prefix} ${label}\n`);
67
+ }
68
+ painted = true;
69
+ };
70
+ let painted = false;
71
+ process.stdout.write(`\x1b[35m?\x1b[0m ${question}\n`);
72
+ render();
73
+ // Raw mode for arrow key input
74
+ process.stdin.setRawMode(true);
75
+ process.stdin.resume();
76
+ process.stdin.setEncoding('utf-8');
77
+ const onData = (key) => {
78
+ if (key === '\x1b[A' || key === 'k') {
79
+ // Up
80
+ selected = (selected - 1 + options.length) % options.length;
81
+ render();
82
+ }
83
+ else if (key === '\x1b[B' || key === 'j') {
84
+ // Down
85
+ selected = (selected + 1) % options.length;
86
+ render();
87
+ }
88
+ else if (key === '\r' || key === '\n') {
89
+ // Enter
90
+ process.stdin.setRawMode(false);
91
+ process.stdin.pause();
92
+ process.stdin.removeListener('data', onData);
93
+ resolve(selected);
94
+ }
95
+ else if (key === '\x03') {
96
+ // Ctrl+C
97
+ process.stdin.setRawMode(false);
98
+ process.stdin.pause();
99
+ process.stdin.removeListener('data', onData);
100
+ process.exit(130);
101
+ }
102
+ };
103
+ process.stdin.on('data', onData);
104
+ });
105
+ }
106
+ /**
107
+ * Ask a yes/no question. Returns `true` for yes.
108
+ *
109
+ * Falls back to `defaultValue` when not interactive.
110
+ */
111
+ async function confirmPrompt(question, defaultValue = true) {
112
+ if (!isInteractive())
113
+ return defaultValue;
114
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
115
+ const hint = defaultValue ? 'Y/n' : 'y/N';
116
+ return new Promise((resolve) => {
117
+ rl.question(`\x1b[35m?\x1b[0m ${question} (${hint}) `, (answer) => {
118
+ rl.close();
119
+ if (answer.trim() === '')
120
+ return resolve(defaultValue);
121
+ resolve(answer.trim().toLowerCase().startsWith('y'));
122
+ });
123
+ });
124
+ }
125
+ //# sourceMappingURL=prompts.js.map