moderado 0.4.34 → 0.4.50
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/dist/commands/chat.d.ts +7 -70
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +279 -453
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/chat_meta.d.ts +36 -0
- package/dist/commands/chat_meta.d.ts.map +1 -0
- package/dist/commands/chat_meta.js +102 -0
- package/dist/commands/chat_meta.js.map +1 -0
- package/dist/commands/chat_outcome.d.ts +31 -0
- package/dist/commands/chat_outcome.d.ts.map +1 -0
- package/dist/commands/chat_outcome.js +70 -0
- package/dist/commands/chat_outcome.js.map +1 -0
- package/dist/commands/chat_search.d.ts +24 -0
- package/dist/commands/chat_search.d.ts.map +1 -0
- package/dist/commands/chat_search.js +61 -0
- package/dist/commands/chat_search.js.map +1 -0
- package/dist/commands/chat_slash.d.ts +17 -0
- package/dist/commands/chat_slash.d.ts.map +1 -0
- package/dist/commands/chat_slash.js +109 -0
- package/dist/commands/chat_slash.js.map +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +25 -1
- package/dist/commands/run.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +18 -2
- package/dist/config.js.map +1 -1
- package/dist/diagnostic_log.d.ts.map +1 -1
- package/dist/diagnostic_log.js +1 -0
- package/dist/diagnostic_log.js.map +1 -1
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +5 -1
- package/dist/sessions.js.map +1 -1
- package/dist/transcript.d.ts +19 -0
- package/dist/transcript.d.ts.map +1 -0
- package/dist/transcript.js +76 -0
- package/dist/transcript.js.map +1 -0
- package/dist/turn_summary.d.ts +76 -0
- package/dist/turn_summary.d.ts.map +1 -0
- package/dist/turn_summary.js +305 -0
- package/dist/turn_summary.js.map +1 -0
- package/dist/ui/box.d.ts +19 -0
- package/dist/ui/box.d.ts.map +1 -1
- package/dist/ui/box.js +119 -12
- package/dist/ui/box.js.map +1 -1
- package/dist/ui/chart.d.ts +2 -0
- package/dist/ui/chart.d.ts.map +1 -0
- package/dist/ui/chart.js +97 -0
- package/dist/ui/chart.js.map +1 -0
- package/dist/ui/composer.d.ts +80 -0
- package/dist/ui/composer.d.ts.map +1 -0
- package/dist/ui/composer.js +883 -0
- package/dist/ui/composer.js.map +1 -0
- package/dist/ui/help_content.d.ts +2 -2
- package/dist/ui/help_content.d.ts.map +1 -1
- package/dist/ui/help_content.js +5 -3
- package/dist/ui/help_content.js.map +1 -1
- package/dist/ui/model_selector.d.ts +1 -0
- package/dist/ui/model_selector.d.ts.map +1 -1
- package/dist/ui/model_selector.js +61 -18
- package/dist/ui/model_selector.js.map +1 -1
- package/dist/ui/popup.d.ts.map +1 -1
- package/dist/ui/popup.js +7 -0
- package/dist/ui/popup.js.map +1 -1
- package/dist/ui/provider_connect.d.ts +8 -0
- package/dist/ui/provider_connect.d.ts.map +1 -1
- package/dist/ui/provider_connect.js +81 -23
- package/dist/ui/provider_connect.js.map +1 -1
- package/dist/ui/renderer.d.ts +49 -4
- package/dist/ui/renderer.d.ts.map +1 -1
- package/dist/ui/renderer.js +167 -31
- package/dist/ui/renderer.js.map +1 -1
- package/dist/ui/terminal_approval.d.ts +21 -0
- package/dist/ui/terminal_approval.d.ts.map +1 -1
- package/dist/ui/terminal_approval.js +145 -47
- package/dist/ui/terminal_approval.js.map +1 -1
- package/dist/ui/welcome.d.ts +274 -69
- package/dist/ui/welcome.d.ts.map +1 -1
- package/dist/ui/welcome.js +729 -700
- package/dist/ui/welcome.js.map +1 -1
- package/dist/vendor/providers/presets.d.ts +16 -0
- package/dist/vendor/providers/presets.d.ts.map +1 -1
- package/dist/vendor/providers/presets.js +13 -0
- package/dist/vendor/providers/presets.js.map +1 -1
- package/dist/vendor/tools/checkpoints.js +5 -5
- package/dist/vendor/tools/checkpoints.js.map +1 -1
- package/dist/vendor/tools/jail.d.ts +8 -0
- package/dist/vendor/tools/jail.d.ts.map +1 -1
- package/dist/vendor/tools/jail.js +13 -2
- package/dist/vendor/tools/jail.js.map +1 -1
- package/dist/vendor/tools/tools/apply_patch.d.ts.map +1 -1
- package/dist/vendor/tools/tools/apply_patch.js +6 -3
- package/dist/vendor/tools/tools/apply_patch.js.map +1 -1
- package/dist/vendor/tools/tools/git_diff.d.ts.map +1 -1
- package/dist/vendor/tools/tools/git_diff.js +5 -3
- package/dist/vendor/tools/tools/git_diff.js.map +1 -1
- package/package.json +1 -1
package/dist/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TranscriptMessage {
|
|
2
|
+
role: string;
|
|
3
|
+
/** Assistant turns that only call tools carry no text. */
|
|
4
|
+
content: string | null;
|
|
5
|
+
}
|
|
6
|
+
export interface TranscriptOptions {
|
|
7
|
+
messages: readonly TranscriptMessage[];
|
|
8
|
+
workspace: string;
|
|
9
|
+
model: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
/** Home directory override (tests). */
|
|
12
|
+
home?: string;
|
|
13
|
+
/** Clock override (tests). */
|
|
14
|
+
now?: Date;
|
|
15
|
+
}
|
|
16
|
+
export declare function buildTranscriptMarkdown(options: TranscriptOptions): string;
|
|
17
|
+
/** Write the transcript and return its absolute path. */
|
|
18
|
+
export declare function writeTranscript(options: TranscriptOptions): string;
|
|
19
|
+
//# sourceMappingURL=transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAsBD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAsB1E;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAWlE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session transcript export.
|
|
3
|
+
*
|
|
4
|
+
* The chat window shows one turn at a time, so earlier turns scroll out of
|
|
5
|
+
* existence. `/transcript` writes the whole conversation — every question, every
|
|
6
|
+
* answer, every turn summary — to a markdown file under `~/.moderado/transcripts`
|
|
7
|
+
* and hands it to the pager, which is where long-form reading belongs.
|
|
8
|
+
*/
|
|
9
|
+
import fs from 'node:fs';
|
|
10
|
+
import os from 'node:os';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
const SUMMARY_OPEN = '```summary';
|
|
13
|
+
/**
|
|
14
|
+
* Turn the summary fence into a real heading.
|
|
15
|
+
*
|
|
16
|
+
* Inside the CLI the fence marks the tinted panel; in a markdown file it would
|
|
17
|
+
* render as a code block, which is the wrong voice for a report.
|
|
18
|
+
*/
|
|
19
|
+
function unFenceSummary(text) {
|
|
20
|
+
const out = [];
|
|
21
|
+
let inSummary = false;
|
|
22
|
+
for (const line of text.split('\n')) {
|
|
23
|
+
const trimmed = line.trim();
|
|
24
|
+
if (!inSummary && trimmed === SUMMARY_OPEN) {
|
|
25
|
+
inSummary = true;
|
|
26
|
+
out.push('### Turn summary');
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (inSummary && trimmed === '```') {
|
|
30
|
+
inSummary = false;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
out.push(line);
|
|
34
|
+
}
|
|
35
|
+
return out.join('\n');
|
|
36
|
+
}
|
|
37
|
+
export function buildTranscriptMarkdown(options) {
|
|
38
|
+
const now = options.now ?? new Date();
|
|
39
|
+
const stamp = now.toISOString().replace('T', ' ').slice(0, 19);
|
|
40
|
+
const lines = [
|
|
41
|
+
'# Moderado transcript',
|
|
42
|
+
'',
|
|
43
|
+
`- **Workspace**: \`${options.workspace}\``,
|
|
44
|
+
`- **Model**: \`${options.model}\``,
|
|
45
|
+
];
|
|
46
|
+
if (options.sessionId)
|
|
47
|
+
lines.push(`- **Session**: \`${options.sessionId}\``);
|
|
48
|
+
lines.push(`- **Exported**: ${stamp}`, '', '---', '');
|
|
49
|
+
let turn = 0;
|
|
50
|
+
for (const message of options.messages) {
|
|
51
|
+
const body = (message.content ?? '').trim();
|
|
52
|
+
if (body.length === 0)
|
|
53
|
+
continue;
|
|
54
|
+
if (message.role === 'user')
|
|
55
|
+
turn += 1;
|
|
56
|
+
const who = message.role === 'user' ? 'You' : message.role === 'assistant' ? 'Moderado' : message.role;
|
|
57
|
+
lines.push(`## ${turn || 1} · ${who}`, '', unFenceSummary(body), '');
|
|
58
|
+
}
|
|
59
|
+
if (turn === 0)
|
|
60
|
+
lines.push('_This session has no completed turns yet._', '');
|
|
61
|
+
return lines.join('\n');
|
|
62
|
+
}
|
|
63
|
+
/** Write the transcript and return its absolute path. */
|
|
64
|
+
export function writeTranscript(options) {
|
|
65
|
+
const home = options.home ?? os.homedir();
|
|
66
|
+
const directory = path.join(home, '.moderado', 'transcripts');
|
|
67
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
68
|
+
const now = options.now ?? new Date();
|
|
69
|
+
const stamp = now.toISOString().replace(/[-:]/g, '').replace('T', '-').slice(0, 15);
|
|
70
|
+
const name = path.basename(options.workspace) || 'session';
|
|
71
|
+
const safe = name.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'session';
|
|
72
|
+
const file = path.join(directory, `${safe}-${stamp}.md`);
|
|
73
|
+
fs.writeFileSync(file, buildTranscriptMarkdown(options), 'utf8');
|
|
74
|
+
return file;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript.js","sourceRoot":"","sources":["../src/transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { AgentEvent } from '@moderado/contracts';
|
|
2
|
+
export type TurnStatus = 'completed' | 'step_limit_reached' | 'cancelled' | 'failed';
|
|
3
|
+
/**
|
|
4
|
+
* Fence that marks the turn summary inside a chat answer.
|
|
5
|
+
*
|
|
6
|
+
* The renderer paints everything between these markers as a tinted panel, so
|
|
7
|
+
* the report reads as an afterword rather than more prose. `ui/welcome.ts`
|
|
8
|
+
* imports this constant rather than repeating the literal.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SUMMARY_FENCE = "```summary";
|
|
11
|
+
export interface TurnCommandRecord {
|
|
12
|
+
command: string;
|
|
13
|
+
ok: boolean;
|
|
14
|
+
exitCode?: number;
|
|
15
|
+
/** The tool backgrounded a dev server after it reported readiness. */
|
|
16
|
+
serverUrl?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface WebAppHint {
|
|
19
|
+
/** Workspace-relative directory, `.` for the workspace root. */
|
|
20
|
+
directory: string;
|
|
21
|
+
command: string;
|
|
22
|
+
url?: string;
|
|
23
|
+
/** True when the agent already started this server during the turn. */
|
|
24
|
+
live: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface TurnSummary {
|
|
27
|
+
status: TurnStatus;
|
|
28
|
+
steps: number;
|
|
29
|
+
created: string[];
|
|
30
|
+
modified: string[];
|
|
31
|
+
commands: TurnCommandRecord[];
|
|
32
|
+
checks: {
|
|
33
|
+
name: string;
|
|
34
|
+
ok: boolean;
|
|
35
|
+
}[];
|
|
36
|
+
leftover: string[];
|
|
37
|
+
webApp?: WebAppHint;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Records one agent turn from the structured event stream so the CLI can
|
|
41
|
+
* report what actually happened without asking the model to summarise itself
|
|
42
|
+
* (a model summary is unbounded prose and can claim work it never did).
|
|
43
|
+
*/
|
|
44
|
+
export declare class TurnRecorder {
|
|
45
|
+
private readonly workspaceRoot;
|
|
46
|
+
private readonly pending;
|
|
47
|
+
private readonly created;
|
|
48
|
+
private readonly modified;
|
|
49
|
+
private readonly commands;
|
|
50
|
+
private readonly checks;
|
|
51
|
+
private readonly failures;
|
|
52
|
+
private denied;
|
|
53
|
+
/** Jail root, resolved on first use: one recorder serves one workspace for one turn. */
|
|
54
|
+
private canonicalRootCache?;
|
|
55
|
+
constructor(workspaceRoot: string);
|
|
56
|
+
private get canonicalRoot();
|
|
57
|
+
record(event: AgentEvent): void;
|
|
58
|
+
/** True when the turn changed files or ran commands, so a summary is worth showing. */
|
|
59
|
+
hasWork(): boolean;
|
|
60
|
+
build(status: TurnStatus, steps: number): TurnSummary;
|
|
61
|
+
private recordResult;
|
|
62
|
+
private fileExists;
|
|
63
|
+
private webAppHint;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Find the web app a change belongs to: the nearest ancestor directory that
|
|
67
|
+
* declares a start script and a web framework (or ships an `index.html`).
|
|
68
|
+
* A build-only library therefore never claims to be runnable.
|
|
69
|
+
*/
|
|
70
|
+
export declare function detectWebApp(workspaceRoot: string, changedPaths: readonly string[]): WebAppHint | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Render the end-of-turn report: what changed, what was verified, what is
|
|
73
|
+
* outstanding, and how to run the app when the turn produced one.
|
|
74
|
+
*/
|
|
75
|
+
export declare function formatTurnSummary(summary: TurnSummary, style?: 'chat' | 'terminal'): string;
|
|
76
|
+
//# sourceMappingURL=turn_summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn_summary.d.ts","sourceRoot":"","sources":["../src/turn_summary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,oBAAoB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,eAAe,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAaD;;;;GAIG;AACH,qBAAa,YAAY;IAWX,OAAO,CAAC,QAAQ,CAAC,aAAa;IAV1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,MAAM,CAAK;IACnB,wFAAwF;IACxF,OAAO,CAAC,kBAAkB,CAAC,CAAS;gBAEP,aAAa,EAAE,MAAM;IAElD,OAAO,KAAK,aAAa,GAKxB;IAED,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAmB/B,uFAAuF;IACvF,OAAO,IAAI,OAAO;IAIlB,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IAsBrD,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;CAOnB;AA4BD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,SAAS,CA6B3G;AA+CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,GAAE,MAAM,GAAG,UAAmB,GAAG,MAAM,CA2CnG"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { canonicalizeRoot, resolveInJailFromRoot } from './vendor/tools/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Fence that marks the turn summary inside a chat answer.
|
|
6
|
+
*
|
|
7
|
+
* The renderer paints everything between these markers as a tinted panel, so
|
|
8
|
+
* the report reads as an afterword rather than more prose. `ui/welcome.ts`
|
|
9
|
+
* imports this constant rather than repeating the literal.
|
|
10
|
+
*/
|
|
11
|
+
export const SUMMARY_FENCE = '```summary';
|
|
12
|
+
/** Commands that verify work rather than change it. */
|
|
13
|
+
const VERIFICATION_COMMAND = /\b(test|vitest|jest|pytest|tsc|typecheck|type-check|lint|eslint|biome|build)\b/i;
|
|
14
|
+
const CODE_FILE = /\.(?:[cm]?[jt]sx?|py|rb|go|rs|java|kt|swift|php|cs|cpp|cc|c|h|vue|svelte|astro)$/i;
|
|
15
|
+
const MAX_LISTED = 5;
|
|
16
|
+
/**
|
|
17
|
+
* Records one agent turn from the structured event stream so the CLI can
|
|
18
|
+
* report what actually happened without asking the model to summarise itself
|
|
19
|
+
* (a model summary is unbounded prose and can claim work it never did).
|
|
20
|
+
*/
|
|
21
|
+
export class TurnRecorder {
|
|
22
|
+
workspaceRoot;
|
|
23
|
+
pending = new Map();
|
|
24
|
+
created = new Set();
|
|
25
|
+
modified = new Set();
|
|
26
|
+
commands = [];
|
|
27
|
+
checks = [];
|
|
28
|
+
failures = [];
|
|
29
|
+
denied = 0;
|
|
30
|
+
/** Jail root, resolved on first use: one recorder serves one workspace for one turn. */
|
|
31
|
+
canonicalRootCache;
|
|
32
|
+
constructor(workspaceRoot) {
|
|
33
|
+
this.workspaceRoot = workspaceRoot;
|
|
34
|
+
}
|
|
35
|
+
get canonicalRoot() {
|
|
36
|
+
// `resolveInJail` would stat + realpath the root on every tool call; the root
|
|
37
|
+
// cannot change under a single turn, so resolve it once.
|
|
38
|
+
if (!this.canonicalRootCache)
|
|
39
|
+
this.canonicalRootCache = canonicalizeRoot(this.workspaceRoot);
|
|
40
|
+
return this.canonicalRootCache;
|
|
41
|
+
}
|
|
42
|
+
record(event) {
|
|
43
|
+
if (event.type === 'tool_call_initiated') {
|
|
44
|
+
const parameters = event.parameters;
|
|
45
|
+
this.pending.set(event.toolCallId, {
|
|
46
|
+
toolName: event.toolName,
|
|
47
|
+
parameters,
|
|
48
|
+
existed: this.fileExists(parameters.path),
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (event.type === 'tool_result') {
|
|
53
|
+
this.recordResult(event.toolCallId, event.result);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (event.type === 'error') {
|
|
57
|
+
this.failures.push(`Provider error: ${event.message}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** True when the turn changed files or ran commands, so a summary is worth showing. */
|
|
61
|
+
hasWork() {
|
|
62
|
+
return this.created.size + this.modified.size + this.commands.length > 0;
|
|
63
|
+
}
|
|
64
|
+
build(status, steps) {
|
|
65
|
+
const changed = [...this.created, ...this.modified];
|
|
66
|
+
const leftover = [...this.failures];
|
|
67
|
+
if (this.denied > 0)
|
|
68
|
+
leftover.push(`${this.denied} action${this.denied === 1 ? ' was' : 's were'} denied; those changes were not applied.`);
|
|
69
|
+
if (status === 'step_limit_reached')
|
|
70
|
+
leftover.push('The step limit ended the task before it finished; run the task again to continue.');
|
|
71
|
+
if (status === 'cancelled')
|
|
72
|
+
leftover.push('The task was stopped before it finished.');
|
|
73
|
+
if (status === 'failed')
|
|
74
|
+
leftover.push('The task failed before finishing.');
|
|
75
|
+
if (changed.some((file) => CODE_FILE.test(file)) && this.checks.length === 0) {
|
|
76
|
+
leftover.push('No test, typecheck, or build command ran after these edits.');
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
status,
|
|
80
|
+
steps,
|
|
81
|
+
created: [...this.created],
|
|
82
|
+
modified: [...this.modified],
|
|
83
|
+
commands: [...this.commands],
|
|
84
|
+
checks: [...this.checks],
|
|
85
|
+
leftover,
|
|
86
|
+
webApp: this.webAppHint(changed),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
recordResult(toolCallId, result) {
|
|
90
|
+
const call = this.pending.get(toolCallId);
|
|
91
|
+
this.pending.delete(toolCallId);
|
|
92
|
+
if (result.status === 'denied') {
|
|
93
|
+
this.denied += 1;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (!call)
|
|
97
|
+
return;
|
|
98
|
+
if (call.toolName === 'run_command') {
|
|
99
|
+
const command = formatCommand(call.parameters);
|
|
100
|
+
const serverUrl = typeof result.metadata?.serverUrl === 'string' ? result.metadata.serverUrl : undefined;
|
|
101
|
+
const exitCode = typeof result.metadata?.exitCode === 'number' ? result.metadata.exitCode : undefined;
|
|
102
|
+
this.commands.push({ command, ok: result.status === 'success', exitCode, serverUrl });
|
|
103
|
+
if (result.status !== 'success') {
|
|
104
|
+
this.failures.push(`\`${command}\` failed: ${firstLine(result.output)}`);
|
|
105
|
+
}
|
|
106
|
+
else if (VERIFICATION_COMMAND.test(command)) {
|
|
107
|
+
this.checks.push({ name: command, ok: true });
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (call.toolName === 'run_diagnostics') {
|
|
112
|
+
const script = typeof call.parameters.script === 'string' ? call.parameters.script : 'diagnostics';
|
|
113
|
+
this.checks.push({ name: script, ok: result.status === 'success' });
|
|
114
|
+
if (result.status !== 'success')
|
|
115
|
+
this.failures.push(`${script} reported problems.`);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
if (result.status !== 'success') {
|
|
119
|
+
this.failures.push(`${call.toolName} failed: ${firstLine(result.output)}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (call.toolName === 'write_file' && typeof call.parameters.path === 'string') {
|
|
123
|
+
(call.existed ? this.modified : this.created).add(call.parameters.path);
|
|
124
|
+
}
|
|
125
|
+
else if (call.toolName === 'edit_file' && typeof call.parameters.path === 'string') {
|
|
126
|
+
this.modified.add(call.parameters.path);
|
|
127
|
+
}
|
|
128
|
+
else if (call.toolName === 'apply_patch' && Array.isArray(call.parameters.edits)) {
|
|
129
|
+
for (const edit of call.parameters.edits) {
|
|
130
|
+
const target = edit?.path;
|
|
131
|
+
if (typeof target === 'string')
|
|
132
|
+
this.modified.add(target);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
fileExists(relative) {
|
|
137
|
+
if (typeof relative !== 'string' || !relative)
|
|
138
|
+
return false;
|
|
139
|
+
try {
|
|
140
|
+
return fs.existsSync(resolveInJailFromRoot(this.canonicalRoot, relative));
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
webAppHint(changed) {
|
|
147
|
+
const started = this.commands.find((command) => command.serverUrl);
|
|
148
|
+
const hint = detectWebApp(this.workspaceRoot, changed);
|
|
149
|
+
if (!hint)
|
|
150
|
+
return undefined;
|
|
151
|
+
if (!started?.serverUrl)
|
|
152
|
+
return hint;
|
|
153
|
+
return { ...hint, url: started.serverUrl, live: true };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function firstLine(text) {
|
|
157
|
+
const line = text.split('\n').find((entry) => entry.trim().length > 0)?.trim() ?? '';
|
|
158
|
+
return line.length > 120 ? `${line.slice(0, 117)}...` : line;
|
|
159
|
+
}
|
|
160
|
+
function formatCommand(parameters) {
|
|
161
|
+
const command = typeof parameters.command === 'string' ? parameters.command : '';
|
|
162
|
+
const args = Array.isArray(parameters.args) ? parameters.args.filter((arg) => typeof arg === 'string') : [];
|
|
163
|
+
return [command, ...args].join(' ').trim();
|
|
164
|
+
}
|
|
165
|
+
const WEB_FRAMEWORKS = [
|
|
166
|
+
{ dependency: /^next$/, port: 3000 },
|
|
167
|
+
{ dependency: /^nuxt$/, port: 3000 },
|
|
168
|
+
{ dependency: /^@remix-run\/dev$/, port: 3000 },
|
|
169
|
+
{ dependency: /^astro$/, port: 4321 },
|
|
170
|
+
{ dependency: /^vite$/, port: 5173 },
|
|
171
|
+
{ dependency: /^@sveltejs\/kit$/, port: 5173 },
|
|
172
|
+
{ dependency: /^react-scripts$/, port: 3000 },
|
|
173
|
+
{ dependency: /^parcel$/, port: 1234 },
|
|
174
|
+
{ dependency: /^@angular\/core$/, port: 4200 },
|
|
175
|
+
{ dependency: /^webpack-dev-server$/, port: 8080 },
|
|
176
|
+
];
|
|
177
|
+
const START_SCRIPTS = ['dev', 'start', 'serve', 'preview'];
|
|
178
|
+
/**
|
|
179
|
+
* Find the web app a change belongs to: the nearest ancestor directory that
|
|
180
|
+
* declares a start script and a web framework (or ships an `index.html`).
|
|
181
|
+
* A build-only library therefore never claims to be runnable.
|
|
182
|
+
*/
|
|
183
|
+
export function detectWebApp(workspaceRoot, changedPaths) {
|
|
184
|
+
// Every candidate directory resolves `package.json` and `index.html`; canonicalize
|
|
185
|
+
// the root once for the whole scan rather than once per file.
|
|
186
|
+
let canonicalRoot;
|
|
187
|
+
try {
|
|
188
|
+
canonicalRoot = canonicalizeRoot(workspaceRoot);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return undefined;
|
|
192
|
+
}
|
|
193
|
+
const directories = [];
|
|
194
|
+
const seen = new Set();
|
|
195
|
+
const add = (directory) => {
|
|
196
|
+
if (!directory || seen.has(directory))
|
|
197
|
+
return;
|
|
198
|
+
seen.add(directory);
|
|
199
|
+
directories.push(directory);
|
|
200
|
+
};
|
|
201
|
+
for (const changed of changedPaths) {
|
|
202
|
+
let directory = path.posix.dirname(changed.replace(/\\/g, '/'));
|
|
203
|
+
while (directory && directory !== '.' && directory !== '/' && directory !== '..') {
|
|
204
|
+
add(directory);
|
|
205
|
+
directory = path.posix.dirname(directory);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
add('.');
|
|
209
|
+
for (const directory of directories) {
|
|
210
|
+
const hint = readWebAppHint(canonicalRoot, directory);
|
|
211
|
+
if (hint)
|
|
212
|
+
return hint;
|
|
213
|
+
}
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
function readWebAppHint(canonicalRoot, directory) {
|
|
217
|
+
const relative = (file) => (directory === '.' ? file : `${directory}/${file}`);
|
|
218
|
+
const absolute = (file) => {
|
|
219
|
+
try {
|
|
220
|
+
return resolveInJailFromRoot(canonicalRoot, relative(file));
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
const hasIndex = (() => {
|
|
227
|
+
const target = absolute('index.html');
|
|
228
|
+
return target !== undefined && fs.existsSync(target);
|
|
229
|
+
})();
|
|
230
|
+
const packagePath = absolute('package.json');
|
|
231
|
+
if (packagePath && fs.existsSync(packagePath)) {
|
|
232
|
+
let manifest;
|
|
233
|
+
try {
|
|
234
|
+
if (fs.statSync(packagePath).size > 512 * 1024)
|
|
235
|
+
return undefined;
|
|
236
|
+
manifest = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
const scripts = manifest.scripts ?? {};
|
|
242
|
+
const script = START_SCRIPTS.find((name) => typeof scripts[name] === 'string');
|
|
243
|
+
const dependencies = { ...(manifest.dependencies ?? {}), ...(manifest.devDependencies ?? {}) };
|
|
244
|
+
const framework = WEB_FRAMEWORKS.find((candidate) => Object.keys(dependencies).some((name) => candidate.dependency.test(name)));
|
|
245
|
+
if (!script || (!framework && !hasIndex))
|
|
246
|
+
return undefined;
|
|
247
|
+
return {
|
|
248
|
+
directory,
|
|
249
|
+
command: `cd ${directory} && ${script === 'start' ? 'npm start' : `npm run ${script}`}`,
|
|
250
|
+
url: framework ? `http://localhost:${framework.port}` : undefined,
|
|
251
|
+
live: false,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
if (!hasIndex)
|
|
255
|
+
return undefined;
|
|
256
|
+
return {
|
|
257
|
+
directory,
|
|
258
|
+
command: `npx --yes serve ${directory === '.' ? '.' : directory}`,
|
|
259
|
+
url: 'http://localhost:3000',
|
|
260
|
+
live: false,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Render the end-of-turn report: what changed, what was verified, what is
|
|
265
|
+
* outstanding, and how to run the app when the turn produced one.
|
|
266
|
+
*/
|
|
267
|
+
export function formatTurnSummary(summary, style = 'chat') {
|
|
268
|
+
const chat = style === 'chat';
|
|
269
|
+
// Chat renders the report as a fenced block so the CLI can paint it as a
|
|
270
|
+
// tinted panel: the summary is the answer's afterword, and it has to read as
|
|
271
|
+
// a different thing from the prose above it. `#`/`##`/`-` keep it valid
|
|
272
|
+
// markdown outside the CLI, where the fence degrades to a code block.
|
|
273
|
+
const heading = (title, level = 2) => chat ? `${'#'.repeat(level)} ${title}` : `\x1b[1;38;5;75m${title}\x1b[0m`;
|
|
274
|
+
const quote = (value) => (chat ? `\`${value}\`` : value);
|
|
275
|
+
const bullet = (text) => (chat ? `- ${text}` : ` \x1b[38;5;253m•\x1b[0m ${text}`);
|
|
276
|
+
const section = (title, items) => [heading(title), ...items.map(bullet)].join('\n');
|
|
277
|
+
const changed = [
|
|
278
|
+
...summary.created.map((file) => `Added ${quote(file)}`),
|
|
279
|
+
...summary.modified.map((file) => `Updated ${quote(file)}`),
|
|
280
|
+
...summary.commands.map((command) => `Ran ${quote(command.command)}${command.ok ? '' : ' (failed)'}`),
|
|
281
|
+
];
|
|
282
|
+
const listed = changed.slice(0, MAX_LISTED * 2);
|
|
283
|
+
if (changed.length > listed.length)
|
|
284
|
+
listed.push(`… +${changed.length - listed.length} more actions`);
|
|
285
|
+
const sections = [
|
|
286
|
+
heading('Turn summary', 1),
|
|
287
|
+
section('Done', listed.length > 0 ? listed : ['No workspace changes were needed.']),
|
|
288
|
+
];
|
|
289
|
+
if (summary.checks.length > 0) {
|
|
290
|
+
sections.push(section('Checked', summary.checks.map((check) => `${quote(check.name)} ${check.ok ? 'passed' : 'reported problems'}`)));
|
|
291
|
+
}
|
|
292
|
+
sections.push(section('Left over', summary.leftover.length > 0 ? summary.leftover : ['Nothing outstanding.']));
|
|
293
|
+
if (summary.webApp) {
|
|
294
|
+
const { command, url, live, directory } = summary.webApp;
|
|
295
|
+
const where = directory === '.' ? 'workspace root' : quote(directory);
|
|
296
|
+
sections.push(section('Run it', [
|
|
297
|
+
live && url ? `Already running at ${quote(url)}` : `${quote(command)}${url ? ` → ${quote(url)}` : ''}`,
|
|
298
|
+
`Web app in ${where}; Moderado does not keep a server in the foreground.`,
|
|
299
|
+
]));
|
|
300
|
+
}
|
|
301
|
+
// One blank line between sections keeps the tinted band readable; the fence
|
|
302
|
+
// markers are the contract with `wrapAnswerLines` in `ui/welcome.ts`.
|
|
303
|
+
return chat ? [SUMMARY_FENCE, sections.join('\n'), '```'].join('\n') : sections.join('\n\n');
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=turn_summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn_summary.js","sourceRoot":"","sources":["../src/turn_summary.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/box.d.ts
CHANGED
|
@@ -6,9 +6,28 @@ export declare function stripAnsi(text: string): string;
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function displayWidth(text: string): number;
|
|
8
8
|
export declare function getVisibleWidth(text: string): number;
|
|
9
|
+
/**
|
|
10
|
+
* Keep the first `max` terminal cells of `text`.
|
|
11
|
+
*
|
|
12
|
+
* `String#slice` counts UTF-16 units, so a CJK or emoji line looks short to it
|
|
13
|
+
* while occupying twice the cells — which is how a status line used to spill
|
|
14
|
+
* past the card and wrap onto the row below. Escape sequences are copied
|
|
15
|
+
* through without being counted.
|
|
16
|
+
*/
|
|
17
|
+
export declare function sliceToWidth(text: string, max: number): string;
|
|
18
|
+
/** Keep the last `max` terminal cells of `text`. */
|
|
19
|
+
export declare function sliceTailToWidth(text: string, max: number): string;
|
|
20
|
+
/** Clamp to `max` cells, appending an ellipsis when anything was cut. */
|
|
21
|
+
export declare function truncateToWidth(text: string, max: number): string;
|
|
9
22
|
export interface BoxOptions {
|
|
10
23
|
title?: string;
|
|
11
24
|
minWidth?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Hard cap in terminal cells, borders included. Content wider than the cap is
|
|
27
|
+
* truncated, so a single long diff line can no longer widen the box past the
|
|
28
|
+
* terminal and wrap the whole frame out of alignment.
|
|
29
|
+
*/
|
|
30
|
+
maxWidth?: number;
|
|
12
31
|
borderColor?: string;
|
|
13
32
|
titleColor?: string;
|
|
14
33
|
}
|
package/dist/ui/box.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AACA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/ui/box.ts"],"names":[],"mappings":"AACA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9C;AAkDD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASjD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAKD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAoB9D;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBlE;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CA2D3E"}
|