@senpi/runtime 3.0.129 → 3.0.130
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 +12 -4
- package/dist/actions/action-events.d.ts +21 -7
- package/dist/actions/action-events.d.ts.map +1 -1
- package/dist/actions/action-events.js +54 -26
- package/dist/actions/action-events.js.map +1 -1
- package/dist/actions/action-runtime-module.d.ts.map +1 -1
- package/dist/actions/action-runtime-module.js +38 -7
- package/dist/actions/action-runtime-module.js.map +1 -1
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +122 -15
- 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 +15 -2
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +71 -2
- package/dist/actions/event-derivation.d.ts.map +1 -1
- package/dist/actions/event-derivation.js +251 -8
- package/dist/actions/event-derivation.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts +12 -2
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +144 -41
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts +2 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +62 -17
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/actions/skipped-signal-results.d.ts +25 -0
- package/dist/actions/skipped-signal-results.d.ts.map +1 -0
- package/dist/actions/skipped-signal-results.js +71 -0
- package/dist/actions/skipped-signal-results.js.map +1 -0
- package/dist/actions/store/types.d.ts +9 -2
- package/dist/actions/store/types.d.ts.map +1 -1
- package/dist/actions/store/types.js.map +1 -1
- package/dist/actions/types.d.ts +13 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +13 -0
- package/dist/actions/types.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +7 -6
- 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 +4 -11
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/event-mapping.js +14 -0
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts +16 -1
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +6 -0
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +7 -0
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +37 -7
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts +6 -2
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +15 -9
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.d.ts +2 -0
- package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.js +2 -1
- package/dist/dsl/monitor/dsl-failure-events.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts +1 -0
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +59 -25
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +8 -2
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +8 -6
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/health/types.d.ts +13 -0
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js +12 -0
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +27 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +251 -39
- package/dist/index.js.map +1 -1
- package/dist/runtime/action-registry.d.ts.map +1 -1
- package/dist/runtime/action-registry.js +4 -3
- package/dist/runtime/action-registry.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.d.ts +13 -6
- package/dist/runtime/auto-update/coordinator.d.ts.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +86 -18
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/auto-update/run-update-command.d.ts.map +1 -1
- package/dist/runtime/auto-update/run-update-command.js +4 -3
- package/dist/runtime/auto-update/run-update-command.js.map +1 -1
- package/dist/runtime/auto-update/types.d.ts +11 -5
- package/dist/runtime/auto-update/types.d.ts.map +1 -1
- package/dist/runtime/auto-update/types.js +11 -0
- package/dist/runtime/auto-update/types.js.map +1 -1
- package/dist/runtime/domain-events.d.ts.map +1 -1
- package/dist/runtime/domain-events.js +7 -0
- package/dist/runtime/domain-events.js.map +1 -1
- package/dist/runtime/lifecycle-events.d.ts +9 -1
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +11 -2
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/reconcile-run.d.ts +13 -3
- package/dist/runtime/reconcile-run.d.ts.map +1 -1
- package/dist/runtime/reconcile-run.js +4 -3
- package/dist/runtime/reconcile-run.js.map +1 -1
- package/dist/runtime/reconcile-state.d.ts +8 -0
- package/dist/runtime/reconcile-state.d.ts.map +1 -1
- package/dist/runtime/reconcile-state.js +4 -1
- package/dist/runtime/reconcile-state.js.map +1 -1
- package/dist/runtime/run.d.ts +1 -0
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.js +3 -3
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +27 -3
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts +13 -0
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +1 -0
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime/validate-dsl-position-tracking.d.ts.map +1 -1
- package/dist/runtime/validate-dsl-position-tracking.js +2 -1
- package/dist/runtime/validate-dsl-position-tracking.js.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.d.ts.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.js +1 -0
- package/dist/runtime-api/handlers/ingest-signals.js.map +1 -1
- package/dist/runtime-api/handlers/types.d.ts +5 -0
- package/dist/runtime-api/handlers/types.d.ts.map +1 -1
- package/dist/runtime-api/intake/ingest-request.d.ts +17 -0
- package/dist/runtime-api/intake/ingest-request.d.ts.map +1 -0
- package/dist/runtime-api/intake/ingest-request.js +34 -0
- package/dist/runtime-api/intake/ingest-request.js.map +1 -0
- package/dist/runtime-api/intake/intake-events.d.ts +1 -1
- 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/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +4 -19
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- package/dist/runtime-api/intake/process-error-post.d.ts +6 -1
- package/dist/runtime-api/intake/process-error-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-error-post.js +5 -1
- package/dist/runtime-api/intake/process-error-post.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +7 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +5 -0
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-tick-router.d.ts +39 -0
- package/dist/runtime-api/intake/scaffold-tick-router.d.ts.map +1 -0
- package/dist/runtime-api/intake/scaffold-tick-router.js +122 -0
- package/dist/runtime-api/intake/scaffold-tick-router.js.map +1 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +15 -0
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +55 -0
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.d.ts +2 -0
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +5 -1
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +43 -0
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +43 -0
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/runtime-api/server.d.ts +7 -1
- package/dist/runtime-api/server.d.ts.map +1 -1
- package/dist/runtime-api/server.js +1 -0
- package/dist/runtime-api/server.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +22 -1
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +78 -11
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/lifecycle.d.ts +7 -1
- package/dist/scanners/engine/lifecycle.d.ts.map +1 -1
- package/dist/scanners/events.d.ts +4 -0
- package/dist/scanners/events.d.ts.map +1 -1
- package/dist/scanners/events.js +2 -0
- package/dist/scanners/events.js.map +1 -1
- package/dist/scanners/external/scaffold/delivery.py +194 -25
- package/dist/scanners/external/scaffold/scaffold.py +172 -31
- package/dist/scanners/external/scaffold/senpi_mcp.py +150 -8
- package/dist/scanners/external/scaffold/tick_facts.py +130 -0
- package/dist/scanners/external/scaffold/ulid.py +58 -0
- package/dist/scanners/external-scanner-receiver.d.ts +17 -0
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -1
- package/dist/scanners/external-scanner-receiver.js +8 -0
- package/dist/scanners/external-scanner-receiver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +1 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +66 -9
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/telemetry/attributes.d.ts +20 -0
- package/dist/telemetry/attributes.d.ts.map +1 -1
- package/dist/telemetry/attributes.js +24 -0
- package/dist/telemetry/attributes.js.map +1 -1
- package/dist/telemetry/event-builders.d.ts +81 -6
- package/dist/telemetry/event-builders.d.ts.map +1 -1
- package/dist/telemetry/event-builders.js +141 -17
- package/dist/telemetry/event-builders.js.map +1 -1
- package/dist/telemetry/event-store.d.ts +6 -0
- package/dist/telemetry/event-store.d.ts.map +1 -1
- package/dist/telemetry/event-store.js +12 -8
- package/dist/telemetry/event-store.js.map +1 -1
- package/dist/telemetry/live-telemetry.d.ts +238 -0
- package/dist/telemetry/live-telemetry.d.ts.map +1 -0
- package/dist/telemetry/live-telemetry.js +853 -0
- package/dist/telemetry/live-telemetry.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +14 -2
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +19 -4
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/scanner-stats.d.ts +143 -0
- package/dist/telemetry/scanner-stats.d.ts.map +1 -0
- package/dist/telemetry/scanner-stats.js +426 -0
- package/dist/telemetry/scanner-stats.js.map +1 -0
- package/dist/telemetry/scanner-tick-feed.d.ts +87 -0
- package/dist/telemetry/scanner-tick-feed.d.ts.map +1 -0
- package/dist/telemetry/scanner-tick-feed.js +48 -0
- package/dist/telemetry/scanner-tick-feed.js.map +1 -0
- package/dist/telemetry/spans/redact-pii.d.ts.map +1 -1
- package/dist/telemetry/spans/redact-pii.js +18 -2
- package/dist/telemetry/spans/redact-pii.js.map +1 -1
- package/dist/telemetry/strategy-topology.d.ts +99 -0
- package/dist/telemetry/strategy-topology.d.ts.map +1 -0
- package/dist/telemetry/strategy-topology.js +93 -0
- package/dist/telemetry/strategy-topology.js.map +1 -0
- package/dist/telemetry/telemetry-publisher.d.ts +76 -0
- package/dist/telemetry/telemetry-publisher.d.ts.map +1 -0
- package/dist/telemetry/telemetry-publisher.js +247 -0
- package/dist/telemetry/telemetry-publisher.js.map +1 -0
- package/dist/telemetry/tick-frame.d.ts +212 -0
- package/dist/telemetry/tick-frame.d.ts.map +1 -0
- package/dist/telemetry/tick-frame.js +421 -0
- package/dist/telemetry/tick-frame.js.map +1 -0
- package/dist/telemetry/timeline-buffer.d.ts +95 -0
- package/dist/telemetry/timeline-buffer.d.ts.map +1 -0
- package/dist/telemetry/timeline-buffer.js +237 -0
- package/dist/telemetry/timeline-buffer.js.map +1 -0
- package/dist/telemetry/tracing.d.ts +9 -0
- package/dist/telemetry/tracing.d.ts.map +1 -1
- package/dist/telemetry/tracing.js +36 -0
- package/dist/telemetry/tracing.js.map +1 -1
- package/dist/types/dsl/index.d.ts +11 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +15 -0
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +166 -0
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +18 -0
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/logger.d.ts +4 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/telemetry-required-log.d.ts +60 -0
- package/dist/utils/telemetry-required-log.d.ts.map +1 -0
- package/dist/utils/telemetry-required-log.js +105 -0
- package/dist/utils/telemetry-required-log.js.map +1 -0
- package/dist/utils/ulid.d.ts +9 -0
- package/dist/utils/ulid.d.ts.map +1 -0
- package/dist/utils/ulid.js +43 -0
- package/dist/utils/ulid.js.map +1 -0
- package/dist/validate/recipe-checks.d.ts.map +1 -1
- package/dist/validate/recipe-checks.js +2 -2
- package/dist/validate/recipe-checks.js.map +1 -1
- package/openclaw.plugin.json +8 -4
- package/package.json +1 -1
|
@@ -404,28 +404,155 @@ def _cast_market_numerics(name: str, payload: Any, args: Optional[dict] = None)
|
|
|
404
404
|
return payload
|
|
405
405
|
|
|
406
406
|
|
|
407
|
+
# Per-call detail kept for one tick. The counts and the total duration below are
|
|
408
|
+
# whole however many calls a tick makes; only this per-call list is cut, because
|
|
409
|
+
# a scanner that calls a tool in a loop would otherwise grow an unbounded list
|
|
410
|
+
# inside a process that must not grow.
|
|
411
|
+
MAX_TICK_CALL_RECORDS = 64
|
|
412
|
+
|
|
413
|
+
# Per-argument bounds for a recorded call. Arguments are author-supplied and
|
|
414
|
+
# reach a watching operator's screen, so what is kept is scalars only, capped.
|
|
415
|
+
MAX_TICK_CALL_ARG_KEYS = 16
|
|
416
|
+
MAX_TICK_CALL_ARG_CHARS = 1024
|
|
417
|
+
|
|
418
|
+
# A list of scalars is kept as well, because the assets a scanner priced arrive
|
|
419
|
+
# in that shape and are the most useful argument on the event. Both bounds apply
|
|
420
|
+
# to one list: at most this many elements, and no more rendered characters than a
|
|
421
|
+
# single string argument is allowed. MAX_TICK_CALL_ARG_CHARS is shared rather than
|
|
422
|
+
# doubled so one long list cannot cost more frame than one long string.
|
|
423
|
+
MAX_TICK_CALL_ARG_LIST_ITEMS = 16
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def _is_arg_scalar(value: Any) -> bool:
|
|
427
|
+
"""Whether one value is a scalar this event carries: str, bool, or a finite number.
|
|
428
|
+
|
|
429
|
+
The int branch covers bool, which subclasses it, and comes before the float
|
|
430
|
+
branch on purpose: an int cannot be infinite, and `math.isfinite` on one too
|
|
431
|
+
large to convert to a float raises OverflowError.
|
|
432
|
+
"""
|
|
433
|
+
if isinstance(value, int):
|
|
434
|
+
return True
|
|
435
|
+
if isinstance(value, float):
|
|
436
|
+
return math.isfinite(value)
|
|
437
|
+
return isinstance(value, str)
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def _record_arg_list(value: list) -> Optional[list]:
|
|
441
|
+
"""One list argument, bounded — or None when the list is not carried at all.
|
|
442
|
+
|
|
443
|
+
A single non-scalar element rejects the whole list. Filtering it out instead
|
|
444
|
+
would let an author's unbounded dict decide how much of a nested payload gets
|
|
445
|
+
rendered, which is the input this event refuses to take.
|
|
446
|
+
|
|
447
|
+
Elements dropped by either bound are replaced by a trailing count, so a
|
|
448
|
+
shortened list reads as shortened rather than as a shorter call. The marker is
|
|
449
|
+
a plain string element because the consumer expands dictionary indexes and
|
|
450
|
+
scalars, and a nested object would not survive it.
|
|
451
|
+
"""
|
|
452
|
+
if not all(_is_arg_scalar(item) for item in value):
|
|
453
|
+
return None
|
|
454
|
+
kept: list = []
|
|
455
|
+
chars = 0
|
|
456
|
+
for item in value[:MAX_TICK_CALL_ARG_LIST_ITEMS]:
|
|
457
|
+
rendered = len(item) if isinstance(item, str) else len(str(item))
|
|
458
|
+
if chars + rendered > MAX_TICK_CALL_ARG_CHARS:
|
|
459
|
+
break
|
|
460
|
+
chars += rendered
|
|
461
|
+
kept.append(item)
|
|
462
|
+
if len(kept) < len(value):
|
|
463
|
+
kept.append(f"+{len(value) - len(kept)} more")
|
|
464
|
+
return kept
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
def _record_args(args: Optional[dict]) -> dict:
|
|
468
|
+
"""The scalar arguments of one call, bounded — never the caller's own dict.
|
|
469
|
+
|
|
470
|
+
A reference would let authored code mutate what the tally already recorded,
|
|
471
|
+
and a deep copy would pay for a payload the wire is going to drop anyway. A
|
|
472
|
+
kept list is a new list for the same reason.
|
|
473
|
+
"""
|
|
474
|
+
if not isinstance(args, dict):
|
|
475
|
+
return {}
|
|
476
|
+
kept: dict = {}
|
|
477
|
+
for key in list(args.keys())[:MAX_TICK_CALL_ARG_KEYS]:
|
|
478
|
+
if not isinstance(key, str):
|
|
479
|
+
continue
|
|
480
|
+
value = args[key]
|
|
481
|
+
if isinstance(value, str):
|
|
482
|
+
kept[key] = value[:MAX_TICK_CALL_ARG_CHARS]
|
|
483
|
+
elif _is_arg_scalar(value):
|
|
484
|
+
# The same gate the list path applies, and for a harder reason here: an
|
|
485
|
+
# `inf` compares equal to itself, so a self-equality check lets it
|
|
486
|
+
# through, and json.dumps then writes the bare `Infinity` token. That
|
|
487
|
+
# token is not JSON, and the tick facts ride one POST body — a
|
|
488
|
+
# JavaScript JSON.parse on it throws and every other fact on the tick
|
|
489
|
+
# is lost with the one argument.
|
|
490
|
+
kept[key] = value
|
|
491
|
+
elif isinstance(value, list):
|
|
492
|
+
# An empty list is kept. Absent means unmeasured on this event, and a
|
|
493
|
+
# scanner that passed no elements did measure something: it asked for
|
|
494
|
+
# nothing. Dropping it would report the argument as never supplied.
|
|
495
|
+
rendered_list = _record_arg_list(value)
|
|
496
|
+
if rendered_list is not None:
|
|
497
|
+
kept[key] = rendered_list
|
|
498
|
+
return kept
|
|
499
|
+
|
|
500
|
+
|
|
407
501
|
class TickErrorTally:
|
|
408
|
-
"""Per-tick
|
|
502
|
+
"""Per-tick record of what the MCP boundary did: every call, and every failure.
|
|
503
|
+
|
|
504
|
+
Two tallies, one object, because both are read at the same moment and reset
|
|
505
|
+
at the same moment.
|
|
506
|
+
|
|
507
|
+
FAILURES. Authored scan() code routinely catches the MCP exception and
|
|
508
|
+
returns [], so the exception alone never reaches the scaffold — the tick
|
|
509
|
+
would finish `ok` with zero candidates while the scanner is blind. The client
|
|
510
|
+
records every failure here as it re-raises; the scaffold resets the tally at
|
|
511
|
+
tick start and reads it at tick end to decide whether a candidate-less tick
|
|
512
|
+
was really ok.
|
|
513
|
+
|
|
514
|
+
CALLS. Every call is recorded, succeeded or failed, with the time it took.
|
|
515
|
+
Failures alone say what broke but not what the tick actually did or where its
|
|
516
|
+
time went — a tick with no failures and one 9-second call is a slow venue, and
|
|
517
|
+
nothing else on the box can tell an operator that.
|
|
409
518
|
|
|
410
|
-
Authored scan() code routinely catches the MCP exception and returns [], so
|
|
411
|
-
the exception alone never reaches the scaffold — the tick would finish `ok`
|
|
412
|
-
with zero candidates while the scanner is blind. The client records every
|
|
413
|
-
failure here as it re-raises; the scaffold resets the tally at tick start and
|
|
414
|
-
reads it at tick end to decide whether a candidate-less tick was really ok.
|
|
415
519
|
Thread-safe because call_tool may be driven from author threads.
|
|
416
520
|
"""
|
|
417
521
|
|
|
418
522
|
def __init__(self) -> None:
|
|
419
523
|
self._by_type: dict[str, int] = {}
|
|
524
|
+
self._calls: list[dict] = []
|
|
525
|
+
self._call_count = 0
|
|
526
|
+
self._total_ms = 0.0
|
|
420
527
|
self._lock = threading.Lock()
|
|
421
528
|
|
|
422
529
|
def record(self, error_type: str) -> None:
|
|
423
530
|
with self._lock:
|
|
424
531
|
self._by_type[error_type] = self._by_type.get(error_type, 0) + 1
|
|
425
532
|
|
|
533
|
+
def record_call(
|
|
534
|
+
self,
|
|
535
|
+
tool: str,
|
|
536
|
+
elapsed_ms: float,
|
|
537
|
+
args: Optional[dict] = None,
|
|
538
|
+
error_type: Optional[str] = None,
|
|
539
|
+
) -> None:
|
|
540
|
+
"""Record one completed call. Called on the success path and the failure path alike."""
|
|
541
|
+
entry = {"tool": tool, "ms": elapsed_ms, "args": _record_args(args)}
|
|
542
|
+
if error_type is not None:
|
|
543
|
+
entry["error_type"] = error_type
|
|
544
|
+
with self._lock:
|
|
545
|
+
self._call_count += 1
|
|
546
|
+
self._total_ms += elapsed_ms
|
|
547
|
+
if len(self._calls) < MAX_TICK_CALL_RECORDS:
|
|
548
|
+
self._calls.append(entry)
|
|
549
|
+
|
|
426
550
|
def reset(self) -> None:
|
|
427
551
|
with self._lock:
|
|
428
552
|
self._by_type = {}
|
|
553
|
+
self._calls = []
|
|
554
|
+
self._call_count = 0
|
|
555
|
+
self._total_ms = 0.0
|
|
429
556
|
|
|
430
557
|
def snapshot(self) -> dict[str, Any]:
|
|
431
558
|
"""{count, dominant_error_type, by_type}; count 0 / None when clean.
|
|
@@ -440,6 +567,15 @@ class TickErrorTally:
|
|
|
440
567
|
dominant = max(by_type, key=by_type.__getitem__) if by_type else None
|
|
441
568
|
return {"count": count, "dominant_error_type": dominant, "by_type": by_type}
|
|
442
569
|
|
|
570
|
+
def call_snapshot(self) -> dict[str, Any]:
|
|
571
|
+
"""{count, total_ms, calls}. `count` and `total_ms` are whole; `calls` may be cut."""
|
|
572
|
+
with self._lock:
|
|
573
|
+
return {
|
|
574
|
+
"count": self._call_count,
|
|
575
|
+
"total_ms": round(self._total_ms, 1),
|
|
576
|
+
"calls": [dict(call) for call in self._calls],
|
|
577
|
+
}
|
|
578
|
+
|
|
443
579
|
|
|
444
580
|
# --------------------------------------------------------------------------
|
|
445
581
|
# Transport-failure classification — which errors mean "the session is dead".
|
|
@@ -670,7 +806,11 @@ class SenpiMcpClient:
|
|
|
670
806
|
|
|
671
807
|
used = self._ensure_connected(name, deadline)
|
|
672
808
|
result = self._run(used.session.call_tool(name, arguments=args), name, deadline)
|
|
673
|
-
|
|
809
|
+
value = _cast_market_numerics(name, self._unwrap(name, result), args)
|
|
810
|
+
# Recorded after the unwrap, so a call that returned an `isError` result is
|
|
811
|
+
# counted on the failure path below and never twice.
|
|
812
|
+
self.tick_errors.record_call(name, round((time.monotonic() - started) * 1000, 1), args)
|
|
813
|
+
return value
|
|
674
814
|
except Exception as exc:
|
|
675
815
|
# Catch every failure — mutation block, missing creds, the lazy
|
|
676
816
|
# `import mcp`, transport errors, timeouts, tool `isError` — tally
|
|
@@ -691,13 +831,15 @@ class SenpiMcpClient:
|
|
|
691
831
|
# counts under the SAME name, so the dominant type a blind tick
|
|
692
832
|
# reports to /errors matches the senpi_mcp_error lines beside it.
|
|
693
833
|
error_type = "TimeoutError" if timed_out else type(primary).__name__
|
|
834
|
+
elapsed_ms = round((time.monotonic() - started) * 1000, 1)
|
|
694
835
|
self.tick_errors.record(error_type)
|
|
836
|
+
self.tick_errors.record_call(name, elapsed_ms, args, error_type)
|
|
695
837
|
log_event(
|
|
696
838
|
"senpi_mcp_error",
|
|
697
839
|
tool=name,
|
|
698
840
|
error_type=error_type,
|
|
699
841
|
error=str(primary)[:500],
|
|
700
|
-
elapsed_ms=
|
|
842
|
+
elapsed_ms=elapsed_ms,
|
|
701
843
|
**({"leaf_count": len(leaves)} if len(leaves) > 1 else {}),
|
|
702
844
|
**({"timeout_seconds": self._call_timeout} if timed_out else {}),
|
|
703
845
|
**({"session_rebuilt": True} if rebuilt else {}),
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""Per-tick observability facts the scaffold hands to the intake.
|
|
2
|
+
|
|
3
|
+
A scanner tick produces nothing on roughly 99% of ticks, so the only thing a
|
|
4
|
+
live screen can show about a working box is what the tick itself reports. These
|
|
5
|
+
facts are assembled here, once per tick, and ride the POST the delivery sink
|
|
6
|
+
already makes every tick — `/signals` on a clean tick, `/errors` on a failed
|
|
7
|
+
one. There is no second channel and no extra request.
|
|
8
|
+
|
|
9
|
+
ABSENT IS NOT ZERO. Every field is omitted when its value is unknown, never
|
|
10
|
+
defaulted. A `candidate_count` of 0 is a scanner that found nothing; an absent
|
|
11
|
+
one would be a scanner that did not say. The distinction has to survive from
|
|
12
|
+
here to the screen, so nothing in this module substitutes one for the other.
|
|
13
|
+
|
|
14
|
+
The state projection is the LAST COMMITTED row, which makes it stale by one tick
|
|
15
|
+
whenever the current tick failed. That is deliberate: a tick that could not
|
|
16
|
+
commit is exactly when the last agreed state is worth seeing.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from typing import Any, Optional
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Per-value character ceiling inside a projected row. An author may park a whole
|
|
25
|
+
# serialised payload in one state key; this bounds what one tick can put on the
|
|
26
|
+
# wire without bounding what the author may store.
|
|
27
|
+
MAX_STATE_VALUE_CHARS = 1024
|
|
28
|
+
|
|
29
|
+
# Keys projected out of one state row. Bounds an author's open-ended row the way
|
|
30
|
+
# the runtime bounds an open attribute bag.
|
|
31
|
+
MAX_STATE_KEYS = 32
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _is_scalar(value: Any) -> bool:
|
|
35
|
+
"""A value a consumer can parse: str, bool, or a FINITE number.
|
|
36
|
+
|
|
37
|
+
bool is checked before the numeric branch only implicitly — it is accepted
|
|
38
|
+
either way. NaN and the infinities are rejected: they are not JSON, and a
|
|
39
|
+
consumer reading one has no way to tell it from a real measurement.
|
|
40
|
+
"""
|
|
41
|
+
if isinstance(value, bool) or isinstance(value, str):
|
|
42
|
+
return True
|
|
43
|
+
if isinstance(value, (int, float)):
|
|
44
|
+
return value == value and value not in (float("inf"), float("-inf"))
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def project_state_row(row: Any) -> dict:
|
|
49
|
+
"""The scalar fields of one state row, capped and bounded.
|
|
50
|
+
|
|
51
|
+
Returns {} for anything that is not a dict — a row the author replaced with
|
|
52
|
+
a list or a string projects to nothing rather than raising inside the loop.
|
|
53
|
+
"""
|
|
54
|
+
if not isinstance(row, dict):
|
|
55
|
+
return {}
|
|
56
|
+
projected: dict = {}
|
|
57
|
+
for key in list(row.keys())[:MAX_STATE_KEYS]:
|
|
58
|
+
if not isinstance(key, str):
|
|
59
|
+
continue
|
|
60
|
+
value = row[key]
|
|
61
|
+
if not _is_scalar(value):
|
|
62
|
+
continue
|
|
63
|
+
projected[key] = value[:MAX_STATE_VALUE_CHARS] if isinstance(value, str) else value
|
|
64
|
+
return projected
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def count_changed(current: dict, previous: Optional[dict]) -> int:
|
|
68
|
+
"""How many projected fields moved since the previously reported row.
|
|
69
|
+
|
|
70
|
+
A first row counts every field as changed: nothing was known before it, so
|
|
71
|
+
every value is new information. A key that disappeared counts too — its
|
|
72
|
+
absence is a change the operator should see.
|
|
73
|
+
"""
|
|
74
|
+
if previous is None:
|
|
75
|
+
return len(current)
|
|
76
|
+
keys = set(current) | set(previous)
|
|
77
|
+
return sum(1 for key in keys if current.get(key) != previous.get(key))
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def build_tick_facts(
|
|
81
|
+
*,
|
|
82
|
+
tick_id: str,
|
|
83
|
+
status: str,
|
|
84
|
+
candidate_count: int,
|
|
85
|
+
duration_ms: int,
|
|
86
|
+
commit: Optional[str],
|
|
87
|
+
quiet_ticks: int,
|
|
88
|
+
lag_ms: Optional[int],
|
|
89
|
+
mcp_snapshot: Optional[dict],
|
|
90
|
+
call_snapshot: Optional[dict],
|
|
91
|
+
state_row: Any,
|
|
92
|
+
state_fields: Optional[int],
|
|
93
|
+
state_changed: Optional[int],
|
|
94
|
+
) -> dict:
|
|
95
|
+
"""Assemble one tick's facts for the wire.
|
|
96
|
+
|
|
97
|
+
`mcp_snapshot` / `call_snapshot` are the MCP boundary's own per-tick tallies,
|
|
98
|
+
or None when the tick ran without an MCP client — which is not the same as a
|
|
99
|
+
tick that made no calls, so both keys are then left off entirely.
|
|
100
|
+
"""
|
|
101
|
+
facts: dict = {
|
|
102
|
+
"tick_id": tick_id,
|
|
103
|
+
"status": status,
|
|
104
|
+
"candidate_count": candidate_count,
|
|
105
|
+
"duration_ms": duration_ms,
|
|
106
|
+
# Always known: the loop either commits, rolls back, or fails to persist.
|
|
107
|
+
**({"commit": commit} if commit else {}),
|
|
108
|
+
# Zero is a real answer here (this tick produced a signal), so it is sent.
|
|
109
|
+
"quiet_ticks": quiet_ticks,
|
|
110
|
+
}
|
|
111
|
+
# Unknown on the very first tick of a process: there is no previous tick to
|
|
112
|
+
# measure the gap against, and a 0 would claim the scanner was exactly on time.
|
|
113
|
+
if lag_ms is not None:
|
|
114
|
+
facts["lag_ms"] = lag_ms
|
|
115
|
+
if mcp_snapshot is not None:
|
|
116
|
+
# Every failure the boundary saw this tick. The overwhelming case is a failure the
|
|
117
|
+
# author's own `except` caught and turned into an empty return — the one thing that
|
|
118
|
+
# otherwise leaves no trace at all. A failure that escaped scan() is in the count too,
|
|
119
|
+
# and needs no separating out: it already failed the tick, so `status` names it.
|
|
120
|
+
facts["mcp_failures"] = int(mcp_snapshot.get("count") or 0)
|
|
121
|
+
if call_snapshot is not None:
|
|
122
|
+
facts["mcp_ms"] = call_snapshot.get("total_ms", 0)
|
|
123
|
+
facts["mcp_calls"] = call_snapshot.get("calls", [])
|
|
124
|
+
projected = project_state_row(state_row)
|
|
125
|
+
if state_fields is not None:
|
|
126
|
+
facts["state"] = projected
|
|
127
|
+
facts["state_fields"] = state_fields
|
|
128
|
+
if state_changed is not None:
|
|
129
|
+
facts["state_changed"] = state_changed
|
|
130
|
+
return facts
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""ULID minting: a 26-character, lexicographically sortable id — 48 bits of millisecond timestamp
|
|
2
|
+
followed by 80 bits of randomness, rendered in Crockford's base32. Sortable ids are what let two
|
|
3
|
+
ticks be ordered without carrying a second field, and 80 random bits make a collision between two
|
|
4
|
+
ticks of the same millisecond unreachable.
|
|
5
|
+
|
|
6
|
+
Mirrors src/utils/ulid.ts so a scaffold id and a runtime id are the same kind of value. The random
|
|
7
|
+
half is read out of a `uuid.uuid4()`, taking only the ten bytes that carry no version or variant
|
|
8
|
+
bits, so all 80 of them are random.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import math
|
|
14
|
+
import time
|
|
15
|
+
import uuid
|
|
16
|
+
|
|
17
|
+
# Crockford's base32: no I, L, O or U, so a transcribed id cannot be misread.
|
|
18
|
+
CROCKFORD = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
|
|
19
|
+
|
|
20
|
+
TIME_CHARS = 10
|
|
21
|
+
RANDOM_CHARS = 16
|
|
22
|
+
MAX_TIME = 2 ** 48 - 1
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _encode_time(ms) -> str:
|
|
26
|
+
"""Render `ms` as the 10-character time prefix.
|
|
27
|
+
|
|
28
|
+
Clamped, and never raised from: a clock that reads non-finite, negative, or past the 48-bit
|
|
29
|
+
ceiling must still yield a valid id rather than kill the tick that asked for one.
|
|
30
|
+
"""
|
|
31
|
+
try:
|
|
32
|
+
remaining = min(max(math.floor(ms), 0), MAX_TIME)
|
|
33
|
+
except (OverflowError, ValueError, TypeError):
|
|
34
|
+
remaining = 0
|
|
35
|
+
out = ""
|
|
36
|
+
for _ in range(TIME_CHARS):
|
|
37
|
+
out = CROCKFORD[remaining % 32] + out
|
|
38
|
+
remaining //= 32
|
|
39
|
+
return out
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _encode_random() -> str:
|
|
43
|
+
"""Render 80 random bits as the 16-character suffix, five bits at a time."""
|
|
44
|
+
# uuid4 holds its version and variant in bytes 6 and 8; the ten bytes taken here are the
|
|
45
|
+
# fully random ones.
|
|
46
|
+
raw = uuid.uuid4().bytes
|
|
47
|
+
acc = int.from_bytes(raw[:6] + raw[9:13], "big")
|
|
48
|
+
return "".join(
|
|
49
|
+
CROCKFORD[(acc >> shift) & 31]
|
|
50
|
+
for shift in range(RANDOM_CHARS * 5 - 5, -1, -5)
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def new_ulid(now_ms: int | None = None) -> str:
|
|
55
|
+
"""Mint a ULID. `now_ms` is injectable so a caller can pin the time half in a test."""
|
|
56
|
+
if now_ms is None:
|
|
57
|
+
now_ms = int(time.time() * 1000)
|
|
58
|
+
return _encode_time(now_ms) + _encode_random()
|
|
@@ -18,6 +18,17 @@ export interface ExternalScannerIngestRequest {
|
|
|
18
18
|
* greppable across the intake→ingest hops. Never sizes/gates/routes a trade.
|
|
19
19
|
*/
|
|
20
20
|
signal_id?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Producer-minted id of the scan that produced this signal. Absent when the
|
|
23
|
+
* producer sends none — the ingest never mints one, so a missing id stays
|
|
24
|
+
* missing all the way to the event attribute.
|
|
25
|
+
*/
|
|
26
|
+
tick_id?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Intake-minted id of the acceptance row that admitted this signal. Answers a
|
|
29
|
+
* different question from `tick_id`: which acceptance, not which scan.
|
|
30
|
+
*/
|
|
31
|
+
correlationId?: string;
|
|
21
32
|
/** Asset for a single ingested signal. */
|
|
22
33
|
asset?: string;
|
|
23
34
|
/** Optional direction for a single ingested signal. */
|
|
@@ -58,6 +69,12 @@ export interface ExternalScannerIngestSignalItem {
|
|
|
58
69
|
signal_type?: string;
|
|
59
70
|
marginPct?: number;
|
|
60
71
|
leverage?: number;
|
|
72
|
+
/**
|
|
73
|
+
* Producer-minted id of the scan that produced THIS item. One batch can mix ticks — a producer
|
|
74
|
+
* retry rides along with the current tick's signals — so the item's own id wins over the
|
|
75
|
+
* request-level one. Absent on both leaves the signal unnamed; the ingest never mints one.
|
|
76
|
+
*/
|
|
77
|
+
tick_id?: string;
|
|
61
78
|
data: Record<string, unknown>;
|
|
62
79
|
}
|
|
63
80
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-scanner-receiver.d.ts","sourceRoot":"","sources":["../../src/scanners/external-scanner-receiver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,WAAW,4BAA4B;IAC3C,uCAAuC;IACvC,OAAO,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,+BAA+B,EAAE,CAAC;CAC7C;AAED;;;;;GAKG;AACH,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,MAAM,MAAM,8BAA8B,GACtC,iBAAiB,GACjB,WAAW,GACX,aAAa,CAAC;AAElB;;;;;;GAMG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;gBAElC,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,MAAM;CAKlE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,4BAA4B,CAAC;IACtC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,6BAA6B,CAsDhC;
|
|
1
|
+
{"version":3,"file":"external-scanner-receiver.d.ts","sourceRoot":"","sources":["../../src/scanners/external-scanner-receiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,7 @@ function prepareSingleSignalIngest(options) {
|
|
|
86
86
|
marginPct: request.marginPct,
|
|
87
87
|
leverage: request.leverage,
|
|
88
88
|
signalId: request.signal_id,
|
|
89
|
+
tickId: request.tick_id,
|
|
89
90
|
data: request.data,
|
|
90
91
|
defaultSignalType: options.defaultSignalType,
|
|
91
92
|
timestamp: options.timestamp,
|
|
@@ -140,6 +141,9 @@ function prepareBatchSignalIngest(options) {
|
|
|
140
141
|
signalType: item.signal_type,
|
|
141
142
|
marginPct: item.marginPct,
|
|
142
143
|
leverage: item.leverage,
|
|
144
|
+
// The item names the tick that produced IT; the request-level id is the fallback for a
|
|
145
|
+
// producer that sends one id for the whole POST.
|
|
146
|
+
tickId: typeof item.tick_id === "string" ? item.tick_id : request.tick_id,
|
|
143
147
|
data: item.data,
|
|
144
148
|
defaultSignalType: options.defaultSignalType,
|
|
145
149
|
timestamp: options.timestamp,
|
|
@@ -229,6 +233,10 @@ function buildNormalizedSignal(options) {
|
|
|
229
233
|
if (typeof options.signalId === "string" && options.signalId.length > 0) {
|
|
230
234
|
signal.signal_id = options.signalId;
|
|
231
235
|
}
|
|
236
|
+
// Same carry as signal_id: a blank would be an attribute that exists and says nothing.
|
|
237
|
+
if (typeof options.tickId === "string" && options.tickId.length > 0) {
|
|
238
|
+
signal.tick_id = options.tickId;
|
|
239
|
+
}
|
|
232
240
|
// Canonical per-signal sizing/leverage ride at the top level (not in meta),
|
|
233
241
|
// so the open action consumes them directly. Only in-range values are kept.
|
|
234
242
|
// marginPct is a percent of withdrawable (0–100].
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-scanner-receiver.js","sourceRoot":"","sources":["../../src/scanners/external-scanner-receiver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"external-scanner-receiver.js","sourceRoot":"","sources":["../../src/scanners/external-scanner-receiver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-module.d.ts","sourceRoot":"","sources":["../../src/scanners/runtime-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-module.d.ts","sourceRoot":"","sources":["../../src/scanners/runtime-module.ts"],"names":[],"mappings":"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"}
|