document360-writer 0.4.0 → 0.4.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.
- package/LICENSE +10 -16
- package/README.md +1 -1
- package/dist/cli.js +63 -123
- package/dist/commands/doctor.d.ts +13 -0
- package/dist/commands/index.d.ts +5 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/model.d.ts +16 -0
- package/dist/commands/profile.d.ts +3 -0
- package/dist/commands/publish.d.ts +12 -1
- package/dist/commands/scope.d.ts +9 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/d360/authCli.d.ts +3 -0
- package/dist/lib/colors.d.ts +2 -0
- package/dist/lib/commandSuggest.d.ts +7 -0
- package/dist/lib/diffRender.d.ts +8 -0
- package/dist/lib/hyperlink.d.ts +5 -0
- package/dist/lib/inputLayout.d.ts +19 -0
- package/dist/lib/mascot.d.ts +5 -0
- package/dist/lib/modelChoices.d.ts +14 -0
- package/dist/lib/paste.d.ts +19 -0
- package/dist/lib/syncRender.d.ts +6 -0
- package/dist/lib/toolFormat.d.ts +6 -2
- package/dist/repl.d.ts +2 -0
- package/dist/tui/App.d.ts +1 -1
- package/dist/tui/catalog.d.ts +4 -0
- package/dist/tui/itemRender.d.ts +17 -0
- package/package.json +5 -4
- package/dist/cli.js.map +0 -1
- package/dist/commands/allowProd.js +0 -18
- package/dist/commands/allowProd.js.map +0 -1
- package/dist/commands/audit.js +0 -12
- package/dist/commands/audit.js.map +0 -1
- package/dist/commands/clear.js +0 -14
- package/dist/commands/clear.js.map +0 -1
- package/dist/commands/exit.js +0 -4
- package/dist/commands/exit.js.map +0 -1
- package/dist/commands/help.js +0 -30
- package/dist/commands/help.js.map +0 -1
- package/dist/commands/index.js +0 -44
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/init.js +0 -83
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/logsCli.js +0 -31
- package/dist/commands/logsCli.js.map +0 -1
- package/dist/commands/mcp.js +0 -103
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/profile.js +0 -16
- package/dist/commands/profile.js.map +0 -1
- package/dist/commands/publish.js +0 -19
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/rename.js +0 -22
- package/dist/commands/rename.js.map +0 -1
- package/dist/commands/resume.js +0 -58
- package/dist/commands/resume.js.map +0 -1
- package/dist/commands/screenshot.js +0 -20
- package/dist/commands/screenshot.js.map +0 -1
- package/dist/commands/workspace.js +0 -8
- package/dist/commands/workspace.js.map +0 -1
- package/dist/d360/authCli.js +0 -106
- package/dist/d360/authCli.js.map +0 -1
- package/dist/d360/portalLink.js +0 -43
- package/dist/d360/portalLink.js.map +0 -1
- package/dist/d360/profileCli.js +0 -54
- package/dist/d360/profileCli.js.map +0 -1
- package/dist/d360/workspaceCli.js +0 -72
- package/dist/d360/workspaceCli.js.map +0 -1
- package/dist/lib/colors.js +0 -10
- package/dist/lib/colors.js.map +0 -1
- package/dist/lib/mdRender.js +0 -172
- package/dist/lib/mdRender.js.map +0 -1
- package/dist/lib/streaming.js +0 -51
- package/dist/lib/streaming.js.map +0 -1
- package/dist/lib/toolFormat.js +0 -115
- package/dist/lib/toolFormat.js.map +0 -1
- package/dist/oneShot.js +0 -96
- package/dist/oneShot.js.map +0 -1
- package/dist/repl.js +0 -287
- package/dist/repl.js.map +0 -1
- package/dist/tui/App.js +0 -607
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/catalog.js +0 -22
- package/dist/tui/catalog.js.map +0 -1
- package/dist/tui/index.js +0 -24
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/itemRender.js +0 -72
- package/dist/tui/itemRender.js.map +0 -1
package/dist/lib/mdRender.js
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Markdown → ANSI string renderer for finalized transcript content. Pure functions —
|
|
3
|
-
* no Ink. Replaces the Ink <Markdown> component so the transcript can be printed (and
|
|
4
|
-
* REPLAYED at a new width on resize) through Ink's console patch; also reusable by the
|
|
5
|
-
* plain REPL. Covers what a documentation agent actually emits: headings, bold/italic/
|
|
6
|
-
* inline-code, bullet/numbered lists, fenced code, ---, and GitHub-style tables.
|
|
7
|
-
*/
|
|
8
|
-
import pc from 'picocolors';
|
|
9
|
-
import wrapAnsi from 'wrap-ansi';
|
|
10
|
-
import stringWidth from 'string-width';
|
|
11
|
-
const isHr = (line) => /^\s*(-{3,}|\*{3,}|_{3,})\s*$/.test(line);
|
|
12
|
-
const isTableSep = (line) => /^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/.test(line) && line.includes('-');
|
|
13
|
-
const splitCells = (line) => line.replace(/^\s*\|/, '').replace(/\|\s*$/, '').split('|').map(c => c.trim());
|
|
14
|
-
function parseBlocks(md) {
|
|
15
|
-
const lines = md.replace(/\r/g, '').split('\n');
|
|
16
|
-
const blocks = [];
|
|
17
|
-
let i = 0;
|
|
18
|
-
while (i < lines.length) {
|
|
19
|
-
const line = lines[i];
|
|
20
|
-
// fenced code
|
|
21
|
-
if (/^\s*```/.test(line)) {
|
|
22
|
-
const code = [];
|
|
23
|
-
i++;
|
|
24
|
-
while (i < lines.length && !/^\s*```/.test(lines[i]))
|
|
25
|
-
code.push(lines[i++]);
|
|
26
|
-
i++; // closing fence
|
|
27
|
-
blocks.push({ kind: 'code', lines: code });
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
// horizontal rule (---, ***, ___) — must precede the para fallback
|
|
31
|
-
if (isHr(line)) {
|
|
32
|
-
blocks.push({ kind: 'hr' });
|
|
33
|
-
i++;
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
// table: a `| … |`-ish line followed by a separator row
|
|
37
|
-
if (line.includes('|') && i + 1 < lines.length && isTableSep(lines[i + 1])) {
|
|
38
|
-
const header = splitCells(line);
|
|
39
|
-
i += 2;
|
|
40
|
-
const rows = [];
|
|
41
|
-
while (i < lines.length && lines[i].includes('|') && lines[i].trim() !== '') {
|
|
42
|
-
rows.push(splitCells(lines[i++]));
|
|
43
|
-
}
|
|
44
|
-
blocks.push({ kind: 'table', header, rows });
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
// heading
|
|
48
|
-
const h = line.match(/^(#{1,6})\s+(.*)$/);
|
|
49
|
-
if (h) {
|
|
50
|
-
blocks.push({ kind: 'heading', level: h[1].length, text: h[2] });
|
|
51
|
-
i++;
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
// list (consecutive bullet / numbered lines)
|
|
55
|
-
if (/^\s*([-*]|\d+\.)\s+/.test(line)) {
|
|
56
|
-
const items = [];
|
|
57
|
-
while (i < lines.length && /^\s*([-*]|\d+\.)\s+/.test(lines[i])) {
|
|
58
|
-
items.push(lines[i++].replace(/^\s*([-*]|\d+\.)\s+/, ''));
|
|
59
|
-
}
|
|
60
|
-
blocks.push({ kind: 'list', items });
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
// blank
|
|
64
|
-
if (line.trim() === '') {
|
|
65
|
-
i++;
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
// paragraph (gather until blank / block boundary)
|
|
69
|
-
const para = [];
|
|
70
|
-
while (i < lines.length &&
|
|
71
|
-
lines[i].trim() !== '' &&
|
|
72
|
-
!/^\s*```/.test(lines[i]) &&
|
|
73
|
-
!/^(#{1,6})\s/.test(lines[i]) &&
|
|
74
|
-
!/^\s*([-*]|\d+\.)\s+/.test(lines[i]) &&
|
|
75
|
-
!isHr(lines[i]) &&
|
|
76
|
-
!(lines[i].includes('|') && i + 1 < lines.length && isTableSep(lines[i + 1]))) {
|
|
77
|
-
para.push(lines[i++]);
|
|
78
|
-
}
|
|
79
|
-
blocks.push({ kind: 'para', text: para.join(' ') });
|
|
80
|
-
}
|
|
81
|
-
return blocks;
|
|
82
|
-
}
|
|
83
|
-
/** Render inline **bold**, *italic*, `code` as ANSI-styled spans. */
|
|
84
|
-
export function inlineMd(text) {
|
|
85
|
-
return text.replace(/(\*\*[^*]+\*\*|`[^`]+`|\*[^*]+\*)/g, tok => {
|
|
86
|
-
if (tok.startsWith('**'))
|
|
87
|
-
return pc.bold(tok.slice(2, -2));
|
|
88
|
-
if (tok.startsWith('`'))
|
|
89
|
-
return pc.cyan(tok.slice(1, -1));
|
|
90
|
-
return pc.italic(tok.slice(1, -1));
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
const padTo = (line, w) => line + ' '.repeat(Math.max(0, w - stringWidth(line)));
|
|
94
|
-
function renderTable(header, rows, width) {
|
|
95
|
-
const cols = header.length;
|
|
96
|
-
// Natural width = widest cell per column; shrink the widest column until the table
|
|
97
|
-
// fits (min 6) and wrap cells inside their fixed-width column.
|
|
98
|
-
const natural = header.map((h, c) => Math.max(stringWidth(h), ...rows.map(r => stringWidth(r[c] ?? ''))));
|
|
99
|
-
const avail = Math.max(24, width);
|
|
100
|
-
// Per cell: left border (1) + padding (2); plus the table's closing right border (1).
|
|
101
|
-
const overhead = 3 * cols + 1;
|
|
102
|
-
const widths = [...natural];
|
|
103
|
-
const total = () => widths.reduce((a, b) => a + b, 0) + overhead;
|
|
104
|
-
let guard = 0;
|
|
105
|
-
while (total() > avail && guard++ < 10000) {
|
|
106
|
-
let idx = -1;
|
|
107
|
-
let max = 6; // floor
|
|
108
|
-
for (let c = 0; c < cols; c++) {
|
|
109
|
-
if (widths[c] > max) {
|
|
110
|
-
max = widths[c];
|
|
111
|
-
idx = c;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (idx === -1)
|
|
115
|
-
break; // all at floor
|
|
116
|
-
widths[idx] -= 1;
|
|
117
|
-
}
|
|
118
|
-
const rule = (left, mid, right) => pc.gray(left + widths.map(w => '─'.repeat(w + 2)).join(mid) + right);
|
|
119
|
-
const v = pc.gray('│');
|
|
120
|
-
const renderRow = (cells, head) => {
|
|
121
|
-
const cellLines = widths.map((w, c) => {
|
|
122
|
-
const raw = cells[c] ?? '';
|
|
123
|
-
const styled = head ? pc.bold(pc.cyan(raw)) : inlineMd(raw);
|
|
124
|
-
return wrapAnsi(styled, w, { hard: true }).split('\n');
|
|
125
|
-
});
|
|
126
|
-
const height = Math.max(...cellLines.map(l => l.length));
|
|
127
|
-
const out = [];
|
|
128
|
-
for (let r = 0; r < height; r++) {
|
|
129
|
-
out.push(widths.map((w, c) => `${v} ${padTo(cellLines[c][r] ?? '', w)} `).join('') + v);
|
|
130
|
-
}
|
|
131
|
-
return out.join('\n');
|
|
132
|
-
};
|
|
133
|
-
const parts = [rule('┌', '┬', '┐'), renderRow(header, true)];
|
|
134
|
-
parts.push(rows.length === 0 ? rule('└', '┴', '┘') : rule('├', '┼', '┤'));
|
|
135
|
-
rows.forEach((r, ri) => {
|
|
136
|
-
parts.push(renderRow(r, false));
|
|
137
|
-
parts.push(ri === rows.length - 1 ? rule('└', '┴', '┘') : rule('├', '┼', '┤'));
|
|
138
|
-
});
|
|
139
|
-
return parts.join('\n');
|
|
140
|
-
}
|
|
141
|
-
function renderBlock(b, width) {
|
|
142
|
-
switch (b.kind) {
|
|
143
|
-
case 'heading':
|
|
144
|
-
return pc.bold(pc.cyan(b.text));
|
|
145
|
-
case 'hr':
|
|
146
|
-
return pc.gray('─'.repeat(width));
|
|
147
|
-
case 'para':
|
|
148
|
-
return wrapAnsi(inlineMd(b.text), width);
|
|
149
|
-
case 'list':
|
|
150
|
-
return b.items
|
|
151
|
-
.map(it => {
|
|
152
|
-
const [first = '', ...rest] = wrapAnsi(inlineMd(it), Math.max(10, width - 4)).split('\n');
|
|
153
|
-
return pc.cyan(' • ') + first + rest.map(r => '\n ' + r).join('');
|
|
154
|
-
})
|
|
155
|
-
.join('\n');
|
|
156
|
-
case 'code':
|
|
157
|
-
return b.lines.map(l => pc.gray(' ' + l)).join('\n');
|
|
158
|
-
case 'table':
|
|
159
|
-
return renderTable(b.header, b.rows, width);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Render finalized markdown to an ANSI string. Blocks are joined with one blank line
|
|
164
|
-
* (uniform spacing — source blocks are blank-line separated, so render them so).
|
|
165
|
-
*/
|
|
166
|
-
export function renderMarkdown(md, width) {
|
|
167
|
-
const w = Math.max(20, width);
|
|
168
|
-
return parseBlocks(md)
|
|
169
|
-
.map(b => renderBlock(b, w))
|
|
170
|
-
.join('\n\n');
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=mdRender.js.map
|
package/dist/lib/mdRender.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mdRender.js","sourceRoot":"","sources":["../../src/lib/mdRender.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/streaming.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Streaming-markdown flush support. While the agent streams, completed paragraphs are
|
|
3
|
-
* flushed into the static (markdown-rendered) transcript so what scrolls out of the
|
|
4
|
-
* viewport is already pretty — Ink can only repaint what's still on screen, so raw
|
|
5
|
-
* streamed text left in scrollback stays raw forever (Claude Code flushes the same way).
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* Cut position after the last blank line that lies outside any ``` fence, or 0 when
|
|
9
|
-
* there's no safe cut yet. Text before the cut is a complete run of markdown blocks
|
|
10
|
-
* (a fence keeps code blocks intact; tables/lists have no internal blank lines).
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Tail of the live streaming buffer, capped to ~maxRows visual rows so the dynamic
|
|
14
|
-
* region can never outgrow the viewport — Ink erases the live area by line count, and
|
|
15
|
-
* anything that scrolls off-screen leaves un-repaintable raw frames in scrollback.
|
|
16
|
-
* Row usage is estimated as ceil(len/width) per source line (Ink word-wraps, so this
|
|
17
|
-
* is approximate — callers should leave headroom when picking maxRows).
|
|
18
|
-
*/
|
|
19
|
-
export function liveTail(text, maxRows, width) {
|
|
20
|
-
const w = Math.max(1, width);
|
|
21
|
-
const lines = text.split('\n');
|
|
22
|
-
let rows = 0;
|
|
23
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
24
|
-
const line = lines[i];
|
|
25
|
-
rows += Math.max(1, Math.ceil(line.length / w));
|
|
26
|
-
if (rows >= maxRows) {
|
|
27
|
-
const over = rows - maxRows;
|
|
28
|
-
// A single over-tall line: drop its leading rows so the tail fits.
|
|
29
|
-
const head = over > 0 ? line.slice(over * w) : line;
|
|
30
|
-
return { text: [head, ...lines.slice(i + 1)].join('\n'), truncated: i > 0 || over > 0 };
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return { text, truncated: false };
|
|
34
|
-
}
|
|
35
|
-
export function streamCut(text) {
|
|
36
|
-
let fence = false;
|
|
37
|
-
let cut = 0;
|
|
38
|
-
let offset = 0;
|
|
39
|
-
for (const line of text.split('\n')) {
|
|
40
|
-
const end = offset + line.length;
|
|
41
|
-
if (/^\s*```/.test(line))
|
|
42
|
-
fence = !fence;
|
|
43
|
-
// `end < length` ⇒ the newline after the blank line has arrived, so the blank
|
|
44
|
-
// line is complete and everything before it is final.
|
|
45
|
-
else if (!fence && line.trim() === '' && end < text.length)
|
|
46
|
-
cut = end + 1;
|
|
47
|
-
offset = end + 1;
|
|
48
|
-
}
|
|
49
|
-
return cut;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=streaming.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/lib/streaming.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,KAAa;IACnE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC;YAC5B,mEAAmE;YACnE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpD,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,CAAC,KAAK,CAAC;QACzC,8EAA8E;QAC9E,sDAAsD;aACjD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;YAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/lib/toolFormat.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code-style formatting of tool calls and results for terminal display.
|
|
3
|
-
* Pure functions — shared by the Ink TUI and the plain REPL renderer.
|
|
4
|
-
*
|
|
5
|
-
* ● Bash(npm run build)
|
|
6
|
-
* ⎿ first lines of output…
|
|
7
|
-
* … +12 lines
|
|
8
|
-
*/
|
|
9
|
-
/** The one input field worth showing inline for each built-in tool. */
|
|
10
|
-
const PRIMARY_ARG = {
|
|
11
|
-
Bash: 'command',
|
|
12
|
-
PowerShell: 'command',
|
|
13
|
-
Read: 'file_path',
|
|
14
|
-
Write: 'file_path',
|
|
15
|
-
Edit: 'file_path',
|
|
16
|
-
NotebookEdit: 'notebook_path',
|
|
17
|
-
Glob: 'pattern',
|
|
18
|
-
Grep: 'pattern',
|
|
19
|
-
WebFetch: 'url',
|
|
20
|
-
WebSearch: 'query',
|
|
21
|
-
Agent: 'description',
|
|
22
|
-
Task: 'description',
|
|
23
|
-
Skill: 'skill',
|
|
24
|
-
};
|
|
25
|
-
const HEADER_MAX = 160;
|
|
26
|
-
const LINE_MAX = 200;
|
|
27
|
-
const VALUE_MAX = 40;
|
|
28
|
-
/** Collapse whitespace and cap length with a trailing ellipsis. */
|
|
29
|
-
function squeeze(s, max) {
|
|
30
|
-
const flat = s.replace(/\s+/g, ' ').trim();
|
|
31
|
-
return flat.length <= max ? flat : flat.slice(0, max - 1) + '…';
|
|
32
|
-
}
|
|
33
|
-
/** Compact `key: value` pairs of the supplied inputs (for MCP tools and fallbacks). */
|
|
34
|
-
function compactPairs(input) {
|
|
35
|
-
const entries = Object.entries(input).filter(([, v]) => v !== undefined && v !== null && v !== '');
|
|
36
|
-
if (entries.length === 0)
|
|
37
|
-
return null;
|
|
38
|
-
const parts = entries.slice(0, 4).map(([k, v]) => `${k}: ${squeeze(typeof v === 'string' ? v : JSON.stringify(v), VALUE_MAX)}`);
|
|
39
|
-
if (entries.length > 4)
|
|
40
|
-
parts.push('…');
|
|
41
|
-
return squeeze(parts.join(', '), HEADER_MAX);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Header line for a tool call: display title + inline argument summary.
|
|
45
|
-
* Returns null for internal tools that should stay hidden.
|
|
46
|
-
*/
|
|
47
|
-
export function formatToolUse(name, input) {
|
|
48
|
-
if (name === 'ToolSearch')
|
|
49
|
-
return null; // deferred-tool search — internal noise
|
|
50
|
-
if (name.startsWith('mcp__')) {
|
|
51
|
-
const [, server = '', ...rest] = name.split('__');
|
|
52
|
-
const tool = rest.join('__').replace(/^d360_/, '').replace(/_/g, ' ');
|
|
53
|
-
const serverPretty = server === 'document360' ? 'Document360' : server.charAt(0).toUpperCase() + server.slice(1);
|
|
54
|
-
return { title: `${serverPretty}: ${tool}`, sep: ' ', arg: compactPairs(input) };
|
|
55
|
-
}
|
|
56
|
-
const primary = PRIMARY_ARG[name];
|
|
57
|
-
const value = primary ? input[primary] : undefined;
|
|
58
|
-
if (typeof value === 'string' && value)
|
|
59
|
-
return { title: name, sep: '', arg: squeeze(value, HEADER_MAX) };
|
|
60
|
-
return { title: name, sep: '', arg: compactPairs(input) };
|
|
61
|
-
}
|
|
62
|
-
/** Pull a human label out of a list item (D360 payloads carry name/title/id). */
|
|
63
|
-
function itemLabel(item) {
|
|
64
|
-
if (item === null || typeof item !== 'object')
|
|
65
|
-
return typeof item === 'string' ? item : null;
|
|
66
|
-
const o = item;
|
|
67
|
-
for (const key of ['name', 'title', 'slug', 'id']) {
|
|
68
|
-
if (typeof o[key] === 'string' && o[key])
|
|
69
|
-
return o[key];
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Tool-aware summary for JSON payloads (our D360 tools return pretty-printed JSON):
|
|
75
|
-
* arrays → "N items" + one label per line; objects → one compact line of scalar fields.
|
|
76
|
-
* Returns null when the output isn't JSON (callers fall back to raw lines).
|
|
77
|
-
*/
|
|
78
|
-
function summarizeJson(text) {
|
|
79
|
-
if (!/^[[{]/.test(text))
|
|
80
|
-
return null;
|
|
81
|
-
let data;
|
|
82
|
-
try {
|
|
83
|
-
data = JSON.parse(text);
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
if (Array.isArray(data)) {
|
|
89
|
-
const labels = data.map(itemLabel).filter((s) => s !== null);
|
|
90
|
-
const head = `${data.length} item${data.length === 1 ? '' : 's'}`;
|
|
91
|
-
if (labels.length === 0)
|
|
92
|
-
return [head];
|
|
93
|
-
return [head, ...labels.map(l => squeeze(l, LINE_MAX))];
|
|
94
|
-
}
|
|
95
|
-
if (data !== null && typeof data === 'object') {
|
|
96
|
-
const pairs = Object.entries(data)
|
|
97
|
-
.filter(([, v]) => v !== null && (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean'))
|
|
98
|
-
.slice(0, 6)
|
|
99
|
-
.map(([k, v]) => `${k}: ${squeeze(String(v), VALUE_MAX)}`);
|
|
100
|
-
return pairs.length > 0 ? [squeeze(pairs.join(' · '), LINE_MAX)] : null;
|
|
101
|
-
}
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
/** Preview of a tool result: first `maxLines` lines + how many were held back. */
|
|
105
|
-
export function formatToolResult(output, maxLines = 4) {
|
|
106
|
-
const text = output.replace(/\r\n/g, '\n').trimEnd();
|
|
107
|
-
if (!text)
|
|
108
|
-
return { lines: ['(no output)'], hidden: 0 };
|
|
109
|
-
const all = summarizeJson(text) ?? text.split('\n');
|
|
110
|
-
return {
|
|
111
|
-
lines: all.slice(0, maxLines).map(l => squeeze(l, LINE_MAX)),
|
|
112
|
-
hidden: Math.max(0, all.length - maxLines),
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=toolFormat.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolFormat.js","sourceRoot":"","sources":["../../src/lib/toolFormat.ts"],"names":[],"mappings":"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"}
|
package/dist/oneShot.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { createSession, resolveAuth, findByName, slugify, touchSession, upsertSession, resolveActiveProfile, } from 'document360-engine';
|
|
2
|
-
import { accent, dim, error, muted, warn } from './lib/colors.js';
|
|
3
|
-
/**
|
|
4
|
-
* Headless one-shot mode (`d360-writer --prompt "..."`), the writer's `claude -p`.
|
|
5
|
-
* Answer text streams to STDOUT (pipeable); banner, auth notice, tool indicators,
|
|
6
|
-
* and token counts go to STDERR. Exit codes: 0 success, 1 agent error, 2 usage.
|
|
7
|
-
*/
|
|
8
|
-
export async function runOnce(cwd, prompt, authMode, resumeName, profileName, yes) {
|
|
9
|
-
const auth = resolveAuth(authMode);
|
|
10
|
-
if (auth.kind === 'none') {
|
|
11
|
-
console.error('');
|
|
12
|
-
console.error(error('ANTHROPIC_API_KEY is not set (required for --auth api).'));
|
|
13
|
-
console.error(`Get a key at ${accent('https://console.anthropic.com/settings/keys')}`);
|
|
14
|
-
console.error(`Or use your Claude subscription instead: ${accent('d360-writer --auth subscription')}`);
|
|
15
|
-
process.exit(2);
|
|
16
|
-
}
|
|
17
|
-
if (auth.kind === 'subscription') {
|
|
18
|
-
console.error(dim('Using your Claude subscription (no API key set).'));
|
|
19
|
-
}
|
|
20
|
-
// Production-profile guard: headless mode has no interactive confirm, so writes to a
|
|
21
|
-
// production profile require --yes. A config that EXISTS but is invalid must fail loud
|
|
22
|
-
// here — never silently skip the guard (a broken prod profile must not slip through).
|
|
23
|
-
let active = null;
|
|
24
|
-
try {
|
|
25
|
-
active = resolveActiveProfile(cwd, profileName);
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
console.error(error(`Document360 profile error: ${e.message}`));
|
|
29
|
-
process.exit(2);
|
|
30
|
-
}
|
|
31
|
-
if (active.production) {
|
|
32
|
-
console.error(warn(`⚠ Profile "${active.name}" is PRODUCTION.`));
|
|
33
|
-
if (!yes) {
|
|
34
|
-
console.error(error('Refusing to run against a production profile without --yes.'));
|
|
35
|
-
process.exit(2);
|
|
36
|
-
}
|
|
37
|
-
console.error(dim(' --yes given — proceeding against production.'));
|
|
38
|
-
}
|
|
39
|
-
let resumeUuid;
|
|
40
|
-
if (resumeName) {
|
|
41
|
-
const rec = findByName(cwd, resumeName);
|
|
42
|
-
if (!rec) {
|
|
43
|
-
console.error(error(`No saved session matches "${resumeName}" in this repo.`));
|
|
44
|
-
console.error(dim('List sessions inside the REPL with /resume.'));
|
|
45
|
-
process.exit(2);
|
|
46
|
-
}
|
|
47
|
-
resumeUuid = rec.uuid;
|
|
48
|
-
console.error(dim(`Resuming "${rec.name}"`));
|
|
49
|
-
}
|
|
50
|
-
// On a production profile we only reach here with --yes (gated above), so writes
|
|
51
|
-
// are authorized; non-production profiles always allow writes.
|
|
52
|
-
const session = createSession({ cwd, resume: resumeUuid, profileName, allowProdWrites: yes === true });
|
|
53
|
-
let uuid = resumeUuid ?? null;
|
|
54
|
-
let exitCode = 1;
|
|
55
|
-
for await (const ev of session.send(prompt)) {
|
|
56
|
-
switch (ev.type) {
|
|
57
|
-
case 'session':
|
|
58
|
-
if (!uuid) {
|
|
59
|
-
uuid = ev.sessionId;
|
|
60
|
-
const now = new Date().toISOString();
|
|
61
|
-
upsertSession({
|
|
62
|
-
uuid,
|
|
63
|
-
name: slugify(prompt),
|
|
64
|
-
renamed: false,
|
|
65
|
-
titled: false, // one-shots skip LLM titling — nothing should delay exit
|
|
66
|
-
cwd,
|
|
67
|
-
firstPrompt: prompt,
|
|
68
|
-
createdAt: now,
|
|
69
|
-
updatedAt: now,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
break;
|
|
73
|
-
case 'text':
|
|
74
|
-
process.stdout.write(ev.delta);
|
|
75
|
-
break;
|
|
76
|
-
case 'tool':
|
|
77
|
-
console.error(muted(` ⚙ ${ev.name}`));
|
|
78
|
-
break;
|
|
79
|
-
case 'result':
|
|
80
|
-
exitCode = ev.ok ? 0 : 1;
|
|
81
|
-
console.error(dim(`(${ev.inputTokens}→${ev.outputTokens} tokens)`));
|
|
82
|
-
if (!ev.ok)
|
|
83
|
-
console.error(error('agent finished with an error result'));
|
|
84
|
-
break;
|
|
85
|
-
case 'error':
|
|
86
|
-
console.error('');
|
|
87
|
-
console.error(error(`agent error: ${ev.message}`));
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (uuid)
|
|
92
|
-
touchSession(uuid);
|
|
93
|
-
process.stdout.write('\n');
|
|
94
|
-
process.exit(exitCode);
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=oneShot.js.map
|
package/dist/oneShot.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oneShot.js","sourceRoot":"","sources":["../src/oneShot.ts"],"names":[],"mappings":"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"}
|