aspectcode 0.3.1 → 0.3.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 (71) hide show
  1. package/bin/aspectcode.js +3 -0
  2. package/dist/cli.d.ts +5 -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 +34 -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.map +1 -1
  21. package/dist/pipeline.js +85 -17
  22. package/dist/pipeline.js.map +1 -1
  23. package/dist/ui/Dashboard.d.ts +12 -0
  24. package/dist/ui/Dashboard.d.ts.map +1 -0
  25. package/dist/ui/Dashboard.js +162 -0
  26. package/dist/ui/Dashboard.js.map +1 -0
  27. package/dist/ui/inkLogger.d.ts +20 -0
  28. package/dist/ui/inkLogger.d.ts.map +1 -0
  29. package/dist/ui/inkLogger.js +42 -0
  30. package/dist/ui/inkLogger.js.map +1 -0
  31. package/dist/ui/prompts.d.ts +19 -0
  32. package/dist/ui/prompts.d.ts.map +1 -0
  33. package/dist/ui/prompts.js +125 -0
  34. package/dist/ui/prompts.js.map +1 -0
  35. package/dist/ui/store.d.ts +60 -0
  36. package/dist/ui/store.d.ts.map +1 -0
  37. package/dist/ui/store.js +104 -0
  38. package/dist/ui/store.js.map +1 -0
  39. package/dist/ui/theme.d.ts +27 -0
  40. package/dist/ui/theme.d.ts.map +1 -0
  41. package/dist/ui/theme.js +41 -0
  42. package/dist/ui/theme.js.map +1 -0
  43. package/dist/workspace.d.ts +2 -0
  44. package/dist/workspace.d.ts.map +1 -1
  45. package/dist/workspace.js +3 -2
  46. package/dist/workspace.js.map +1 -1
  47. package/dist/writer.d.ts +18 -4
  48. package/dist/writer.d.ts.map +1 -1
  49. package/dist/writer.js +49 -5
  50. package/dist/writer.js.map +1 -1
  51. package/node_modules/@aspectcode/optimizer/dist/agent.d.ts +9 -1
  52. package/node_modules/@aspectcode/optimizer/dist/agent.d.ts.map +1 -1
  53. package/node_modules/@aspectcode/optimizer/dist/agent.js +38 -0
  54. package/node_modules/@aspectcode/optimizer/dist/agent.js.map +1 -1
  55. package/node_modules/@aspectcode/optimizer/dist/index.d.ts +3 -3
  56. package/node_modules/@aspectcode/optimizer/dist/index.d.ts.map +1 -1
  57. package/node_modules/@aspectcode/optimizer/dist/index.js +4 -1
  58. package/node_modules/@aspectcode/optimizer/dist/index.js.map +1 -1
  59. package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts +12 -0
  60. package/node_modules/@aspectcode/optimizer/dist/prompts.d.ts.map +1 -1
  61. package/node_modules/@aspectcode/optimizer/dist/prompts.js +55 -0
  62. package/node_modules/@aspectcode/optimizer/dist/prompts.js.map +1 -1
  63. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js +1 -1
  64. package/node_modules/@aspectcode/optimizer/dist/providers/anthropic.js.map +1 -1
  65. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js +1 -1
  66. package/node_modules/@aspectcode/optimizer/dist/providers/openai.js.map +1 -1
  67. package/node_modules/@aspectcode/optimizer/dist/types.d.ts +24 -0
  68. package/node_modules/@aspectcode/optimizer/dist/types.d.ts.map +1 -1
  69. package/node_modules/@aspectcode/optimizer/dist/types.js.map +1 -1
  70. package/node_modules/@aspectcode/optimizer/package.json +1 -1
  71. package/package.json +6 -3
package/dist/pipeline.js CHANGED
@@ -56,6 +56,9 @@ const kbBuilder_1 = require("./kbBuilder");
56
56
  const toolIngestion_1 = require("./toolIngestion");
57
57
  const writer_1 = require("./writer");
58
58
  const optimize_1 = require("./optimize");
59
+ const complaintProcessor_1 = require("./complaintProcessor");
60
+ const prompts_1 = require("./ui/prompts");
61
+ const store_1 = require("./ui/store");
59
62
  // ── Watch constants ──────────────────────────────────────────
60
63
  const DEBOUNCE_MS = 2000;
