document360-writer 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cli.js +65 -3
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/allowProd.d.ts +3 -0
  4. package/dist/commands/allowProd.js +18 -0
  5. package/dist/commands/allowProd.js.map +1 -0
  6. package/dist/commands/clear.js +1 -1
  7. package/dist/commands/clear.js.map +1 -1
  8. package/dist/commands/help.js +3 -1
  9. package/dist/commands/help.js.map +1 -1
  10. package/dist/commands/index.d.ts +2 -0
  11. package/dist/commands/index.js +4 -0
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/commands/init.js +15 -17
  14. package/dist/commands/init.js.map +1 -1
  15. package/dist/commands/mcp.js +24 -4
  16. package/dist/commands/mcp.js.map +1 -1
  17. package/dist/commands/profile.d.ts +3 -0
  18. package/dist/commands/profile.js +16 -0
  19. package/dist/commands/profile.js.map +1 -0
  20. package/dist/commands/rename.js +1 -1
  21. package/dist/commands/rename.js.map +1 -1
  22. package/dist/commands/resume.js +1 -1
  23. package/dist/commands/resume.js.map +1 -1
  24. package/dist/d360/authCli.d.ts +10 -0
  25. package/dist/d360/authCli.js +91 -0
  26. package/dist/d360/authCli.js.map +1 -0
  27. package/dist/d360/profileCli.d.ts +3 -0
  28. package/dist/d360/profileCli.js +54 -0
  29. package/dist/d360/profileCli.js.map +1 -0
  30. package/dist/oneShot.d.ts +2 -2
  31. package/dist/oneShot.js +59 -59
  32. package/dist/oneShot.js.map +1 -1
  33. package/dist/repl.d.ts +2 -2
  34. package/dist/repl.js +72 -82
  35. package/dist/repl.js.map +1 -1
  36. package/dist/tui/App.d.ts +9 -0
  37. package/dist/tui/App.js +413 -0
  38. package/dist/tui/App.js.map +1 -0
  39. package/dist/tui/catalog.d.ts +8 -0
  40. package/dist/tui/catalog.js +20 -0
  41. package/dist/tui/catalog.js.map +1 -0
  42. package/dist/tui/index.d.ts +3 -0
  43. package/dist/tui/index.js +24 -0
  44. package/dist/tui/index.js.map +1 -0
  45. package/dist/tui/markdown.d.ts +4 -0
  46. package/dist/tui/markdown.js +139 -0
  47. package/dist/tui/markdown.js.map +1 -0
  48. package/package.json +8 -5
  49. package/dist/agent.d.ts +0 -6
  50. package/dist/agent.js +0 -94
  51. package/dist/agent.js.map +0 -1
  52. package/dist/config.d.ts +0 -40
  53. package/dist/config.js +0 -42
  54. package/dist/config.js.map +0 -1
  55. package/dist/lib/auth.d.ts +0 -14
  56. package/dist/lib/auth.js +0 -25
  57. package/dist/lib/auth.js.map +0 -1
  58. package/dist/lib/messageQueue.d.ts +0 -9
  59. package/dist/lib/messageQueue.js +0 -40
  60. package/dist/lib/messageQueue.js.map +0 -1
  61. package/dist/lib/paths.d.ts +0 -9
  62. package/dist/lib/paths.js +0 -35
  63. package/dist/lib/paths.js.map +0 -1
  64. package/dist/lib/sessionStore.d.ts +0 -24
  65. package/dist/lib/sessionStore.js +0 -100
  66. package/dist/lib/sessionStore.js.map +0 -1
  67. package/dist/lib/titleGen.d.ts +0 -7
  68. package/dist/lib/titleGen.js +0 -64
  69. package/dist/lib/titleGen.js.map +0 -1
  70. package/skills/CLAUDE.md +0 -92
  71. package/skills/analyze-codebase/SKILL.md +0 -35
  72. package/skills/audit-docs/SKILL.md +0 -48
  73. package/skills/emit-screenshot-spec/SKILL.md +0 -82
  74. package/skills/gather-context-from-mcp/SKILL.md +0 -29
  75. package/skills/propose-structure/SKILL.md +0 -51
  76. package/skills/publish-to-d360/SKILL.md +0 -39
  77. package/skills/write-article/SKILL.md +0 -95
