@botiverse/oar 0.0.11 → 0.1.1
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 +2 -2
- package/dist/contracts/model-catalog.d.ts +1 -1
- package/dist/contracts/model-catalog.js +1 -1
- package/dist/contracts/provider-auth.d.ts +2 -2
- package/dist/contracts/provider-auth.js +2 -2
- package/dist/contracts/records.d.ts +214 -0
- package/dist/contracts/records.d.ts.map +1 -0
- package/dist/contracts/records.js +8 -0
- package/dist/contracts/records.js.map +1 -0
- package/dist/contracts/session.d.ts +93 -144
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/observe/agent-status.d.ts +32 -18
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +66 -14
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/aggregate-events.d.ts +7 -6
- package/dist/observe/aggregate-events.d.ts.map +1 -1
- package/dist/observe/aggregate-events.js +38 -28
- package/dist/observe/aggregate-events.js.map +1 -1
- package/dist/observe/index.d.ts +4 -1
- package/dist/observe/index.d.ts.map +1 -1
- package/dist/observe/index.js +3 -1
- package/dist/observe/index.js.map +1 -1
- package/dist/observe/observe-agent.d.ts +4 -4
- package/dist/observe/observe-agent.d.ts.map +1 -1
- package/dist/observe/observe-agent.js +3 -3
- package/dist/observe/observe-agent.js.map +1 -1
- package/dist/observe/stall-observer.d.ts +7 -6
- package/dist/observe/stall-observer.d.ts.map +1 -1
- package/dist/observe/stall-observer.js +6 -5
- package/dist/observe/stall-observer.js.map +1 -1
- package/dist/observe/tool-activity.d.ts +2 -2
- package/dist/observe/tool-activity.d.ts.map +1 -1
- package/dist/observe/tool-activity.js +1 -1
- package/dist/observe/tool-activity.js.map +1 -1
- package/dist/observe/turns.d.ts +37 -0
- package/dist/observe/turns.d.ts.map +1 -0
- package/dist/observe/turns.js +70 -0
- package/dist/observe/turns.js.map +1 -0
- package/dist/observe/usage.d.ts +15 -0
- package/dist/observe/usage.d.ts.map +1 -0
- package/dist/observe/usage.js +94 -0
- package/dist/observe/usage.js.map +1 -0
- package/dist/runtimes/claude/account-usage.js +1 -1
- package/dist/runtimes/claude/context-usage.d.ts +1 -1
- package/dist/runtimes/claude/context-usage.js +1 -1
- package/dist/runtimes/claude/projection.d.ts +40 -27
- package/dist/runtimes/claude/projection.d.ts.map +1 -1
- package/dist/runtimes/claude/projection.js +110 -23
- 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 +120 -87
- package/dist/runtimes/claude/session.js.map +1 -1
- package/dist/runtimes/codex/app-server-client.d.ts +38 -3
- package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
- package/dist/runtimes/codex/app-server-client.js +62 -15
- package/dist/runtimes/codex/app-server-client.js.map +1 -1
- package/dist/runtimes/codex/projection.d.ts +12 -12
- package/dist/runtimes/codex/projection.d.ts.map +1 -1
- package/dist/runtimes/codex/projection.js +111 -40
- package/dist/runtimes/codex/projection.js.map +1 -1
- package/dist/runtimes/codex/rpc-control.d.ts +31 -0
- package/dist/runtimes/codex/rpc-control.d.ts.map +1 -0
- package/dist/runtimes/codex/rpc-control.js +51 -0
- package/dist/runtimes/codex/rpc-control.js.map +1 -0
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +199 -149
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/grok/session.d.ts +37 -1
- package/dist/runtimes/grok/session.d.ts.map +1 -1
- package/dist/runtimes/grok/session.js +74 -0
- package/dist/runtimes/grok/session.js.map +1 -1
- package/dist/runtimes/kimi/session.d.ts.map +1 -1
- package/dist/runtimes/kimi/session.js +5 -0
- package/dist/runtimes/kimi/session.js.map +1 -1
- package/dist/runtimes/pi/auth.d.ts.map +1 -1
- package/dist/runtimes/pi/auth.js +6 -1
- package/dist/runtimes/pi/auth.js.map +1 -1
- package/dist/runtimes/pi/catalog.d.ts.map +1 -1
- package/dist/runtimes/pi/catalog.js +6 -1
- package/dist/runtimes/pi/catalog.js.map +1 -1
- package/dist/runtimes/pi/http.d.ts +34 -0
- package/dist/runtimes/pi/http.d.ts.map +1 -0
- package/dist/runtimes/pi/http.js +95 -0
- package/dist/runtimes/pi/http.js.map +1 -0
- package/dist/runtimes/pi/list-models.d.ts.map +1 -1
- package/dist/runtimes/pi/list-models.js +10 -3
- package/dist/runtimes/pi/list-models.js.map +1 -1
- package/dist/runtimes/pi/open.d.ts +32 -0
- package/dist/runtimes/pi/open.d.ts.map +1 -0
- package/dist/runtimes/pi/open.js +106 -0
- package/dist/runtimes/pi/open.js.map +1 -0
- package/dist/runtimes/pi/projection.d.ts +27 -25
- package/dist/runtimes/pi/projection.d.ts.map +1 -1
- package/dist/runtimes/pi/projection.js +86 -50
- package/dist/runtimes/pi/projection.js.map +1 -1
- package/dist/runtimes/pi/session.d.ts +1 -22
- package/dist/runtimes/pi/session.d.ts.map +1 -1
- package/dist/runtimes/pi/session.js +179 -184
- package/dist/runtimes/pi/session.js.map +1 -1
- package/dist/shared/acp/client-app.d.ts +23 -0
- package/dist/shared/acp/client-app.d.ts.map +1 -0
- package/dist/shared/acp/client-app.js +55 -0
- package/dist/shared/acp/client-app.js.map +1 -0
- package/dist/shared/acp/model.d.ts +3 -17
- package/dist/shared/acp/model.d.ts.map +1 -1
- package/dist/shared/acp/model.js +3 -14
- package/dist/shared/acp/model.js.map +1 -1
- package/dist/shared/acp/profile.d.ts +32 -7
- package/dist/shared/acp/profile.d.ts.map +1 -1
- package/dist/shared/acp/profile.js +17 -8
- package/dist/shared/acp/profile.js.map +1 -1
- package/dist/shared/acp/projection.d.ts +16 -8
- package/dist/shared/acp/projection.d.ts.map +1 -1
- package/dist/shared/acp/projection.js +59 -32
- package/dist/shared/acp/projection.js.map +1 -1
- package/dist/shared/acp/records.d.ts +46 -0
- package/dist/shared/acp/records.d.ts.map +1 -0
- package/dist/shared/acp/records.js +125 -0
- package/dist/shared/acp/records.js.map +1 -0
- package/dist/shared/acp/session.d.ts.map +1 -1
- package/dist/shared/acp/session.js +98 -224
- package/dist/shared/acp/session.js.map +1 -1
- package/dist/shared/acp/terminal.d.ts +1 -3
- package/dist/shared/acp/terminal.d.ts.map +1 -1
- package/dist/shared/acp/terminal.js +1 -21
- package/dist/shared/acp/terminal.js.map +1 -1
- package/dist/shared/acp/turns.d.ts +45 -0
- package/dist/shared/acp/turns.d.ts.map +1 -0
- package/dist/shared/acp/turns.js +160 -0
- package/dist/shared/acp/turns.js.map +1 -0
- package/dist/shared/acp/usage-wait.d.ts +6 -6
- package/dist/shared/acp/usage-wait.d.ts.map +1 -1
- package/dist/shared/acp/usage-wait.js +2 -2
- package/dist/shared/acp/usage-wait.js.map +1 -1
- package/dist/shared/failure-class.d.ts +1 -1
- package/dist/shared/failure-class.js +2 -2
- package/dist/shared/failure-class.js.map +1 -1
- package/dist/shared/seal-session.d.ts +5 -3
- package/dist/shared/seal-session.d.ts.map +1 -1
- package/dist/shared/seal-session.js +24 -16
- package/dist/shared/seal-session.js.map +1 -1
- package/dist/shared/session-kernel.d.ts +68 -18
- package/dist/shared/session-kernel.d.ts.map +1 -1
- package/dist/shared/session-kernel.js +82 -42
- package/dist/shared/session-kernel.js.map +1 -1
- package/dist/voyage.d.ts +4 -7
- package/dist/voyage.d.ts.map +1 -1
- package/dist/voyage.js +14 -19
- package/dist/voyage.js.map +1 -1
- package/package.json +4 -3
- package/dist/runtimes/codex/context-usage.d.ts +0 -10
- package/dist/runtimes/codex/context-usage.d.ts.map +0 -1
- package/dist/runtimes/codex/context-usage.js +0 -16
- package/dist/runtimes/codex/context-usage.js.map +0 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAOhD,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GACX,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,YAAY,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,12 +7,14 @@ import { piRuntime } from "./runtimes/pi/index.js";
|
|
|
7
7
|
export { defineRuntime } from "./contracts/runtime.js";
|
|
8
8
|
export { utcInstantFromDate } from "./shared/instant.js";
|
|
9
9
|
export { RuntimeRegistry, createRuntimeRegistry } from "./registry.js";
|
|
10
|
-
export { VOYAGE_FORMAT, endLine,
|
|
10
|
+
export { VOYAGE_FORMAT, endLine, headerLine, openVoyage, recordLine, } from "./voyage.js";
|
|
11
11
|
export { aggregateDeltas } from "./observe/aggregate-events.js";
|
|
12
12
|
export { initialStatus, reduceStatus, stallOf, } from "./observe/agent-status.js";
|
|
13
13
|
export { observeStalls } from "./observe/stall-observer.js";
|
|
14
14
|
export { observeAgent, simpleStateOf } from "./observe/observe-agent.js";
|
|
15
15
|
export { classifyTool, toolActionLabel } from "./observe/tool-activity.js";
|
|
16
|
+
export { awaitTurnEnd, promptAndWait, turnEndAfter } from "./observe/turns.js";
|
|
17
|
+
export { contextUsageOf, modelOf, usageOf } from "./observe/usage.js";
|
|
16
18
|
export { claudeRuntime } from "./runtimes/claude/index.js";
|
|
17
19
|
export { claudeListModels, projectClaudeModels } from "./runtimes/claude/list-models.js";
|
|
18
20
|
export { claudeSession } from "./runtimes/claude/session.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA2EnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,aAAa,EACb,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,OAAO,GACR,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;IAC1C,aAAa;IACb,YAAY;IACZ,WAAW;IACX,WAAW;IACX,SAAS;CACV,CAAC,CAAC"}
|
|
@@ -1,19 +1,30 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SessionRecord, TurnOutcome } from "../contracts/session.js";
|
|
2
2
|
/**
|
|
3
|
-
* status = fold(
|
|
4
|
-
* replayable from any
|
|
3
|
+
* status = fold(records). The reducer is pure (no clock, no IO), so status
|
|
4
|
+
* is replayable from any record log and snapshot-testable. Time-qualified
|
|
5
5
|
* judgments (stalled) are deliberately OUTSIDE the ontology: they are
|
|
6
|
-
* fold(
|
|
6
|
+
* fold(records) × clock, provided by `stallOf` next to it.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
8
|
+
* Scope: the ROOT AGENT of ONE SESSION. Pass the session id so a derived
|
|
9
|
+
* child session's records (codex child threads, grok child sessions carry
|
|
10
|
+
* their own sessionId with agentPath []) never drive the root's phase; without
|
|
11
|
+
* it, every root-agent record of any session is folded (single-session
|
|
12
|
+
* streams). Phase transitions come from the root agent's own records only;
|
|
13
|
+
* `lastEventAt`, the liveness clock, refreshes on EVERY record attributable
|
|
14
|
+
* to the session (child agents, child sessions, viewless frames), because a
|
|
15
|
+
* delegated sub-agent working is not a stalled root.
|
|
16
|
+
*
|
|
17
|
+
* Transition table:
|
|
18
|
+
* request prompt (toRuntime) → running/waiting_model (the turn's start IS the request)
|
|
19
|
+
* response rejected → that request → idle again (the turn never began)
|
|
20
|
+
* event reasoning → running/thinking
|
|
21
|
+
* event text_delta → running/responding
|
|
22
|
+
* event tool_call_started → running/{tool, callId}
|
|
23
|
+
* event tool_call_ended → running/waiting_model (the model consumes the result next)
|
|
24
|
+
* event turn_ended → idle{lastTurnOutcome} (the runtime's own completion)
|
|
25
|
+
* response exited → idle{failed runtime_exited} if a turn was running
|
|
26
|
+
* The fold is total: a mid-turn event while idle adopts that turn (a consumer
|
|
27
|
+
* may subscribe mid-turn, and a queued input runs as a turn with no request).
|
|
17
28
|
*/
|
|
18
29
|
export type RunningPhase = "waiting_model" | "thinking" | "responding" | {
|
|
19
30
|
readonly tool: string;
|
|
@@ -24,16 +35,19 @@ export type AgentStatus = {
|
|
|
24
35
|
readonly lastTurnOutcome?: TurnOutcome;
|
|
25
36
|
} | {
|
|
26
37
|
readonly kind: "running";
|
|
27
|
-
|
|
38
|
+
/** seq of the record that opened this running span: the prompt request, or the first event of an adopted turn. */
|
|
39
|
+
readonly sinceSeq: number;
|
|
40
|
+
/** The prompt request id when the turn was opened through this Session; absent for adopted turns. */
|
|
41
|
+
readonly requestId?: string;
|
|
28
42
|
readonly phase: RunningPhase;
|
|
29
|
-
/** Envelope receivedAt (unix epoch ms) of the latest folded
|
|
43
|
+
/** Envelope receivedAt (unix epoch ms) of the latest folded record. */
|
|
30
44
|
readonly lastEventAt: number;
|
|
31
45
|
};
|
|
32
46
|
export declare const initialStatus: AgentStatus;
|
|
33
|
-
export declare function reduceStatus(previous: AgentStatus,
|
|
34
|
-
/** fold(
|
|
47
|
+
export declare function reduceStatus(previous: AgentStatus, record: SessionRecord, sessionId?: string): AgentStatus;
|
|
48
|
+
/** fold(records) × clock: how long a running status has been silent, if beyond the threshold. */
|
|
35
49
|
export declare function stallOf(status: AgentStatus, nowMs: number, thresholdMs: number): {
|
|
36
|
-
readonly
|
|
50
|
+
readonly sinceSeq: number;
|
|
37
51
|
readonly silentForMs: number;
|
|
38
52
|
} | null;
|
|
39
53
|
//# sourceMappingURL=agent-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-status.d.ts","sourceRoot":"","sources":["../../src/observe/agent-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent-status.d.ts","sourceRoot":"","sources":["../../src/observe/agent-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,UAAU,GACV,YAAY,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,WAAW,CAAA;CAAE,GACjE;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,kHAAkH;IAClH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,qGAAqG;IACrG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEN,eAAO,MAAM,aAAa,EAAE,WAA8B,CAAC;AAc3D,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAiC1G;AAgCD,iGAAiG;AACjG,wBAAgB,OAAO,CACrB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMpE"}
|
|
@@ -1,31 +1,83 @@
|
|
|
1
1
|
export const initialStatus = { kind: "idle" };
|
|
2
|
-
function running(
|
|
3
|
-
|
|
2
|
+
function running(previous, record, phase) {
|
|
3
|
+
const sinceSeq = previous.kind === "running" ? previous.sinceSeq : record.seq;
|
|
4
|
+
const requestId = previous.kind === "running" ? previous.requestId : undefined;
|
|
5
|
+
return {
|
|
6
|
+
kind: "running",
|
|
7
|
+
sinceSeq,
|
|
8
|
+
...(requestId === undefined ? {} : { requestId }),
|
|
9
|
+
phase,
|
|
10
|
+
lastEventAt: record.receivedAt,
|
|
11
|
+
};
|
|
4
12
|
}
|
|
5
|
-
export function reduceStatus(previous,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
13
|
+
export function reduceStatus(previous, record, sessionId) {
|
|
14
|
+
const foreignSession = sessionId !== undefined && record.sessionId !== sessionId;
|
|
15
|
+
if (foreignSession && !belongsToSession(record, sessionId)) {
|
|
16
|
+
return previous;
|
|
17
|
+
}
|
|
18
|
+
if (foreignSession || record.agentPath.length > 0 || (record.kind === "event" && record.body.views.length === 0)) {
|
|
19
|
+
// A child agent, a child session, or a frame without a view: the session is
|
|
20
|
+
// alive, so the clock moves, but the root agent's phase does not.
|
|
21
|
+
return previous.kind === "running" ? { ...previous, lastEventAt: record.receivedAt } : previous;
|
|
22
|
+
}
|
|
23
|
+
switch (record.kind) {
|
|
24
|
+
case "request":
|
|
25
|
+
return record.direction === "toRuntime" && record.body.kind === "prompt" && previous.kind === "idle"
|
|
26
|
+
? { kind: "running", sinceSeq: record.seq, requestId: record.id, phase: "waiting_model", lastEventAt: record.receivedAt }
|
|
27
|
+
: previous;
|
|
28
|
+
case "response":
|
|
29
|
+
if (record.body.kind === "rejected" && previous.kind === "running" && previous.requestId === record.requestId) {
|
|
30
|
+
return { kind: "idle" };
|
|
31
|
+
}
|
|
32
|
+
if (record.body.kind === "exited" && previous.kind === "running") {
|
|
33
|
+
return { kind: "idle", lastTurnOutcome: { kind: "failed", reason: "runtime exited", failure: "runtime_exited" } };
|
|
34
|
+
}
|
|
35
|
+
return previous;
|
|
36
|
+
case "event": {
|
|
37
|
+
let status = previous;
|
|
38
|
+
for (const view of record.body.views) {
|
|
39
|
+
status = reduceView(status, record, view);
|
|
40
|
+
}
|
|
41
|
+
return status;
|
|
42
|
+
}
|
|
43
|
+
default:
|
|
44
|
+
return previous;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function reduceView(previous, record, view) {
|
|
48
|
+
switch (view.kind) {
|
|
9
49
|
case "reasoning":
|
|
10
|
-
return running(
|
|
50
|
+
return running(previous, record, "thinking");
|
|
11
51
|
case "text_delta":
|
|
12
|
-
return running(
|
|
52
|
+
return running(previous, record, "responding");
|
|
13
53
|
case "tool_call_started":
|
|
14
|
-
return running(
|
|
54
|
+
return running(previous, record, { tool: view.tool, callId: view.callId });
|
|
15
55
|
case "tool_call_ended":
|
|
16
|
-
return running(
|
|
56
|
+
return running(previous, record, "waiting_model");
|
|
17
57
|
case "turn_ended":
|
|
18
|
-
return { kind: "idle", lastTurnOutcome:
|
|
19
|
-
|
|
58
|
+
return { kind: "idle", lastTurnOutcome: view.outcome };
|
|
59
|
+
case "usage":
|
|
60
|
+
case "model":
|
|
20
61
|
return previous;
|
|
21
62
|
}
|
|
63
|
+
return previous;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Whether a record of another session id belongs to this session's activity.
|
|
67
|
+
* The stream only ever carries the session's own records and its derived
|
|
68
|
+
* children's (docs/spec/session-graph-and-cursor.md), so every record in it
|
|
69
|
+
* counts; the hook exists so a consumer folding a merged multi-session log can
|
|
70
|
+
* narrow it.
|
|
71
|
+
*/
|
|
72
|
+
function belongsToSession(_record, _sessionId) {
|
|
73
|
+
return true;
|
|
22
74
|
}
|
|
23
|
-
/** fold(
|
|
75
|
+
/** fold(records) × clock: how long a running status has been silent, if beyond the threshold. */
|
|
24
76
|
export function stallOf(status, nowMs, thresholdMs) {
|
|
25
77
|
if (status.kind !== "running") {
|
|
26
78
|
return null;
|
|
27
79
|
}
|
|
28
80
|
const silentForMs = nowMs - status.lastEventAt;
|
|
29
|
-
return silentForMs >= thresholdMs ? {
|
|
81
|
+
return silentForMs >= thresholdMs ? { sinceSeq: status.sinceSeq, silentForMs } : null;
|
|
30
82
|
}
|
|
31
83
|
//# sourceMappingURL=agent-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-status.js","sourceRoot":"","sources":["../../src/observe/agent-status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-status.js","sourceRoot":"","sources":["../../src/observe/agent-status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { SessionObserver } from "../contracts/session.js";
|
|
2
2
|
/**
|
|
3
3
|
* Optional consumer-side aggregation: wrap an observer so consecutive
|
|
4
|
-
* text/reasoning
|
|
5
|
-
* A merged
|
|
6
|
-
*
|
|
4
|
+
* text/reasoning deltas of one agent arrive as one merged record instead of a
|
|
5
|
+
* token stream. A merged record flushes when the view kind or agent changes,
|
|
6
|
+
* a non-delta record arrives, or (when `maxHoldMs` is set) the stream goes
|
|
7
7
|
* quiet for that long (a stalled model pause must not hold text hostage;
|
|
8
|
-
* order is safe because only consecutive same-
|
|
9
|
-
*
|
|
10
|
-
* decorator over the side-tap
|
|
8
|
+
* order is safe because only consecutive same-lane deltas are ever held). It
|
|
9
|
+
* carries the LAST delta's envelope and native frame with the concatenated
|
|
10
|
+
* text. Purely a decorator over the side-tap: adapters and the kernel are
|
|
11
|
+
* unaware, and the retained log keeps every original record.
|
|
11
12
|
*/
|
|
12
13
|
export declare function aggregateDeltas(observer: SessionObserver, options?: {
|
|
13
14
|
readonly maxHoldMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-events.d.ts","sourceRoot":"","sources":["../../src/observe/aggregate-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"aggregate-events.d.ts","sourceRoot":"","sources":["../../src/observe/aggregate-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,eAAe,EAAiB,MAAM,yBAAyB,CAAC;AAiCtG;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,eAAe,CA2CjB"}
|
|
@@ -1,29 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/** The single text-bearing view of a record, when the record carries exactly one view. */
|
|
2
|
+
function soleView(record) {
|
|
3
|
+
return record.body.views.length === 1 ? (record.body.views[0] ?? null) : null;
|
|
4
|
+
}
|
|
5
|
+
function textOf(record) {
|
|
6
|
+
const view = soleView(record);
|
|
7
|
+
if (view?.kind === "text_delta") {
|
|
8
|
+
return view.text;
|
|
4
9
|
}
|
|
5
|
-
return
|
|
6
|
-
? event.content.text
|
|
7
|
-
: null;
|
|
10
|
+
return view?.kind === "reasoning" && view.content.kind === "text" ? view.content.text : null;
|
|
8
11
|
}
|
|
9
|
-
function withText(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
function withText(record, text) {
|
|
13
|
+
const view = soleView(record);
|
|
14
|
+
if (view?.kind === "reasoning") {
|
|
15
|
+
return { ...record, body: { ...record.body, views: [{ kind: "reasoning", content: { kind: "text", text } }] } };
|
|
12
16
|
}
|
|
13
|
-
if (
|
|
14
|
-
return { ...
|
|
17
|
+
if (view?.kind === "text_delta") {
|
|
18
|
+
return { ...record, body: { ...record.body, views: [{ kind: "text_delta", text }] } };
|
|
15
19
|
}
|
|
16
|
-
return
|
|
20
|
+
return record;
|
|
21
|
+
}
|
|
22
|
+
function sameLane(held, next) {
|
|
23
|
+
return soleView(held)?.kind === soleView(next)?.kind
|
|
24
|
+
&& held.sessionId === next.sessionId
|
|
25
|
+
&& held.agentPath.length === next.agentPath.length
|
|
26
|
+
&& held.agentPath.every((segment, index) => segment === next.agentPath[index]);
|
|
17
27
|
}
|
|
18
28
|
/**
|
|
19
29
|
* Optional consumer-side aggregation: wrap an observer so consecutive
|
|
20
|
-
* text/reasoning
|
|
21
|
-
* A merged
|
|
22
|
-
*
|
|
30
|
+
* text/reasoning deltas of one agent arrive as one merged record instead of a
|
|
31
|
+
* token stream. A merged record flushes when the view kind or agent changes,
|
|
32
|
+
* a non-delta record arrives, or (when `maxHoldMs` is set) the stream goes
|
|
23
33
|
* quiet for that long (a stalled model pause must not hold text hostage;
|
|
24
|
-
* order is safe because only consecutive same-
|
|
25
|
-
*
|
|
26
|
-
* decorator over the side-tap
|
|
34
|
+
* order is safe because only consecutive same-lane deltas are ever held). It
|
|
35
|
+
* carries the LAST delta's envelope and native frame with the concatenated
|
|
36
|
+
* text. Purely a decorator over the side-tap: adapters and the kernel are
|
|
37
|
+
* unaware, and the retained log keeps every original record.
|
|
27
38
|
*/
|
|
28
39
|
export function aggregateDeltas(observer, options = {}) {
|
|
29
40
|
let held = null;
|
|
@@ -34,9 +45,9 @@ export function aggregateDeltas(observer, options = {}) {
|
|
|
34
45
|
holdTimer = null;
|
|
35
46
|
}
|
|
36
47
|
if (held !== null) {
|
|
37
|
-
const
|
|
48
|
+
const record = held;
|
|
38
49
|
held = null;
|
|
39
|
-
observer(
|
|
50
|
+
observer(record);
|
|
40
51
|
}
|
|
41
52
|
};
|
|
42
53
|
const armHoldTimer = () => {
|
|
@@ -48,23 +59,22 @@ export function aggregateDeltas(observer, options = {}) {
|
|
|
48
59
|
}
|
|
49
60
|
holdTimer = setTimeout(flush, options.maxHoldMs);
|
|
50
61
|
};
|
|
51
|
-
return (
|
|
52
|
-
const text = textOf(
|
|
53
|
-
if (text !== null) {
|
|
62
|
+
return (record) => {
|
|
63
|
+
const text = record.kind === "event" ? textOf(record) : null;
|
|
64
|
+
if (record.kind === "event" && text !== null) {
|
|
54
65
|
const previousText = held === null ? null : textOf(held);
|
|
55
|
-
if (held !== null && previousText !== null
|
|
56
|
-
|
|
57
|
-
held = withText(event, `${previousText}${text}`);
|
|
66
|
+
if (held !== null && previousText !== null && sameLane(held, record)) {
|
|
67
|
+
held = withText(record, `${previousText}${text}`);
|
|
58
68
|
armHoldTimer();
|
|
59
69
|
return;
|
|
60
70
|
}
|
|
61
71
|
flush();
|
|
62
|
-
held =
|
|
72
|
+
held = record;
|
|
63
73
|
armHoldTimer();
|
|
64
74
|
return;
|
|
65
75
|
}
|
|
66
76
|
flush();
|
|
67
|
-
observer(
|
|
77
|
+
observer(record);
|
|
68
78
|
};
|
|
69
79
|
}
|
|
70
80
|
//# sourceMappingURL=aggregate-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-events.js","sourceRoot":"","sources":["../../src/observe/aggregate-events.ts"],"names":[],"mappings":"AAEA,SAAS,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"aggregate-events.js","sourceRoot":"","sources":["../../src/observe/aggregate-events.ts"],"names":[],"mappings":"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"}
|
package/dist/observe/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser-safe observe subpath: the pure derivation utilities over
|
|
3
|
-
*
|
|
3
|
+
* SessionRecords, with ZERO Node and ZERO adapter imports. A renderer can
|
|
4
4
|
* value-import `@botiverse/oar/observe` directly without dragging the runtime
|
|
5
5
|
* adapters (node:child_process, the pi SDK, …) into a browser bundle. The
|
|
6
6
|
* root `@botiverse/oar` re-exports these too, for Node consumers.
|
|
@@ -14,4 +14,7 @@ export { observeAgent, simpleStateOf } from "./observe-agent.js";
|
|
|
14
14
|
export type { AgentObserver, AgentView, ObserveAgentOptions } from "./observe-agent.js";
|
|
15
15
|
export { classifyTool, toolActionLabel } from "./tool-activity.js";
|
|
16
16
|
export type { ToolAction, ToolActionKind } from "./tool-activity.js";
|
|
17
|
+
export { awaitTurnEnd, promptAndWait, turnEndAfter } from "./turns.js";
|
|
18
|
+
export type { PromptRun } from "./turns.js";
|
|
19
|
+
export { contextUsageOf, modelOf, usageOf } from "./usage.js";
|
|
17
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/observe/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser-safe observe subpath: the pure derivation utilities over
|
|
3
|
-
*
|
|
3
|
+
* SessionRecords, with ZERO Node and ZERO adapter imports. A renderer can
|
|
4
4
|
* value-import `@botiverse/oar/observe` directly without dragging the runtime
|
|
5
5
|
* adapters (node:child_process, the pi SDK, …) into a browser bundle. The
|
|
6
6
|
* root `@botiverse/oar` re-exports these too, for Node consumers.
|
|
@@ -10,4 +10,6 @@ export { initialStatus, reduceStatus, stallOf } from "./agent-status.js";
|
|
|
10
10
|
export { observeStalls } from "./stall-observer.js";
|
|
11
11
|
export { observeAgent, simpleStateOf } from "./observe-agent.js";
|
|
12
12
|
export { classifyTool, toolActionLabel } from "./tool-activity.js";
|
|
13
|
+
export { awaitTurnEnd, promptAndWait, turnEndAfter } from "./turns.js";
|
|
14
|
+
export { contextUsageOf, modelOf, usageOf } from "./usage.js";
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observe/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -2,16 +2,16 @@ import type { Session } from "../contracts/session.js";
|
|
|
2
2
|
import { type AgentStatus } from "./agent-status.js";
|
|
3
3
|
/**
|
|
4
4
|
* The composed observer: one subscription yields a unified derived view of
|
|
5
|
-
* the agent
|
|
5
|
+
* the agent: fold state plus the clock overlay. This is the wiring every
|
|
6
6
|
* host was about to hand-roll (subscribe + fold + a ticker): pushed on every
|
|
7
|
-
*
|
|
7
|
+
* record (the fold advances) and on the silence edge (the clock crosses the
|
|
8
8
|
* threshold). The primitives (reduceStatus/stallOf) stay exported for
|
|
9
9
|
* consumers with their own composition needs.
|
|
10
10
|
*/
|
|
11
11
|
export interface AgentView {
|
|
12
12
|
readonly status: AgentStatus;
|
|
13
13
|
readonly stall: {
|
|
14
|
-
readonly
|
|
14
|
+
readonly sinceSeq: number;
|
|
15
15
|
readonly silentForMs: number;
|
|
16
16
|
} | null;
|
|
17
17
|
}
|
|
@@ -31,7 +31,7 @@ export declare function observeAgent(session: Session, options: ObserveAgentOpti
|
|
|
31
31
|
/**
|
|
32
32
|
* The four-word collapse for consumers who want exactly idle/busy/stuck/error.
|
|
33
33
|
* Precedence: stuck beats busy (a silent turn is a problem before it is
|
|
34
|
-
* progress); error means "idle after a failed last turn"
|
|
34
|
+
* progress); error means "idle after a failed last turn", a report about
|
|
35
35
|
* history, never a running state (see the status-bar design notes).
|
|
36
36
|
*/
|
|
37
37
|
export declare function simpleStateOf(view: AgentView): "idle" | "busy" | "stuck" | "error";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-agent.d.ts","sourceRoot":"","sources":["../../src/observe/observe-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3F;;;;;;;GAOG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"observe-agent.d.ts","sourceRoot":"","sources":["../../src/observe/observe-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3F;;;;;;;GAOG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,GAAG,aAAa,CA6C1F;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAQlF"}
|
|
@@ -17,8 +17,8 @@ export function observeAgent(session, options) {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
|
-
const unsubscribe = session.subscribe((
|
|
21
|
-
status = reduceStatus(status,
|
|
20
|
+
const unsubscribe = session.subscribe((record) => {
|
|
21
|
+
status = reduceStatus(status, record, session.id);
|
|
22
22
|
push();
|
|
23
23
|
});
|
|
24
24
|
const ticker = setInterval(() => {
|
|
@@ -46,7 +46,7 @@ export function observeAgent(session, options) {
|
|
|
46
46
|
/**
|
|
47
47
|
* The four-word collapse for consumers who want exactly idle/busy/stuck/error.
|
|
48
48
|
* Precedence: stuck beats busy (a silent turn is a problem before it is
|
|
49
|
-
* progress); error means "idle after a failed last turn"
|
|
49
|
+
* progress); error means "idle after a failed last turn", a report about
|
|
50
50
|
* history, never a running state (see the status-bar design notes).
|
|
51
51
|
*/
|
|
52
52
|
export function simpleStateOf(view) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-agent.js","sourceRoot":"","sources":["../../src/observe/observe-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AA8B3F,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAA4B;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,IAAI,MAAM,GAAgB,aAAa,CAAC;IACxC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,IAAI,GAAG,GAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;QACvB,WAAW,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"observe-agent.js","sourceRoot":"","sources":["../../src/observe/observe-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AA8B3F,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAA4B;IACzE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,IAAI,MAAM,GAAgB,aAAa,CAAC;IACxC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,MAAM,IAAI,GAAG,GAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC;QACvB,WAAW,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;QACrC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/C,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,iDAAiD;QACjD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;QACzE,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAE3B,OAAO;QACL,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACjB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;QACD,OAAO;YACL,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,WAAW,EAAE,CAAC;YACd,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3E,CAAC"}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import type { Session, Unsubscribe } from "../contracts/session.js";
|
|
2
2
|
/**
|
|
3
|
-
* Convenience layer over the public status reducer: fold the session's
|
|
3
|
+
* Convenience layer over the public status reducer: fold the session's records
|
|
4
4
|
* with reduceStatus, ask stallOf with the wall clock, and report when an
|
|
5
5
|
* active turn has been silent for `stallAfterMs`. There is deliberately no
|
|
6
|
-
* second state machine here
|
|
7
|
-
* Fires once per silence episode; the next
|
|
8
|
-
* decides what a stall means (surface, notify, or abort
|
|
6
|
+
* second state machine here; the reducer is the single source of truth.
|
|
7
|
+
* Fires once per silence episode; the next record re-arms it. The embedder
|
|
8
|
+
* decides what a stall means (surface, notify, or abort the session).
|
|
9
9
|
*/
|
|
10
10
|
export interface StallInfo {
|
|
11
|
-
readonly
|
|
11
|
+
readonly sinceSeq: number;
|
|
12
12
|
readonly silentForMs: number;
|
|
13
|
-
|
|
13
|
+
/** `kind` of the last folded record, with the event's last view kind when it had one (e.g. `event:tool_call_started`). */
|
|
14
|
+
readonly lastRecordKind: string;
|
|
14
15
|
}
|
|
15
16
|
export declare function observeStalls(session: Session, options: {
|
|
16
17
|
readonly stallAfterMs: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-observer.d.ts","sourceRoot":"","sources":["../../src/observe/stall-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGpE;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"stall-observer.d.ts","sourceRoot":"","sources":["../../src/observe/stall-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGpE;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,0HAA0H;IAC1H,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE,GACtF,WAAW,CAoCb"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { initialStatus, reduceStatus, stallOf } from "./agent-status.js";
|
|
2
2
|
export function observeStalls(session, options) {
|
|
3
3
|
let status = initialStatus;
|
|
4
|
-
let
|
|
4
|
+
let lastRecordKind = "";
|
|
5
5
|
let timer = null;
|
|
6
6
|
const disarm = () => {
|
|
7
7
|
if (timer !== null) {
|
|
@@ -14,13 +14,14 @@ export function observeStalls(session, options) {
|
|
|
14
14
|
timer = setTimeout(() => {
|
|
15
15
|
const stall = stallOf(status, Date.now(), options.stallAfterMs);
|
|
16
16
|
if (stall !== null) {
|
|
17
|
-
options.onStall({ ...stall,
|
|
17
|
+
options.onStall({ ...stall, lastRecordKind });
|
|
18
18
|
}
|
|
19
19
|
}, options.stallAfterMs);
|
|
20
20
|
};
|
|
21
|
-
const unsubscribe = session.subscribe((
|
|
22
|
-
status = reduceStatus(status,
|
|
23
|
-
|
|
21
|
+
const unsubscribe = session.subscribe((record) => {
|
|
22
|
+
status = reduceStatus(status, record, session.id);
|
|
23
|
+
const lastView = record.kind === "event" ? record.body.views.at(-1) : undefined;
|
|
24
|
+
lastRecordKind = lastView === undefined ? record.kind : `event:${lastView.kind}`;
|
|
24
25
|
if (status.kind === "running") {
|
|
25
26
|
arm();
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stall-observer.js","sourceRoot":"","sources":["../../src/observe/stall-observer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"stall-observer.js","sourceRoot":"","sources":["../../src/observe/stall-observer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAiB3F,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,OAAuF;IAEvF,IAAI,MAAM,GAAgB,aAAa,CAAC;IACxC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,KAAK,GAA0B,IAAI,CAAC;IAExC,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,MAAM,EAAE,CAAC;QACT,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAChE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/C,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,cAAc,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,GAAG,EAAE,CAAC;QACR,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cross-runtime tool classification
|
|
2
|
+
* Cross-runtime tool classification: the friendly-Activity utility. Each
|
|
3
3
|
* runtime names the same action differently (claude "Bash", codex
|
|
4
4
|
* "commandExecution", pi "bash"); only OAR knows the mapping, so it lives
|
|
5
5
|
* here. Pure: raw tool_call events stay the source of truth; a friendly view
|
|
@@ -16,6 +16,6 @@ export interface ToolAction {
|
|
|
16
16
|
}
|
|
17
17
|
/** Classify one tool call into a cross-runtime semantic action plus an extracted detail. */
|
|
18
18
|
export declare function classifyTool(runtimeId: string, tool: string, inputJson?: string): ToolAction;
|
|
19
|
-
/** The human label for an action in a given lifecycle state
|
|
19
|
+
/** The human label for an action in a given lifecycle state; tense centralized here so views stay consistent. */
|
|
20
20
|
export declare function toolActionLabel(kind: ToolActionKind, state: "running" | "done" | "failed"): string;
|
|
21
21
|
//# 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":"AAEA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,WAAW,GACX,QAAQ,GACR,KAAK,GACL,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAI5F;AAYD,
|
|
1
|
+
{"version":3,"file":"tool-activity.d.ts","sourceRoot":"","sources":["../../src/observe/tool-activity.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,WAAW,GACX,WAAW,GACX,QAAQ,GACR,KAAK,GACL,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAwED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,CAI5F;AAYD,iHAAiH;AACjH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAElG"}
|
|
@@ -80,7 +80,7 @@ const LABELS = {
|
|
|
80
80
|
mcp: { running: "Using a tool", done: "Used a tool", failed: "Tool failed" },
|
|
81
81
|
other: { running: "Working", done: "Done", failed: "Failed" },
|
|
82
82
|
};
|
|
83
|
-
/** The human label for an action in a given lifecycle state
|
|
83
|
+
/** The human label for an action in a given lifecycle state; tense centralized here so views stay consistent. */
|
|
84
84
|
export function toolActionLabel(kind, state) {
|
|
85
85
|
return LABELS[kind][state];
|
|
86
86
|
}
|