61
64
  const IGNORED_SEGMENTS = [
@@ -72,22 +75,25 @@ function isSupportedSourceFile(filePath) {
72
75
  return core_1.SUPPORTED_EXTENSIONS.includes(ext);
73
76
  }
74
77
  // ── Single pipeline run ──────────────────────────────────────
75
- async function runOnce(ctx) {
78
+ async function runOnce(ctx, ownership) {
76
79
  const { root, flags, log } = ctx;
77
80
  const config = (0, config_1.loadConfig)(root);
78
81
  const startMs = Date.now();
82
+ store_1.store.resetRun();
79
83
  // ── 1. Discover & read files ──────────────────────────────
80
- const workspace = await (0, workspace_1.loadWorkspaceFiles)(root, config, log, { quiet: flags.quiet });
84
+ store_1.store.setPhase('discovering');
85
+ const workspace = await (0, workspace_1.loadWorkspaceFiles)(root, config, log, { quiet: flags.quiet, spin: ctx.spin });
81
86
  if (workspace.discoveredPaths.length === 0) {
82
87
  log.warn('No source files found. Check your workspace or exclude patterns.');
83
- return cli_1.ExitCode.ERROR;
88
+ return { code: cli_1.ExitCode.ERROR, kbContent: '' };
84
89
  }
85
90
  // ── 2. Analyze ────────────────────────────────────────────
86
- const spinAnalyze = (0, logger_1.createSpinner)('Analyzing…', { quiet: flags.quiet });
91
+ const spinAnalyze = ctx.spin('Analyzing…', 'analyzing');
87
92
  const model = await (0, core_1.analyzeRepoWithDependencies)(root, workspace.relativeFiles, workspace.absoluteFiles, workspace.host);
88
93
  spinAnalyze.stop(`Analyzed ${model.files.length} files, ${model.graph.edges.length} edges`);
94
+ store_1.store.setStats(model.files.length, model.graph.edges.length);
89
95
  // ── 3. Build KB content in memory ─────────────────────────
90
- const spinKb = (0, logger_1.createSpinner)('Building knowledge base…', { quiet: flags.quiet });
96
+ const spinKb = ctx.spin('Building knowledge base…', 'building-kb');
91
97
  const kbContent = (0, kbBuilder_1.buildKbContent)(model, root, workspace.relativeFiles);
92
98
  spinKb.stop('Knowledge base built');
93
99
  // ── 4. Read other AI tool instruction files ───────────────
@@ -97,43 +103,83 @@ async function runOnce(ctx) {
97
103
  log.debug(`Read ${toolInstructions.size} AI tool instruction file(s) as context`);
98
104
  }
99
105
  // ── 5. Optimize or fallback ───────────────────────────────
100
- const agentsContent = await (0, optimize_1.tryOptimize)(ctx, kbContent, toolInstructions, config);
106
+ store_1.store.setPhase('optimizing');
107
+ const optimizeResult = await (0, optimize_1.tryOptimize)(ctx, kbContent, toolInstructions, config);
101
108
  // ── 6. Write AGENTS.md ────────────────────────────────────
109
+ store_1.store.setPhase('writing');
102
110
  if (flags.dryRun) {
103
111
  log.info(logger_1.fmt.bold('Dry run — proposed AGENTS.md:'));
104
112
  log.blank();
105
- console.log(agentsContent);
113
+ console.log(optimizeResult.content);
106
114
  log.blank();
107
115
  }
108
116
  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`);
117
+ await (0, writer_1.writeAgentsMd)(host, root, optimizeResult.content, ownership);
118
+ const modeLabel = ownership === 'section' ? ' (section)' : '';
119
+ const verb = optimizeResult.reasoning.length > 0 ? 'updated' : 'written';
120
+ store_1.store.addOutput(`AGENTS.md ${verb}${modeLabel}`);
121
+ log.success(`AGENTS.md ${verb}${modeLabel}`);
112
122
  }
113
123
  // ── 7. Optionally write kb.md ─────────────────────────────
114
124
  if (flags.kb && !flags.dryRun) {
115
125
  await (0, writer_1.writeKbMd)(host, root, kbContent);
126
+ store_1.store.addOutput('kb.md written');
116
127
  log.success('kb.md written');
117
128
  }
118
129
  const elapsedMs = Date.now() - startMs;
130
+ store_1.store.setElapsed(`${(elapsedMs / 1000).toFixed(1)}s`);
131
+ store_1.store.setPhase('done');
119
132
  log.info(logger_1.fmt.dim(`Done in ${(elapsedMs / 1000).toFixed(1)}s`));
120
- return cli_1.ExitCode.OK;
133
+ return { code: cli_1.ExitCode.OK, kbContent };
121
134
  }
122
135
  // ── Pipeline entry point ─────────────────────────────────────
123
136
  async function runPipeline(ctx) {
124
137
  const { root, flags, log } = ctx;
125
138
  log.info(`${logger_1.fmt.bold('aspectcode')} — ${logger_1.fmt.cyan(root)}`);
126
139
  log.blank();
140
+ // ── Resolve AGENTS.md ownership mode ─────────────────────
141
+ const config = (0, config_1.loadConfig)(root);
142
+ let ownership = config?.ownership ?? 'full';
143
+ // If AGENTS.md exists and we haven't stored a preference yet, ask
144
+ if (!config?.ownership) {
145
+ try {
146
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
147
+ const agentsPath = path.join(root, 'AGENTS.md');
148
+ if (fs.existsSync(agentsPath)) {
149
+ const existing = fs.readFileSync(agentsPath, 'utf-8');
150
+ if (!(0, writer_1.hasMarkers)(existing)) {
151
+ 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);
152
+ ownership = idx === 1 ? 'section' : 'full';
153
+ (0, config_1.saveConfig)(root, { ownership });
154
+ log.info(logger_1.fmt.dim(`Saved preference → ${ownership} mode`));
155
+ log.blank();
156
+ }
157
+ else {
158
+ ownership = 'section';
159
+ }
160
+ }
161
+ }
162
+ catch {
163
+ // Non-interactive or read error — default to full
164
+ }
165
+ }
127
166
  // ── 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)
167
+ const result = await runOnce(ctx, ownership);
168
+ if (result.code !== cli_1.ExitCode.OK)
169
+ return result.code;
170
+ // Keep track of latest KB for complaint processing
171
+ let latestKb = result.kbContent;
172
+ // ── --once: process any queued complaints, then exit ──────
173
+ if (flags.once) {
174
+ if (store_1.store.state.complaintQueue.length > 0) {
175
+ await (0, complaintProcessor_1.processComplaints)(ctx, ownership, latestKb);
176
+ }
133
177
  return cli_1.ExitCode.OK;
178
+ }
134
179
  // ── Watch mode ────────────────────────────────────────────
135
180
  log.blank();
136
181
  log.info(logger_1.fmt.dim('Watching for changes… (Ctrl+C to stop)'));
182
+ store_1.store.setPhase('watching');
137
183
  const chokidarModule = await Promise.resolve().then(() => __importStar(require('chokidar')));
138
184
  const chokidar = chokidarModule.default ?? chokidarModule;
139
185
  const watcher = chokidar.watch('.', {
@@ -160,7 +206,11 @@ async function runPipeline(ctx) {
160
206
  try {
161
207
  log.blank();
162
208
  log.info(`${logger_1.fmt.bold('change detected:')} ${reason}`);
163
- await runOnce(ctx);
209
+ store_1.store.setLastChange(reason);
210
+ const runResult = await runOnce(ctx, ownership);
211
+ if (runResult.kbContent)
212
+ latestKb = runResult.kbContent;
213
+ store_1.store.setPhase('watching');
164
214
  }
165
215
  catch (error) {
166
216
  const msg = error instanceof Error ? error.message : String(error);
@@ -191,11 +241,29 @@ async function runPipeline(ctx) {
191
241
  watcher.on('error', (e) => log.error(`Watcher error: ${String(e)}`));
192
242
  await new Promise((resolve) => watcher.once('ready', resolve));
193
243
  log.info(logger_1.fmt.dim('Watcher ready.'));
244
+ // ── Complaint polling — check for queued complaints periodically ──
245
+ const COMPLAINT_POLL_MS = 500;
246
+ const complaintPoll = setInterval(async () => {
247
+ if (stopped || running || store_1.store.state.complaintQueue.length === 0)
248
+ return;
249
+ running = true;
250
+ try {
251
+ await (0, complaintProcessor_1.processComplaints)(ctx, ownership, latestKb);
252
+ }
253
+ catch (err) {
254
+ const msg = err instanceof Error ? err.message : String(err);
255
+ log.error(`Complaint processing failed: ${msg}`);
256
+ }
257
+ finally {
258
+ running = false;
259
+ }
260
+ }, COMPLAINT_POLL_MS);
194
261
  return await new Promise((resolve) => {
195
262
  const shutdown = async (signal) => {
196
263
  if (stopped)
197
264
  return;
198
265
  stopped = true;
266
+ clearInterval(complaintPoll);
199
267
  if (timer) {
200
268
  clearTimeout(timer);
201
269
  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