@senpi/runtime 3.0.56 → 3.0.58

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.
Files changed (99) hide show
  1. package/dist/cli/guide-commands.d.ts.map +1 -1
  2. package/dist/cli/guide-commands.js +28 -2
  3. package/dist/cli/guide-commands.js.map +1 -1
  4. package/dist/cli/senpi-commands.d.ts.map +1 -1
  5. package/dist/cli/senpi-commands.js +2 -0
  6. package/dist/cli/senpi-commands.js.map +1 -1
  7. package/dist/cli/validate-command.d.ts +29 -0
  8. package/dist/cli/validate-command.d.ts.map +1 -0
  9. package/dist/cli/validate-command.js +89 -0
  10. package/dist/cli/validate-command.js.map +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +62 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/runtime/load-runtime-config.d.ts +38 -0
  15. package/dist/runtime/load-runtime-config.d.ts.map +1 -1
  16. package/dist/runtime/load-runtime-config.js +33 -25
  17. package/dist/runtime/load-runtime-config.js.map +1 -1
  18. package/dist/runtime/runtime-schema.d.ts +100 -100
  19. package/dist/scanners/external/scaffold/__main__.py +8 -0
  20. package/dist/scanners/external/scaffold/ctx.py +15 -1
  21. package/dist/scanners/external/scaffold/http_post.py +30 -0
  22. package/dist/scanners/external/scaffold/import_check.py +310 -0
  23. package/dist/scanners/external/scaffold/preflight.py +545 -0
  24. package/dist/scanners/external/scaffold/scaffold.py +19 -6
  25. package/dist/scanners/implementations/market-regime.d.ts +1 -1
  26. package/dist/telemetry/metrics.d.ts +6 -0
  27. package/dist/telemetry/metrics.d.ts.map +1 -1
  28. package/dist/telemetry/metrics.js +45 -0
  29. package/dist/telemetry/metrics.js.map +1 -1
  30. package/dist/utils/event-catalog.d.ts +40 -0
  31. package/dist/utils/event-catalog.d.ts.map +1 -1
  32. package/dist/utils/event-catalog.js +12 -0
  33. package/dist/utils/event-catalog.js.map +1 -1
  34. package/dist/validate/codes.d.ts +165 -0
  35. package/dist/validate/codes.d.ts.map +1 -0
  36. package/dist/validate/codes.js +381 -0
  37. package/dist/validate/codes.js.map +1 -0
  38. package/dist/validate/coverage.d.ts +34 -0
  39. package/dist/validate/coverage.d.ts.map +1 -0
  40. package/dist/validate/coverage.js +34 -0
  41. package/dist/validate/coverage.js.map +1 -0
  42. package/dist/validate/import-stage.d.ts +56 -0
  43. package/dist/validate/import-stage.d.ts.map +1 -0
  44. package/dist/validate/import-stage.js +244 -0
  45. package/dist/validate/import-stage.js.map +1 -0
  46. package/dist/validate/index.d.ts +28 -0
  47. package/dist/validate/index.d.ts.map +1 -0
  48. package/dist/validate/index.js +27 -0
  49. package/dist/validate/index.js.map +1 -0
  50. package/dist/validate/install-gate.d.ts +44 -0
  51. package/dist/validate/install-gate.d.ts.map +1 -0
  52. package/dist/validate/install-gate.js +66 -0
  53. package/dist/validate/install-gate.js.map +1 -0
  54. package/dist/validate/live-stage.d.ts +134 -0
  55. package/dist/validate/live-stage.d.ts.map +1 -0
  56. package/dist/validate/live-stage.js +472 -0
  57. package/dist/validate/live-stage.js.map +1 -0
  58. package/dist/validate/proof.d.ts +104 -0
  59. package/dist/validate/proof.d.ts.map +1 -0
  60. package/dist/validate/proof.js +269 -0
  61. package/dist/validate/proof.js.map +1 -0
  62. package/dist/validate/recipe-checks.d.ts +79 -0
  63. package/dist/validate/recipe-checks.d.ts.map +1 -0
  64. package/dist/validate/recipe-checks.js +205 -0
  65. package/dist/validate/recipe-checks.js.map +1 -0
  66. package/dist/validate/recipe.d.ts +41 -0
  67. package/dist/validate/recipe.d.ts.map +1 -0
  68. package/dist/validate/recipe.js +215 -0
  69. package/dist/validate/recipe.js.map +1 -0
  70. package/dist/validate/report.d.ts +35 -0
  71. package/dist/validate/report.d.ts.map +1 -0
  72. package/dist/validate/report.js +80 -0
  73. package/dist/validate/report.js.map +1 -0
  74. package/dist/validate/run.d.ts +101 -0
  75. package/dist/validate/run.d.ts.map +1 -0
  76. package/dist/validate/run.js +471 -0
  77. package/dist/validate/run.js.map +1 -0
  78. package/dist/validate/signal-stage.d.ts +40 -0
  79. package/dist/validate/signal-stage.d.ts.map +1 -0
  80. package/dist/validate/signal-stage.js +116 -0
  81. package/dist/validate/signal-stage.js.map +1 -0
  82. package/dist/validate/target.d.ts +70 -0
  83. package/dist/validate/target.d.ts.map +1 -0
  84. package/dist/validate/target.js +231 -0
  85. package/dist/validate/target.js.map +1 -0
  86. package/dist/validate/telemetry.d.ts +24 -0
  87. package/dist/validate/telemetry.d.ts.map +1 -0
  88. package/dist/validate/telemetry.js +60 -0
  89. package/dist/validate/telemetry.js.map +1 -0
  90. package/dist/validate/types.d.ts +115 -0
  91. package/dist/validate/types.d.ts.map +1 -0
  92. package/dist/validate/types.js +31 -0
  93. package/dist/validate/types.js.map +1 -0
  94. package/dist/validate/wallet.d.ts +63 -0
  95. package/dist/validate/wallet.d.ts.map +1 -0
  96. package/dist/validate/wallet.js +66 -0
  97. package/dist/validate/wallet.js.map +1 -0
  98. package/openclaw.plugin.json +1 -1
  99. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/validate/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,+CAA+C,CAAC;AAEhF,MAAM,MAAM,YAAY;AACtB,iCAAiC;AAC/B,UAAU;AACZ,mEAAmE;GACjE,QAAQ;AACV,6CAA6C;GAC3C,aAAa;AACf,oBAAoB;GAClB,aAAa,CAAC;AAElB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAWlE;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAc9F"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Which account a live tick runs against.
