@senpi/runtime 1.0.95-dev.feat-dsl-backend-int.20260416023008 → 1.0.95-dev.runtime-phase-2.20260416194608
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 +72 -0
- package/dist/actions/action-runtime-module.d.ts +55 -0
- package/dist/actions/action-runtime-module.d.ts.map +1 -0
- package/dist/actions/action-runtime-module.js +444 -0
- package/dist/actions/action-runtime-module.js.map +1 -0
- package/dist/actions/close-position/close-position.action.d.ts +1 -0
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +55 -20
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +5 -0
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/llm-decision/shared.d.ts +1 -1
- package/dist/actions/llm-decision/shared.d.ts.map +1 -1
- package/dist/actions/llm-decision/shared.js +1 -1
- package/dist/actions/llm-decision/shared.js.map +1 -1
- package/dist/actions/notifications/formatter.d.ts +39 -0
- package/dist/actions/notifications/formatter.d.ts.map +1 -0
- package/dist/actions/notifications/formatter.js +68 -0
- package/dist/actions/notifications/formatter.js.map +1 -0
- package/dist/actions/notifications/index.d.ts +37 -0
- package/dist/actions/notifications/index.d.ts.map +1 -0
- package/dist/actions/notifications/index.js +89 -0
- package/dist/actions/notifications/index.js.map +1 -0
- package/dist/actions/open-position/open-position.action.d.ts +1 -0
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +132 -27
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/open-position/resolve-margin.d.ts +22 -0
- package/dist/actions/open-position/resolve-margin.d.ts.map +1 -0
- package/dist/actions/open-position/resolve-margin.js +30 -0
- package/dist/actions/open-position/resolve-margin.js.map +1 -0
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +4 -1
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/actions/store/action-store.d.ts +45 -0
- package/dist/actions/store/action-store.d.ts.map +1 -0
- package/dist/actions/store/action-store.js +127 -0
- package/dist/actions/store/action-store.js.map +1 -0
- package/dist/actions/store/index.d.ts +11 -0
- package/dist/actions/store/index.d.ts.map +1 -0
- package/dist/actions/store/index.js +9 -0
- package/dist/actions/store/index.js.map +1 -0
- package/dist/actions/store/paths.d.ts +15 -0
- package/dist/actions/store/paths.d.ts.map +1 -0
- package/dist/actions/store/paths.js +29 -0
- package/dist/actions/store/paths.js.map +1 -0
- package/dist/actions/store/types.d.ts +114 -0
- package/dist/actions/store/types.d.ts.map +1 -0
- package/dist/actions/store/types.js +48 -0
- package/dist/actions/store/types.js.map +1 -0
- package/dist/actions/tracking-helpers.d.ts +13 -0
- package/dist/actions/tracking-helpers.d.ts.map +1 -0
- package/dist/actions/tracking-helpers.js +47 -0
- package/dist/actions/tracking-helpers.js.map +1 -0
- package/dist/actions/types.d.ts +8 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +105 -3
- 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 +428 -1
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/constants/order-types.d.ts +7 -0
- package/dist/constants/order-types.d.ts.map +1 -0
- package/dist/constants/order-types.js +6 -0
- package/dist/constants/order-types.js.map +1 -0
- package/dist/context/interpolate.d.ts +6 -2
- package/dist/context/interpolate.d.ts.map +1 -1
- package/dist/context/interpolate.js +6 -2
- package/dist/context/interpolate.js.map +1 -1
- package/dist/context/types.d.ts +8 -1
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +8 -1
- package/dist/context/types.js.map +1 -1
- package/dist/dsl/config/exit-block.d.ts +7 -0
- package/dist/dsl/config/exit-block.d.ts.map +1 -1
- package/dist/dsl/config/parse-plugin-config.d.ts.map +1 -1
- package/dist/dsl/config/parse-plugin-config.js +27 -1
- package/dist/dsl/config/parse-plugin-config.js.map +1 -1
- package/dist/dsl/config/unknown-keys.d.ts.map +1 -1
- package/dist/dsl/config/unknown-keys.js +3 -1
- package/dist/dsl/config/unknown-keys.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +4 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +8 -5
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts +4 -0
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +8 -2
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +3 -1
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/health/index.d.ts +5 -2
- package/dist/health/index.d.ts.map +1 -1
- package/dist/health/index.js +106 -6
- package/dist/health/index.js.map +1 -1
- package/dist/health/types.d.ts +102 -0
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js +7 -1
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -1
- package/dist/index.js.map +1 -1
- package/dist/risk/guardrail.types.d.ts +53 -0
- package/dist/risk/guardrail.types.d.ts.map +1 -0
- package/dist/risk/guardrail.types.js +5 -0
- package/dist/risk/guardrail.types.js.map +1 -0
- package/dist/risk/index.d.ts +2 -4
- package/dist/risk/index.d.ts.map +1 -1
- package/dist/risk/index.js +2 -6
- package/dist/risk/index.js.map +1 -1
- package/dist/risk/risk-audit-log.d.ts +25 -0
- package/dist/risk/risk-audit-log.d.ts.map +1 -0
- package/dist/risk/risk-audit-log.js +30 -0
- package/dist/risk/risk-audit-log.js.map +1 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +162 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +285 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -0
- package/dist/runtime/create-actions.d.ts +6 -2
- package/dist/runtime/create-actions.d.ts.map +1 -1
- package/dist/runtime/create-actions.js +18 -7
- package/dist/runtime/create-actions.js.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +5 -0
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +12 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/load-runtime-config.d.ts +1 -1
- package/dist/runtime/load-runtime-config.d.ts.map +1 -1
- package/dist/runtime/load-runtime-config.js +37 -1
- package/dist/runtime/load-runtime-config.js.map +1 -1
- package/dist/runtime/map-strategies.d.ts +1 -1
- package/dist/runtime/map-strategies.d.ts.map +1 -1
- package/dist/runtime/map-strategies.js +38 -1
- package/dist/runtime/map-strategies.js.map +1 -1
- package/dist/runtime/risk-guard.d.ts +23 -2
- package/dist/runtime/risk-guard.d.ts.map +1 -1
- package/dist/runtime/risk-guard.js +441 -5
- package/dist/runtime/risk-guard.js.map +1 -1
- package/dist/runtime/run.d.ts +7 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +3 -0
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +1169 -24
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +105 -2
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +26 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +192 -6
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/scanner-composition.d.ts +10 -0
- package/dist/runtime/scanner-composition.d.ts.map +1 -1
- package/dist/runtime/scanner-composition.js +10 -0
- package/dist/runtime/scanner-composition.js.map +1 -1
- package/dist/runtime/scanner-registry.d.ts +39 -1
- package/dist/runtime/scanner-registry.d.ts.map +1 -1
- package/dist/runtime/scanner-registry.js +105 -2
- package/dist/runtime/scanner-registry.js.map +1 -1
- package/dist/runtime/state-layout.d.ts +2 -0
- package/dist/runtime/state-layout.d.ts.map +1 -1
- package/dist/runtime/state-layout.js +1 -0
- package/dist/runtime/state-layout.js.map +1 -1
- package/dist/runtime/validate-action-prompts.d.ts +30 -0
- package/dist/runtime/validate-action-prompts.d.ts.map +1 -0
- package/dist/runtime/validate-action-prompts.js +110 -0
- package/dist/runtime/validate-action-prompts.js.map +1 -0
- package/dist/scanners/__tests__/test-helpers.d.ts +10 -0
- package/dist/scanners/__tests__/test-helpers.d.ts.map +1 -1
- package/dist/scanners/__tests__/test-helpers.js +52 -0
- package/dist/scanners/__tests__/test-helpers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +37 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +132 -14
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/result-builder.d.ts +16 -0
- package/dist/scanners/engine/result-builder.d.ts.map +1 -1
- package/dist/scanners/engine/result-builder.js +22 -0
- package/dist/scanners/engine/result-builder.js.map +1 -1
- package/dist/scanners/engine/strategy-registry.d.ts +2 -0
- package/dist/scanners/engine/strategy-registry.d.ts.map +1 -1
- package/dist/scanners/engine/strategy-registry.js +5 -1
- package/dist/scanners/engine/strategy-registry.js.map +1 -1
- package/dist/scanners/external-scanner-receiver.d.ts +118 -0
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -0
- package/dist/scanners/external-scanner-receiver.js +266 -0
- package/dist/scanners/external-scanner-receiver.js.map +1 -0
- package/dist/scanners/implementations/external-scanner.d.ts +17 -0
- package/dist/scanners/implementations/external-scanner.d.ts.map +1 -0
- package/dist/scanners/implementations/external-scanner.js +51 -0
- package/dist/scanners/implementations/external-scanner.js.map +1 -0
- package/dist/scanners/implementations/index.d.ts +1 -0
- package/dist/scanners/implementations/index.d.ts.map +1 -1
- package/dist/scanners/implementations/index.js +1 -0
- package/dist/scanners/implementations/index.js.map +1 -1
- package/dist/scanners/implementations/position-tracker.d.ts.map +1 -1
- package/dist/scanners/implementations/position-tracker.js +3 -1
- package/dist/scanners/implementations/position-tracker.js.map +1 -1
- package/dist/scanners/index.d.ts +4 -1
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +2 -0
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/protocol/scanner.d.ts +3 -1
- package/dist/scanners/protocol/scanner.d.ts.map +1 -1
- package/dist/scanners/providers/client.d.ts.map +1 -1
- package/dist/scanners/providers/client.js +0 -8
- package/dist/scanners/providers/client.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +10 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +19 -3
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/scanners/scanner-definition.d.ts +12 -1
- package/dist/scanners/scanner-definition.d.ts.map +1 -1
- package/dist/scanners/types.d.ts +3 -0
- package/dist/scanners/types.d.ts.map +1 -1
- package/dist/scanners/types.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-live.js +1 -1
- package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
- package/dist/scripts/run-dsl-standalone-mock.js +1 -1
- package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
- package/dist/senpi/client.d.ts +27 -2
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +74 -1
- package/dist/senpi/client.js.map +1 -1
- package/dist/senpi/index.d.ts +1 -1
- package/dist/senpi/index.d.ts.map +1 -1
- package/dist/senpi/types.d.ts +68 -0
- package/dist/senpi/types.d.ts.map +1 -1
- package/dist/strategy/strategy-state.d.ts +4 -1
- package/dist/strategy/strategy-state.d.ts.map +1 -1
- package/dist/strategy/strategy-state.js +7 -2
- package/dist/strategy/strategy-state.js.map +1 -1
- package/dist/tracking/constants.d.ts +24 -0
- package/dist/tracking/constants.d.ts.map +1 -0
- package/dist/tracking/constants.js +46 -0
- package/dist/tracking/constants.js.map +1 -0
- package/dist/tracking/index.d.ts +12 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +8 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/tracker.d.ts +22 -0
- package/dist/tracking/tracker.d.ts.map +1 -0
- package/dist/tracking/tracker.js +44 -0
- package/dist/tracking/tracker.js.map +1 -0
- package/dist/tracking/tracking-handler.d.ts +12 -0
- package/dist/tracking/tracking-handler.d.ts.map +1 -0
- package/dist/tracking/tracking-handler.js +148 -0
- package/dist/tracking/tracking-handler.js.map +1 -0
- package/dist/tracking/transport.d.ts +35 -0
- package/dist/tracking/transport.d.ts.map +1 -0
- package/dist/tracking/transport.js +117 -0
- package/dist/tracking/transport.js.map +1 -0
- package/dist/tracking/types.d.ts +21 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +6 -0
- package/dist/tracking/types.js.map +1 -0
- package/dist/types/action.d.ts +13 -2
- package/dist/types/action.d.ts.map +1 -1
- package/dist/types/dsl/index.d.ts +3 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +9 -3
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +19 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/resolve-order-type.d.ts +5 -0
- package/dist/utils/resolve-order-type.d.ts.map +1 -0
- package/dist/utils/resolve-order-type.js +29 -0
- package/dist/utils/resolve-order-type.js.map +1 -0
- package/examples/strategies/dsl-showcase.yaml +7 -2
- package/examples/strategies/dsl.yaml +5 -1
- package/examples/strategies/fox-minimal-loosened.yaml +18 -3
- package/examples/strategies/fox-minimal.yaml +25 -3
- package/examples/strategies/minimal.yaml +4 -2
- package/examples/strategies/momentum/how-it-works.md +47 -0
- package/examples/strategies/momentum/momentum-guarded.yaml +161 -0
- package/examples/strategies/risk-showcase.yaml +93 -0
- package/examples/strategies/viper.yaml +11 -3
- package/examples/strategies/wolf.yaml +11 -3
- package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +12 -4
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -36,6 +36,32 @@ Add the plugin to your OpenClaw config (e.g. `~/.openclaw/openclaw.json` or via
|
|
|
36
36
|
}
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
## Log level
|
|
40
|
+
|
|
41
|
+
The runtime's minimum log level is controlled by the `SENPI_LOG_LEVEL` environment variable and defaults to `info`. Accepted values are `debug`, `info`, `warn`, and `error` (case-insensitive); anything else falls back to `info` with a one-time console warning at startup.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Quiet the logs — only warnings and errors
|
|
45
|
+
export SENPI_LOG_LEVEL=warn
|
|
46
|
+
|
|
47
|
+
# Full verbosity — scanner tick heartbeats, DSL monitor internals, provider call payloads
|
|
48
|
+
export SENPI_LOG_LEVEL=debug
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If you run the gateway under Docker Compose, set it alongside the other gateway env vars (e.g. in `.env` / `docker-compose.yml`) and restart the gateway to apply. The runtime logs the resolved level and its source on plugin start:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
[senpi-runtime] log level: info (source: default). Set SENPI_LOG_LEVEL=debug|info|warn|error to override.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
You can confirm the active level at any time with `openclaw senpi status`, which prints a `Log Level: <level>` line for each running runtime (also available under `openclaw senpi state`).
|
|
58
|
+
|
|
59
|
+
### What each level shows
|
|
60
|
+
|
|
61
|
+
- `warn` / `error` — failures, retries, clearinghouse unavailable, scanner watchdog alerts.
|
|
62
|
+
- `info` (default) — the above, plus lifecycle events (open/close positions, scanner signal processed), DSL monitor ticks when there are active positions, position-tracker scans when positions or deltas change.
|
|
63
|
+
- `debug` — the above, plus per-tick scanner heartbeats, DSL monitor ticks with zero active positions, and full MCP tool-call request/response envelopes (with secrets redacted). Useful for diagnosing individual scan or price-fetch behavior; very noisy.
|
|
64
|
+
|
|
39
65
|
## Notifications
|
|
40
66
|
|
|
41
67
|
- **Strategy-level:** Set `notifications.telegram_chat_id` in your strategy YAML to receive alerts (e.g. open/close, decision errors, scanner watchdog). The plugin sends messages via the OpenClaw gateway `message` tool (`action: send`, `target: telegram:<chatId>`).
|
|
@@ -124,6 +150,52 @@ Templates live under `examples/strategies/` in the package. See [examples/strate
|
|
|
124
150
|
- `openclaw senpi guide schema` — full YAML schema
|
|
125
151
|
- `openclaw senpi guide version` — plugin version and changelog URL
|
|
126
152
|
|
|
153
|
+
## External scanners
|
|
154
|
+
|
|
155
|
+
Use `type: external_scanner` when the signal or context source lives outside the
|
|
156
|
+
runtime and should push data in through the gateway instead of being scheduled
|
|
157
|
+
on an `interval`.
|
|
158
|
+
|
|
159
|
+
```yaml
|
|
160
|
+
scanners:
|
|
161
|
+
- name: funding_arb
|
|
162
|
+
type: external_scanner
|
|
163
|
+
outputs:
|
|
164
|
+
signals: true
|
|
165
|
+
context: false
|
|
166
|
+
retention: rolling_window
|
|
167
|
+
retention_max_runs: 50
|
|
168
|
+
config:
|
|
169
|
+
fields:
|
|
170
|
+
funding_rate: { type: number, required: true }
|
|
171
|
+
spread: { type: number, required: true }
|
|
172
|
+
exchange: { type: string }
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Ingest data with the gateway RPC:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
openclaw gateway call senpi.ingestExternalScannerData --params '{
|
|
179
|
+
"address": "0xYourStrategyWallet",
|
|
180
|
+
"scanner": "funding_arb",
|
|
181
|
+
"asset": "ETH-PERP",
|
|
182
|
+
"direction": "LONG",
|
|
183
|
+
"score": 0.91,
|
|
184
|
+
"signal_type": "EXTERNAL_FUNDING_ARB",
|
|
185
|
+
"data": {
|
|
186
|
+
"funding_rate": 0.015,
|
|
187
|
+
"spread": 0.003,
|
|
188
|
+
"exchange": "binance"
|
|
189
|
+
}
|
|
190
|
+
}'
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Prompt access stays namespaced:
|
|
194
|
+
|
|
195
|
+
- `{{signal_funding_arb}}` for ingested signals
|
|
196
|
+
- `{{context_custom_regime}}` for retained external context
|
|
197
|
+
- flat aliases like `{{funding_arb}}` are not created
|
|
198
|
+
|
|
127
199
|
## Guide skill
|
|
128
200
|
|
|
129
201
|
Once published, the **@senpi-guide** skill on ClawHub provides the same reference in chat. Install with `clawhub install skills/senpi-guide/` (or from the ClawHub UI).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action-layer telemetry, persistence, and health/state reporting for the runtime.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Action, ActionConfig, ActionResult, HookEvent } from "./types.js";
|
|
7
|
+
import type { ActionExecutionRecord, ActionLatestState, ActionTelemetry } from "./store/types.js";
|
|
8
|
+
import type { ActionComponentHealthStatus, ActionSystemState, ComponentHealth, StateStatusProvider } from "../health/types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Resolves JSONL retention from an action’s optional `params.history_retention_hours` (hours).
|
|
11
|
+
*
|
|
12
|
+
* @param config - Parsed action config; reads `config.params.history_retention_hours` when set to a positive number or numeric string.
|
|
13
|
+
* @returns Retention window in milliseconds (default 24h).
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveHistoryRetentionMs(config: ActionConfig): number;
|
|
16
|
+
/**
|
|
17
|
+
* Per-action health from counters and last run (actions are event-driven, no "overdue").
|
|
18
|
+
*/
|
|
19
|
+
export declare function deriveActionHealth(telemetry: ActionTelemetry): ComponentHealth;
|
|
20
|
+
export interface ActionRuntimeModuleOptions {
|
|
21
|
+
stateDir: string;
|
|
22
|
+
now?: () => number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Wraps action execution with telemetry, audit records, and health aggregation.
|
|
26
|
+
*/
|
|
27
|
+
export declare class ActionRuntimeModule implements StateStatusProvider<ActionComponentHealthStatus, ActionSystemState> {
|
|
28
|
+
private readonly actionStore;
|
|
29
|
+
private readonly now;
|
|
30
|
+
private readonly telemetry;
|
|
31
|
+
private readonly configs;
|
|
32
|
+
constructor(options: ActionRuntimeModuleOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Registers an action instance for health reporting and seeds telemetry from persisted `latest.json`
|
|
35
|
+
* so cumulative counters survive process restarts.
|
|
36
|
+
*/
|
|
37
|
+
registerAction(address: string, actionName: string, config: ActionConfig): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Wraps `action.handle(event)` with timing, persistence, and counter updates.
|
|
40
|
+
*/
|
|
41
|
+
wrapHandle(address: string, action: Action, config: ActionConfig, event: HookEvent): Promise<ActionResult>;
|
|
42
|
+
/** Reads persisted latest snapshot (for gateway/CLI). */
|
|
43
|
+
readLatest(address: string, actionName: string): Promise<ActionLatestState | null>;
|
|
44
|
+
/** Reads rolling history (for gateway/CLI). */
|
|
45
|
+
readHistory(address: string, actionName: string, opts?: import("./store/types.js").ReadActionHistoryOptions): Promise<ActionExecutionRecord[]>;
|
|
46
|
+
/** Lists latest snapshots across strategies (for gateway list command). */
|
|
47
|
+
readAllLatest(filter?: import("./store/types.js").ActionFilter): Promise<ActionLatestState[]>;
|
|
48
|
+
getHealthStatus(): Promise<ActionComponentHealthStatus>;
|
|
49
|
+
getSystemState(): Promise<ActionSystemState>;
|
|
50
|
+
private ensureTelemetry;
|
|
51
|
+
private applyResultToTelemetry;
|
|
52
|
+
private buildRecord;
|
|
53
|
+
private buildLatestState;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=action-runtime-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-runtime-module.d.ts","sourceRoot":"","sources":["../../src/actions/action-runtime-module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAA4B,SAAS,EAAE,MAAM,YAAY,CAAC;AAG1G,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,2BAA2B,EAG3B,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAa5B;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAYtE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe,CAe9E;AAyHD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,mBACX,YAAW,mBAAmB,CAAC,2BAA2B,EAAE,iBAAiB,CAAC;IAE9E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;gBAE/C,OAAO,EAAE,0BAA0B;IAK/C;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9F;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,YAAY,CAAC;IA6DxB,yDAAyD;IACzD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI9C,+CAA+C;IAC/C,WAAW,CACT,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,OAAO,kBAAkB,EAAE,wBAAwB;IAK5D,2EAA2E;IAC3E,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,kBAAkB,EAAE,YAAY;IAIxD,eAAe,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAgDvD,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAgDlD,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,sBAAsB;IAyC9B,OAAO,CAAC,WAAW;IAgCnB,OAAO,CAAC,gBAAgB;CA0BzB"}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action-layer telemetry, persistence, and health/state reporting for the runtime.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from "node:crypto";
|
|
7
|
+
import { ActionStore } from "./store/action-store.js";
|
|
8
|
+
import { createEmptyLatestState, createEmptyTelemetry } from "./store/types.js";
|
|
9
|
+
import { createLogger } from "../utils/logger.js";
|
|
10
|
+
const logger = createLogger("[actions][runtime-module]");
|
|
11
|
+
const DECISION_MODES = ["llm", "script", "agent", "rule", "none"];
|
|
12
|
+
function isDecisionMode(v) {
|
|
13
|
+
return typeof v === "string" && DECISION_MODES.includes(v);
|
|
14
|
+
}
|
|
15
|
+
const DEFAULT_HISTORY_RETENTION_MS = 86_400_000;
|
|
16
|
+
/**
|
|
17
|
+
* Resolves JSONL retention from an action’s optional `params.history_retention_hours` (hours).
|
|
18
|
+
*
|
|
19
|
+
* @param config - Parsed action config; reads `config.params.history_retention_hours` when set to a positive number or numeric string.
|
|
20
|
+
* @returns Retention window in milliseconds (default 24h).
|
|
21
|
+
*/
|
|
22
|
+
export function resolveHistoryRetentionMs(config) {
|
|
23
|
+
const raw = config.params?.history_retention_hours;
|
|
24
|
+
let hours;
|
|
25
|
+
if (typeof raw === "number" && Number.isFinite(raw) && raw > 0) {
|
|
26
|
+
hours = raw;
|
|
27
|
+
}
|
|
28
|
+
else if (typeof raw === "string") {
|
|
29
|
+
const n = Number.parseFloat(raw.trim());
|
|
30
|
+
if (Number.isFinite(n) && n > 0) {
|
|
31
|
+
hours = n;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return hours != null ? Math.round(hours * 3_600_000) : DEFAULT_HISTORY_RETENTION_MS;
|
|
35
|
+
}
|
|
36
|
+
function telemetryKey(address, actionName) {
|
|
37
|
+
return `${address}::${actionName}`;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Per-action health from counters and last run (actions are event-driven, no "overdue").
|
|
41
|
+
*/
|
|
42
|
+
export function deriveActionHealth(telemetry) {
|
|
43
|
+
if (telemetry.inFlight) {
|
|
44
|
+
return "healthy";
|
|
45
|
+
}
|
|
46
|
+
/** Idle (no invocations yet) is normal for scanner-filtered actions — do not report unknown. */
|
|
47
|
+
if (telemetry.runCount === 0) {
|
|
48
|
+
return "healthy";
|
|
49
|
+
}
|
|
50
|
+
if (telemetry.consecutiveErrorCount >= 3) {
|
|
51
|
+
return "unhealthy";
|
|
52
|
+
}
|
|
53
|
+
if (telemetry.consecutiveErrorCount >= 1 || telemetry.lastRunStatus === "error") {
|
|
54
|
+
return "degraded";
|
|
55
|
+
}
|
|
56
|
+
return "healthy";
|
|
57
|
+
}
|
|
58
|
+
const HEALTH_ORDER = {
|
|
59
|
+
healthy: 0,
|
|
60
|
+
disabled: 0,
|
|
61
|
+
unknown: 1,
|
|
62
|
+
degraded: 2,
|
|
63
|
+
unhealthy: 3,
|
|
64
|
+
};
|
|
65
|
+
function deriveComponentRollup(healths) {
|
|
66
|
+
if (healths.length === 0) {
|
|
67
|
+
return "unknown";
|
|
68
|
+
}
|
|
69
|
+
let worst = healths[0] ?? "unknown";
|
|
70
|
+
for (const h of healths) {
|
|
71
|
+
if (HEALTH_ORDER[h] > HEALTH_ORDER[worst]) {
|
|
72
|
+
worst = h;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return worst;
|
|
76
|
+
}
|
|
77
|
+
function summarizeActionsHealth(totals, overall) {
|
|
78
|
+
return `${overall} — ${totals.registered} registered, ${totals.enabled} enabled, ${totals.inFlight} in-flight (${totals.degraded} degraded, ${totals.unhealthy} unhealthy)`;
|
|
79
|
+
}
|
|
80
|
+
function extractDecisionMeta(data) {
|
|
81
|
+
const raw = data?._decisionMeta;
|
|
82
|
+
if (!raw || typeof raw !== "object") {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
const m = raw;
|
|
86
|
+
if (typeof m.durationMs !== "number" ||
|
|
87
|
+
typeof m.execute !== "boolean" ||
|
|
88
|
+
typeof m.confidence !== "number" ||
|
|
89
|
+
typeof m.reasoning !== "string" ||
|
|
90
|
+
!isDecisionMode(m.mode)) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
durationMs: m.durationMs,
|
|
95
|
+
tokensUsed: m.tokensUsed === null || typeof m.tokensUsed === "number" ? m.tokensUsed : null,
|
|
96
|
+
mode: m.mode,
|
|
97
|
+
model: m.model === null || typeof m.model === "string" ? m.model : null,
|
|
98
|
+
execute: m.execute,
|
|
99
|
+
confidence: m.confidence,
|
|
100
|
+
reasoning: m.reasoning,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function topAssetsFromScan(scan) {
|
|
104
|
+
const signals = scan?.signals ?? [];
|
|
105
|
+
const assets = signals
|
|
106
|
+
.map((s) => s.asset)
|
|
107
|
+
.filter((a) => typeof a === "string" && a.length > 0);
|
|
108
|
+
return assets.slice(0, 5);
|
|
109
|
+
}
|
|
110
|
+
function outcomeAssetsFromResult(result, actionType) {
|
|
111
|
+
const data = result.data;
|
|
112
|
+
if (!data) {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
const results = data.results;
|
|
116
|
+
if (Array.isArray(results)) {
|
|
117
|
+
return results.map((r) => r.asset).filter((a) => typeof a === "string");
|
|
118
|
+
}
|
|
119
|
+
if (actionType === "OPEN_POSITION" || actionType === "CLOSE_POSITION") {
|
|
120
|
+
const single = data.asset;
|
|
121
|
+
if (typeof single === "string") {
|
|
122
|
+
return [single];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
function buildOutcomeSnapshot(result, actionType) {
|
|
128
|
+
const data = result.data;
|
|
129
|
+
const submittedCount = typeof data?.submittedCount === "number" ? data.submittedCount : null;
|
|
130
|
+
const closedCount = typeof data?.closedCount === "number" ? data.closedCount : null;
|
|
131
|
+
const firedCount = typeof data?.firedCount === "number" ? data.firedCount : null;
|
|
132
|
+
const failedCount = typeof data?.failedCount === "number" ? data.failedCount : null;
|
|
133
|
+
const skippedCount = typeof data?.skippedCount === "number" ? data.skippedCount : null;
|
|
134
|
+
return {
|
|
135
|
+
success: result.success,
|
|
136
|
+
skipped: result.skipped === true,
|
|
137
|
+
skipReason: result.skipReason ?? null,
|
|
138
|
+
summary: result.summary,
|
|
139
|
+
error: result.error ?? null,
|
|
140
|
+
submittedCount: actionType === "OPEN_POSITION" ? submittedCount : null,
|
|
141
|
+
closedCount: actionType === "CLOSE_POSITION" ? closedCount : null,
|
|
142
|
+
firedCount: actionType === "POSITION_TRACKER" ? firedCount : null,
|
|
143
|
+
failedCount,
|
|
144
|
+
skippedCount,
|
|
145
|
+
assets: outcomeAssetsFromResult(result, actionType),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function decisionBlockFromMeta(meta) {
|
|
149
|
+
if (!meta) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
mode: meta.mode,
|
|
154
|
+
model: meta.model,
|
|
155
|
+
execute: meta.execute,
|
|
156
|
+
confidence: meta.confidence,
|
|
157
|
+
reasoning: meta.reasoning,
|
|
158
|
+
durationMs: meta.durationMs,
|
|
159
|
+
tokensUsed: meta.tokensUsed,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Wraps action execution with telemetry, audit records, and health aggregation.
|
|
164
|
+
*/
|
|
165
|
+
export class ActionRuntimeModule {
|
|
166
|
+
actionStore;
|
|
167
|
+
now;
|
|
168
|
+
telemetry = new Map();
|
|
169
|
+
configs = new Map();
|
|
170
|
+
constructor(options) {
|
|
171
|
+
this.actionStore = new ActionStore(options.stateDir);
|
|
172
|
+
this.now = options.now ?? (() => Date.now());
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Registers an action instance for health reporting and seeds telemetry from persisted `latest.json`
|
|
176
|
+
* so cumulative counters survive process restarts.
|
|
177
|
+
*/
|
|
178
|
+
async registerAction(address, actionName, config) {
|
|
179
|
+
const key = telemetryKey(address, actionName);
|
|
180
|
+
this.configs.set(key, config);
|
|
181
|
+
if (!this.telemetry.has(key)) {
|
|
182
|
+
const tel = createEmptyTelemetry();
|
|
183
|
+
try {
|
|
184
|
+
const latest = await this.actionStore.readLatest(address, actionName);
|
|
185
|
+
if (latest) {
|
|
186
|
+
tel.runCount = latest.runCount;
|
|
187
|
+
tel.successCount = latest.successCount;
|
|
188
|
+
tel.errorCount = latest.errorCount;
|
|
189
|
+
tel.skipCount = latest.skipCount;
|
|
190
|
+
tel.consecutiveErrorCount = latest.consecutiveErrorCount;
|
|
191
|
+
tel.totalDecisionsExecute = latest.totalDecisionsExecute;
|
|
192
|
+
tel.totalDecisionsNoExecute = latest.totalDecisionsNoExecute;
|
|
193
|
+
tel.totalTokensUsed = latest.totalTokensUsed;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
logger.warn("failed to seed telemetry from latest.json", { action: actionName, address, err });
|
|
198
|
+
}
|
|
199
|
+
this.telemetry.set(key, tel);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Wraps `action.handle(event)` with timing, persistence, and counter updates.
|
|
204
|
+
*/
|
|
205
|
+
async wrapHandle(address, action, config, event) {
|
|
206
|
+
const key = telemetryKey(address, config.name);
|
|
207
|
+
const tel = this.ensureTelemetry(key);
|
|
208
|
+
const startedAt = this.now();
|
|
209
|
+
tel.inFlight = true;
|
|
210
|
+
tel.lastRunStartedAt = startedAt;
|
|
211
|
+
let result;
|
|
212
|
+
try {
|
|
213
|
+
result = await action.handle(event);
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
217
|
+
result = {
|
|
218
|
+
success: false,
|
|
219
|
+
action_type: action.actionType,
|
|
220
|
+
summary: `Unhandled error: ${message}`,
|
|
221
|
+
error: message,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const finishedAt = this.now();
|
|
225
|
+
tel.inFlight = false;
|
|
226
|
+
tel.lastRunFinishedAt = finishedAt;
|
|
227
|
+
this.applyResultToTelemetry(tel, result, config);
|
|
228
|
+
const scanResult = event.data?.scanResult;
|
|
229
|
+
const decisionMeta = extractDecisionMeta(result.data);
|
|
230
|
+
const record = this.buildRecord({
|
|
231
|
+
address,
|
|
232
|
+
actionName: config.name,
|
|
233
|
+
actionType: action.actionType,
|
|
234
|
+
config,
|
|
235
|
+
event,
|
|
236
|
+
scanResult,
|
|
237
|
+
result,
|
|
238
|
+
startedAt,
|
|
239
|
+
finishedAt,
|
|
240
|
+
decisionMeta,
|
|
241
|
+
});
|
|
242
|
+
const latest = this.buildLatestState(address, config, tel, record);
|
|
243
|
+
try {
|
|
244
|
+
await this.actionStore.write(record, latest, {
|
|
245
|
+
retentionMs: resolveHistoryRetentionMs(config),
|
|
246
|
+
now: this.now(),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
logger.warn("action store write failed", { action: config.name, address, err });
|
|
251
|
+
}
|
|
252
|
+
// Strip internal _decisionMeta so it doesn't leak into the event bus / downstream consumers.
|
|
253
|
+
if (result.data && "_decisionMeta" in result.data) {
|
|
254
|
+
const { _decisionMeta: _, ...rest } = result.data;
|
|
255
|
+
result = { ...result, data: rest };
|
|
256
|
+
}
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
/** Reads persisted latest snapshot (for gateway/CLI). */
|
|
260
|
+
readLatest(address, actionName) {
|
|
261
|
+
return this.actionStore.readLatest(address, actionName);
|
|
262
|
+
}
|
|
263
|
+
/** Reads rolling history (for gateway/CLI). */
|
|
264
|
+
readHistory(address, actionName, opts) {
|
|
265
|
+
return this.actionStore.readHistory(address, actionName, opts);
|
|
266
|
+
}
|
|
267
|
+
/** Lists latest snapshots across strategies (for gateway list command). */
|
|
268
|
+
readAllLatest(filter) {
|
|
269
|
+
return this.actionStore.readAllLatest(filter);
|
|
270
|
+
}
|
|
271
|
+
async getHealthStatus() {
|
|
272
|
+
const actions = [];
|
|
273
|
+
let degraded = 0;
|
|
274
|
+
let unhealthy = 0;
|
|
275
|
+
let inFlight = 0;
|
|
276
|
+
for (const [key, cfg] of this.configs) {
|
|
277
|
+
const tel = this.telemetry.get(key) ?? createEmptyTelemetry();
|
|
278
|
+
const address = key.split("::")[0] ?? "";
|
|
279
|
+
const health = deriveActionHealth(tel);
|
|
280
|
+
if (health === "degraded") {
|
|
281
|
+
degraded++;
|
|
282
|
+
}
|
|
283
|
+
if (health === "unhealthy") {
|
|
284
|
+
unhealthy++;
|
|
285
|
+
}
|
|
286
|
+
if (tel.inFlight) {
|
|
287
|
+
inFlight++;
|
|
288
|
+
}
|
|
289
|
+
actions.push({
|
|
290
|
+
address,
|
|
291
|
+
actionName: cfg.name,
|
|
292
|
+
actionType: cfg.action_type,
|
|
293
|
+
health,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
const registered = this.configs.size;
|
|
297
|
+
const totals = {
|
|
298
|
+
registered,
|
|
299
|
+
enabled: registered,
|
|
300
|
+
inFlight,
|
|
301
|
+
degraded,
|
|
302
|
+
unhealthy,
|
|
303
|
+
};
|
|
304
|
+
const overall = deriveComponentRollup(actions.map((a) => a.health));
|
|
305
|
+
return {
|
|
306
|
+
component: "actions",
|
|
307
|
+
health: overall,
|
|
308
|
+
updatedAt: new Date().toISOString(),
|
|
309
|
+
summary: summarizeActionsHealth(totals, overall),
|
|
310
|
+
totals,
|
|
311
|
+
actions,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
async getSystemState() {
|
|
315
|
+
const actions = [];
|
|
316
|
+
for (const [key, cfg] of this.configs) {
|
|
317
|
+
const tel = this.telemetry.get(key) ?? createEmptyTelemetry();
|
|
318
|
+
const address = key.split("::")[0] ?? "";
|
|
319
|
+
actions.push({
|
|
320
|
+
address,
|
|
321
|
+
actionName: cfg.name,
|
|
322
|
+
actionType: cfg.action_type,
|
|
323
|
+
decisionMode: cfg.decision_mode,
|
|
324
|
+
health: deriveActionHealth(tel),
|
|
325
|
+
enabled: true,
|
|
326
|
+
inFlight: tel.inFlight,
|
|
327
|
+
lastRunStartedAt: tel.lastRunStartedAt,
|
|
328
|
+
lastRunFinishedAt: tel.lastRunFinishedAt,
|
|
329
|
+
lastRunStatus: tel.lastRunStatus,
|
|
330
|
+
lastSkipReason: tel.lastSkipReason,
|
|
331
|
+
lastError: tel.lastError,
|
|
332
|
+
lastErrorAt: tel.lastErrorAt,
|
|
333
|
+
runCount: tel.runCount,
|
|
334
|
+
successCount: tel.successCount,
|
|
335
|
+
errorCount: tel.errorCount,
|
|
336
|
+
skipCount: tel.skipCount,
|
|
337
|
+
consecutiveErrorCount: tel.consecutiveErrorCount,
|
|
338
|
+
lastDecisionExecute: tel.lastDecisionExecute,
|
|
339
|
+
lastDecisionConfidence: tel.lastDecisionConfidence,
|
|
340
|
+
totalDecisionsExecute: tel.totalDecisionsExecute,
|
|
341
|
+
totalDecisionsNoExecute: tel.totalDecisionsNoExecute,
|
|
342
|
+
totalTokensUsed: tel.totalTokensUsed,
|
|
343
|
+
lastExecutedAssets: [...tel.lastExecutedAssets],
|
|
344
|
+
config: cfg,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
const overall = deriveComponentRollup(actions.map((a) => a.health));
|
|
348
|
+
return {
|
|
349
|
+
component: "actions",
|
|
350
|
+
health: overall,
|
|
351
|
+
updatedAt: new Date().toISOString(),
|
|
352
|
+
state: {
|
|
353
|
+
totalRegistered: actions.length,
|
|
354
|
+
totalEnabled: actions.length,
|
|
355
|
+
actions,
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
ensureTelemetry(key) {
|
|
360
|
+
let t = this.telemetry.get(key);
|
|
361
|
+
if (!t) {
|
|
362
|
+
t = createEmptyTelemetry();
|
|
363
|
+
this.telemetry.set(key, t);
|
|
364
|
+
}
|
|
365
|
+
return t;
|
|
366
|
+
}
|
|
367
|
+
applyResultToTelemetry(tel, result, config) {
|
|
368
|
+
tel.runCount += 1;
|
|
369
|
+
const decisionMeta = extractDecisionMeta(result.data);
|
|
370
|
+
if (decisionMeta) {
|
|
371
|
+
tel.lastDecisionExecute = decisionMeta.execute;
|
|
372
|
+
tel.lastDecisionConfidence = decisionMeta.confidence;
|
|
373
|
+
if (decisionMeta.execute) {
|
|
374
|
+
tel.totalDecisionsExecute += 1;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
tel.totalDecisionsNoExecute += 1;
|
|
378
|
+
}
|
|
379
|
+
if (typeof decisionMeta.tokensUsed === "number") {
|
|
380
|
+
tel.totalTokensUsed += decisionMeta.tokensUsed;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (result.skipped) {
|
|
384
|
+
tel.skipCount += 1;
|
|
385
|
+
tel.lastRunStatus = "skipped";
|
|
386
|
+
tel.lastSkipReason = result.skipReason ?? null;
|
|
387
|
+
tel.consecutiveErrorCount = 0;
|
|
388
|
+
}
|
|
389
|
+
else if (result.success) {
|
|
390
|
+
tel.successCount += 1;
|
|
391
|
+
tel.lastRunStatus = "success";
|
|
392
|
+
tel.lastSkipReason = null;
|
|
393
|
+
tel.consecutiveErrorCount = 0;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
tel.errorCount += 1;
|
|
397
|
+
tel.lastRunStatus = "error";
|
|
398
|
+
tel.lastError = result.error ?? result.summary;
|
|
399
|
+
tel.lastErrorAt = this.now();
|
|
400
|
+
tel.consecutiveErrorCount += 1;
|
|
401
|
+
}
|
|
402
|
+
const assets = outcomeAssetsFromResult(result, config.action_type);
|
|
403
|
+
if (assets.length > 0) {
|
|
404
|
+
tel.lastExecutedAssets = assets;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
buildRecord(params) {
|
|
408
|
+
const { event, scanResult, result, startedAt, finishedAt, decisionMeta } = params;
|
|
409
|
+
return {
|
|
410
|
+
id: randomUUID(),
|
|
411
|
+
actionName: params.actionName,
|
|
412
|
+
actionType: params.actionType,
|
|
413
|
+
address: params.address,
|
|
414
|
+
startedAt,
|
|
415
|
+
finishedAt,
|
|
416
|
+
durationMs: Math.max(0, finishedAt - startedAt),
|
|
417
|
+
trigger: {
|
|
418
|
+
eventType: event.type,
|
|
419
|
+
scannerId: scanResult?.scannerId ?? null,
|
|
420
|
+
signalCount: scanResult?.signals?.length ?? 0,
|
|
421
|
+
topAssets: topAssetsFromScan(scanResult),
|
|
422
|
+
},
|
|
423
|
+
decision: decisionBlockFromMeta(decisionMeta),
|
|
424
|
+
outcome: buildOutcomeSnapshot(result, params.actionType),
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
buildLatestState(address, config, tel, last) {
|
|
428
|
+
const base = createEmptyLatestState(config.name, config.action_type, address, config.decision_mode);
|
|
429
|
+
return {
|
|
430
|
+
...base,
|
|
431
|
+
lastExecution: last,
|
|
432
|
+
runCount: tel.runCount,
|
|
433
|
+
successCount: tel.successCount,
|
|
434
|
+
errorCount: tel.errorCount,
|
|
435
|
+
skipCount: tel.skipCount,
|
|
436
|
+
consecutiveErrorCount: tel.consecutiveErrorCount,
|
|
437
|
+
totalDecisionsExecute: tel.totalDecisionsExecute,
|
|
438
|
+
totalDecisionsNoExecute: tel.totalDecisionsNoExecute,
|
|
439
|
+
totalTokensUsed: tel.totalTokensUsed,
|
|
440
|
+
updatedAt: this.now(),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=action-runtime-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-runtime-module.js","sourceRoot":"","sources":["../../src/actions/action-runtime-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ export declare class ClosePositionAction implements Action {
|
|
|
7
7
|
readonly actionType: "CLOSE_POSITION";
|
|
8
8
|
private decisionEngine;
|
|
9
9
|
constructor(config: ActionConfig, context: RuntimeContext);
|
|
10
|
+
private trackingCtx;
|
|
10
11
|
handle(event: HookEvent): Promise<ActionResult>;
|
|
11
12
|
private normalizeSignals;
|
|
12
13
|
private handleSignals;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-position.action.d.ts","sourceRoot":"","sources":["../../../src/actions/close-position/close-position.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,EAEV,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"close-position.action.d.ts","sourceRoot":"","sources":["../../../src/actions/close-position/close-position.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,SAAS,EAEV,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAY3D,qBAAa,mBAAoB,YAAW,MAAM;IAO9C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAPjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAG,gBAAgB,CAAU;IAEhD,OAAO,CAAC,cAAc,CAAiB;gBAG7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,cAAc;IASjC,OAAO,CAAC,WAAW;IAWb,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IAmKrD,OAAO,CAAC,gBAAgB;YAQV,aAAa;CA6E5B;AAID,eAAO,MAAM,oBAAoB,EAAE,aACO,CAAC;AAE3C,eAAO,MAAM,qBAAqB,EAAE,cAMnC,CAAC"}
|