@@ -0,0 +1,413 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { Box, Static, Text, useApp, useInput, useStdout } from 'ink';
4
+ import { createSession, resolveActiveProfile, decodeJwtClaims, isExpired, loadTokens, setTitle, slugify, touchSession, upsertSession, generateTitle, findByName, listSessions, renameSession, readProjectConfig, writeProjectConfig, } from 'document360-engine';
5
+ import { publishCommand } from '../commands/publish.js';
6
+ import { auditCommand } from '../commands/audit.js';
7
+ import { screenshotCommand } from '../commands/screenshot.js';
8
+ import { COMMANDS, filterCommands } from './catalog.js';
9
+ import { Markdown } from './markdown.js';
10
+ function computeBanner(cwd, version, auth, profileName) {
11
+ const claude = auth.kind === 'api' ? 'API key' : auth.kind === 'subscription' ? 'subscription' : 'not configured';
12
+ const info = { version, claude, who: null, profile: '—', apiUrl: '—', project: '—', cwd, prod: false, loggedOut: true };
13
+ try {
14
+ const active = resolveActiveProfile(cwd, profileName);
15
+ info.profile = active.name;
16
+ info.apiUrl = active.connection.apiUrl;
17
+ info.prod = active.production;
18
+ info.project = active.project.projectId ?? '(chosen at login)';
19
+ const tokens = loadTokens(active.name);
20
+ if (tokens && !(isExpired(tokens) && !tokens.refreshToken)) {
21
+ const claims = { ...(decodeJwtClaims(tokens.idToken) ?? {}), ...(decodeJwtClaims(tokens.accessToken) ?? {}) };
22
+ info.who = (claims['email'] ?? claims['preferred_username'] ?? 'signed in');
23
+ info.loggedOut = false;
24
+ }
25
+ }
26
+ catch {
27
+ /* no/invalid profile config */
28
+ }
29
+ return info;
30
+ }
31
+ function statusLine(cwd, profileName) {
32
+ try {
33
+ const active = resolveActiveProfile(cwd, profileName);
34
+ const tokens = loadTokens(active.name);
35
+ if (!tokens)
36
+ return { text: `profile "${active.name}" — not logged in (d360-writer login)`, prod: active.production };
37
+ const claims = { ...(decodeJwtClaims(tokens.idToken) ?? {}), ...(decodeJwtClaims(tokens.accessToken) ?? {}) };
38
+ const who = (claims['email'] ?? claims['preferred_username'] ?? 'signed in');
39
+ if (isExpired(tokens) && !tokens.refreshToken)
40
+ return { text: `profile "${active.name}" — session expired`, prod: active.production };
41
+ return { text: `${who} · profile "${active.name}"`, prod: active.production };
42
+ }
43
+ catch (e) {
44
+ return { text: e.message.split('.')[0], prod: false };
45
+ }
46
+ }
47
+ // Doc-themed progress verbs (cycled while the agent works), à la Claude Code.
48
+ const GERUNDS = [
49
+ 'Drafting', 'Composing', 'Outlining', 'Researching', 'Documenting', 'Structuring',
50
+ 'Polishing', 'Synthesizing', 'Curating', 'Distilling', 'Weaving', 'Wrangling', 'Pondering',
51
+ ];
52
+ const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
53
+ /** Prettify a tool name for display; returns null for internal tools that should be hidden. */
54
+ function prettyTool(name) {
55
+ if (name === 'ToolSearch')
56
+ return null; // deferred-tool search — internal noise
57
+ if (name.startsWith('mcp__')) {
58
+ const tool = name.split('__').slice(2).join('__'); // mcp__<server>__<tool>
59
+ return 'Document360: ' + tool.replace(/^d360_/, '').replace(/_/g, ' ');
60
+ }
61
+ return name; // built-in tools (Read, Write, Bash, …) shown as-is
62
+ }
63
+ function formatDuration(seconds) {
64
+ if (seconds < 60)
65
+ return `${seconds}s`;
66
+ return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;
67
+ }
68
+ /** Animated "working" line: spinner + rotating verb + live timer + ~token estimate. */
69
+ function Working({ startTime, chars }) {
70
+ const [tick, setTick] = useState(0);
71
+ useEffect(() => {
72
+ const id = setInterval(() => setTick(t => t + 1), 120);
73
+ return () => clearInterval(id);
74
+ }, []);
75
+ const frame = SPINNER[tick % SPINNER.length];
76
+ const word = GERUNDS[Math.floor(tick / 16) % GERUNDS.length];
77
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
78
+ const tokens = Math.round(chars / 4);
79
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: ` ${frame} ${word}… ` }), _jsx(Text, { color: "gray", children: `(${elapsed}s · ~${tokens} tokens · ctrl+c to stop)` })] }));
80
+ }
81
+ export function App({ cwd, auth, profileName, version }) {
82
+ const { exit } = useApp();
83
+ const [items, setItems] = useState(() => [{ id: 0, kind: 'banner', info: computeBanner(cwd, version, auth, profileName) }]);
84
+ const [live, setLive] = useState(null);
85
+ const [input, setInput] = useState('');
86
+ const [busy, setBusy] = useState(false);
87
+ const [turnChars, setTurnChars] = useState(0);
88
+ const turnStartRef = useRef(0);
89
+ const [paletteIndex, setPaletteIndex] = useState(0);
90
+ const [historyIndex, setHistoryIndex] = useState(null);
91
+ const idRef = useRef(0);
92
+ // LAZY init — `useRef(createSession(...))` would call createSession on EVERY render
93
+ // (useRef keeps only the first value but still evaluates the argument each time), and
94
+ // createSession spawns an Agent SDK subprocess → a new subprocess per keystroke →
95
+ // spawn storm + heap OOM crash. Create it exactly once.
96
+ const sessionRef = useRef(null);
97
+ if (sessionRef.current === null) {
98
+ sessionRef.current = createSession({ cwd, profileName, allowProdWrites: false });
99
+ }
100
+ const trackerRef = useRef({ uuid: null, firstPrompt: null, titleFired: false });
101
+ const allowProdRef = useRef(false);
102
+ const historyRef = useRef([]);
103
+ const { stdout } = useStdout();
104
+ const [, setResizeTick] = useState(0);
105
+ // Re-render on resize so the width below recomputes. NOTE: do NOT write any clear
106
+ // escape here — that caused a clear→resize→clear feedback loop on Windows Terminal.
107
+ // A plain state bump is loop-safe (no stdout write); Ink repaints with the new width.
108
+ useEffect(() => {
109
+ const onResize = () => setResizeTick(t => t + 1);
110
+ stdout.on('resize', onResize);
111
+ return () => {
112
+ stdout.off('resize', onResize);
113
+ };
114
+ }, [stdout]);
115
+ // CRITICAL: cap the rendered width to columns-1. A full-terminal-width element (the
116
+ // input border) sits exactly at the wrap boundary and wraps by one column; Ink then
117
+ // erases by a line count that's short, leaving the overflow behind — so every render
118
+ // STACKS a fresh frame instead of replacing it (unbounded growth → lag → freeze, and
119
+ // the resize artifacts). One free column means nothing wraps and erase is exact.
120
+ const width = Math.max(20, (stdout.columns ?? 80) - 1);
121
+ const status = useMemo(() => statusLine(cwd, profileName), [cwd, profileName]);
122
+ const palette = filterCommands(input);
123
+ const paletteOpen = palette.length > 0 && !busy;
124
+ const nextId = () => ++idRef.current;
125
+ const push = useCallback((item) => setItems(prev => [...prev, { ...item, id: nextId() }]), []);
126
+ const restartSession = useCallback((resume) => {
127
+ sessionRef.current?.close();
128
+ sessionRef.current = createSession({ cwd, resume, profileName, allowProdWrites: allowProdRef.current });
129
+ if (!resume)
130
+ trackerRef.current = { uuid: null, firstPrompt: null, titleFired: false };
131
+ }, [cwd, profileName]);
132
+ const runPrompt = useCallback(async (text) => {
133
+ push({ kind: 'user', text });
134
+ const tracker = trackerRef.current;
135
+ if (!tracker.firstPrompt)
136
+ tracker.firstPrompt = text;
137
+ turnStartRef.current = Date.now();
138
+ setTurnChars(0);
139
+ setBusy(true);
140
+ let buffer = '';
141
+ const flush = () => {
142
+ if (buffer) {
143
+ const t = buffer;
144
+ push({ kind: 'assistant', text: t });
145
+ buffer = '';
146
+ setLive(null);
147
+ }
148
+ };
149
+ try {
150
+ for await (const ev of sessionRef.current.send(text)) {
151
+ if (ev.type === 'session') {
152
+ if (!tracker.uuid) {
153
+ tracker.uuid = ev.sessionId;
154
+ const now = new Date().toISOString();
155
+ upsertSession({ uuid: ev.sessionId, name: slugify(tracker.firstPrompt ?? 'session'), renamed: false, titled: false, cwd, firstPrompt: tracker.firstPrompt ?? '', createdAt: now, updatedAt: now });
156
+ }
157
+ }
158
+ else if (ev.type === 'text') {
159
+ buffer += ev.delta;
160
+ setLive(buffer);
161
+ setTurnChars(c => c + ev.delta.length);
162
+ }
163
+ else if (ev.type === 'tool') {
164
+ const pretty = prettyTool(ev.name);
165
+ if (pretty) {
166
+ flush();
167
+ push({ kind: 'tool', name: pretty });
168
+ }
169
+ }
170
+ else if (ev.type === 'result') {
171
+ flush();
172
+ push({ kind: 'done', seconds: Math.round((Date.now() - turnStartRef.current) / 1000), tokens: ev.outputTokens, ok: ev.ok });
173
+ if (tracker.uuid) {
174
+ touchSession(tracker.uuid);
175
+ if (!tracker.titleFired) {
176
+ tracker.titleFired = true;
177
+ const uuid = tracker.uuid;
178
+ const fp = tracker.firstPrompt;
179
+ if (fp)
180
+ void generateTitle(fp, cwd).then(t => t && setTitle(uuid, t)).catch(() => { });
181
+ }
182
+ }
183
+ }
184
+ else if (ev.type === 'error') {
185
+ flush();
186
+ push({ kind: 'note', text: `agent error: ${ev.message}`, tone: 'error' });
187
+ }
188
+ }
189
+ }
190
+ finally {
191
+ setBusy(false);
192
+ setLive(null);
193
+ }
194
+ }, [cwd, push]);
195
+ const handleCommand = useCallback(async (line) => {
196
+ const parts = line.slice(1).trim().split(/\s+/);
197
+ const name = (parts[0] ?? '').toLowerCase();
198
+ const args = parts.slice(1);
199
+ switch (name) {
200
+ case 'help':
201
+ push({ kind: 'note', tone: 'info', text: COMMANDS.map(c => ` ${c.usage.padEnd(22)} ${c.desc}`).join('\n') });
202
+ return;
203
+ case 'exit':
204
+ case 'quit':
205
+ sessionRef.current?.close();
206
+ exit();
207
+ return;
208
+ case 'clear':
209
+ restartSession();
210
+ setItems([]);
211
+ push({ kind: 'note', tone: 'info', text: 'Conversation reset (the previous session is still resumable via /resume).' });
212
+ return;
213
+ case 'allow-prod': {
214
+ let prod = false;
215
+ try {
216
+ prod = resolveActiveProfile(cwd, profileName).production;
217
+ }
218
+ catch { /* none */ }
219
+ if (!prod) {
220
+ push({ kind: 'note', tone: 'info', text: 'Current profile is not production — writes are already allowed.' });
221
+ return;
222
+ }
223
+ allowProdRef.current = true;
224
+ restartSession();
225
+ push({ kind: 'note', tone: 'warn', text: '⚠ Production writes authorized for this session.' });
226
+ return;
227
+ }
228
+ case 'rename': {
229
+ const newName = args.join(' ').trim();
230
+ if (!newName) {
231
+ push({ kind: 'note', tone: 'error', text: 'Usage: /rename <name>' });
232
+ return;
233
+ }
234
+ const uuid = trackerRef.current.uuid;
235
+ if (!uuid) {
236
+ push({ kind: 'note', tone: 'error', text: 'Send a message first — sessions save once the agent replies.' });
237
+ return;
238
+ }
239
+ renameSession(uuid, newName);
240
+ push({ kind: 'note', tone: 'ok', text: `Session renamed to "${newName}".` });
241
+ return;
242
+ }
243
+ case 'profile': {
244
+ const target = args[0];
245
+ if (!target) {
246
+ const cfg = readProjectConfig(cwd);
247
+ const lines = Object.entries(cfg?.profiles ?? {}).map(([n, p]) => ` ${n === cfg?.defaultProfile ? '●' : ' '} ${n}${p.production ? ' ⚠ PRODUCTION' : ''}`);
248
+ push({ kind: 'note', tone: 'info', text: lines.length ? lines.join('\n') : 'No profiles. Run d360-writer init.' });
249
+ return;
250
+ }
251
+ const cfg = readProjectConfig(cwd);
252
+ if (!cfg?.profiles?.[target]) {
253
+ push({ kind: 'note', tone: 'error', text: `Unknown profile "${target}".` });
254
+ return;
255
+ }
256
+ cfg.defaultProfile = target;
257
+ writeProjectConfig(cfg, cwd);
258
+ restartSession();
259
+ push({ kind: 'note', tone: 'ok', text: `Switched to profile "${target}" (agent restarted).` });
260
+ return;
261
+ }
262
+ case 'resume': {
263
+ const target = args.join(' ').trim();
264
+ const sessions = listSessions(cwd).filter(s => s.uuid !== trackerRef.current.uuid);
265
+ if (!target) {
266
+ if (!sessions.length) {
267
+ push({ kind: 'note', tone: 'info', text: 'No saved sessions for this repo yet.' });
268
+ return;
269
+ }
270
+ const lines = sessions.slice(0, 15).map(s => ` ${s.name} — ${s.firstPrompt.slice(0, 60)}`);
271
+ push({ kind: 'note', tone: 'info', text: `Resume with /resume <name>:\n${lines.join('\n')}` });
272
+ return;
273
+ }
274
+ const rec = findByName(cwd, target);
275
+ if (!rec) {
276
+ push({ kind: 'note', tone: 'error', text: `No session matches "${target}".` });
277
+ return;
278
+ }
279
+ restartSession(rec.uuid);
280
+ trackerRef.current = { uuid: rec.uuid, firstPrompt: rec.firstPrompt, titleFired: true };
281
+ touchSession(rec.uuid);
282
+ push({ kind: 'note', tone: 'ok', text: `Resumed "${rec.name}".` });
283
+ return;
284
+ }
285
+ case 'publish':
286
+ case 'audit':
287
+ case 'screenshot': {
288
+ // These build a prompt and forward it to the agent. Validate args so their
289
+ // console.log usage-error path never fires inside Ink.
290
+ if (name === 'publish' && !args[0]) {
291
+ push({ kind: 'note', tone: 'error', text: 'Usage: /publish <article-path>' });
292
+ return;
293
+ }
294
+ if (name === 'screenshot' && !args[0]) {
295
+ push({ kind: 'note', tone: 'error', text: 'Usage: /screenshot <id>' });
296
+ return;
297
+ }
298
+ const fn = (name === 'publish' ? publishCommand : name === 'audit' ? auditCommand : screenshotCommand);
299
+ const result = await fn(args, undefined);
300
+ if (result.kind === 'forward-to-agent' && result.prompt)
301
+ await runPrompt(result.prompt);
302
+ return;
303
+ }
304
+ default:
305
+ push({ kind: 'note', tone: 'error', text: `Unknown command: /${name} — type /help.` });
306
+ }
307
+ }, [cwd, exit, profileName, push, restartSession, runPrompt]);
308
+ const submit = useCallback(() => {
309
+ const text = input.trim();
310
+ setInput('');
311
+ setHistoryIndex(null);
312
+ setPaletteIndex(0);
313
+ if (!text)
314
+ return;
315
+ historyRef.current.push(text);
316
+ if (text.startsWith('/'))
317
+ void handleCommand(text);
318
+ else
319
+ void runPrompt(text);
320
+ }, [input, handleCommand, runPrompt]);
321
+ useInput((char, key) => {
322
+ if (key.ctrl && char === 'c') {
323
+ sessionRef.current?.close();
324
+ exit();
325
+ return;
326
+ }
327
+ if (busy)
328
+ return; // ignore input while the agent is working
329
+ if (paletteOpen) {
330
+ if (key.upArrow) {
331
+ setPaletteIndex(i => Math.max(0, i - 1));
332
+ return;
333
+ }
334
+ if (key.downArrow) {
335
+ setPaletteIndex(i => Math.min(palette.length - 1, i + 1));
336
+ return;
337
+ }
338
+ if (key.tab) {
339
+ setInput('/' + (palette[paletteIndex]?.name ?? '') + ' ');
340
+ setPaletteIndex(0);
341
+ return;
342
+ }
343
+ }
344
+ else {
345
+ if (key.upArrow) {
346
+ const h = historyRef.current;
347
+ if (!h.length)
348
+ return;
349
+ const idx = historyIndex === null ? h.length - 1 : Math.max(0, historyIndex - 1);
350
+ setHistoryIndex(idx);
351
+ setInput(h[idx] ?? '');
352
+ return;
353
+ }
354
+ if (key.downArrow) {
355
+ const h = historyRef.current;
356
+ if (historyIndex === null)
357
+ return;
358
+ const idx = historyIndex + 1;
359
+ if (idx >= h.length) {
360
+ setHistoryIndex(null);
361
+ setInput('');
362
+ }
363
+ else {
364
+ setHistoryIndex(idx);
365
+ setInput(h[idx] ?? '');
366
+ }
367
+ return;
368
+ }
369
+ }
370
+ if (key.return) {
371
+ submit();
372
+ return;
373
+ }
374
+ if (key.backspace || key.delete) {
375
+ setInput(s => s.slice(0, -1));
376
+ return;
377
+ }
378
+ if (key.escape) {
379
+ setInput('');
380
+ setPaletteIndex(0);
381
+ return;
382
+ }
383
+ if (char && !key.ctrl && !key.meta)
384
+ setInput(s => s + char);
385
+ });
386
+ return (_jsxs(Box, { flexDirection: "column", width: width, children: [_jsx(Static, { items: items, children: item => _jsx(ItemView, { item: item }, item.id) }), live !== null && (_jsx(Box, { children: _jsx(Text, { children: live }) })), busy && _jsx(Working, { startTime: turnStartRef.current, chars: turnChars }), paletteOpen && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: palette.map((c, i) => (_jsxs(Text, { color: i === paletteIndex ? 'cyan' : 'gray', children: [i === paletteIndex ? '❯ ' : ' ', c.usage.padEnd(22), " ", c.desc] }, c.name))) })), _jsxs(Box, { borderStyle: "round", borderColor: status.prod ? 'yellow' : 'cyan', borderTop: true, borderBottom: true, borderLeft: false, borderRight: false, marginTop: paletteOpen ? 0 : 1, children: [_jsx(Text, { color: "cyan", children: '> ' }), input ? _jsx(Text, { children: input }) : _jsx(Text, { color: "gray", children: "Ask me to write or update an article\u2026" }), _jsx(Text, { color: "gray", children: "\u258F" })] }), _jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: "gray", children: [status.prod ? '⚠ PRODUCTION · ' : '', '/help · ↑ history · ctrl+c exit'] }) })] }));
387
+ }
388
+ function Row({ label, children }) {
389
+ // Fixed-width label column → values align uniformly regardless of label length.
390
+ return (_jsxs(Box, { children: [_jsx(Box, { width: 15, flexShrink: 0, children: _jsx(Text, { color: "gray", children: ` ${label}` }) }), children] }));
391
+ }
392
+ function BannerView({ info }) {
393
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", bold: true, children: '✎ document360-writer' }), _jsx(Text, { color: "gray", children: ` v${info.version}` })] }), _jsx(Text, { color: "gray", children: ' Reads your code, writes your docs.' }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Row, { label: "Claude:", children: _jsx(Text, { children: info.claude }) }), _jsx(Row, { label: "Document360:", children: info.loggedOut ? _jsx(Text, { color: "yellow", children: "not logged in \u2014 run: d360-writer login" }) : _jsx(Text, { children: info.who }) }), _jsxs(Row, { label: "Profile:", children: [_jsx(Text, { children: info.profile }), _jsx(Text, { color: "gray", children: ` (${info.apiUrl})` }), info.prod && _jsx(Text, { color: "yellow", bold: true, children: ' ⚠ PRODUCTION' })] }), _jsx(Row, { label: "Project:", children: _jsx(Text, { children: info.project }) }), _jsx(Row, { label: "cwd:", children: _jsx(Text, { color: "gray", children: info.cwd }) })] })] }));
394
+ }
395
+ function ItemView({ item }) {
396
+ switch (item.kind) {
397
+ case 'banner':
398
+ return _jsx(BannerView, { info: item.info });
399
+ case 'user':
400
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: '❯ ' }), _jsx(Text, { children: item.text })] }));
401
+ case 'assistant':
402
+ return (_jsx(Box, { marginBottom: 1, children: _jsx(Markdown, { text: item.text }) }));
403
+ case 'tool':
404
+ return _jsx(Text, { color: "gray", children: ` ⚙ ${item.name}` });
405
+ case 'note': {
406
+ const color = item.tone === 'error' ? 'red' : item.tone === 'warn' ? 'yellow' : item.tone === 'ok' ? 'green' : 'gray';
407
+ return _jsx(Text, { color: color, children: item.text });
408
+ }
409
+ case 'done':
410
+ return (_jsxs(Box, { marginTop: 1, marginBottom: 1, children: [_jsx(Text, { color: item.ok ? 'magenta' : 'red', children: '✶ ' }), _jsx(Text, { color: "gray", children: `Cooked for ${formatDuration(item.seconds)} · ${item.tokens} tokens` })] }));
411
+ }
412
+ }
413
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type CommandSpec = {
2
+ name: string;
3
+ usage: string;
4
+ desc: string;
5
+ };
6
+ export declare const COMMANDS: CommandSpec[];
7
+ /** Commands whose body filters as you type `/<prefix>`. */
8
+ export declare function filterCommands(input: string): CommandSpec[];
@@ -0,0 +1,20 @@
1
+ export const COMMANDS = [
2
+ { name: 'help', usage: '/help', desc: 'Show available commands' },
3
+ { name: 'resume', usage: '/resume [name]', desc: 'Resume a session (no arg lists them)' },
4
+ { name: 'rename', usage: '/rename <name>', desc: 'Name the current session' },
5
+ { name: 'profile', usage: '/profile [name]', desc: 'Show profiles, or switch' },
6
+ { name: 'allow-prod', usage: '/allow-prod', desc: 'Authorize writes to a production profile' },
7
+ { name: 'publish', usage: '/publish <path>', desc: 'Publish an article to Document360 (draft)' },
8
+ { name: 'audit', usage: '/audit', desc: 'Diff code vs docs, flag gaps' },
9
+ { name: 'screenshot', usage: '/screenshot <id>', desc: 'Emit a capture spec for a placeholder' },
10
+ { name: 'clear', usage: '/clear', desc: 'Reset the conversation (resumable)' },
11
+ { name: 'exit', usage: '/exit', desc: 'Quit' },
12
+ ];
13
+ /** Commands whose body filters as you type `/<prefix>`. */
14
+ export function filterCommands(input) {
15
+ if (!input.startsWith('/'))
16
+ return [];
17
+ const q = input.slice(1).toLowerCase().split(/\s/)[0] ?? '';
18
+ return COMMANDS.filter(c => c.name.startsWith(q));
19
+ }
20
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tui/catalog.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,QAAQ,GAAkB;IACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACjE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,sCAAsC,EAAE;IACzF,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,0BAA0B,EAAE;IAC7E,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,0BAA0B,EAAE;IAC/E,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,0CAA0C,EAAE;IAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,2CAA2C,EAAE;IAChG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B,EAAE;IACxE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,uCAAuC,EAAE;IAChG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,oCAAoC,EAAE;IAC9E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;CAC/C,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AuthMode } from 'document360-engine';
2
+ /** Launch the interactive Ink TUI. Falls back to nothing — callers gate on TTY. */
3
+ export declare function runTui(cwd?: string, authMode?: AuthMode, profileName?: string, version?: string): Promise<void>;
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { render } from 'ink';
3
+ import { resolveAuth } from 'document360-engine';
4
+ import { App } from './App.js';
5
+ import { accent, error } from '../lib/colors.js';
6
+ /** Launch the interactive Ink TUI. Falls back to nothing — callers gate on TTY. */
7
+ export async function runTui(cwd = process.cwd(), authMode = 'auto', profileName, version = '0.0.0') {
8
+ const auth = resolveAuth(authMode);
9
+ if (auth.kind === 'none') {
10
+ console.error('');
11
+ console.error(error('ANTHROPIC_API_KEY is not set (required for --auth api).'));
12
+ console.error(`Get a key at ${accent('https://console.anthropic.com/settings/keys')}`);
13
+ console.error(`Or use your Claude subscription instead: ${accent('d360-writer --auth subscription')}`);
14
+ process.exit(2);
15
+ }
16
+ const { waitUntilExit } = render(_jsx(App, { cwd: cwd, auth: auth, profileName: profileName, version: version }));
17
+ await waitUntilExit();
18
+ // The Agent SDK session keeps open handles alive, so the process won't exit on its
19
+ // own after Ink unmounts (leaving the user "stuck" — shell never returns). Force a
20
+ // clean exit. A trailing newline lets the shell prompt start on a fresh line.
21
+ process.stdout.write('\n');
22
+ process.exit(0);
23
+ }
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEjD,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,WAAqB,MAAM,EAC3B,WAAoB,EACpB,OAAO,GAAG,OAAO;IAEjB,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,6CAA6C,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,4CAA4C,MAAM,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;QACvG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAC,GAAG,IAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC,CAAC;IAC5G,MAAM,aAAa,EAAE,CAAC;IACtB,mFAAmF;IACnF,mFAAmF;IACnF,8EAA8E;IAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare function Markdown({ text }: {
3
+ text: string;
4
+ }): React.ReactElement;