3
+ *
4
+ * Executing a scanner needs an account identity — it is handed to the exchange reads the scanner
5
+ * makes. But during authoring no account exists yet: the wallet is created when the strategy is
6
+ * funded, which is deliberately after validation. So one is resolved rather than required.
7
+ */
8
+ /** As the chain writes them. Shape only; whether it exists is not this layer's concern. */
9
+ const ADDRESS = /^0x[0-9a-fA-F]{40}$/;
10
+ /**
11
+ * The stand-in used when no real account is available.
12
+ *
13
+ * Faithful rather than a workaround: an account with no history returns an empty book, which is
14
+ * exactly what a freshly funded strategy sees on its first tick. A scanner that breaks on an empty
15
+ * position list is broken, and would break identically in production — catching that is the point.
16
+ * The deploy preflight already validates against this same address for the same reason.
17
+ */
18
+ export const PLACEHOLDER_ADDRESS = "0x0000000000000000000000000000000000000000";
19
+ /**
20
+ * Resolve in order of specificity.
21
+ *
22
+ * The recipe's own wallet is preferred over any default because validating an edit to a deployed
23
+ * strategy against its real positions is more faithful than forcing a cold start. It is accepted
24
+ * only when it *looks* like an address: an unresolved placeholder is a non-empty string that the
25
+ * schema accepts happily, and passing that to the exchange would produce a confusing failure well
26
+ * away from its cause.
27
+ */
28
+ export function resolveWallet(inputs) {
29
+ if (inputs.explicit !== undefined && ADDRESS.test(inputs.explicit)) {
30
+ return { address: inputs.explicit, source: "explicit", book: "real" };
31
+ }
32
+ if (inputs.fromRecipe !== undefined && ADDRESS.test(inputs.fromRecipe)) {
33
+ return { address: inputs.fromRecipe, source: "recipe", book: "real" };
34
+ }
35
+ if (inputs.fromEnvironment !== undefined && ADDRESS.test(inputs.fromEnvironment)) {
36
+ return { address: inputs.fromEnvironment, source: "environment", book: "real" };
37
+ }
38
+ return { address: PLACEHOLDER_ADDRESS, source: "placeholder", book: "empty" };
39
+ }
40
+ /** Whether a supplied address is well formed. Checked before anything runs. */
41
+ export function isWellFormedAddress(value) {
42
+ return ADDRESS.test(value);
43
+ }
44
+ /**
45
+ * What running against this account does and does not establish.
46
+ *
47
+ * Rides the result so a caller cannot report more confidence than the run earned. Against an empty
48
+ * book, logic that depends on open positions never executes — which is correct for a strategy about
49
+ * to be funded, and worth saying out loud rather than leaving to inference.
50
+ */
51
+ export function walletClaim(wallet) {
52
+ if (wallet.book === "real") {
53
+ return {
54
+ proves: `runnable against the live book of ${wallet.address}`,
55
+ doesNotProve: ["branches this tick did not take"],
56
+ };
57
+ }
58
+ return {
59
+ proves: "runnable from cold start — the state a newly funded strategy begins in",
60
+ doesNotProve: [
61
+ "logic that depends on open positions, since the account had none",
62
+ "branches this tick did not take",
63
+ ],
64
+ };
65
+ }
66
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/validate/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,2FAA2F;AAC3F,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAC;AA4BhF;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QACjF,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAsB;IAChD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE,qCAAqC,MAAM,CAAC,OAAO,EAAE;YAC7D,YAAY,EAAE,CAAC,iCAAiC,CAAC;SAClD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,wEAAwE;QAChF,YAAY,EAAE;YACZ,kEAAkE;YAClE,iCAAiC;SAClC;KACF,CAAC;AACJ,CAAC"}
@@ -2,7 +2,7 @@
2
2
  "id": "runtime",
