modelroom 0.0.4 → 0.0.5
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/CHANGELOG.md +7 -0
- package/dist/lib/opencode.d.ts +3 -5
- package/dist/lib/opencode.d.ts.map +1 -1
- package/dist/lib/opencode.js +2 -32
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/parts.d.ts +40 -0
- package/dist/lib/parts.d.ts.map +1 -0
- package/dist/lib/parts.js +158 -0
- package/dist/lib/parts.js.map +1 -0
- package/package.json +1 -1
- package/ui/assets/app.js +41 -38
- package/ui/modelroom.css +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.5](https://github.com/modelroom/modelroom/compare/modelroom-v0.0.4...modelroom-v0.0.5) (2026-10-18)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **chat:** show a turn as parts — tool cards, diffs, reasoning ([#8](https://github.com/modelroom/modelroom/issues/8)) ([398847b](https://github.com/modelroom/modelroom/commit/398847b833af40d3cccc1a676e87fbaade70eb7c))
|
|
9
|
+
|
|
3
10
|
## [0.0.4](https://github.com/modelroom/modelroom/compare/modelroom-v0.0.3...modelroom-v0.0.4) (2026-10-18)
|
|
4
11
|
|
|
5
12
|
|
package/dist/lib/opencode.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Config } from './config.ts';
|
|
2
|
+
import { type Turn } from './parts.ts';
|
|
2
3
|
export interface TokenUsage {
|
|
3
4
|
input: number;
|
|
4
5
|
output: number;
|
|
@@ -17,10 +18,6 @@ export interface ContextUsage {
|
|
|
17
18
|
limit: number;
|
|
18
19
|
pct: number;
|
|
19
20
|
}
|
|
20
|
-
export interface TranscriptLine {
|
|
21
|
-
role: 'user' | 'assistant' | 'meta';
|
|
22
|
-
text: string;
|
|
23
|
-
}
|
|
24
21
|
export interface McpServer {
|
|
25
22
|
name: string;
|
|
26
23
|
status: string;
|
|
@@ -29,7 +26,8 @@ export interface McpServer {
|
|
|
29
26
|
export interface SessionView {
|
|
30
27
|
stats: SessionStats;
|
|
31
28
|
context: ContextUsage | null;
|
|
32
|
-
|
|
29
|
+
/** The conversation, as parts: text, reasoning and one entry per tool call. */
|
|
30
|
+
turns: Turn[];
|
|
33
31
|
mcp: McpServer[];
|
|
34
32
|
skills: string[];
|
|
35
33
|
workspace: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../lib/opencode.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../lib/opencode.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAOhD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,+EAA+E;IAC/E,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,GAAG,EAAE,SAAS,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAqJD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgC7B"}
|
package/dist/lib/opencode.js
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
// here is best-effort and opencode-only — any failure returns null/empty and the
|
|
7
7
|
// UI just hides the panel. Nothing here writes.
|
|
8
8
|
import { spawn } from 'node:child_process';
|
|
9
|
+
import { toTurns } from './parts.js';
|
|
9
10
|
const MAX_OUTPUT = 8 * 1024 * 1024; // a runaway response must not grow without bound
|
|
10
11
|
const TIMEOUT_MS = 15_000;
|
|
11
|
-
const MAX_TEXT = 4000; // a transcript excerpt, not the whole file
|
|
12
12
|
const MODEL_TTL = 10 * 60_000;
|
|
13
13
|
const EXTRAS_TTL = 60_000;
|
|
14
14
|
const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : null);
|
|
@@ -105,36 +105,6 @@ function lastModel(messages) {
|
|
|
105
105
|
}
|
|
106
106
|
return null;
|
|
107
107
|
}
|
|
108
|
-
const clip = (text) => text.length > MAX_TEXT ? `${text.slice(0, MAX_TEXT)}…` : text;
|
|
109
|
-
function toLines(messages) {
|
|
110
|
-
const lines = [];
|
|
111
|
-
for (const raw of [...messages].sort(byTime)) {
|
|
112
|
-
if (!isRecord(raw))
|
|
113
|
-
continue;
|
|
114
|
-
if (raw.type === 'user') {
|
|
115
|
-
const text = str(raw.text) ?? '';
|
|
116
|
-
if (text.trim())
|
|
117
|
-
lines.push({ role: 'user', text: clip(text) });
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
if (raw.type !== 'assistant' || !Array.isArray(raw.content))
|
|
121
|
-
continue;
|
|
122
|
-
for (const rawPart of raw.content) {
|
|
123
|
-
if (!isRecord(rawPart))
|
|
124
|
-
continue;
|
|
125
|
-
if (rawPart.type === 'text' && typeof rawPart.text === 'string' && rawPart.text.trim()) {
|
|
126
|
-
lines.push({ role: 'assistant', text: clip(rawPart.text) });
|
|
127
|
-
}
|
|
128
|
-
else if (rawPart.type === 'tool') {
|
|
129
|
-
const name = str(rawPart.name) ?? 'tool';
|
|
130
|
-
const state = isRecord(rawPart.state) ? rawPart.state : {};
|
|
131
|
-
const status = str(state.status) ?? '';
|
|
132
|
-
lines.push({ role: 'meta', text: `[${name}]${status ? ` ${status}` : ''}` });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return lines;
|
|
137
|
-
}
|
|
138
108
|
/** The last turn's prompt size is the current context: fresh input + cache reads. */
|
|
139
109
|
function contextUsed(messages) {
|
|
140
110
|
for (const raw of [...messages].sort(byTime).toReversed()) {
|
|
@@ -224,6 +194,6 @@ export async function sessionView(cfg, sessionId) {
|
|
|
224
194
|
}
|
|
225
195
|
const { mcp, skills } = await extras(cfg);
|
|
226
196
|
const workspace = isRecord(info) && isRecord(info.location) ? str(info.location.directory) : null;
|
|
227
|
-
return { stats, context,
|
|
197
|
+
return { stats, context, turns: toTurns(messages), mcp, skills, workspace };
|
|
228
198
|
}
|
|
229
199
|
//# sourceMappingURL=opencode.js.map
|
package/dist/lib/opencode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../lib/opencode.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,iFAAiF;AACjF,gDAAgD;AAEhD,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../lib/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type ToolStatus = 'running' | 'completed' | 'error';
|
|
2
|
+
/** One file an edit touched, with the patch opencode produced for it. */
|
|
3
|
+
export interface DiffFile {
|
|
4
|
+
file: string;
|
|
5
|
+
patch: string;
|
|
6
|
+
}
|
|
7
|
+
export type Part = {
|
|
8
|
+
kind: 'text';
|
|
9
|
+
text: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'reasoning';
|
|
12
|
+
text: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'tool';
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
status: ToolStatus;
|
|
18
|
+
/** One line that says what it acted on: a path, a command, a pattern. */
|
|
19
|
+
summary: string | null;
|
|
20
|
+
files: DiffFile[];
|
|
21
|
+
/** The tool's own output, clipped. */
|
|
22
|
+
output: string | null;
|
|
23
|
+
exit: number | null;
|
|
24
|
+
truncated: boolean;
|
|
25
|
+
};
|
|
26
|
+
export interface Turn {
|
|
27
|
+
role: 'user' | 'assistant';
|
|
28
|
+
parts: Part[];
|
|
29
|
+
}
|
|
30
|
+
/** What the tool acted on, in one line — this is the row the chat shows. */
|
|
31
|
+
export declare function summarise(name: string, input: Record<string, unknown>): string | null;
|
|
32
|
+
/** The parts of one assistant message, in order, with the empty ones dropped. */
|
|
33
|
+
export declare function parseParts(message: Record<string, unknown>): Part[];
|
|
34
|
+
/**
|
|
35
|
+
* The conversation as turns. Consecutive assistant messages are one turn: a
|
|
36
|
+
* single prompt is answered over several steps, and the chat should read as one
|
|
37
|
+
* answer, not six.
|
|
38
|
+
*/
|
|
39
|
+
export declare function toTurns(messages: unknown[]): Turn[];
|
|
40
|
+
//# sourceMappingURL=parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../../lib/parts.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IACE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,sCAAsC;IACtC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAwBD,4EAA4E;AAC5E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAWrF;AAuDD,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,CAoBnE;AAOD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAkBnD"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
// modelroom — the agent's turn, as parts.
|
|
2
|
+
//
|
|
3
|
+
// The opencode API describes an assistant message as a list of parts: `text`,
|
|
4
|
+
// `reasoning`, and one `tool` part per call — each with its own input, its
|
|
5
|
+
// output (`content`) and its metadata (an exit code, or the patches it wrote).
|
|
6
|
+
// That is everything the CLI's stdout throws away.
|
|
7
|
+
//
|
|
8
|
+
// This module is pure: it takes what the API already returned and turns it into
|
|
9
|
+
// the small, serializable shape the chat renders. No I/O, no guessing at the
|
|
10
|
+
// CLI's human output.
|
|
11
|
+
const MAX_OUTPUT = 4000;
|
|
12
|
+
const MAX_SUMMARY = 140;
|
|
13
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
14
|
+
const str = (value) => (typeof value === 'string' ? value : null);
|
|
15
|
+
const clip = (text, max) => text.length > max ? `${text.slice(0, max)}…` : text;
|
|
16
|
+
const firstLine = (text) => clip(text.split('\n')[0]?.trim() ?? '', MAX_SUMMARY);
|
|
17
|
+
/** The path a tool acted on, whichever key opencode used for it. */
|
|
18
|
+
function pathOf(input) {
|
|
19
|
+
for (const key of ['path', 'filePath', 'file', 'filename']) {
|
|
20
|
+
const value = str(input[key]);
|
|
21
|
+
if (value)
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
/** What the tool acted on, in one line — this is the row the chat shows. */
|
|
27
|
+
export function summarise(name, input) {
|
|
28
|
+
const path = pathOf(input);
|
|
29
|
+
const command = str(input.command);
|
|
30
|
+
if (command)
|
|
31
|
+
return firstLine(command);
|
|
32
|
+
if (path)
|
|
33
|
+
return clip(path, MAX_SUMMARY);
|
|
34
|
+
for (const key of ['pattern', 'query', 'glob', 'description', 'prompt', 'url', 'name']) {
|
|
35
|
+
const value = str(input[key]);
|
|
36
|
+
if (value)
|
|
37
|
+
return clip(value.split('\n')[0] ?? value, MAX_SUMMARY);
|
|
38
|
+
}
|
|
39
|
+
const keys = Object.keys(input);
|
|
40
|
+
return keys.length ? clip(keys.join(', '), MAX_SUMMARY) : null;
|
|
41
|
+
}
|
|
42
|
+
function statusOf(state) {
|
|
43
|
+
const status = str(state.status);
|
|
44
|
+
if (status === 'running' || status === 'pending')
|
|
45
|
+
return 'running';
|
|
46
|
+
if (status === 'error' || status === 'failed')
|
|
47
|
+
return 'error';
|
|
48
|
+
return 'completed';
|
|
49
|
+
}
|
|
50
|
+
/** The patches opencode records when a tool writes files. */
|
|
51
|
+
function filesOf(state) {
|
|
52
|
+
const metadata = isRecord(state.metadata) ? state.metadata : {};
|
|
53
|
+
const files = metadata.files;
|
|
54
|
+
if (!Array.isArray(files))
|
|
55
|
+
return [];
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const entry of files) {
|
|
58
|
+
if (!isRecord(entry))
|
|
59
|
+
continue;
|
|
60
|
+
const file = str(entry.file) ?? str(entry.path);
|
|
61
|
+
const patch = str(entry.patch);
|
|
62
|
+
if (file)
|
|
63
|
+
out.push({ file, patch: patch ?? '' });
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** A tool's output is a list of content parts; only the text ones are useful. */
|
|
68
|
+
function outputOf(state) {
|
|
69
|
+
const content = state.content;
|
|
70
|
+
if (typeof content === 'string')
|
|
71
|
+
return content.trim() ? clip(content, MAX_OUTPUT) : null;
|
|
72
|
+
if (!Array.isArray(content))
|
|
73
|
+
return null;
|
|
74
|
+
const text = content
|
|
75
|
+
.map((entry) => (isRecord(entry) && entry.type === 'text' ? str(entry.text) : null))
|
|
76
|
+
.filter((value) => Boolean(value && value.trim()))
|
|
77
|
+
.join('\n');
|
|
78
|
+
return text.trim() ? clip(text, MAX_OUTPUT) : null;
|
|
79
|
+
}
|
|
80
|
+
function toolPart(raw, fallbackId) {
|
|
81
|
+
const name = str(raw.name) ?? 'tool';
|
|
82
|
+
const state = isRecord(raw.state) ? raw.state : {};
|
|
83
|
+
const input = isRecord(state.input) ? state.input : {};
|
|
84
|
+
const metadata = isRecord(state.metadata) ? state.metadata : {};
|
|
85
|
+
return {
|
|
86
|
+
kind: 'tool',
|
|
87
|
+
// A call without an id still gets a stable one, from where it sits in the turn.
|
|
88
|
+
id: str(raw.id) ?? fallbackId,
|
|
89
|
+
name,
|
|
90
|
+
status: statusOf(state),
|
|
91
|
+
summary: summarise(name, input),
|
|
92
|
+
files: filesOf(state),
|
|
93
|
+
output: outputOf(state),
|
|
94
|
+
exit: typeof metadata.exit === 'number' ? metadata.exit : null,
|
|
95
|
+
truncated: metadata.truncated === true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** The parts of one assistant message, in order, with the empty ones dropped. */
|
|
99
|
+
export function parseParts(message) {
|
|
100
|
+
const content = message.content;
|
|
101
|
+
if (!Array.isArray(content))
|
|
102
|
+
return [];
|
|
103
|
+
const parts = [];
|
|
104
|
+
for (const rawPart of content) {
|
|
105
|
+
if (!isRecord(rawPart))
|
|
106
|
+
continue;
|
|
107
|
+
const type = str(rawPart.type);
|
|
108
|
+
if (type === 'text') {
|
|
109
|
+
const text = str(rawPart.text);
|
|
110
|
+
if (text?.trim())
|
|
111
|
+
parts.push({ kind: 'text', text });
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (type === 'reasoning') {
|
|
115
|
+
const text = str(rawPart.text);
|
|
116
|
+
if (text?.trim())
|
|
117
|
+
parts.push({ kind: 'reasoning', text });
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (type === 'tool')
|
|
121
|
+
parts.push(toolPart(rawPart, `tool-${parts.length}`));
|
|
122
|
+
}
|
|
123
|
+
return parts;
|
|
124
|
+
}
|
|
125
|
+
const created = (message) => isRecord(message) && isRecord(message.time) && typeof message.time.created === 'number'
|
|
126
|
+
? message.time.created
|
|
127
|
+
: 0;
|
|
128
|
+
/**
|
|
129
|
+
* The conversation as turns. Consecutive assistant messages are one turn: a
|
|
130
|
+
* single prompt is answered over several steps, and the chat should read as one
|
|
131
|
+
* answer, not six.
|
|
132
|
+
*/
|
|
133
|
+
export function toTurns(messages) {
|
|
134
|
+
const turns = [];
|
|
135
|
+
const ordered = [...messages].sort((a, b) => created(a) - created(b));
|
|
136
|
+
for (const raw of ordered) {
|
|
137
|
+
if (!isRecord(raw))
|
|
138
|
+
continue;
|
|
139
|
+
if (raw.type === 'user') {
|
|
140
|
+
const text = str(raw.text);
|
|
141
|
+
if (text?.trim())
|
|
142
|
+
turns.push({ role: 'user', parts: [{ kind: 'text', text }] });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (raw.type !== 'assistant')
|
|
146
|
+
continue; // `idle` and anything else is not a turn
|
|
147
|
+
const parts = parseParts(raw);
|
|
148
|
+
if (!parts.length)
|
|
149
|
+
continue;
|
|
150
|
+
const last = turns.at(-1);
|
|
151
|
+
if (last?.role === 'assistant')
|
|
152
|
+
last.parts.push(...parts);
|
|
153
|
+
else
|
|
154
|
+
turns.push({ role: 'assistant', parts });
|
|
155
|
+
}
|
|
156
|
+
return turns;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../lib/parts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED