@corenel/web-ui 0.13.2 → 0.14.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.
- package/dist/Composer.d.ts +30 -1
- package/dist/Composer.d.ts.map +1 -1
- package/dist/Composer.js +111 -19
- package/dist/Composer.js.map +1 -1
- package/dist/ContextBar.d.ts +9 -3
- package/dist/ContextBar.d.ts.map +1 -1
- package/dist/ContextBar.js +14 -7
- package/dist/ContextBar.js.map +1 -1
- package/dist/ContextManager.d.ts +10 -2
- package/dist/ContextManager.d.ts.map +1 -1
- package/dist/ContextManager.js +14 -10
- package/dist/ContextManager.js.map +1 -1
- package/dist/DictateButton.d.ts +21 -1
- package/dist/DictateButton.d.ts.map +1 -1
- package/dist/DictateButton.js +73 -10
- package/dist/DictateButton.js.map +1 -1
- package/dist/PickChips.d.ts +6 -0
- package/dist/PickChips.d.ts.map +1 -0
- package/dist/PickChips.js +55 -0
- package/dist/PickChips.js.map +1 -0
- package/dist/ProcessDock.d.ts +10 -0
- package/dist/ProcessDock.d.ts.map +1 -1
- package/dist/ProcessDock.js +24 -1
- package/dist/ProcessDock.js.map +1 -1
- package/dist/RichContent.d.ts.map +1 -1
- package/dist/RichContent.js +102 -24
- package/dist/RichContent.js.map +1 -1
- package/dist/SummaryTranscript.d.ts +5 -1
- package/dist/SummaryTranscript.d.ts.map +1 -1
- package/dist/SummaryTranscript.js +5 -3
- package/dist/SummaryTranscript.js.map +1 -1
- package/dist/TodoBar.d.ts +2 -0
- package/dist/TodoBar.d.ts.map +1 -1
- package/dist/TodoBar.js +8 -0
- package/dist/TodoBar.js.map +1 -1
- package/dist/TodoLine.d.ts +11 -0
- package/dist/TodoLine.d.ts.map +1 -0
- package/dist/TodoLine.js +55 -0
- package/dist/TodoLine.js.map +1 -0
- package/dist/ToolFold.js +1 -1
- package/dist/ToolFold.js.map +1 -1
- package/dist/Transcript.d.ts +19 -1
- package/dist/Transcript.d.ts.map +1 -1
- package/dist/Transcript.js +127 -58
- package/dist/Transcript.js.map +1 -1
- package/dist/agentChat/AgentChat.d.ts +42 -0
- package/dist/agentChat/AgentChat.d.ts.map +1 -1
- package/dist/agentChat/AgentChat.js +573 -100
- package/dist/agentChat/AgentChat.js.map +1 -1
- package/dist/agentChat/ChatSettingsSheet.d.ts +9 -0
- package/dist/agentChat/ChatSettingsSheet.d.ts.map +1 -0
- package/dist/agentChat/ChatSettingsSheet.js +103 -0
- package/dist/agentChat/ChatSettingsSheet.js.map +1 -0
- package/dist/agentChat/OptionsDrawer.d.ts +8 -0
- package/dist/agentChat/OptionsDrawer.d.ts.map +1 -1
- package/dist/agentChat/OptionsDrawer.js +24 -215
- package/dist/agentChat/OptionsDrawer.js.map +1 -1
- package/dist/agentChat/PlanReview.d.ts +1 -1
- package/dist/agentChat/PlanReview.d.ts.map +1 -1
- package/dist/agentChat/PlanReview.js +1 -1
- package/dist/agentChat/PlanReview.js.map +1 -1
- package/dist/agentChat/SourceGroups.d.ts +24 -0
- package/dist/agentChat/SourceGroups.d.ts.map +1 -0
- package/dist/agentChat/SourceGroups.js +117 -0
- package/dist/agentChat/SourceGroups.js.map +1 -0
- package/dist/agentChat/controller.d.ts +30 -1
- package/dist/agentChat/controller.d.ts.map +1 -1
- package/dist/agentChat/controller.js.map +1 -1
- package/dist/agentChat/pendingQueue.d.ts +4 -0
- package/dist/agentChat/pendingQueue.d.ts.map +1 -1
- package/dist/agentChat/pendingQueue.js +7 -0
- package/dist/agentChat/pendingQueue.js.map +1 -1
- package/dist/agentChat/planTool.d.ts +4 -0
- package/dist/agentChat/planTool.d.ts.map +1 -0
- package/dist/agentChat/planTool.js +4 -0
- package/dist/agentChat/planTool.js.map +1 -0
- package/dist/agentChat/testSheetHost.d.ts +3 -0
- package/dist/agentChat/testSheetHost.d.ts.map +1 -0
- package/dist/agentChat/testSheetHost.js +9 -0
- package/dist/agentChat/testSheetHost.js.map +1 -0
- package/dist/agentChat/useChatOptions.d.ts +63 -0
- package/dist/agentChat/useChatOptions.d.ts.map +1 -0
- package/dist/agentChat/useChatOptions.js +156 -0
- package/dist/agentChat/useChatOptions.js.map +1 -0
- package/dist/chatRefreshContext.d.ts +8 -0
- package/dist/chatRefreshContext.d.ts.map +1 -0
- package/dist/chatRefreshContext.js +14 -0
- package/dist/chatRefreshContext.js.map +1 -0
- package/dist/chatSkinContext.d.ts +13 -6
- package/dist/chatSkinContext.d.ts.map +1 -1
- package/dist/chatSkinContext.js +18 -4
- package/dist/chatSkinContext.js.map +1 -1
- package/dist/chatSkinCss.d.ts.map +1 -1
- package/dist/chatSkinCss.js +108 -22
- package/dist/chatSkinCss.js.map +1 -1
- package/dist/composerAction.d.ts +16 -0
- package/dist/composerAction.d.ts.map +1 -0
- package/dist/composerAction.js +20 -0
- package/dist/composerAction.js.map +1 -0
- package/dist/composerHistory.d.ts.map +1 -1
- package/dist/composerHistory.js +4 -1
- package/dist/composerHistory.js.map +1 -1
- package/dist/fx/LiveAnswer.d.ts.map +1 -1
- package/dist/fx/LiveAnswer.js +324 -59
- package/dist/fx/LiveAnswer.js.map +1 -1
- package/dist/fx/arrivalModes.d.ts +17 -2
- package/dist/fx/arrivalModes.d.ts.map +1 -1
- package/dist/fx/arrivalModes.js +46 -4
- package/dist/fx/arrivalModes.js.map +1 -1
- package/dist/fx/pacer.d.ts +41 -0
- package/dist/fx/pacer.d.ts.map +1 -0
- package/dist/fx/pacer.js +66 -0
- package/dist/fx/pacer.js.map +1 -0
- package/dist/fx/useReveal.d.ts +16 -1
- package/dist/fx/useReveal.d.ts.map +1 -1
- package/dist/fx/useReveal.js +101 -41
- package/dist/fx/useReveal.js.map +1 -1
- package/dist/localAddress.d.ts +2 -0
- package/dist/localAddress.d.ts.map +1 -0
- package/dist/localAddress.js +56 -0
- package/dist/localAddress.js.map +1 -0
- package/dist/steps/AfterReply.d.ts +67 -0
- package/dist/steps/AfterReply.d.ts.map +1 -0
- package/dist/steps/AfterReply.js +217 -0
- package/dist/steps/AfterReply.js.map +1 -0
- package/dist/steps/ChatApproval.d.ts +18 -0
- package/dist/steps/ChatApproval.d.ts.map +1 -0
- package/dist/steps/ChatApproval.js +35 -0
- package/dist/steps/ChatApproval.js.map +1 -0
- package/dist/steps/Delegation.d.ts +77 -0
- package/dist/steps/Delegation.d.ts.map +1 -0
- package/dist/steps/Delegation.js +188 -0
- package/dist/steps/Delegation.js.map +1 -0
- package/dist/steps/LiveRail.d.ts +14 -0
- package/dist/steps/LiveRail.d.ts.map +1 -0
- package/dist/steps/LiveRail.js +16 -0
- package/dist/steps/LiveRail.js.map +1 -0
- package/dist/steps/StepDetail.d.ts +23 -0
- package/dist/steps/StepDetail.d.ts.map +1 -0
- package/dist/steps/StepDetail.js +195 -0
- package/dist/steps/StepDetail.js.map +1 -0
- package/dist/steps/StepDetailHost.d.ts +54 -0
- package/dist/steps/StepDetailHost.d.ts.map +1 -0
- package/dist/steps/StepDetailHost.js +175 -0
- package/dist/steps/StepDetailHost.js.map +1 -0
- package/dist/steps/StepRail.d.ts +38 -0
- package/dist/steps/StepRail.d.ts.map +1 -0
- package/dist/steps/StepRail.js +238 -0
- package/dist/steps/StepRail.js.map +1 -0
- package/dist/steps/approval.d.ts +73 -0
- package/dist/steps/approval.d.ts.map +1 -0
- package/dist/steps/approval.js +81 -0
- package/dist/steps/approval.js.map +1 -0
- package/dist/steps/model.d.ts +140 -0
- package/dist/steps/model.d.ts.map +1 -0
- package/dist/steps/model.js +433 -0
- package/dist/steps/model.js.map +1 -0
- package/dist/steps/outcome.d.ts +5 -0
- package/dist/steps/outcome.d.ts.map +1 -0
- package/dist/steps/outcome.js +34 -0
- package/dist/steps/outcome.js.map +1 -0
- package/dist/steps/peek.d.ts +35 -0
- package/dist/steps/peek.d.ts.map +1 -0
- package/dist/steps/peek.js +219 -0
- package/dist/steps/peek.js.map +1 -0
- package/dist/steps/plan.d.ts +50 -0
- package/dist/steps/plan.d.ts.map +1 -0
- package/dist/steps/plan.js +242 -0
- package/dist/steps/plan.js.map +1 -0
- package/dist/steps/useRailDetail.d.ts +25 -0
- package/dist/steps/useRailDetail.d.ts.map +1 -0
- package/dist/steps/useRailDetail.js +108 -0
- package/dist/steps/useRailDetail.js.map +1 -0
- package/dist/steps/words.d.ts +40 -0
- package/dist/steps/words.d.ts.map +1 -0
- package/dist/steps/words.js +247 -0
- package/dist/steps/words.js.map +1 -0
- package/dist/toolRender.d.ts +27 -1
- package/dist/toolRender.d.ts.map +1 -1
- package/dist/toolRender.js +72 -4
- package/dist/toolRender.js.map +1 -1
- package/dist/transcriptSkin.d.ts.map +1 -1
- package/dist/transcriptSkin.js +66 -0
- package/dist/transcriptSkin.js.map +1 -1
- package/dist/transcriptSkinCss.d.ts +35 -0
- package/dist/transcriptSkinCss.d.ts.map +1 -1
- package/dist/transcriptSkinCss.js +360 -19
- package/dist/transcriptSkinCss.js.map +1 -1
- package/dist/useHoldPress.d.ts +24 -0
- package/dist/useHoldPress.d.ts.map +1 -0
- package/dist/useHoldPress.js +85 -0
- package/dist/useHoldPress.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
import { isToolErrorResult } from '@corenel/harness/core/recovery';
|
|
2
|
+
import { stepWords } from './words';
|
|
3
|
+
import { stepOutcome } from './outcome';
|
|
4
|
+
import { parseCommandResult } from './peek';
|
|
5
|
+
import { nestPlan, planInForce, todosFromArgs, exploredStatus, countSteps, TODO_WRITE } from './plan';
|
|
6
|
+
const PEEK_KINDS = new Set(['run', 'write', 'edit']);
|
|
7
|
+
const EDIT_TOOL = 'propose_edit';
|
|
8
|
+
const COMPILE_ERRORS = '\n\nErrors:\n';
|
|
9
|
+
/* ---------------------------------------------------------------- helpers */
|
|
10
|
+
/** The tool message answering `toolCallId`, or undefined while none exists. */
|
|
11
|
+
export function findToolMsg(turn, toolCallId) {
|
|
12
|
+
return turn.messages.find((m) => m.role === 'tool' && m.tool_call_id === toolCallId);
|
|
13
|
+
}
|
|
14
|
+
/** Tool-call duration (ms), stitched onto the tool message by the panel from the
|
|
15
|
+
* run's tool-result event (`_ms`); undefined for older turns without timing. */
|
|
16
|
+
export function findMs(turn, toolCallId) {
|
|
17
|
+
const ms = findToolMsg(turn, toolCallId)?._ms;
|
|
18
|
+
return typeof ms === 'number' ? ms : undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Shadow injection check score, stitched onto the tool message by the runtime
|
|
21
|
+
* from the run's tool-check event (`_check`); undefined when none came back. */
|
|
22
|
+
const CHECK_OUTCOMES = new Set(['passed', 'asked-allowed', 'asked-blocked', 'blocked', 'failed-asked-allowed', 'failed-asked-blocked']);
|
|
23
|
+
export function checkOf(raw) {
|
|
24
|
+
const c = raw;
|
|
25
|
+
if (!c || typeof c !== 'object')
|
|
26
|
+
return undefined;
|
|
27
|
+
const outcome = typeof c.outcome === 'string' && CHECK_OUTCOMES.has(c.outcome) ? { outcome: c.outcome } : {};
|
|
28
|
+
if (c.failed === true)
|
|
29
|
+
return { failed: true, ...outcome };
|
|
30
|
+
if (typeof c.score !== 'number' || typeof c.cut !== 'boolean')
|
|
31
|
+
return undefined;
|
|
32
|
+
return { score: c.score, cut: c.cut, ...outcome };
|
|
33
|
+
}
|
|
34
|
+
const HOOK_ACTIONS = new Set(['note', 'ask', 'block']);
|
|
35
|
+
const HOOK_OUTCOMES = new Set(['noted', 'allowed', 'blocked']);
|
|
36
|
+
function hookMarkOf(raw) {
|
|
37
|
+
const m = raw;
|
|
38
|
+
if (!m || typeof m !== 'object' || typeof m.name !== 'string')
|
|
39
|
+
return undefined;
|
|
40
|
+
if (typeof m.action !== 'string' || !HOOK_ACTIONS.has(m.action))
|
|
41
|
+
return undefined;
|
|
42
|
+
if (typeof m.outcome !== 'string' || !HOOK_OUTCOMES.has(m.outcome))
|
|
43
|
+
return undefined;
|
|
44
|
+
return { name: m.name, action: m.action, outcome: m.outcome };
|
|
45
|
+
}
|
|
46
|
+
/** What the System One hooks did for a call, stitched onto the tool message by
|
|
47
|
+
* the engine (`_hooks`); undefined when none ran. Malformed marks are dropped. */
|
|
48
|
+
export function hooksOf(raw) {
|
|
49
|
+
const h = raw;
|
|
50
|
+
if (!h || typeof h !== 'object' || !Array.isArray(h.marks))
|
|
51
|
+
return undefined;
|
|
52
|
+
const marks = h.marks.map(hookMarkOf).filter((m) => m !== undefined);
|
|
53
|
+
return { marks, ...(h.off === true ? { off: true } : {}), ...(h.withheld === true ? { withheld: true } : {}) };
|
|
54
|
+
}
|
|
55
|
+
export function findHooks(turn, toolCallId) {
|
|
56
|
+
return hooksOf(findToolMsg(turn, toolCallId)?._hooks);
|
|
57
|
+
}
|
|
58
|
+
export function findCheck(turn, toolCallId) {
|
|
59
|
+
return checkOf(findToolMsg(turn, toolCallId)?._check);
|
|
60
|
+
}
|
|
61
|
+
/** Tool-call arguments as an object. Empty is {}; anything that is not a JSON
|
|
62
|
+
* object (malformed, an array, a number, null) is kept whole as `{ _raw }`. */
|
|
63
|
+
export function safeArgs(raw) {
|
|
64
|
+
if (typeof raw !== 'string' || !raw)
|
|
65
|
+
return {};
|
|
66
|
+
try {
|
|
67
|
+
const parsed = JSON.parse(raw);
|
|
68
|
+
if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed))
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
/* fall through */
|
|
73
|
+
}
|
|
74
|
+
return { _raw: raw };
|
|
75
|
+
}
|
|
76
|
+
function textOf(v) {
|
|
77
|
+
return typeof v === 'string' ? v : '';
|
|
78
|
+
}
|
|
79
|
+
/** How a finished call went, with the rules isToolErrorResult alone misses. */
|
|
80
|
+
function settledOutcome(name, kind, args, result, isError) {
|
|
81
|
+
const base = stepOutcome(result, isError);
|
|
82
|
+
if (base !== 'ok')
|
|
83
|
+
return base;
|
|
84
|
+
if (name === 'compile_prompd' && result.includes(COMPILE_ERRORS))
|
|
85
|
+
return 'failed';
|
|
86
|
+
if (kind === 'run') {
|
|
87
|
+
// C6: a command that timed out or exited non-zero failed, whatever its text says.
|
|
88
|
+
const r = parseCommandResult(name, args, result);
|
|
89
|
+
if (r.timedOut || (r.exit !== null && r.exit !== 0))
|
|
90
|
+
return 'failed';
|
|
91
|
+
if (name === 'sidecar_run_check' && runCheckRefused(result))
|
|
92
|
+
return 'failed';
|
|
93
|
+
}
|
|
94
|
+
return 'ok';
|
|
95
|
+
}
|
|
96
|
+
/** sidecar_run_check answers `{ ok: false, error }` when the check could not run. */
|
|
97
|
+
function runCheckRefused(result) {
|
|
98
|
+
if (!result.trimStart().startsWith('{'))
|
|
99
|
+
return false;
|
|
100
|
+
try {
|
|
101
|
+
const o = JSON.parse(result);
|
|
102
|
+
return !!o && typeof o === 'object' && o.ok === false;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function build(id, name, args, result, ms, status, outcome) {
|
|
109
|
+
const step = { id, name, args, result, status, outcome, words: stepWords(name, args, status === 'running') };
|
|
110
|
+
if (ms !== undefined)
|
|
111
|
+
step.ms = ms;
|
|
112
|
+
return step;
|
|
113
|
+
}
|
|
114
|
+
/* ---------------------------------------------------------------- steps */
|
|
115
|
+
export function stepFromCall(call, toolMsg, live) {
|
|
116
|
+
const fn = call && typeof call === 'object' ? call.function : undefined;
|
|
117
|
+
const id = textOf(call?.id);
|
|
118
|
+
const name = textOf(fn?.name);
|
|
119
|
+
const args = safeArgs(fn?.arguments);
|
|
120
|
+
const ms = typeof toolMsg?._ms === 'number' ? toolMsg._ms : undefined;
|
|
121
|
+
if (!toolMsg) {
|
|
122
|
+
// Review Focus 1: a settled call with no result was stopped (the run was
|
|
123
|
+
// stopped, or the page reloaded mid-run). It never reads done or running.
|
|
124
|
+
return build(id, name, args, '', ms, live ? 'running' : 'stopped', 'ok');
|
|
125
|
+
}
|
|
126
|
+
const result = textOf(toolMsg.content);
|
|
127
|
+
const kind = stepWords(name, args, false).kind;
|
|
128
|
+
const outcome = settledOutcome(name, kind, args, result, false);
|
|
129
|
+
const step = build(id, name, args, result, ms, outcome === 'ok' ? 'done' : 'failed', outcome);
|
|
130
|
+
if (toolMsg._check)
|
|
131
|
+
step.check = toolMsg._check;
|
|
132
|
+
if (toolMsg._hooks)
|
|
133
|
+
step.hooks = toolMsg._hooks;
|
|
134
|
+
if (id)
|
|
135
|
+
step.callId = id;
|
|
136
|
+
return step;
|
|
137
|
+
}
|
|
138
|
+
export function stepFromLive(t) {
|
|
139
|
+
const id = textOf(t?.id);
|
|
140
|
+
const name = textOf(t?.name);
|
|
141
|
+
const args = t?.args && typeof t.args === 'object' && !Array.isArray(t.args) ? t.args : {};
|
|
142
|
+
const ms = typeof t?.ms === 'number' ? t.ms : undefined;
|
|
143
|
+
if (!t?.done) {
|
|
144
|
+
const step = build(id, name, args, '', ms, 'running', 'ok');
|
|
145
|
+
if (typeof t?.partial === 'string' && t.partial)
|
|
146
|
+
step.partial = t.partial;
|
|
147
|
+
return step;
|
|
148
|
+
}
|
|
149
|
+
const result = textOf(t.result);
|
|
150
|
+
const kind = stepWords(name, args, false).kind;
|
|
151
|
+
const outcome = settledOutcome(name, kind, args, result, !!t.isError);
|
|
152
|
+
return build(id, name, args, result, ms, outcome === 'ok' ? 'done' : 'failed', outcome);
|
|
153
|
+
}
|
|
154
|
+
/** propose_edit's status: the recorded verdict, else the verdict its own result
|
|
155
|
+
* reports (harness/tools/builtins.ts writes these), else it waits for you. */
|
|
156
|
+
function editStatus(step, callId, hasResult, live, decided) {
|
|
157
|
+
const d = decided?.(callId);
|
|
158
|
+
if (d === 'applied' || d === 'partial')
|
|
159
|
+
return 'done';
|
|
160
|
+
if (d === 'rejected')
|
|
161
|
+
return 'stopped';
|
|
162
|
+
if (!hasResult)
|
|
163
|
+
return live ? 'needs-you' : 'stopped';
|
|
164
|
+
const text = step.result.trimStart();
|
|
165
|
+
if (text.startsWith('The user APPLIED') || text.startsWith('The user PARTIALLY'))
|
|
166
|
+
return 'done';
|
|
167
|
+
if (text.startsWith('The user REJECTED') || text.startsWith('The run ended before the user reviewed'))
|
|
168
|
+
return 'stopped';
|
|
169
|
+
if (step.status === 'failed' || text.startsWith('Cannot propose an edit') || text.startsWith('This proposal does NOT compile'))
|
|
170
|
+
return 'failed';
|
|
171
|
+
return 'needs-you';
|
|
172
|
+
}
|
|
173
|
+
/** A segment's entries as rail items: consecutive quiet steps fold into Explored.
|
|
174
|
+
* Keys here are provisional; finishSegment passes every one through the turn's keyer. */
|
|
175
|
+
function segmentItems(entries, opts) {
|
|
176
|
+
const items = [];
|
|
177
|
+
let quiet = [];
|
|
178
|
+
const flush = () => {
|
|
179
|
+
if (quiet.length >= 2) {
|
|
180
|
+
items.push({ kind: 'explored', key: `x:${quiet[0].id}`, steps: quiet, status: exploredStatus(quiet), open: opts.view === 'expanded' });
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
for (const s of quiet)
|
|
184
|
+
items.push({ kind: 'step', step: s, peek: false });
|
|
185
|
+
}
|
|
186
|
+
quiet = [];
|
|
187
|
+
};
|
|
188
|
+
for (const e of entries) {
|
|
189
|
+
if (e.custom) {
|
|
190
|
+
flush();
|
|
191
|
+
items.push({ kind: 'custom', key: e.step.id, status: e.step.status, node: e.custom.node, callId: e.step.id });
|
|
192
|
+
}
|
|
193
|
+
else if (e.step.words.quiet) {
|
|
194
|
+
quiet.push(e.step);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
flush();
|
|
198
|
+
items.push({ kind: 'step', step: e.step, peek: PEEK_KINDS.has(e.step.words.kind) });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
flush();
|
|
202
|
+
return items;
|
|
203
|
+
}
|
|
204
|
+
/** In a settled turn under `normal`, only the turn's last step item keeps its peek. */
|
|
205
|
+
function foldPeeks(blocks) {
|
|
206
|
+
let lastStep = null;
|
|
207
|
+
const find = (items) => {
|
|
208
|
+
for (const item of items) {
|
|
209
|
+
if (item.kind === 'step')
|
|
210
|
+
lastStep = item;
|
|
211
|
+
else if (item.kind === 'task')
|
|
212
|
+
find(item.items);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
const fold = (items) => items.map((item) => {
|
|
216
|
+
if (item.kind === 'task')
|
|
217
|
+
return { ...item, items: fold(item.items) };
|
|
218
|
+
return item.kind === 'step' && item !== lastStep && item.peek ? { ...item, peek: false } : item;
|
|
219
|
+
});
|
|
220
|
+
for (const b of blocks)
|
|
221
|
+
if (b.kind === 'rail')
|
|
222
|
+
find(b.items);
|
|
223
|
+
for (const b of blocks)
|
|
224
|
+
if (b.kind === 'rail')
|
|
225
|
+
b.items = fold(b.items);
|
|
226
|
+
}
|
|
227
|
+
/** Every item key through the turn's keyer, so no two siblings share one even
|
|
228
|
+
* when a provider reuses call ids or a task heads several segments. */
|
|
229
|
+
function rekey(items, key) {
|
|
230
|
+
return items.map((item) => {
|
|
231
|
+
if (item.kind === 'step')
|
|
232
|
+
return item;
|
|
233
|
+
if (item.kind === 'task')
|
|
234
|
+
return { ...item, key: key(item.key), items: rekey(item.items, key) };
|
|
235
|
+
return { ...item, key: key(item.key) };
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/** A segment's rail items, nested under the plan when one is in force (C10: then
|
|
239
|
+
* no todo_write is a step). Empty when nothing is left to show. */
|
|
240
|
+
function finishSegment(entries, track, opts, upcoming, key, extra = []) {
|
|
241
|
+
if (!planInForce(opts.planStart ?? [], track.writes))
|
|
242
|
+
return rekey([...segmentItems(entries, opts), ...extra], key);
|
|
243
|
+
const shown = entries.filter((e) => e.step.name !== TODO_WRITE);
|
|
244
|
+
const items = nestPlan([...segmentItems(shown, opts), ...extra], track.ids, track.writes, opts.planStart ?? [], upcoming);
|
|
245
|
+
return rekey(items, key);
|
|
246
|
+
}
|
|
247
|
+
function hidden(name, opts) {
|
|
248
|
+
return !!opts.hideTools?.includes(name);
|
|
249
|
+
}
|
|
250
|
+
/** Unique, stable keys: a duplicated or missing call id must not collide. */
|
|
251
|
+
function keyer() {
|
|
252
|
+
const used = new Set();
|
|
253
|
+
return (base) => {
|
|
254
|
+
let k = base;
|
|
255
|
+
for (let n = 1; used.has(k); n++)
|
|
256
|
+
k = `${base}#${n}`;
|
|
257
|
+
used.add(k);
|
|
258
|
+
return k;
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/** The tool message answering the call at messages[from], searched after it, so
|
|
262
|
+
* a provider that reuses call ids per message ("0", "1") pairs each call with its
|
|
263
|
+
* own result rather than the first one with that id. */
|
|
264
|
+
function toolMsgAfter(turn, toolCallId, from) {
|
|
265
|
+
const messages = turn.messages;
|
|
266
|
+
for (let j = from + 1; j < messages.length; j++) {
|
|
267
|
+
const m = messages[j];
|
|
268
|
+
// A call's result comes before the next assistant message. Past it, a match
|
|
269
|
+
// is a later call reusing the id, and an unanswered call must stay stopped.
|
|
270
|
+
if (m && m.role === 'assistant')
|
|
271
|
+
break;
|
|
272
|
+
if (m && m.role === 'tool' && m.tool_call_id === toolCallId)
|
|
273
|
+
return m;
|
|
274
|
+
}
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
export function turnBlocks(turn, opts) {
|
|
278
|
+
const blocks = [];
|
|
279
|
+
const key = keyer();
|
|
280
|
+
// Step ids are unique within the turn: a reused call id gets a suffix. Hosts
|
|
281
|
+
// (custom, decided) are still asked about the id the provider sent.
|
|
282
|
+
const ids = keyer();
|
|
283
|
+
const track = { ids: [], writes: [] };
|
|
284
|
+
const segments = [];
|
|
285
|
+
let entries = [];
|
|
286
|
+
const flush = () => {
|
|
287
|
+
if (!entries.length)
|
|
288
|
+
return;
|
|
289
|
+
const block = { kind: 'rail', key: key(`r:${entries[0].step.id}`), items: [] };
|
|
290
|
+
blocks.push(block);
|
|
291
|
+
segments.push({ block, entries });
|
|
292
|
+
entries = [];
|
|
293
|
+
};
|
|
294
|
+
const messages = Array.isArray(turn?.messages) ? turn.messages : [];
|
|
295
|
+
messages.forEach((m, i) => {
|
|
296
|
+
if (!m || typeof m !== 'object')
|
|
297
|
+
return;
|
|
298
|
+
if (m.role === 'user') {
|
|
299
|
+
flush();
|
|
300
|
+
blocks.push({ kind: 'user', key: key(`u${i}`), index: i });
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (m.role !== 'assistant')
|
|
304
|
+
return;
|
|
305
|
+
// Whitespace alone ("\n" between tool calls) is not an answer and must not split the rail.
|
|
306
|
+
if (typeof m.content === 'string' && m.content.trim()) {
|
|
307
|
+
flush();
|
|
308
|
+
blocks.push({ kind: 'text', key: key(`t${i}`), text: m.content, last: false });
|
|
309
|
+
}
|
|
310
|
+
const calls = Array.isArray(m.tool_calls) ? m.tool_calls : [];
|
|
311
|
+
calls.forEach((c, n) => {
|
|
312
|
+
const name = textOf(c?.function?.name);
|
|
313
|
+
const callId = textOf(c?.id);
|
|
314
|
+
const uid = ids(callId || `call-${i}-${n}`);
|
|
315
|
+
// A hidden todo_write still changes the plan.
|
|
316
|
+
if (name === TODO_WRITE)
|
|
317
|
+
track.writes.push({ callId: uid, todos: todosFromArgs(c?.function?.arguments) });
|
|
318
|
+
if (hidden(name, opts)) {
|
|
319
|
+
if (name === TODO_WRITE)
|
|
320
|
+
track.ids.push(uid);
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
track.ids.push(uid);
|
|
324
|
+
const msg = callId ? toolMsgAfter(turn, callId, i) : undefined;
|
|
325
|
+
const step = stepFromCall(c, msg ? { content: textOf(msg.content), _ms: typeof msg._ms === 'number' ? msg._ms : undefined, _check: checkOf(msg._check), _hooks: hooksOf(msg._hooks) } : undefined, opts.live);
|
|
326
|
+
step.id = uid;
|
|
327
|
+
const hostId = callId || uid;
|
|
328
|
+
if (name === EDIT_TOOL)
|
|
329
|
+
step.status = editStatus(step, hostId, !!msg, opts.live, opts.decided);
|
|
330
|
+
const result = msg ? { text: step.result, isError: isToolErrorResult(step.result) } : undefined;
|
|
331
|
+
const node = opts.custom?.(hostId, name, textOf(c?.function?.arguments), result) ?? null;
|
|
332
|
+
entries.push({ step, custom: node !== null || name === EDIT_TOOL ? { node } : null });
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
flush();
|
|
336
|
+
segments.forEach((seg, n) => {
|
|
337
|
+
seg.block.items = finishSegment(seg.entries, track, opts, !!opts.showUpcoming && n === segments.length - 1, key);
|
|
338
|
+
});
|
|
339
|
+
// A segment that held only todo_write headings has nothing left to show.
|
|
340
|
+
const out = blocks.filter((b) => b.kind !== 'rail' || b.items.length > 0);
|
|
341
|
+
for (let i = out.length - 1; i >= 0; i--) {
|
|
342
|
+
const b = out[i];
|
|
343
|
+
if (b.kind === 'text') {
|
|
344
|
+
b.last = true;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (!opts.live && opts.view === 'normal')
|
|
349
|
+
foldPeeks(out);
|
|
350
|
+
return out;
|
|
351
|
+
}
|
|
352
|
+
const ARGS_JSON = new WeakMap();
|
|
353
|
+
/** A live tool's arguments as the JSON string a card is handed. Cached per
|
|
354
|
+
* arguments object: the live fold keeps a tool's `args` by reference while its
|
|
355
|
+
* output streams, so a long write is not stringified again on every delta. */
|
|
356
|
+
export function argsJson(args) {
|
|
357
|
+
if (!args || typeof args !== 'object')
|
|
358
|
+
return '{}';
|
|
359
|
+
const have = ARGS_JSON.get(args);
|
|
360
|
+
if (have !== undefined)
|
|
361
|
+
return have;
|
|
362
|
+
let raw = '';
|
|
363
|
+
try {
|
|
364
|
+
raw = JSON.stringify(args);
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
raw = '';
|
|
368
|
+
}
|
|
369
|
+
ARGS_JSON.set(args, raw);
|
|
370
|
+
return raw;
|
|
371
|
+
}
|
|
372
|
+
export function liveBlocks(tools, opts) {
|
|
373
|
+
const key = keyer();
|
|
374
|
+
const ids = keyer();
|
|
375
|
+
const track = { ids: [], writes: [] };
|
|
376
|
+
const entries = [];
|
|
377
|
+
(Array.isArray(tools) ? tools : []).forEach((t, n) => {
|
|
378
|
+
if (!t || typeof t !== 'object')
|
|
379
|
+
return;
|
|
380
|
+
const name = textOf(t.name);
|
|
381
|
+
const callId = textOf(t.id);
|
|
382
|
+
const uid = ids(callId || `live-${n}`);
|
|
383
|
+
if (name === TODO_WRITE)
|
|
384
|
+
track.writes.push({ callId: uid, todos: todosFromArgs(t.args) });
|
|
385
|
+
if (hidden(name, opts)) {
|
|
386
|
+
if (name === TODO_WRITE)
|
|
387
|
+
track.ids.push(uid);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
track.ids.push(uid);
|
|
391
|
+
const step = stepFromLive(t);
|
|
392
|
+
step.id = uid;
|
|
393
|
+
const hostId = callId || uid;
|
|
394
|
+
if (name === EDIT_TOOL)
|
|
395
|
+
step.status = editStatus(step, hostId, !!t.done, true, opts.decided);
|
|
396
|
+
const result = t.done ? { text: step.result, isError: !!t.isError || isToolErrorResult(step.result) } : undefined;
|
|
397
|
+
const node = opts.custom?.(hostId, name, argsJson(t.args), result) ?? null;
|
|
398
|
+
entries.push({ step, custom: node !== null || name === EDIT_TOOL ? { node } : null });
|
|
399
|
+
});
|
|
400
|
+
// The live run keeps every peek.
|
|
401
|
+
const extra = opts.approval != null ? [{ kind: 'approval', key: 'approval', node: opts.approval }] : [];
|
|
402
|
+
const items = finishSegment(entries, track, opts, !!opts.showUpcoming, key, extra);
|
|
403
|
+
return items.length ? [{ kind: 'rail', key: 'r:live', items }] : [];
|
|
404
|
+
}
|
|
405
|
+
/* ---------------------------------------------------------------- labels */
|
|
406
|
+
function plural(n, one, many) {
|
|
407
|
+
return n === 0 ? '' : `${n} ${n === 1 ? one : many}`;
|
|
408
|
+
}
|
|
409
|
+
/** "4 files, 2 searches, 1 folder" */
|
|
410
|
+
export function exploredLabel(steps) {
|
|
411
|
+
let files = 0;
|
|
412
|
+
let searches = 0;
|
|
413
|
+
let folders = 0;
|
|
414
|
+
for (const s of steps) {
|
|
415
|
+
if (s.words.kind === 'read')
|
|
416
|
+
files++;
|
|
417
|
+
else if (s.words.kind === 'search')
|
|
418
|
+
searches++;
|
|
419
|
+
else if (s.words.kind === 'list')
|
|
420
|
+
folders++;
|
|
421
|
+
}
|
|
422
|
+
return [plural(files, 'file', 'files'), plural(searches, 'search', 'searches'), plural(folders, 'folder', 'folders')]
|
|
423
|
+
.filter(Boolean).join(', ');
|
|
424
|
+
}
|
|
425
|
+
/** Every step, including those inside Explored groups and tasks; a custom card is one. */
|
|
426
|
+
export function stepCount(blocks) {
|
|
427
|
+
let n = 0;
|
|
428
|
+
for (const b of blocks)
|
|
429
|
+
if (b.kind === 'rail')
|
|
430
|
+
n += countSteps(b.items);
|
|
431
|
+
return n;
|
|
432
|
+
}
|
|
433
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../steps/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type StepOutcome = 'ok' | 'failed' | 'refused';
|
|
2
|
+
export declare function stepOutcome(result: string, isError: boolean): StepOutcome;
|
|
3
|
+
/** The first non-empty line, trimmed. Walks lines lazily so a huge result is not split whole. */
|
|
4
|
+
export declare function firstLine(text: string): string;
|
|
5
|
+
//# sourceMappingURL=outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../steps/outcome.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAWtD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,WAAW,CAKzE;AAED,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW9C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { isToolErrorResult } from '@corenel/harness/core/recovery';
|
|
2
|
+
const REFUSED = [
|
|
3
|
+
/^permission denied\b/i,
|
|
4
|
+
/^Blocked by the agent's rules\./,
|
|
5
|
+
/^Your call to \S+ was blocked/,
|
|
6
|
+
/^Refused:/,
|
|
7
|
+
/^(Error: )?Blocked by policy/,
|
|
8
|
+
/^Blocked: the ".+" check stopped this tool (call|result)/,
|
|
9
|
+
];
|
|
10
|
+
export function stepOutcome(result, isError) {
|
|
11
|
+
const text = typeof result === 'string' ? result.trimStart() : '';
|
|
12
|
+
if (REFUSED.some((re) => re.test(text)))
|
|
13
|
+
return 'refused';
|
|
14
|
+
if (isError || isToolErrorResult(text))
|
|
15
|
+
return 'failed';
|
|
16
|
+
return 'ok';
|
|
17
|
+
}
|
|
18
|
+
/** The first non-empty line, trimmed. Walks lines lazily so a huge result is not split whole. */
|
|
19
|
+
export function firstLine(text) {
|
|
20
|
+
if (typeof text !== 'string')
|
|
21
|
+
return '';
|
|
22
|
+
let start = 0;
|
|
23
|
+
while (start < text.length) {
|
|
24
|
+
let end = text.indexOf('\n', start);
|
|
25
|
+
if (end === -1)
|
|
26
|
+
end = text.length;
|
|
27
|
+
const line = text.slice(start, end).trim();
|
|
28
|
+
if (line)
|
|
29
|
+
return line;
|
|
30
|
+
start = end + 1;
|
|
31
|
+
}
|
|
32
|
+
return '';
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../steps/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAgBnE,MAAM,OAAO,GAAsB;IACjC,uBAAuB;IACvB,iCAAiC;IACjC,+BAA+B;IAC/B,WAAW;IACX,8BAA8B;IAC9B,0DAA0D;CAC3D,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAgB;IAC1D,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,IAAI,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface CommandResult {
|
|
2
|
+
exit: number | null;
|
|
3
|
+
timedOut: boolean;
|
|
4
|
+
body: string;
|
|
5
|
+
ms?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface PeekLine {
|
|
8
|
+
text: string;
|
|
9
|
+
tone: 'bad' | 'ok' | 'plain' | 'add' | 'del';
|
|
10
|
+
n?: number;
|
|
11
|
+
}
|
|
12
|
+
/** How many trailing characters a tail or a count scan will look at. */
|
|
13
|
+
export declare const TAIL_WINDOW = 8000;
|
|
14
|
+
/** The detail view renders at most this many lines; Copy output still copies all. */
|
|
15
|
+
export declare const DETAIL_LINE_CAP = 2000;
|
|
16
|
+
export declare function parseCommandResult(name: string, args: Record<string, unknown>, result: string): CommandResult;
|
|
17
|
+
/** A line's tone by the peek rules: error words red, pass marks green. */
|
|
18
|
+
export declare function lineTone(line: string): 'bad' | 'ok' | 'plain';
|
|
19
|
+
/** The last `count` non-empty lines. Reads at most the final TAIL_WINDOW characters. */
|
|
20
|
+
export declare function tailLines(body: string, count: number): PeekLine[];
|
|
21
|
+
export declare function commandMeta(r: CommandResult): {
|
|
22
|
+
text: string;
|
|
23
|
+
tone: 'bad' | 'ok' | 'plain';
|
|
24
|
+
};
|
|
25
|
+
/** The line count and first `count` lines of a write. Never diffs: there is no old text to compare with. */
|
|
26
|
+
export declare function writePeek(args: Record<string, unknown>, count: number): {
|
|
27
|
+
added: number;
|
|
28
|
+
lines: PeekLine[];
|
|
29
|
+
} | null;
|
|
30
|
+
/** The first `cap` lines of `text`, and how many more there are. */
|
|
31
|
+
export declare function capLines(text: string, cap: number): {
|
|
32
|
+
shown: string;
|
|
33
|
+
more: number;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=peek.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peek.d.ts","sourceRoot":"","sources":["../../steps/peek.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;IAC7C,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,wEAAwE;AACxE,eAAO,MAAM,WAAW,OAAO,CAAC;AAChC,qFAAqF;AACrF,eAAO,MAAM,eAAe,OAAO,CAAC;AA+DpC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAmD7G;AAED,0EAA0E;AAC1E,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAI7D;AAED,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE,CAejE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAA;CAAE,CAU5F;AAsBD,4GAA4G;AAC5G,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,IAAI,CAgBnH;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAKnF"}
|