@botiverse/oar 0.52.0 → 0.54.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/README.md +23 -10
- package/dist/contracts/failure.d.ts +1 -1
- package/dist/contracts/install.d.ts +11 -1
- package/dist/contracts/install.d.ts.map +1 -1
- package/dist/contracts/records.d.ts +25 -4
- package/dist/contracts/records.d.ts.map +1 -1
- package/dist/contracts/session.d.ts +4 -3
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/contracts/status.d.ts +20 -2
- package/dist/contracts/status.d.ts.map +1 -1
- package/dist/contracts/tasks.d.ts +6 -5
- package/dist/contracts/tasks.d.ts.map +1 -1
- package/dist/observe/agent-status.d.ts +7 -5
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +71 -12
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/conversation.d.ts +6 -0
- package/dist/observe/conversation.d.ts.map +1 -1
- package/dist/observe/conversation.js +8 -1
- package/dist/observe/conversation.js.map +1 -1
- package/dist/observe/display-text.d.ts +9 -2
- package/dist/observe/display-text.d.ts.map +1 -1
- package/dist/observe/display-text.js +22 -3
- package/dist/observe/display-text.js.map +1 -1
- package/dist/observe/graph.d.ts +14 -0
- package/dist/observe/graph.d.ts.map +1 -0
- package/dist/observe/graph.js +40 -0
- package/dist/observe/graph.js.map +1 -0
- package/dist/observe/index.d.ts +1 -0
- package/dist/observe/index.d.ts.map +1 -1
- package/dist/observe/index.js +1 -0
- package/dist/observe/index.js.map +1 -1
- package/dist/observe/input-delivery.d.ts.map +1 -1
- package/dist/observe/input-delivery.js +8 -2
- package/dist/observe/input-delivery.js.map +1 -1
- package/dist/observe/session-view-events.d.ts +1 -1
- package/dist/observe/session-view-events.d.ts.map +1 -1
- package/dist/observe/session-view-events.js +11 -16
- package/dist/observe/session-view-events.js.map +1 -1
- package/dist/observe/session-view-fold.d.ts +5 -4
- package/dist/observe/session-view-fold.d.ts.map +1 -1
- package/dist/observe/session-view-fold.js +9 -6
- package/dist/observe/session-view-fold.js.map +1 -1
- package/dist/observe/session-view-inputs.d.ts +7 -1
- package/dist/observe/session-view-inputs.d.ts.map +1 -1
- package/dist/observe/session-view-inputs.js +37 -1
- package/dist/observe/session-view-inputs.js.map +1 -1
- package/dist/observe/session-view.d.ts +11 -6
- package/dist/observe/session-view.d.ts.map +1 -1
- package/dist/observe/session-view.js +10 -6
- package/dist/observe/session-view.js.map +1 -1
- package/dist/observe/tool-activity.d.ts +7 -3
- package/dist/observe/tool-activity.d.ts.map +1 -1
- package/dist/observe/tool-activity.js +29 -70
- package/dist/observe/tool-activity.js.map +1 -1
- package/dist/observe/tool-groups.d.ts.map +1 -1
- package/dist/observe/tool-groups.js +6 -1
- package/dist/observe/tool-groups.js.map +1 -1
- package/dist/observe/tool-paths.d.ts +3 -0
- package/dist/observe/tool-paths.d.ts.map +1 -0
- package/dist/observe/tool-paths.js +53 -0
- package/dist/observe/tool-paths.js.map +1 -0
- package/dist/observe/turns.d.ts +21 -12
- package/dist/observe/turns.d.ts.map +1 -1
- package/dist/observe/turns.js +61 -39
- package/dist/observe/turns.js.map +1 -1
- package/dist/observe/usage-totals.d.ts +27 -0
- package/dist/observe/usage-totals.d.ts.map +1 -0
- package/dist/observe/usage-totals.js +64 -0
- package/dist/observe/usage-totals.js.map +1 -0
- package/dist/observe/usage.d.ts +3 -17
- package/dist/observe/usage.d.ts.map +1 -1
- package/dist/observe/usage.js +14 -69
- package/dist/observe/usage.js.map +1 -1
- package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
- package/dist/runtimes/claude/account-usage.js +3 -2
- package/dist/runtimes/claude/account-usage.js.map +1 -1
- package/dist/runtimes/claude/auth-status.d.ts +0 -1
- package/dist/runtimes/claude/auth-status.d.ts.map +1 -1
- package/dist/runtimes/claude/auth-status.js +1 -4
- package/dist/runtimes/claude/auth-status.js.map +1 -1
- package/dist/runtimes/claude/content.d.ts +1 -0
- package/dist/runtimes/claude/content.d.ts.map +1 -1
- package/dist/runtimes/claude/content.js +20 -0
- package/dist/runtimes/claude/content.js.map +1 -1
- package/dist/runtimes/claude/environment.d.ts +22 -0
- package/dist/runtimes/claude/environment.d.ts.map +1 -0
- package/dist/runtimes/claude/environment.js +44 -0
- package/dist/runtimes/claude/environment.js.map +1 -0
- package/dist/runtimes/claude/input-lifecycle.d.ts +19 -0
- package/dist/runtimes/claude/input-lifecycle.d.ts.map +1 -0
- package/dist/runtimes/claude/input-lifecycle.js +68 -0
- package/dist/runtimes/claude/input-lifecycle.js.map +1 -0
- package/dist/runtimes/claude/inventory.d.ts.map +1 -1
- package/dist/runtimes/claude/inventory.js +2 -1
- package/dist/runtimes/claude/inventory.js.map +1 -1
- package/dist/runtimes/claude/launch.d.ts.map +1 -1
- package/dist/runtimes/claude/launch.js +4 -1
- package/dist/runtimes/claude/launch.js.map +1 -1
- package/dist/runtimes/claude/list-models.d.ts.map +1 -1
- package/dist/runtimes/claude/list-models.js +2 -1
- package/dist/runtimes/claude/list-models.js.map +1 -1
- package/dist/runtimes/claude/login.d.ts.map +1 -1
- package/dist/runtimes/claude/login.js +2 -1
- package/dist/runtimes/claude/login.js.map +1 -1
- package/dist/runtimes/claude/logout.d.ts.map +1 -1
- package/dist/runtimes/claude/logout.js +2 -1
- package/dist/runtimes/claude/logout.js.map +1 -1
- package/dist/runtimes/claude/projection.d.ts +20 -6
- package/dist/runtimes/claude/projection.d.ts.map +1 -1
- package/dist/runtimes/claude/projection.js +31 -30
- package/dist/runtimes/claude/projection.js.map +1 -1
- package/dist/runtimes/claude/session.d.ts.map +1 -1
- package/dist/runtimes/claude/session.js +55 -41
- package/dist/runtimes/claude/session.js.map +1 -1
- package/dist/runtimes/claude/tasks.d.ts +5 -2
- package/dist/runtimes/claude/tasks.d.ts.map +1 -1
- package/dist/runtimes/claude/tasks.js +22 -4
- package/dist/runtimes/claude/tasks.js.map +1 -1
- package/dist/runtimes/claude/update.d.ts.map +1 -1
- package/dist/runtimes/claude/update.js +3 -1
- package/dist/runtimes/claude/update.js.map +1 -1
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +2 -5
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/pi/catalog.d.ts.map +1 -1
- package/dist/runtimes/pi/catalog.js +16 -3
- package/dist/runtimes/pi/catalog.js.map +1 -1
- package/dist/shared/acp/records.d.ts.map +1 -1
- package/dist/shared/acp/records.js +6 -17
- package/dist/shared/acp/records.js.map +1 -1
- package/dist/shared/install.d.ts +2 -0
- package/dist/shared/install.d.ts.map +1 -1
- package/dist/shared/install.js +6 -3
- package/dist/shared/install.js.map +1 -1
- package/dist/shared/session-kernel.d.ts +6 -6
- package/dist/shared/session-kernel.d.ts.map +1 -1
- package/dist/shared/session-kernel.js +6 -19
- package/dist/shared/session-kernel.js.map +1 -1
- package/dist/shared/update.d.ts +2 -0
- package/dist/shared/update.d.ts.map +1 -1
- package/dist/shared/update.js +1 -1
- package/dist/shared/update.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { awaitsEcho } from "./input-delivery.js";
|
|
2
|
+
import { removeEmptyTurn, sealTurn } from "./session-view-fold.js";
|
|
2
3
|
/**
|
|
3
4
|
* Where a user input enters the session view: the INPUT rule in the
|
|
4
5
|
* `session-view.ts` header (issue #82), applied per input update.
|
|
@@ -76,4 +77,39 @@ function removeInput(draft, index) {
|
|
|
76
77
|
draft.turn = null;
|
|
77
78
|
}
|
|
78
79
|
}
|
|
80
|
+
/** Queue evidence arms attribution; only an actual conflicting turn defers a placed input. */
|
|
81
|
+
export function foldInputUpdate(draft, input, conversation) {
|
|
82
|
+
if (input.state === "dropped") {
|
|
83
|
+
const request = input.attempts.at(-1)?.request;
|
|
84
|
+
if (request?.body.kind === "prompt") {
|
|
85
|
+
removeEmptyTurn(draft, request.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const wait = awaitsEcho(input, conversation);
|
|
89
|
+
upsertInput(draft, input, input.turn?.state === "queued" ? wait && draft.pendingInputs.some((pending) => pending.id === input.id) : wait);
|
|
90
|
+
}
|
|
91
|
+
/** Split a provisional prompt only when native activity actually belongs to another turn. */
|
|
92
|
+
export function deferWaitingInputs(draft, event, conversation) {
|
|
93
|
+
if (event.kind !== "turn_active" || event.sessionId !== draft.rootSessionId || event.agentPath.length > 0) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const input of conversation.inputs.values()) {
|
|
97
|
+
const request = input.attempts.at(-1)?.request;
|
|
98
|
+
if (input.turn?.state !== "queued" || input.inputId === event.inputId
|
|
99
|
+
|| request?.sessionId !== event.sessionId || request.agentPath.length > 0) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (request.body.kind === "prompt") {
|
|
103
|
+
removeEmptyTurn(draft, request.id);
|
|
104
|
+
}
|
|
105
|
+
sealTurn(draft);
|
|
106
|
+
upsertInput(draft, input, true);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function turnOpenedBy(event, conversation) {
|
|
110
|
+
const input = event.kind === "turn_active" && event.inputId !== undefined
|
|
111
|
+
? conversation.inputs.get(JSON.stringify([event.sessionId, event.agentPath, event.inputId])) : undefined;
|
|
112
|
+
const request = input?.turn?.state === "active" ? input.attempts.at(-1)?.request : undefined;
|
|
113
|
+
return request?.body.kind === "prompt" ? request.id : undefined;
|
|
114
|
+
}
|
|
79
115
|
//# sourceMappingURL=session-view-inputs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view-inputs.js","sourceRoot":"","sources":["../../src/observe/session-view-inputs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAc,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-view-inputs.js","sourceRoot":"","sources":["../../src/observe/session-view-inputs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ContextUsage, ControlAction, Cursor, Event, RawEvent, ReasoningContent, Session, SessionUsage, TokenTotals, ToolOutputPart, TurnOutcome, Unsubscribe } from "../contracts/session.js";
|
|
1
|
+
import type { ContextUsage, ControlAction, Cursor, Event, RawEvent, ReasoningContent, Session, SessionUsage, SessionGraph, TokenTotals, ToolOutputPart, TurnOutcome, Unsubscribe } from "../contracts/session.js";
|
|
2
|
+
import type { SessionTokens } from "./usage-totals.js";
|
|
2
3
|
import { type AgentStatus } from "./agent-status.js";
|
|
3
4
|
import { type ConversationInput, type ConversationState } from "./conversation.js";
|
|
4
5
|
/**
|
|
@@ -9,13 +10,14 @@ import { type ConversationInput, type ConversationState } from "./conversation.j
|
|
|
9
10
|
* Grouping rules, all derived never synthesized:
|
|
10
11
|
* - A TURN is a display segment: it opens on its prompt request or on the
|
|
11
12
|
* first turn-content event while none is open (adopted: queued input
|
|
12
|
-
* consumed, mid-turn subscriber, replay slice). A rejected prompt
|
|
13
|
-
* its empty
|
|
13
|
+
* consumed, mid-turn subscriber, replay slice). A conflicting native start after queue evidence, a dropped input or a rejected prompt
|
|
14
|
+
* removes its empty provisional turn. Queue evidence alone changes no layout.
|
|
14
15
|
* `turn_ended` of the ROOT session stamps the open segment; an input
|
|
15
16
|
* entering mid-turn seals the current segment so seq order stays the
|
|
16
17
|
* render order, and later content opens a new segment.
|
|
17
18
|
* - An INPUT enters where the runtime took it. A prompt enters at its
|
|
18
|
-
* request
|
|
19
|
+
* request provisionally; native queue evidence arms attribution, and a
|
|
20
|
+
* conflicting turn moves it to pending until its matching native turn start. A steer or queue enters at its first native
|
|
19
21
|
* echo (`user_message` with its `inputId`) when the stream echoes input
|
|
20
22
|
* ids at all, which it shows by having echoed one before (codex, claude);
|
|
21
23
|
* until then it waits in `pendingInputs`. On a stream that never echoed
|
|
@@ -152,8 +154,8 @@ export interface AgentTokens {
|
|
|
152
154
|
export interface SessionView {
|
|
153
155
|
readonly messages: readonly ViewMessage[];
|
|
154
156
|
/**
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
+
* Inputs the runtime has not taken yet, in request order. A conflicting turn after `input_queued` defers a prompt until matching `turn_active.inputId`; otherwise steers/queues wait for their first echo on a stream that echoes ids. A host shows them apart.
|
|
158
|
+
* No unrelated turn end or text match places them. A withdrawn input leaves both lists; a dropped input enters messages. Without queue or echo evidence, inputs enter messages at their requests.
|
|
157
159
|
*/
|
|
158
160
|
readonly pendingInputs: readonly ConversationInput[];
|
|
159
161
|
/** Index of the unsealed turn segment in `messages`; -1 when none. */
|
|
@@ -176,6 +178,9 @@ export interface SessionView {
|
|
|
176
178
|
readonly conversation: ConversationState;
|
|
177
179
|
/** sessionId of the latest prompt request: whose `turn_ended` closes turns. */
|
|
178
180
|
readonly rootSessionId: string | undefined;
|
|
181
|
+
/** Replay state for native lineage and every observed session's latest totals; includes children before their lineage arrives. */
|
|
182
|
+
readonly sessionGraph: SessionGraph;
|
|
183
|
+
readonly usageBySession: ReadonlyMap<string, SessionTokens>;
|
|
179
184
|
readonly usageByAgent: ReadonlyMap<string, AgentTokens>;
|
|
180
185
|
/** The runtime's own session total, when it reports one beyond its agents' (`UsageReport.total`); null otherwise. */
|
|
181
186
|
readonly usageTotal: TokenTotals | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/observe/session-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACZ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-view.d.ts","sourceRoot":"","sources":["../../src/observe/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { withSessionNode } from "./graph.js";
|
|
1
2
|
import { initialStatus, reduceStatus } from "./agent-status.js";
|
|
2
3
|
import { initialConversation, reduceConversation, } from "./conversation.js";
|
|
3
4
|
import { assemble, draftOf, stampTurnOutcome } from "./session-view-fold.js";
|
|
4
|
-
import {
|
|
5
|
-
import { upsertInput } from "./session-view-inputs.js";
|
|
5
|
+
import { deferWaitingInputs, foldInputUpdate, turnOpenedBy, upsertInput } from "./session-view-inputs.js";
|
|
6
6
|
import { foldEvent, recordFacts } from "./session-view-events.js";
|
|
7
7
|
import { upgradeLegacyEvent } from "./legacy.js";
|
|
8
8
|
export function initialSessionView() {
|
|
@@ -20,8 +20,9 @@ export function initialSessionView() {
|
|
|
20
20
|
exited: null,
|
|
21
21
|
conversation: initialConversation(),
|
|
22
22
|
rootSessionId: undefined,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
sessionGraph: { nodes: [], edges: [] },
|
|
24
|
+
usageBySession: new Map(),
|
|
25
|
+
usageByAgent: new Map(), usageTotal: null,
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
@@ -36,6 +37,7 @@ export function reduceSessionView(previous, record, streamId = "") {
|
|
|
36
37
|
}
|
|
37
38
|
const draft = draftOf(previous);
|
|
38
39
|
draft.rootSessionId ??= record.sessionId;
|
|
40
|
+
draft.sessionGraph = withSessionNode(draft.sessionGraph, record.sessionId);
|
|
39
41
|
if (record.kind === "request" &&
|
|
40
42
|
record.direction === "toRuntime" &&
|
|
41
43
|
record.body.kind === "prompt") {
|
|
@@ -48,10 +50,11 @@ export function reduceSessionView(previous, record, streamId = "") {
|
|
|
48
50
|
const conversation = reduceConversation(previous.conversation, record, streamId);
|
|
49
51
|
for (const update of conversation.updates) {
|
|
50
52
|
if (update.kind === "input") {
|
|
51
|
-
|
|
53
|
+
foldInputUpdate(draft, update.input, conversation);
|
|
52
54
|
}
|
|
53
55
|
else {
|
|
54
|
-
|
|
56
|
+
deferWaitingInputs(draft, update.event, conversation);
|
|
57
|
+
foldEvent(draft, update.event, streamId, turnOpenedBy(update.event, conversation));
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
recordFacts(draft, record, streamId);
|
|
@@ -65,6 +68,7 @@ export function reduceSessionView(previous, record, streamId = "") {
|
|
|
65
68
|
export function reduceSessionViewEvent(previous, event, streamId = "") {
|
|
66
69
|
const draft = draftOf(previous);
|
|
67
70
|
draft.rootSessionId ??= event.sessionId;
|
|
71
|
+
draft.sessionGraph = withSessionNode(draft.sessionGraph, event.sessionId);
|
|
68
72
|
foldEvent(draft, upgradeLegacyEvent(event), streamId);
|
|
69
73
|
return assemble(draft, previous.conversation, previous.status);
|
|
70
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/observe/session-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-view.js","sourceRoot":"","sources":["../../src/observe/session-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* The tool set is OPEN (custom + MCP tools have arbitrary names), so unknown
|
|
9
9
|
* tools fall back to "other" rather than being force-fit.
|
|
10
10
|
*/
|
|
11
|
-
export type ToolActionKind = "run_command" | "read_file" | "edit_file" | "search" | "web" | "mcp" | "wait" | "other";
|
|
11
|
+
export type ToolActionKind = "run_command" | "read_file" | "edit_file" | "search" | "web" | "fetch" | "subagent" | "mcp" | "wait" | "other";
|
|
12
12
|
export interface ToolAction {
|
|
13
13
|
readonly kind: ToolActionKind;
|
|
14
14
|
/**
|
|
@@ -32,7 +32,11 @@ export interface ToolAction {
|
|
|
32
32
|
* grok `run_terminal_command`, kimi `Bash`, opencode `bash`).
|
|
33
33
|
*/
|
|
34
34
|
readonly command?: string;
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* The agent's own one-line account of the call, where the runtime sends one (claude `Bash`,
|
|
37
|
+
* grok `run_terminal_command`). On a `subagent` call (claude `Agent` or `Task`, opencode `subagent`) it is
|
|
38
|
+
* the subagent's task, also its `detail`.
|
|
39
|
+
*/
|
|
36
40
|
readonly description?: string;
|
|
37
41
|
/**
|
|
38
42
|
* `wait`: how long the agent asked to wait, in ms, as the runtime reported it (codex
|
|
@@ -45,5 +49,5 @@ export interface ToolAction {
|
|
|
45
49
|
/** Classify one tool call into a cross-runtime semantic action plus an extracted detail (and, for a file tool, its paths). Pass only complete input; omit inputJson while a view part has inputPartial. */
|
|
46
50
|
export declare function classifyTool(runtimeId: string, tool: string, inputJson?: string): ToolAction;
|
|
47
51
|
/** The human label for an action in a given lifecycle state; tense centralized here so events stay consistent. */
|
|
48
|
-
export declare function toolActionLabel(kind: ToolActionKind, state: "running" | "done" | "failed"): string;
|
|
52
|
+
export declare function toolActionLabel(kind: ToolActionKind, state: "writing" | "running" | "done" | "failed"): string;
|
|
49
53
|
//# sourceMappingURL=tool-activity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-activity.d.ts","sourceRoot":"","sources":["../../src/observe/tool-activity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-activity.d.ts","sourceRoot":"","sources":["../../src/observe/tool-activity.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,WAAW,GACX,QAAQ,GACR,KAAK,GACL,OAAO,GACP,UAAU,GACV,KAAK,GACL,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAwKD,2MAA2M;AAC3M,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAO5F;AAgBD,kHAAkH;AAClH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAE9G"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { asNumber, asRecord, parseJson } from "../shared/json.js";
|
|
2
|
+
import { filePathsOf } from "./tool-paths.js";
|
|
2
3
|
// Per-runtime tool name → kind. Names are what the tool_call_started event
|
|
3
4
|
// carries (codex uses its item type; claude/pi use the tool name; the ACP
|
|
4
5
|
// runtimes the opening `tool_call`'s `title`, shared/acp/projection.ts). The
|
|
@@ -13,8 +14,10 @@ const BY_RUNTIME = {
|
|
|
13
14
|
NotebookEdit: "edit_file",
|
|
14
15
|
Grep: "search",
|
|
15
16
|
Glob: "search",
|
|
16
|
-
WebFetch: "
|
|
17
|
+
WebFetch: "fetch",
|
|
17
18
|
WebSearch: "web",
|
|
19
|
+
Agent: "subagent",
|
|
20
|
+
Task: "subagent", // Agent's alias in 2.1.292: a call the model makes as `Task` is recorded as `Task`.
|
|
18
21
|
},
|
|
19
22
|
codex: {
|
|
20
23
|
commandExecution: "run_command",
|
|
@@ -41,7 +44,7 @@ const BY_RUNTIME = {
|
|
|
41
44
|
opencode: {
|
|
42
45
|
bash: "run_command",
|
|
43
46
|
shell: "run_command",
|
|
44
|
-
subagent: "
|
|
47
|
+
subagent: "subagent",
|
|
45
48
|
execute: "other", // Native Code Mode can run MCP tools or plain JavaScript/fetch; its name alone proves neither.
|
|
46
49
|
read: "read_file",
|
|
47
50
|
write: "edit_file",
|
|
@@ -61,7 +64,7 @@ const BY_RUNTIME = {
|
|
|
61
64
|
glob: "search",
|
|
62
65
|
semSearch: "search",
|
|
63
66
|
webSearch: "web",
|
|
64
|
-
webFetch: "
|
|
67
|
+
webFetch: "fetch",
|
|
65
68
|
mcp: "mcp",
|
|
66
69
|
},
|
|
67
70
|
};
|
|
@@ -91,6 +94,11 @@ function stringFields(inputJson, withDescription) {
|
|
|
91
94
|
...(description === undefined ? {} : { description }),
|
|
92
95
|
};
|
|
93
96
|
}
|
|
97
|
+
/** A subagent call's task: the input's `description` only, never a `command` it does not run. */
|
|
98
|
+
function taskFields(inputJson) {
|
|
99
|
+
const { description } = stringFields(inputJson, true);
|
|
100
|
+
return description === undefined ? {} : { description };
|
|
101
|
+
}
|
|
94
102
|
/** A wait's asked duration: the input's `durationMs`, when a finite positive number. */
|
|
95
103
|
function waitFields(inputJson) {
|
|
96
104
|
const durationMs = asNumber(asRecord(parseJson(inputJson))?.durationMs);
|
|
@@ -100,7 +108,9 @@ function waitFields(inputJson) {
|
|
|
100
108
|
* Where each runtime's tools keep the fields a host shows, from recorded inputs
|
|
101
109
|
* (tests/replay/fixtures/*-tool-round.raw.jsonl, and the input keys of
|
|
102
110
|
* *-acp-v1*.vendor.json): a shell tool's command (and description), a wait's
|
|
103
|
-
* duration
|
|
111
|
+
* duration, a subagent call's task (claude `Agent` and opencode `subagent`
|
|
112
|
+
* `{description, prompt, …}`, tests/replay/fixtures/claude-background-tasks.raw.jsonl
|
|
113
|
+
* and opencode-acp-v2-child.json). A runtime with no recorded shape gets none. codex's
|
|
104
114
|
* `commandExecution` input is the bare command line, not JSON
|
|
105
115
|
* (codex/item-detail.ts). grok's opening `tool_call` carries `rawInput`
|
|
106
116
|
* `{command, description}`. kimi's opening frame carries none and opencode's
|
|
@@ -110,7 +120,7 @@ function waitFields(inputJson) {
|
|
|
110
120
|
* there once the call's latest input is passed in.
|
|
111
121
|
*/
|
|
112
122
|
const FIELDS = {
|
|
113
|
-
claude: { Bash: (input) => stringFields(input, true) },
|
|
123
|
+
claude: { Bash: (input) => stringFields(input, true), Agent: taskFields, Task: taskFields },
|
|
114
124
|
codex: {
|
|
115
125
|
commandExecution: (input) => input.length === 0 || asRecord(parseJson(input)) !== null ? {} : { command: input },
|
|
116
126
|
sleep: waitFields,
|
|
@@ -119,63 +129,9 @@ const FIELDS = {
|
|
|
119
129
|
cursor: { shell: (input) => stringFields(input, false) },
|
|
120
130
|
grok: { run_terminal_command: (input) => stringFields(input, true) },
|
|
121
131
|
kimi: { Bash: (input) => stringFields(input, false) },
|
|
122
|
-
opencode: { bash: (input) => stringFields(input, false), shell: (input) => stringFields(input, false) },
|
|
132
|
+
opencode: { bash: (input) => stringFields(input, false), shell: (input) => stringFields(input, false), subagent: taskFields },
|
|
123
133
|
};
|
|
124
134
|
const FIRST_STRING_KEYS = ["command", "cmd", "path", "file_path", "filePath", "file", "pattern", "query", "url"];
|
|
125
|
-
/** The keys of `FIRST_STRING_KEYS` that name a file, in the same order. */
|
|
126
|
-
const PATH_KEYS = ["path", "file_path", "filePath", "file"];
|
|
127
|
-
/** A file tool's one path: the first non-empty `PATH_KEYS` string, as `detail` reads it. */
|
|
128
|
-
function inputPath(inputJson) {
|
|
129
|
-
const input = asRecord(parseJson(inputJson));
|
|
130
|
-
for (const key of PATH_KEYS) {
|
|
131
|
-
const value = input?.[key];
|
|
132
|
-
if (typeof value === "string" && value.length > 0) {
|
|
133
|
-
return [value];
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return [];
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* A codex `fileChange`'s paths. Its input is the item's `changes` array
|
|
140
|
-
* (codex/item-detail.ts), recorded on 0.160.1
|
|
141
|
-
* (tests/replay/fixtures/codex-file-change.raw.jsonl) as
|
|
142
|
-
* `[{path, kind: {type: "add" | "delete" | "update", move_path?}, diff}]`:
|
|
143
|
-
* absolute paths, sorted by path whatever the patch's order, and `move_path`
|
|
144
|
-
* (snake case, `null` on an update that does not rename) the rename's target.
|
|
145
|
-
*/
|
|
146
|
-
function fileChangePaths(inputJson) {
|
|
147
|
-
const changes = parseJson(inputJson);
|
|
148
|
-
const paths = [];
|
|
149
|
-
for (const raw of Array.isArray(changes) ? changes : []) {
|
|
150
|
-
const change = asRecord(raw);
|
|
151
|
-
for (const value of [change?.path, asRecord(change?.kind)?.move_path]) {
|
|
152
|
-
if (typeof value === "string" && value.length > 0) {
|
|
153
|
-
paths.push(value);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
return paths;
|
|
158
|
-
}
|
|
159
|
-
/** A tool whose one path is under `key`, a key `PATH_KEYS` does not list. */
|
|
160
|
-
function pathUnder(key) {
|
|
161
|
-
return (inputJson) => {
|
|
162
|
-
const value = asRecord(parseJson(inputJson))?.[key];
|
|
163
|
-
return typeof value === "string" && value.length > 0 ? [value] : [];
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/** Where a runtime's file tool keeps its paths, when not under one of `PATH_KEYS`. */
|
|
167
|
-
const PATHS = {
|
|
168
|
-
// The notebook it edits; never a `detail` before `paths`, now the first of them.
|
|
169
|
-
claude: { NotebookEdit: pathUnder("notebook_path") },
|
|
170
|
-
codex: { fileChange: fileChangePaths },
|
|
171
|
-
};
|
|
172
|
-
/** The file paths a `read_file` / `edit_file` call involves, each once, in the runtime's order. */
|
|
173
|
-
function pathsOf(runtime, tool, kind, inputJson) {
|
|
174
|
-
if (inputJson === undefined || (kind !== "read_file" && kind !== "edit_file")) {
|
|
175
|
-
return [];
|
|
176
|
-
}
|
|
177
|
-
return [...new Set((PATHS[runtime]?.[tool] ?? inputPath)(inputJson))];
|
|
178
|
-
}
|
|
179
135
|
function detailOf(inputJson) {
|
|
180
136
|
if (inputJson === undefined) {
|
|
181
137
|
return undefined;
|
|
@@ -204,19 +160,22 @@ export function classifyTool(runtimeId, tool, inputJson) {
|
|
|
204
160
|
const kind = kindOf(runtimeId, tool);
|
|
205
161
|
const runtime = runtimeId.replace(/-aimock$/u, "");
|
|
206
162
|
const fields = inputJson === undefined ? {} : (FIELDS[runtime]?.[tool]?.(inputJson) ?? {});
|
|
207
|
-
const paths =
|
|
208
|
-
const detail = paths[0] ?? detailOf(inputJson) ?? fields.command ?? (kind === "other" ? tool : undefined);
|
|
163
|
+
const paths = inputJson === undefined || (kind !== "read_file" && kind !== "edit_file") ? [] : filePathsOf(runtime, tool, inputJson);
|
|
164
|
+
const detail = paths[0] ?? detailOf(inputJson) ?? fields.command ?? (kind === "subagent" ? fields.description : undefined) ?? (kind === "other" ? tool : undefined);
|
|
209
165
|
return { kind, ...(detail === undefined ? {} : { detail }), ...(paths.length === 0 ? {} : { paths }), ...fields };
|
|
210
166
|
}
|
|
167
|
+
/** `writing`: the call's arguments are still streaming (claude), before it runs. */
|
|
211
168
|
const LABELS = {
|
|
212
|
-
run_command: { running: "Running command", done: "Ran command", failed: "Command failed" },
|
|
213
|
-
read_file: { running: "Reading file", done: "Read file", failed: "Read failed" },
|
|
214
|
-
edit_file: { running: "Editing file", done: "Edited file", failed: "Edit failed" },
|
|
215
|
-
search: { running: "Searching", done: "Searched", failed: "Search failed" },
|
|
216
|
-
web: { running: "Searching the web", done: "Searched the web", failed: "Web
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
169
|
+
run_command: { writing: "Preparing command", running: "Running command", done: "Ran command", failed: "Command failed" },
|
|
170
|
+
read_file: { writing: "Preparing file read", running: "Reading file", done: "Read file", failed: "Read failed" },
|
|
171
|
+
edit_file: { writing: "Preparing file edit", running: "Editing file", done: "Edited file", failed: "Edit failed" },
|
|
172
|
+
search: { writing: "Preparing search", running: "Searching", done: "Searched", failed: "Search failed" },
|
|
173
|
+
web: { writing: "Preparing web search", running: "Searching the web", done: "Searched the web", failed: "Web search failed" },
|
|
174
|
+
fetch: { writing: "Preparing page fetch", running: "Fetching page", done: "Fetched page", failed: "Fetch failed" },
|
|
175
|
+
subagent: { writing: "Preparing subagent", running: "Running subagent", done: "Ran subagent", failed: "Subagent failed" },
|
|
176
|
+
mcp: { writing: "Preparing a tool call", running: "Using a tool", done: "Used a tool", failed: "Tool failed" },
|
|
177
|
+
wait: { writing: "Preparing to wait", running: "Waiting", done: "Waited", failed: "Wait failed" },
|
|
178
|
+
other: { writing: "Preparing", running: "Working", done: "Done", failed: "Failed" },
|
|
220
179
|
};
|
|
221
180
|
/** The human label for an action in a given lifecycle state; tense centralized here so events stay consistent. */
|
|
222
181
|
export function toolActionLabel(kind, state) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-activity.js","sourceRoot":"","sources":["../../src/observe/tool-activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-activity.js","sourceRoot":"","sources":["../../src/observe/tool-activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-groups.d.ts","sourceRoot":"","sources":["../../src/observe/tool-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC;IACtD,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtF,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC1E,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-groups.d.ts","sourceRoot":"","sources":["../../src/observe/tool-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC;IACtD,qFAAqF;IACrF,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtF,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC1E,SAAS,CAAC;AAwBd,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,gBAAgB,EAAE,CAoBnG;AAeD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAE,SAAS,GAAG,MAAe,GAAG,MAAM,CAyBxG"}
|
|
@@ -3,7 +3,10 @@ function group(runtimeId, index, parts) {
|
|
|
3
3
|
const counts = new Map();
|
|
4
4
|
const tools = parts.filter((part) => part.kind === "tool");
|
|
5
5
|
for (const tool of tools) {
|
|
6
|
-
|
|
6
|
+
// A call's kind depends on its runtime and tool name only, never its
|
|
7
|
+
// input: parsing every call's input again on each grouping made a live
|
|
8
|
+
// host pay tools x input per record (#318).
|
|
9
|
+
const { kind } = classifyTool(runtimeId, tool.tool);
|
|
7
10
|
counts.set(kind, (counts.get(kind) ?? 0) + 1);
|
|
8
11
|
}
|
|
9
12
|
const failed = tools.filter((tool) => tool.result === "failed").length;
|
|
@@ -46,6 +49,8 @@ const DONE = {
|
|
|
46
49
|
edit_file: (n) => (n === 1 ? "edited a file" : `edited ${n} files`),
|
|
47
50
|
search: (n) => (n === 1 ? "searched" : `searched ${n} times`),
|
|
48
51
|
web: (n) => (n === 1 ? "searched the web" : `searched the web ${n} times`),
|
|
52
|
+
fetch: (n) => (n === 1 ? "fetched a page" : `fetched ${n} pages`),
|
|
53
|
+
subagent: (n) => (n === 1 ? "ran a subagent" : `ran ${n} subagents`),
|
|
49
54
|
mcp: (n) => (n === 1 ? "used a tool" : `used ${n} tools`),
|
|
50
55
|
wait: (n) => (n === 1 ? "waited" : `waited ${n} times`),
|
|
51
56
|
other: (n) => (n === 1 ? "used a tool" : `used ${n} tools`),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-groups.js","sourceRoot":"","sources":["../../src/observe/tool-groups.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AA+BvE,SAAS,KAAK,CAAC,SAAiB,EAAE,KAAa,EAAE,KAA4C;IAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAoB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC7E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"tool-groups.js","sourceRoot":"","sources":["../../src/observe/tool-groups.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-paths.d.ts","sourceRoot":"","sources":["../../src/observe/tool-paths.ts"],"names":[],"mappings":"AAsDA,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAE/F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { asRecord, parseJson } from "../shared/json.js";
|
|
2
|
+
/** The keys that name a file, in the order `classifyTool`'s `detail` reads them (tool-activity.ts). */
|
|
3
|
+
const PATH_KEYS = ["path", "file_path", "filePath", "file"];
|
|
4
|
+
/** A file tool's one path: the first non-empty `PATH_KEYS` string, as `detail` reads it. */
|
|
5
|
+
function inputPath(inputJson) {
|
|
6
|
+
const input = asRecord(parseJson(inputJson));
|
|
7
|
+
for (const key of PATH_KEYS) {
|
|
8
|
+
const value = input?.[key];
|
|
9
|
+
if (typeof value === "string" && value.length > 0) {
|
|
10
|
+
return [value];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A codex `fileChange`'s paths. Its input is the item's `changes` array
|
|
17
|
+
* (codex/item-detail.ts), recorded on 0.160.1
|
|
18
|
+
* (tests/replay/fixtures/codex-file-change.raw.jsonl) as
|
|
19
|
+
* `[{path, kind: {type: "add" | "delete" | "update", move_path?}, diff}]`:
|
|
20
|
+
* absolute paths, sorted by path whatever the patch's order, and `move_path`
|
|
21
|
+
* (snake case, `null` on an update that does not rename) the rename's target.
|
|
22
|
+
*/
|
|
23
|
+
function fileChangePaths(inputJson) {
|
|
24
|
+
const changes = parseJson(inputJson);
|
|
25
|
+
const paths = [];
|
|
26
|
+
for (const raw of Array.isArray(changes) ? changes : []) {
|
|
27
|
+
const change = asRecord(raw);
|
|
28
|
+
for (const value of [change?.path, asRecord(change?.kind)?.move_path]) {
|
|
29
|
+
if (typeof value === "string" && value.length > 0) {
|
|
30
|
+
paths.push(value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return paths;
|
|
35
|
+
}
|
|
36
|
+
/** A tool whose one path is under `key`, a key `PATH_KEYS` does not list. */
|
|
37
|
+
function pathUnder(key) {
|
|
38
|
+
return (inputJson) => {
|
|
39
|
+
const value = asRecord(parseJson(inputJson))?.[key];
|
|
40
|
+
return typeof value === "string" && value.length > 0 ? [value] : [];
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Where a runtime's file tool keeps its paths, when not under one of `PATH_KEYS`. */
|
|
44
|
+
const PATHS = {
|
|
45
|
+
// The notebook it edits; never a `detail` before `paths`, now the first of them.
|
|
46
|
+
claude: { NotebookEdit: pathUnder("notebook_path") },
|
|
47
|
+
codex: { fileChange: fileChangePaths },
|
|
48
|
+
};
|
|
49
|
+
/** The file paths a file tool's call involves, each once, in the runtime's order. */
|
|
50
|
+
export function filePathsOf(runtime, tool, inputJson) {
|
|
51
|
+
return [...new Set((PATHS[runtime]?.[tool] ?? inputPath)(inputJson))];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=tool-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-paths.js","sourceRoot":"","sources":["../../src/observe/tool-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExD,uGAAuG;AACvG,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAE5D,4FAA4F;AAC5F,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;YACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6EAA6E;AAC7E,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,CAAC,SAAS,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,KAAK,GAAyE;IAClF,iFAAiF;IACjF,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE;IACpD,KAAK,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE;CACvC,CAAC;AAEF,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,IAAY,EAAE,SAAiB;IAC1E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|