3
3
  "name": "Senpi Runtime",
4
4
  "description": "Senpi runtime plugin for OpenClaw. Orchestrates scanners, LLM-based trade decisions, and a DSL trailing stop-loss exit engine.",
5
- "version": "3.0.56",
5
+ "version": "3.0.58",
6
6
  "commandAliases": [
7
7
  {
8
8
  "name": "senpi"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@senpi/runtime",
3
- "version": "3.0.56",
3
+ "version": "3.0.58",
4
4
  "description": "Senpi runtime plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,6 +17,7 @@
17
17
  "copy:external-scanners": "node -e \"require('fs').rmSync('dist/scanners/external', { recursive: true, force: true }); require('fs').cpSync('src/scanners/external', 'dist/scanners/external', { recursive: true })\"",
18
18
  "copy:skills-manifest": "node -e \"require('fs').cpSync('src/skills-manager/skills-manifest.json', 'dist/skills-manager/skills-manifest.json')\"",
19
19
  "copy:approvals-manifest": "node -e \"require('fs').cpSync('src/approvals/tool-approvals-manifest.json', 'dist/approvals/tool-approvals-manifest.json')\"",
20
+ "fixture:tick": "node scripts/generate-tick-fixture.mjs",
20
21
  "typecheck:tests": "tsc -p tsconfig.tests.json --noEmit",
21
22
  "start": "node dist/index.js",
22
23
  "debug": "npm run build && node dist/debug.js",