@senpi/runtime 3.0.173 → 3.0.181
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/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +48 -3
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts +8 -0
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +56 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +42 -6
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts.map +1 -1
- package/dist/actions/open-position/resolve-margin.js +7 -0
- package/dist/actions/open-position/resolve-margin.js.map +1 -1
- package/dist/approvals/approval-store.d.ts +37 -7
- package/dist/approvals/approval-store.d.ts.map +1 -1
- package/dist/approvals/approval-store.js +127 -23
- package/dist/approvals/approval-store.js.map +1 -1
- package/dist/approvals/manifest.d.ts.map +1 -1
- package/dist/approvals/manifest.js +0 -5
- package/dist/approvals/manifest.js.map +1 -1
- package/dist/approvals/telemetry.d.ts +27 -3
- package/dist/approvals/telemetry.d.ts.map +1 -1
- package/dist/approvals/telemetry.js +8 -4
- package/dist/approvals/telemetry.js.map +1 -1
- package/dist/approvals/tool-approval-gate.d.ts +79 -0
- package/dist/approvals/tool-approval-gate.d.ts.map +1 -1
- package/dist/approvals/tool-approval-gate.js +184 -21
- package/dist/approvals/tool-approval-gate.js.map +1 -1
- package/dist/approvals/tool-approvals-manifest.json +0 -2
- package/dist/approvals/turn-context.d.ts +271 -0
- package/dist/approvals/turn-context.d.ts.map +1 -0
- package/dist/approvals/turn-context.js +551 -0
- package/dist/approvals/turn-context.js.map +1 -0
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +43 -8
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +91 -12
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/constants/dsl/index.d.ts +2 -0
- package/dist/constants/dsl/index.d.ts.map +1 -1
- package/dist/constants/dsl/index.js +2 -0
- package/dist/constants/dsl/index.js.map +1 -1
- package/dist/constants/order-types.d.ts.map +1 -1
- package/dist/constants/order-types.js +4 -1
- package/dist/constants/order-types.js.map +1 -1
- package/dist/deploy/job.d.ts +32 -0
- package/dist/deploy/job.d.ts.map +1 -1
- package/dist/deploy/job.js +72 -7
- package/dist/deploy/job.js.map +1 -1
- package/dist/deploy/messages.d.ts +15 -1
- package/dist/deploy/messages.d.ts.map +1 -1
- package/dist/deploy/messages.js +78 -0
- package/dist/deploy/messages.js.map +1 -1
- package/dist/deploy/orchestrator.d.ts +11 -1
- package/dist/deploy/orchestrator.d.ts.map +1 -1
- package/dist/deploy/orchestrator.js +111 -15
- package/dist/deploy/orchestrator.js.map +1 -1
- package/dist/deploy/register.d.ts +18 -0
- package/dist/deploy/register.d.ts.map +1 -1
- package/dist/deploy/register.js +93 -2
- package/dist/deploy/register.js.map +1 -1
- package/dist/dsl/engine/exchange-stop.d.ts +21 -1
- package/dist/dsl/engine/exchange-stop.d.ts.map +1 -1
- package/dist/dsl/engine/exchange-stop.js +27 -1
- package/dist/dsl/engine/exchange-stop.js.map +1 -1
- package/dist/dsl/engine/floors.d.ts +2 -1
- package/dist/dsl/engine/floors.d.ts.map +1 -1
- package/dist/dsl/engine/floors.js +2 -1
- package/dist/dsl/engine/floors.js.map +1 -1
- package/dist/dsl/engine/index.d.ts +1 -1
- package/dist/dsl/engine/index.d.ts.map +1 -1
- package/dist/dsl/engine/index.js +1 -1
- package/dist/dsl/engine/index.js.map +1 -1
- package/dist/dsl/engine/tick.d.ts.map +1 -1
- package/dist/dsl/engine/tick.js +4 -3
- package/dist/dsl/engine/tick.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +7 -3
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +10 -4
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +2 -0
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/exchange-sync.d.ts +1 -0
- package/dist/dsl/monitor/exchange-sync.d.ts.map +1 -1
- package/dist/dsl/monitor/exchange-sync.js +7 -14
- package/dist/dsl/monitor/exchange-sync.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +108 -17
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/notifications/formatter.d.ts +2 -1
- package/dist/dsl/notifications/formatter.d.ts.map +1 -1
- package/dist/dsl/notifications/formatter.js +18 -1
- package/dist/dsl/notifications/formatter.js.map +1 -1
- package/dist/health/types.d.ts +6 -1
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js.map +1 -1
- package/dist/host/openclaw-host.d.ts +138 -0
- package/dist/host/openclaw-host.d.ts.map +1 -0
- package/dist/host/openclaw-host.js +177 -0
- package/dist/host/openclaw-host.js.map +1 -0
- package/dist/index.d.ts +46 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +318 -38
- package/dist/index.js.map +1 -1
- package/dist/leverage/max-leverage-cache.d.ts +25 -0
- package/dist/leverage/max-leverage-cache.d.ts.map +1 -1
- package/dist/leverage/max-leverage-cache.js +77 -0
- package/dist/leverage/max-leverage-cache.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.d.ts +203 -0
- package/dist/runtime/auto-update/coordinator.d.ts.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +621 -12
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/auto-update/gateway-restart.d.ts +60 -1
- package/dist/runtime/auto-update/gateway-restart.d.ts.map +1 -1
- package/dist/runtime/auto-update/gateway-restart.js +95 -21
- package/dist/runtime/auto-update/gateway-restart.js.map +1 -1
- package/dist/runtime/auto-update/idle-gate.d.ts +139 -0
- package/dist/runtime/auto-update/idle-gate.d.ts.map +1 -0
- package/dist/runtime/auto-update/idle-gate.js +217 -0
- package/dist/runtime/auto-update/idle-gate.js.map +1 -0
- package/dist/runtime/auto-update/install-results.d.ts +130 -0
- package/dist/runtime/auto-update/install-results.d.ts.map +1 -0
- package/dist/runtime/auto-update/install-results.js +264 -0
- package/dist/runtime/auto-update/install-results.js.map +1 -0
- package/dist/runtime/auto-update/money-call-tracker.d.ts +36 -0
- package/dist/runtime/auto-update/money-call-tracker.d.ts.map +1 -0
- package/dist/runtime/auto-update/money-call-tracker.js +129 -0
- package/dist/runtime/auto-update/money-call-tracker.js.map +1 -0
- package/dist/runtime/auto-update/register-idle-gate.d.ts +70 -0
- package/dist/runtime/auto-update/register-idle-gate.d.ts.map +1 -0
- package/dist/runtime/auto-update/register-idle-gate.js +123 -0
- package/dist/runtime/auto-update/register-idle-gate.js.map +1 -0
- package/dist/runtime/auto-update/run-update-command.d.ts +13 -0
- package/dist/runtime/auto-update/run-update-command.d.ts.map +1 -1
- package/dist/runtime/auto-update/run-update-command.js +18 -0
- package/dist/runtime/auto-update/run-update-command.js.map +1 -1
- package/dist/runtime/auto-update/state-store.d.ts +14 -1
- package/dist/runtime/auto-update/state-store.d.ts.map +1 -1
- package/dist/runtime/auto-update/state-store.js +37 -3
- package/dist/runtime/auto-update/state-store.js.map +1 -1
- package/dist/runtime/auto-update/types.d.ts +51 -0
- package/dist/runtime/auto-update/types.d.ts.map +1 -1
- package/dist/runtime/auto-update/types.js.map +1 -1
- package/dist/runtime/auto-update/update-marker.d.ts +95 -0
- package/dist/runtime/auto-update/update-marker.d.ts.map +1 -0
- package/dist/runtime/auto-update/update-marker.js +185 -0
- package/dist/runtime/auto-update/update-marker.js.map +1 -0
- package/dist/runtime/auto-update/update-schedule.d.ts +57 -0
- package/dist/runtime/auto-update/update-schedule.d.ts.map +1 -0
- package/dist/runtime/auto-update/update-schedule.js +75 -0
- package/dist/runtime/auto-update/update-schedule.js.map +1 -0
- package/dist/runtime/create-scanner-module.d.ts +1 -1
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +2 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/decision-errors.d.ts +7 -0
- package/dist/runtime/decision-errors.d.ts.map +1 -1
- package/dist/runtime/decision-errors.js +15 -0
- package/dist/runtime/decision-errors.js.map +1 -1
- package/dist/runtime/lifecycle-events.d.ts +1 -1
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +10 -1
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/runtime-descriptor.d.ts +11 -2
- package/dist/runtime/runtime-descriptor.d.ts.map +1 -1
- package/dist/runtime/runtime-descriptor.js +11 -2
- package/dist/runtime/runtime-descriptor.js.map +1 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +4 -3
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/strategy-lifecycle.js +1 -1
- package/dist/runtime/strategy-lifecycle.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.d.ts +17 -3
- package/dist/runtime-api/intake/acceptance-record.d.ts.map +1 -1
- package/dist/runtime-api/intake/acceptance-record.js +57 -32
- package/dist/runtime-api/intake/acceptance-record.js.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +6 -5
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-events.js +9 -3
- package/dist/runtime-api/intake/intake-events.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +34 -31
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.d.ts +8 -0
- package/dist/runtime-api/intake/scaffold-error-router.d.ts.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.js +9 -0
- package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +9 -0
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/intake/types.js +5 -1
- package/dist/runtime-api/intake/types.js.map +1 -1
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +25 -1
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +2 -0
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +4 -0
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/scanners/engine/data-providers.d.ts +6 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -1
- package/dist/scanners/engine/data-providers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +9 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +29 -6
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/external/scaffold/ctx.py +55 -1
- package/dist/scanners/external/scaffold/delivery.py +92 -28
- package/dist/scanners/external/scaffold/preflight.py +1 -1
- package/dist/scanners/external/scaffold/scaffold.py +75 -2
- package/dist/scanners/runtime-module.d.ts +2 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +14 -0
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/senpi/client.d.ts +36 -1
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +100 -8
- package/dist/senpi/client.js.map +1 -1
- package/dist/senpi/types.d.ts +54 -2
- package/dist/senpi/types.d.ts.map +1 -1
- package/dist/telemetry/metrics.d.ts +15 -1
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +25 -1
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/otel-sdk.d.ts +12 -0
- package/dist/telemetry/otel-sdk.d.ts.map +1 -1
- package/dist/telemetry/otel-sdk.js +47 -1
- package/dist/telemetry/otel-sdk.js.map +1 -1
- package/dist/telemetry/spans/span-hooks.d.ts +18 -1
- package/dist/telemetry/spans/span-hooks.d.ts.map +1 -1
- package/dist/telemetry/spans/span-hooks.js +306 -96
- package/dist/telemetry/spans/span-hooks.js.map +1 -1
- package/dist/telemetry/tool-plane.d.ts +2 -0
- package/dist/telemetry/tool-plane.d.ts.map +1 -1
- package/dist/telemetry/tool-plane.js +1 -0
- package/dist/telemetry/tool-plane.js.map +1 -1
- package/dist/tool-surface/crib-cache.d.ts +21 -0
- package/dist/tool-surface/crib-cache.d.ts.map +1 -0
- package/dist/tool-surface/crib-cache.js +54 -0
- package/dist/tool-surface/crib-cache.js.map +1 -0
- package/dist/tool-surface/crib-hook.d.ts +78 -0
- package/dist/tool-surface/crib-hook.d.ts.map +1 -0
- package/dist/tool-surface/crib-hook.js +217 -0
- package/dist/tool-surface/crib-hook.js.map +1 -0
- package/dist/tool-surface/crib-sheet.d.ts +56 -0
- package/dist/tool-surface/crib-sheet.d.ts.map +1 -0
- package/dist/tool-surface/crib-sheet.js +129 -0
- package/dist/tool-surface/crib-sheet.js.map +1 -0
- package/dist/tool-surface/mcp-tool-source.d.ts +64 -0
- package/dist/tool-surface/mcp-tool-source.d.ts.map +1 -0
- package/dist/tool-surface/mcp-tool-source.js +189 -0
- package/dist/tool-surface/mcp-tool-source.js.map +1 -0
- package/dist/types/dsl/index.d.ts +4 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +141 -10
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +23 -1
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/perp-coin.d.ts.map +1 -1
- package/dist/utils/perp-coin.js +2 -1
- package/dist/utils/perp-coin.js.map +1 -1
- package/dist/utils/resolve-order-type.d.ts.map +1 -1
- package/dist/utils/resolve-order-type.js +5 -1
- package/dist/utils/resolve-order-type.js.map +1 -1
- package/dist/validate/codes.d.ts +2 -0
- package/dist/validate/codes.d.ts.map +1 -1
- package/dist/validate/codes.js +6 -0
- package/dist/validate/codes.js.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +1 -1
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/recipe-checks.d.ts +7 -0
- package/dist/validate/recipe-checks.d.ts.map +1 -1
- package/dist/validate/recipe-checks.js +18 -0
- package/dist/validate/recipe-checks.js.map +1 -1
- package/dist/validate/recipe.d.ts.map +1 -1
- package/dist/validate/recipe.js +2 -1
- package/dist/validate/recipe.js.map +1 -1
- package/dist/widgets/tool.d.ts +9 -0
- package/dist/widgets/tool.d.ts.map +1 -1
- package/dist/widgets/tool.js +1 -0
- package/dist/widgets/tool.js.map +1 -1
- package/examples/strategies/README.md +2 -1
- package/examples/strategies/iguana/README.md +3 -3
- package/examples/strategies/raptor/README.md +3 -3
- package/openclaw.plugin.json +11 -1
- package/package.json +5 -2
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which kind of turn a tool call belongs to: a direct user chat, a cron run, a
|
|
3
|
+
* heartbeat, or another run (R6, D13, D15).
|
|
4
|
+
*
|
|
5
|
+
* The tool hooks' context carries no run trigger on any host
|
|
6
|
+
* (`PluginHookToolContext`, `openclaw-worktrees/v2026.10.10-beta.3/src/plugins/hook-types.ts:526-548`),
|
|
7
|
+
* but `before_prompt_build`'s agent context does (`trigger`, same field on
|
|
8
|
+
* 5.7, 5.12 and 10.x), and both carry the run id. The tracker records
|
|
9
|
+
* `runId → {sessionKey, trigger}` at prompt build and forgets the run at
|
|
10
|
+
* `agent_end`, so the approval gate can read the turn kind of the call it is
|
|
11
|
+
* gating.
|
|
12
|
+
*
|
|
13
|
+
* On 10.x `before_prompt_build` is a conversation hook: without
|
|
14
|
+
* `plugins.entries.runtime.hooks.allowConversationAccess` nothing is recorded
|
|
15
|
+
* and every lookup reads `unknown` ({@link turnClassificationAvailable} says so
|
|
16
|
+
* at boot).
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Maps a bare host run trigger to a {@link TurnKind}: `user` is a chat;
|
|
20
|
+
* `cron` and `heartbeat` are scheduled runs; any other trigger (`event`,
|
|
21
|
+
* `memory`, `manual`, `overflow`) is `other`; a missing one is `unknown`. The
|
|
22
|
+
* tracker uses it only after the run's provenance has been checked: a
|
|
23
|
+
* `user` trigger alone does not make a run a chat (see {@link TurnContextTracker}).
|
|
24
|
+
*/
|
|
25
|
+
export function turnKindOf(trigger) {
|
|
26
|
+
if (typeof trigger !== "string" || trigger.trim() === "")
|
|
27
|
+
return "unknown";
|
|
28
|
+
const t = trigger.trim();
|
|
29
|
+
if (t === "user")
|
|
30
|
+
return "chat";
|
|
31
|
+
if (t === "cron" || t === "heartbeat")
|
|
32
|
+
return t;
|
|
33
|
+
return "other";
|
|
34
|
+
}
|
|
35
|
+
function nonEmpty(value) {
|
|
36
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
37
|
+
}
|
|
38
|
+
function rec(value) {
|
|
39
|
+
return value && typeof value === "object" ? value : undefined;
|
|
40
|
+
}
|
|
41
|
+
/** The part of `agent:<agentId>:<rest>` after the agent id, lowercased; the whole key when it has another shape. */
|
|
42
|
+
function sessionRest(sessionKey) {
|
|
43
|
+
if (!sessionKey)
|
|
44
|
+
return "";
|
|
45
|
+
const parts = sessionKey.split(":");
|
|
46
|
+
return (parts[0] === "agent" && parts.length > 2 ? parts.slice(2).join(":") : sessionKey).toLowerCase();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A session the host creates for a spawned child: `agent:<id>:subagent:<uuid>`
|
|
50
|
+
* (10.10 `src/agents/subagents/spawn-plan.ts:64-65`, `:subagent:incognito-…`
|
|
51
|
+
* at `subagent-spawn-child-plan.ts:95`; 5.12/5.7 `subagent-spawn.ts:829/821`)
|
|
52
|
+
* or an ACP child `agent:<id>:acp:<uuid>`.
|
|
53
|
+
*/
|
|
54
|
+
export function isChildSession(sessionKey) {
|
|
55
|
+
const rest = sessionRest(sessionKey);
|
|
56
|
+
return rest.startsWith("subagent:") || rest.startsWith("acp:");
|
|
57
|
+
}
|
|
58
|
+
/** The agent id of an `agent:<agentId>:<rest>` key, lowercased; `undefined` for another shape. */
|
|
59
|
+
function sessionAgent(sessionKey) {
|
|
60
|
+
const parts = sessionKey?.trim().toLowerCase().split(":");
|
|
61
|
+
return parts && parts[0] === "agent" && parts.length > 2 ? parts[1] : undefined;
|
|
62
|
+
}
|
|
63
|
+
/** Bounded insertion-ordered map: setting a key moves it to the end; the oldest key goes past `max`. */
|
|
64
|
+
function boundedSet(map, key, value, max) {
|
|
65
|
+
map.delete(key);
|
|
66
|
+
map.set(key, value);
|
|
67
|
+
while (map.size > max)
|
|
68
|
+
map.delete(map.keys().next().value);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* How long a `sessions_send` / `sessions_spawn` call stays matchable to the
|
|
72
|
+
* run it starts (the send's target run, the spawned child). That run normally
|
|
73
|
+
* starts within seconds; a target busy with another run queues the message,
|
|
74
|
+
* so the window is generous. Past it, the origin run is unidentified and the
|
|
75
|
+
* started run is not chat.
|
|
76
|
+
*/
|
|
77
|
+
export const SESSIONS_SEND_MATCH_WINDOW_MS = 10 * 60_000;
|
|
78
|
+
/** Pending origin calls (and open send exchanges) kept at once; the oldest are dropped first. */
|
|
79
|
+
const MAX_ORIGIN_CALLS = 256;
|
|
80
|
+
/**
|
|
81
|
+
* Whether a `sessions_send` target as named (`agent:main:ops`, or a short
|
|
82
|
+
* `ops`) is the session `sessionKey`. A short name matches the key's tail.
|
|
83
|
+
*/
|
|
84
|
+
function targetMatches(named, sessionKey) {
|
|
85
|
+
if (!named || !sessionKey)
|
|
86
|
+
return false;
|
|
87
|
+
const n = named.trim().toLowerCase();
|
|
88
|
+
const k = sessionKey.trim().toLowerCase();
|
|
89
|
+
return n === k || (!n.startsWith("agent:") && k.endsWith(`:${n}`));
|
|
90
|
+
}
|
|
91
|
+
/** The JSON details of a 10.10 tool result (`jsonResult`: `{ content: [{ text }], details }`, `tool-results.ts:10-12`). */
|
|
92
|
+
function resultDetails(result) {
|
|
93
|
+
const r = rec(result);
|
|
94
|
+
const details = rec(r?.details);
|
|
95
|
+
if (details)
|
|
96
|
+
return details;
|
|
97
|
+
const text = rec(Array.isArray(r?.content) ? r.content[0] : undefined)?.text;
|
|
98
|
+
if (typeof text === "string") {
|
|
99
|
+
try {
|
|
100
|
+
return rec(JSON.parse(text));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return typeof r?.status === "string" ? r : undefined;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Whether a `sessions_send` result says no target run was (or will be)
|
|
110
|
+
* started for it, or that its run already finished, so the pending call can
|
|
111
|
+
* never be matched correctly (10.10 `sessions-send-tool.schema.ts:30-104`).
|
|
112
|
+
*/
|
|
113
|
+
function sendStartedNoRunToMatch(d) {
|
|
114
|
+
const status = d.status;
|
|
115
|
+
if ((status === "error" || status === "forbidden") && d.sentBeforeError !== true)
|
|
116
|
+
return true;
|
|
117
|
+
if (status === "queued" && d.runStarted === false)
|
|
118
|
+
return true;
|
|
119
|
+
if (status === "accepted" && d.targetDisposition === "steered")
|
|
120
|
+
return true;
|
|
121
|
+
return status === "ok" || status === "no_reply";
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Recent runs by id, bounded, plus what each session's last run was and which
|
|
125
|
+
* kind each spawned child session inherited.
|
|
126
|
+
*
|
|
127
|
+
* Classification (D15: only a run positively identified as a direct chat turn
|
|
128
|
+
* is `chat`; anything not resolvable is not chat), from the
|
|
129
|
+
* `before_prompt_build` context (10.10 `attempt-prompt-build.ts:150-159`:
|
|
130
|
+
* `runId`, `jobId`, `sessionKey`, `trigger`, `inputProvenance`; 5.7/5.12 carry
|
|
131
|
+
* `runId`, `sessionKey`, `trigger` only, `attempt.ts:2563-2574` / `:2948-2959`):
|
|
132
|
+
*
|
|
133
|
+
* 1. `trigger` `cron` / `heartbeat` → that kind.
|
|
134
|
+
* 2. A `sessions_send` target (`inputProvenance` `inter_session` with
|
|
135
|
+
* `sourceTool: "sessions_send"`, 10.10 `sessions-send-tool.ts:477-483`) →
|
|
136
|
+
* the kind of the run that SENT it. The provenance names only the source
|
|
137
|
+
* session, not the sending run, so the sending run is identified from the
|
|
138
|
+
* `sessions_send` call itself: {@link onToolCall} records the calling run's
|
|
139
|
+
* kind with its source session and its named target at `before_tool_call`.
|
|
140
|
+
* A target run consumes the oldest pending send from `sourceSessionKey`
|
|
141
|
+
* whose target is the run's own session, inside
|
|
142
|
+
* {@link SESSIONS_SEND_MATCH_WINDOW_MS}. {@link onToolResult} drops a send
|
|
143
|
+
* whose result says no run was started for it (an error, a `steered` or
|
|
144
|
+
* unstarted `queued` delivery) or that it already finished, and gives a
|
|
145
|
+
* send addressed by `label` / `agentId` its resolved target. Until that
|
|
146
|
+
* result arrives (in wait mode the target run starts while the call is
|
|
147
|
+
* still open), such a send matches a run in any session of the named
|
|
148
|
+
* agent (any agent for a bare label), and only when no send with an exact
|
|
149
|
+
* target matches; candidates of different kinds still read `other`.
|
|
150
|
+
* The reply-back run is recognised too (10.10 `sessions-send-tool.a2a.ts:100,201-208`).
|
|
151
|
+
* It runs in the REQUESTER session, with the target as `sourceSessionKey`
|
|
152
|
+
* and `sourceTool: "sessions_send"`. It takes the kind of the send whose
|
|
153
|
+
* target run started (an open exchange, requester → target). It never
|
|
154
|
+
* takes the requester session's own pending sends.
|
|
155
|
+
* No match, an unclassified sender, or several candidates of different
|
|
156
|
+
* kinds (two runs sending at once; a forward send and a reply-back that
|
|
157
|
+
* could both explain the run) leave the origin unidentified → `other`. A
|
|
158
|
+
* later run on the source session (a chat starting after a heartbeat sent)
|
|
159
|
+
* never changes the answer.
|
|
160
|
+
* Other `inter_session` sources (subagent announce, exec-approval
|
|
161
|
+
* follow-up, `bash-tools.exec-approval-followup.ts:338-342`) → the kind of
|
|
162
|
+
* the `sourceSessionKey` session's last run; `other` when that is unknown.
|
|
163
|
+
* 3. A child session (`subagent:` / `acp:`) → the kind of the run that
|
|
164
|
+
* spawned it. `subagent_spawned` names only the requester session (10.10
|
|
165
|
+
* `subagent-spawn-lifecycle.ts:67-71`: ctx `requesterSessionKey`,
|
|
166
|
+
* `childSessionKey`), so the spawning run is identified the same way as a
|
|
167
|
+
* `sessions_send` sender: {@link onToolCall} records the run's kind at its
|
|
168
|
+
* `sessions_spawn` call (`sessions-spawn-tool.ts:355`), and
|
|
169
|
+
* `subagent_spawned` consumes the oldest pending spawn from the requester
|
|
170
|
+
* session, with the same window and ambiguity rules. Unmatched → `other`.
|
|
171
|
+
* 10.10 hard-codes `trigger: "user"` for these runs
|
|
172
|
+
* (`attempt-execution.ts:349`), and fires `subagent_spawned` after the
|
|
173
|
+
* gateway accepted the child (`subagent-spawn.ts:667`), so a child
|
|
174
|
+
* classified first reads `other` until its origin arrives.
|
|
175
|
+
* 4. `trigger` `event` or `inputProvenance.kind === "internal_system"` (a
|
|
176
|
+
* continuation after background work, `session-event-handoff.ts:509`;
|
|
177
|
+
* neither carries the originating run) → `other`.
|
|
178
|
+
* 5. A `jobId`, or a `cron:` session, with a non-cron trigger → `other`.
|
|
179
|
+
* 6. `trigger` `user` with no provenance or `external_user` provenance (a
|
|
180
|
+
* webchat `chat.send` turn: `reply-turn-kind.ts:18-22`,
|
|
181
|
+
* `chat-send-user-turn.ts:206`) → `chat`.
|
|
182
|
+
* 7. Any other trigger → `other`; none → `unknown`.
|
|
183
|
+
*
|
|
184
|
+
* Known limit: a gateway `agent` call with no provenance on a main session
|
|
185
|
+
* key (an operator `openclaw agent` run) reads as chat; nothing in the
|
|
186
|
+
* context tells it apart from a webchat turn.
|
|
187
|
+
*/
|
|
188
|
+
export class TurnContextTracker {
|
|
189
|
+
maxRuns;
|
|
190
|
+
now;
|
|
191
|
+
runs = new Map();
|
|
192
|
+
latestBySession = new Map();
|
|
193
|
+
/** The kind of each session's last classified run; kept past `agent_end`, for inheritance. */
|
|
194
|
+
lastKindBySession = new Map();
|
|
195
|
+
/** Child session key → the kind it inherited from its requester. */
|
|
196
|
+
childOrigins = new Map();
|
|
197
|
+
/** `sessions_send` / `sessions_spawn` calls waiting for the run they start, oldest first. */
|
|
198
|
+
origins = [];
|
|
199
|
+
/** Sends whose target run started, waiting for their reply-back run, oldest first. */
|
|
200
|
+
exchanges = [];
|
|
201
|
+
/**
|
|
202
|
+
* @param maxRuns - Runs kept at once; the oldest is dropped past it (a missed `agent_end`).
|
|
203
|
+
* @param now - Clock for the `sessions_send` match window.
|
|
204
|
+
*/
|
|
205
|
+
constructor(maxRuns = 256, now = Date.now) {
|
|
206
|
+
this.maxRuns = maxRuns;
|
|
207
|
+
this.now = now;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Records a `sessions_send` or `sessions_spawn` call from a `before_tool_call`
|
|
211
|
+
* event/context: the calling run's kind (`unknown` when that run was never
|
|
212
|
+
* classified), its session keys (the call's and the run's own), and for a
|
|
213
|
+
* send the target it names (`params.sessionKey`; a `label` or `agentId`
|
|
214
|
+
* marks it unresolved until the result names it). Any other tool, or
|
|
215
|
+
* malformed input, is ignored.
|
|
216
|
+
*/
|
|
217
|
+
onToolCall(event, ctx) {
|
|
218
|
+
const e = rec(event);
|
|
219
|
+
const c = rec(ctx);
|
|
220
|
+
const tool = nonEmpty(e?.toolName);
|
|
221
|
+
if (tool !== "sessions_send" && tool !== "sessions_spawn")
|
|
222
|
+
return;
|
|
223
|
+
const runId = nonEmpty(e?.runId) ?? nonEmpty(c?.runId);
|
|
224
|
+
const run = runId ? this.runs.get(runId) : undefined;
|
|
225
|
+
const kind = run ? this.lookup({ runId }).kind : "unknown";
|
|
226
|
+
const sources = [...new Set([nonEmpty(c?.sessionKey), run?.sessionKey])].filter((k) => Boolean(k));
|
|
227
|
+
if (sources.length === 0)
|
|
228
|
+
return;
|
|
229
|
+
this.prune();
|
|
230
|
+
const params = rec(e?.params);
|
|
231
|
+
const target = tool === "sessions_send" ? nonEmpty(params?.sessionKey) : undefined;
|
|
232
|
+
const targetAgent = nonEmpty(params?.agentId)?.trim().toLowerCase();
|
|
233
|
+
const unresolved = tool === "sessions_send" && !target && (nonEmpty(params?.label) || targetAgent)
|
|
234
|
+
? { ...(targetAgent ? { targetAgent } : {}) }
|
|
235
|
+
: undefined;
|
|
236
|
+
const toolCallId = nonEmpty(e?.toolCallId) ?? nonEmpty(c?.toolCallId);
|
|
237
|
+
this.origins.push({
|
|
238
|
+
tool,
|
|
239
|
+
kind,
|
|
240
|
+
at: this.now(),
|
|
241
|
+
sources,
|
|
242
|
+
...(target ? { target } : {}),
|
|
243
|
+
...(unresolved ? { unresolved } : {}),
|
|
244
|
+
...(toolCallId ? { toolCallId } : {}),
|
|
245
|
+
});
|
|
246
|
+
while (this.origins.length > MAX_ORIGIN_CALLS)
|
|
247
|
+
this.origins.shift();
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Reads a `sessions_send` / `sessions_spawn` result from an `after_tool_call`
|
|
251
|
+
* event: drops the pending call when the result says it started no run to
|
|
252
|
+
* match (a failed spawn; for a send, {@link sendStartedNoRunToMatch}), and
|
|
253
|
+
* gives a send its resolved target session. Unknown calls, other tools and
|
|
254
|
+
* unreadable results are ignored.
|
|
255
|
+
*/
|
|
256
|
+
onToolResult(event, ctx) {
|
|
257
|
+
const e = rec(event);
|
|
258
|
+
const tool = nonEmpty(e?.toolName);
|
|
259
|
+
if (tool !== "sessions_send" && tool !== "sessions_spawn")
|
|
260
|
+
return;
|
|
261
|
+
const toolCallId = nonEmpty(e?.toolCallId) ?? nonEmpty(rec(ctx)?.toolCallId);
|
|
262
|
+
if (!toolCallId)
|
|
263
|
+
return;
|
|
264
|
+
const index = this.origins.findIndex((o) => o.tool === tool && o.toolCallId === toolCallId);
|
|
265
|
+
if (index < 0)
|
|
266
|
+
return;
|
|
267
|
+
const details = resultDetails(e?.result);
|
|
268
|
+
if (!details)
|
|
269
|
+
return;
|
|
270
|
+
const failed = details.status === "error" || details.status === "forbidden";
|
|
271
|
+
if (tool === "sessions_spawn" ? failed : sendStartedNoRunToMatch(details)) {
|
|
272
|
+
this.origins.splice(index, 1);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const resolved = nonEmpty(details.sessionKey);
|
|
276
|
+
if (tool === "sessions_send" && resolved) {
|
|
277
|
+
this.origins[index].target = resolved;
|
|
278
|
+
delete this.origins[index].unresolved;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Records a run from a `before_prompt_build` agent context. Malformed input
|
|
283
|
+
* is ignored. A run is classified once: 10.x fires the hook again for each
|
|
284
|
+
* retry attempt of the same run (after compaction, a model or auth
|
|
285
|
+
* failover), and by then the origin call or exchange that classified it is
|
|
286
|
+
* consumed, so re-classifying would turn a chat-originated run into `other`.
|
|
287
|
+
* The first answer stands, whatever it was; a scheduled run stays scheduled.
|
|
288
|
+
*/
|
|
289
|
+
onPromptBuild(ctx) {
|
|
290
|
+
const c = rec(ctx);
|
|
291
|
+
const runId = nonEmpty(c?.runId);
|
|
292
|
+
if (!runId)
|
|
293
|
+
return;
|
|
294
|
+
const sessionKey = nonEmpty(c?.sessionKey);
|
|
295
|
+
const entry = this.runs.get(runId) ?? this.classify(c ?? {}, sessionKey);
|
|
296
|
+
this.runs.delete(runId);
|
|
297
|
+
this.runs.set(runId, entry);
|
|
298
|
+
if (sessionKey) {
|
|
299
|
+
this.latestBySession.set(sessionKey, runId);
|
|
300
|
+
boundedSet(this.lastKindBySession, sessionKey, entry.kind, this.maxRuns * 2);
|
|
301
|
+
}
|
|
302
|
+
while (this.runs.size > this.maxRuns) {
|
|
303
|
+
const oldest = this.runs.keys().next().value;
|
|
304
|
+
this.forget(oldest);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Records a spawned child's origin from a `subagent_spawned` context/event:
|
|
309
|
+
* the kind of the run whose `sessions_spawn` call is pending in the requester
|
|
310
|
+
* session (consumed), or `other` when none matches. Malformed input is ignored.
|
|
311
|
+
*/
|
|
312
|
+
onSubagentSpawned(ctx, event) {
|
|
313
|
+
const c = rec(ctx);
|
|
314
|
+
const e = rec(event);
|
|
315
|
+
const child = nonEmpty(c?.childSessionKey) ?? nonEmpty(e?.childSessionKey);
|
|
316
|
+
if (!child)
|
|
317
|
+
return;
|
|
318
|
+
const requester = nonEmpty(c?.requesterSessionKey) ?? nonEmpty(rec(e?.requester)?.sessionKey);
|
|
319
|
+
const kind = this.takeOrigin("sessions_spawn", requester)?.kind ?? "other";
|
|
320
|
+
boundedSet(this.childOrigins, child, kind, this.maxRuns * 2);
|
|
321
|
+
boundedSet(this.lastKindBySession, child, kind, this.maxRuns * 2);
|
|
322
|
+
}
|
|
323
|
+
/** Forgets a run (its `agent_end`). */
|
|
324
|
+
onRunEnd(runId) {
|
|
325
|
+
const id = nonEmpty(runId);
|
|
326
|
+
if (id)
|
|
327
|
+
this.forget(id);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* The turn of a tool call: by run id, else by the session's latest recorded
|
|
331
|
+
* run, else `unknown` with the given session key.
|
|
332
|
+
*/
|
|
333
|
+
lookup(params) {
|
|
334
|
+
const sessionKey = nonEmpty(params.sessionKey);
|
|
335
|
+
const runId = nonEmpty(params.runId) ?? (sessionKey ? this.latestBySession.get(sessionKey) : undefined);
|
|
336
|
+
const entry = runId ? this.runs.get(runId) : undefined;
|
|
337
|
+
const key = entry?.sessionKey ?? sessionKey;
|
|
338
|
+
let kind = entry?.kind ?? "unknown";
|
|
339
|
+
if (entry?.pendingChild && entry.sessionKey)
|
|
340
|
+
kind = this.childOrigins.get(entry.sessionKey) ?? entry.kind;
|
|
341
|
+
return { ...(key ? { sessionKey: key } : {}), kind };
|
|
342
|
+
}
|
|
343
|
+
classify(c, sessionKey) {
|
|
344
|
+
const trigger = nonEmpty(c.trigger)?.trim();
|
|
345
|
+
if (trigger === "cron" || trigger === "heartbeat")
|
|
346
|
+
return { sessionKey, kind: trigger };
|
|
347
|
+
const provenance = rec(c.inputProvenance);
|
|
348
|
+
const provenanceKind = nonEmpty(provenance?.kind);
|
|
349
|
+
if (provenanceKind === "inter_session") {
|
|
350
|
+
const source = nonEmpty(provenance?.sourceSessionKey);
|
|
351
|
+
if (nonEmpty(provenance?.sourceTool) === "sessions_send") {
|
|
352
|
+
return { sessionKey, kind: this.sendOriginKind(source, sessionKey) };
|
|
353
|
+
}
|
|
354
|
+
return { sessionKey, kind: this.kindOfSession(source) };
|
|
355
|
+
}
|
|
356
|
+
if (isChildSession(sessionKey)) {
|
|
357
|
+
const inherited = sessionKey ? this.childOrigins.get(sessionKey) : undefined;
|
|
358
|
+
return inherited ? { sessionKey, kind: inherited } : { sessionKey, kind: "other", pendingChild: true };
|
|
359
|
+
}
|
|
360
|
+
if (trigger === "event" || provenanceKind === "internal_system")
|
|
361
|
+
return { sessionKey, kind: "other" };
|
|
362
|
+
if (nonEmpty(c.jobId) || sessionRest(sessionKey).startsWith("cron:"))
|
|
363
|
+
return { sessionKey, kind: "other" };
|
|
364
|
+
if (trigger === "user" && (provenanceKind === undefined || provenanceKind === "external_user")) {
|
|
365
|
+
return { sessionKey, kind: "chat" };
|
|
366
|
+
}
|
|
367
|
+
return { sessionKey, kind: trigger === undefined ? "unknown" : "other" };
|
|
368
|
+
}
|
|
369
|
+
/** Drops origin calls and exchanges older than the match window. */
|
|
370
|
+
prune() {
|
|
371
|
+
const at = this.now();
|
|
372
|
+
this.origins = this.origins.filter((o) => at - o.at <= SESSIONS_SEND_MATCH_WINDOW_MS);
|
|
373
|
+
this.exchanges = this.exchanges.filter((x) => at - x.at <= SESSIONS_SEND_MATCH_WINDOW_MS);
|
|
374
|
+
}
|
|
375
|
+
/** One kind from several candidates: theirs when all agree and it is known, else `other`. */
|
|
376
|
+
static agreed(kinds) {
|
|
377
|
+
const set = new Set(kinds);
|
|
378
|
+
const [only] = [...set];
|
|
379
|
+
return set.size === 1 && only !== "unknown" ? only : "other";
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* The pending `tool` call from `source` (for a send: aimed at `target`)
|
|
383
|
+
* that started this run, consumed, with the kind the candidates agree on;
|
|
384
|
+
* `undefined` when none matches.
|
|
385
|
+
*/
|
|
386
|
+
takeOrigin(tool, source, target) {
|
|
387
|
+
if (!source)
|
|
388
|
+
return undefined;
|
|
389
|
+
this.prune();
|
|
390
|
+
const fromSource = this.origins.filter((o) => o.tool === tool && o.sources.includes(source));
|
|
391
|
+
let candidates = tool === "sessions_spawn" ? fromSource : fromSource.filter((o) => targetMatches(o.target, target));
|
|
392
|
+
if (candidates.length === 0 && tool === "sessions_send") {
|
|
393
|
+
// A send addressed by label or agent id whose result has not named its
|
|
394
|
+
// target yet: an exact match always wins over these.
|
|
395
|
+
const agent = sessionAgent(target);
|
|
396
|
+
candidates = fromSource.filter((o) => o.unresolved && target !== undefined && (o.unresolved.targetAgent === undefined || o.unresolved.targetAgent === agent));
|
|
397
|
+
}
|
|
398
|
+
const call = candidates[0];
|
|
399
|
+
if (!call)
|
|
400
|
+
return undefined;
|
|
401
|
+
this.origins.splice(this.origins.indexOf(call), 1);
|
|
402
|
+
return { kind: TurnContextTracker.agreed(candidates.map((o) => o.kind)), call };
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* The kind of a run whose provenance says `sessions_send` from `source`, in
|
|
406
|
+
* `sessionKey`: either a target run (a pending send from `source` aimed at
|
|
407
|
+
* this session) or a reply-back run (an open exchange from this session to
|
|
408
|
+
* `source`). Both possible with different kinds, or neither → `other`.
|
|
409
|
+
*/
|
|
410
|
+
sendOriginKind(source, sessionKey) {
|
|
411
|
+
const forward = this.takeOrigin("sessions_send", source, sessionKey);
|
|
412
|
+
const replies = sessionKey
|
|
413
|
+
? this.exchanges.filter((x) => x.requesters.includes(sessionKey) && targetMatches(x.target, source))
|
|
414
|
+
: [];
|
|
415
|
+
const reply = replies[0];
|
|
416
|
+
if (reply)
|
|
417
|
+
this.exchanges.splice(this.exchanges.indexOf(reply), 1);
|
|
418
|
+
if (forward && sessionKey) {
|
|
419
|
+
this.exchanges.push({ kind: forward.kind, at: this.now(), requesters: forward.call.sources, target: sessionKey });
|
|
420
|
+
while (this.exchanges.length > MAX_ORIGIN_CALLS)
|
|
421
|
+
this.exchanges.shift();
|
|
422
|
+
}
|
|
423
|
+
const kinds = [
|
|
424
|
+
...(forward ? [forward.kind] : []),
|
|
425
|
+
...(reply ? [TurnContextTracker.agreed(replies.map((x) => x.kind))] : []),
|
|
426
|
+
];
|
|
427
|
+
return kinds.length === 0 ? "other" : TurnContextTracker.agreed(kinds);
|
|
428
|
+
}
|
|
429
|
+
/** A session's last classified run kind, or `other` when it is unknown (not resolvable is not chat). */
|
|
430
|
+
kindOfSession(sessionKey) {
|
|
431
|
+
const kind = sessionKey ? this.lastKindBySession.get(sessionKey) : undefined;
|
|
432
|
+
return kind && kind !== "unknown" ? kind : "other";
|
|
433
|
+
}
|
|
434
|
+
forget(runId) {
|
|
435
|
+
const entry = this.runs.get(runId);
|
|
436
|
+
this.runs.delete(runId);
|
|
437
|
+
if (entry?.sessionKey && this.latestBySession.get(entry.sessionKey) === runId) {
|
|
438
|
+
this.latestBySession.delete(entry.sessionKey);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Whether this host lets the runtime classify the run a gated call belongs to:
|
|
444
|
+
* one boot-time fact, never decided per run (D15). Both halves must hold.
|
|
445
|
+
*
|
|
446
|
+
* 1. **The host links a tool call to its run.** The gate reads the run id that
|
|
447
|
+
* `before_tool_call` carries. 5.12 and 5.7 add the bundle-MCP tools (every
|
|
448
|
+
* `senpi__` tool) unwrapped and split them with no hook context (5.12
|
|
449
|
+
* `pi-embedded-runner/run/attempt.ts:1228-1235,1275,1737`; 5.7
|
|
450
|
+
* `attempt.ts:1035,1081`), so `pi-tool-definition-adapter.ts:240-244` runs the
|
|
451
|
+
* hook with no ctx and the call arrives with no run id or session key
|
|
452
|
+
* (`pi-tools.before-tool-call.ts:525-534,594-600`). Every `senpi__` call would
|
|
453
|
+
* read `unknown`, so a 5.x host is never available, whatever its config.
|
|
454
|
+
* The first tag that links is 2026.6.1 (`splitSdkTools` passes
|
|
455
|
+
* `catalogToolHookContext`, which carries `runId`). Since 9.5 the bundle
|
|
456
|
+
* tools are also wrapped up front (`attempt-bundle-tools.ts:204` on 10.10).
|
|
457
|
+
* The runtime gates on the modern host (>= 2026.8.1), which includes that.
|
|
458
|
+
* 2. **The conversation hooks register.** The tracker is fed by
|
|
459
|
+
* `before_prompt_build`, a conversation hook on 10.x. A non-bundled plugin's
|
|
460
|
+
* registration is dropped with only a warn diagnostic unless
|
|
461
|
+
* `plugins.entries.<id>.hooks.allowConversationAccess` is `true` (10.10
|
|
462
|
+
* `registry-registrars-tools-hooks.ts:53-63,404-417`,
|
|
463
|
+
* `hook-policy-decisions.ts:10-16`). `allowPromptInjection: false` drops it
|
|
464
|
+
* too (5.12 `registry.ts:2288-2296`).
|
|
465
|
+
*
|
|
466
|
+
* @param config - The whole OpenClaw config the plugin was registered with (`api.config`).
|
|
467
|
+
* @returns `reason` for status surfaces. `configFix` only when a config change
|
|
468
|
+
* would make it available; a host-version limit has none.
|
|
469
|
+
*/
|
|
470
|
+
export function turnClassificationAvailable(params) {
|
|
471
|
+
if (!params.modernHost) {
|
|
472
|
+
return {
|
|
473
|
+
available: false,
|
|
474
|
+
reason: "host cannot link tool calls to runs: OpenClaw 5.x runs MCP tools without their run context",
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
const hooks = rec(rec(rec(rec(rec(params.config)?.plugins)?.entries)?.[params.pluginId])?.hooks);
|
|
478
|
+
const base = `plugins.entries.${params.pluginId}.hooks`;
|
|
479
|
+
if (hooks?.allowPromptInjection === false) {
|
|
480
|
+
return {
|
|
481
|
+
available: false,
|
|
482
|
+
reason: `${base}.allowPromptInjection is false, so before_prompt_build is refused`,
|
|
483
|
+
configFix: `remove ${base}.allowPromptInjection: false`,
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
if (hooks?.allowConversationAccess !== true) {
|
|
487
|
+
return {
|
|
488
|
+
available: false,
|
|
489
|
+
reason: `${base}.allowConversationAccess is not true, so OpenClaw 10.x refuses before_prompt_build`,
|
|
490
|
+
configFix: `set ${base}.allowConversationAccess to true`,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
return { available: true };
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Feeds `tracker` from `before_prompt_build` (records; returns nothing, so the
|
|
497
|
+
* prompt is untouched), `subagent_spawned` (a child's origin; not a
|
|
498
|
+
* conversation hook on any host), `before_tool_call` / `after_tool_call`
|
|
499
|
+
* (observe `sessions_send` and `sessions_spawn` calls and their results only,
|
|
500
|
+
* to identify the run that started a target or a child; return nothing, so
|
|
501
|
+
* they decide nothing) and `agent_end` (forgets; refused without conversation access, then
|
|
502
|
+
* the tracker's bound applies). Handlers never throw.
|
|
503
|
+
*/
|
|
504
|
+
export function registerTurnContextHooks(params) {
|
|
505
|
+
const { api, tracker } = params;
|
|
506
|
+
api.on("before_prompt_build", (_event, ctx) => {
|
|
507
|
+
try {
|
|
508
|
+
tracker.onPromptBuild(ctx);
|
|
509
|
+
}
|
|
510
|
+
catch {
|
|
511
|
+
// never disturb a turn
|
|
512
|
+
}
|
|
513
|
+
return undefined;
|
|
514
|
+
});
|
|
515
|
+
api.on("subagent_spawned", (event, ctx) => {
|
|
516
|
+
try {
|
|
517
|
+
tracker.onSubagentSpawned(ctx, event);
|
|
518
|
+
}
|
|
519
|
+
catch {
|
|
520
|
+
// never disturb a turn
|
|
521
|
+
}
|
|
522
|
+
return undefined;
|
|
523
|
+
});
|
|
524
|
+
api.on("before_tool_call", (event, ctx) => {
|
|
525
|
+
try {
|
|
526
|
+
tracker.onToolCall(event, ctx);
|
|
527
|
+
}
|
|
528
|
+
catch {
|
|
529
|
+
// never disturb a tool call
|
|
530
|
+
}
|
|
531
|
+
return undefined;
|
|
532
|
+
});
|
|
533
|
+
api.on("after_tool_call", (event, ctx) => {
|
|
534
|
+
try {
|
|
535
|
+
tracker.onToolResult(event, ctx);
|
|
536
|
+
}
|
|
537
|
+
catch {
|
|
538
|
+
// never disturb a tool call
|
|
539
|
+
}
|
|
540
|
+
return undefined;
|
|
541
|
+
});
|
|
542
|
+
api.on("agent_end", (_event, ctx) => {
|
|
543
|
+
try {
|
|
544
|
+
tracker.onRunEnd(rec(ctx)?.runId);
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
// never disturb a turn
|
|
548
|
+
}
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
//# sourceMappingURL=turn-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turn-context.js","sourceRoot":"","sources":["../../src/approvals/turn-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"guide-commands.d.ts","sourceRoot":"","sources":["../../src/cli/guide-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+gBH,eAAO,MAAM,eAAe,QA0YpB,CAAC;AAIT,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC;CACxF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,MAAM,GACd,IAAI,CAiDN"}
|