@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.
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +28 -2
- 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 +2 -0
- package/dist/cli/senpi-commands.js.map +1 -1
- package/dist/cli/validate-command.d.ts +29 -0
- package/dist/cli/validate-command.d.ts.map +1 -0
- package/dist/cli/validate-command.js +89 -0
- package/dist/cli/validate-command.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +62 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/load-runtime-config.d.ts +38 -0
- package/dist/runtime/load-runtime-config.d.ts.map +1 -1
- package/dist/runtime/load-runtime-config.js +33 -25
- package/dist/runtime/load-runtime-config.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +100 -100
- package/dist/scanners/external/scaffold/__main__.py +8 -0
- package/dist/scanners/external/scaffold/ctx.py +15 -1
- package/dist/scanners/external/scaffold/http_post.py +30 -0
- package/dist/scanners/external/scaffold/import_check.py +310 -0
- package/dist/scanners/external/scaffold/preflight.py +545 -0
- package/dist/scanners/external/scaffold/scaffold.py +19 -6
- package/dist/scanners/implementations/market-regime.d.ts +1 -1
- package/dist/telemetry/metrics.d.ts +6 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +45 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/utils/event-catalog.d.ts +40 -0
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +12 -0
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/validate/codes.d.ts +165 -0
- package/dist/validate/codes.d.ts.map +1 -0
- package/dist/validate/codes.js +381 -0
- package/dist/validate/codes.js.map +1 -0
- package/dist/validate/coverage.d.ts +34 -0
- package/dist/validate/coverage.d.ts.map +1 -0
- package/dist/validate/coverage.js +34 -0
- package/dist/validate/coverage.js.map +1 -0
- package/dist/validate/import-stage.d.ts +56 -0
- package/dist/validate/import-stage.d.ts.map +1 -0
- package/dist/validate/import-stage.js +244 -0
- package/dist/validate/import-stage.js.map +1 -0
- package/dist/validate/index.d.ts +28 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +27 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/install-gate.d.ts +44 -0
- package/dist/validate/install-gate.d.ts.map +1 -0
- package/dist/validate/install-gate.js +66 -0
- package/dist/validate/install-gate.js.map +1 -0
- package/dist/validate/live-stage.d.ts +134 -0
- package/dist/validate/live-stage.d.ts.map +1 -0
- package/dist/validate/live-stage.js +472 -0
- package/dist/validate/live-stage.js.map +1 -0
- package/dist/validate/proof.d.ts +104 -0
- package/dist/validate/proof.d.ts.map +1 -0
- package/dist/validate/proof.js +269 -0
- package/dist/validate/proof.js.map +1 -0
- package/dist/validate/recipe-checks.d.ts +79 -0
- package/dist/validate/recipe-checks.d.ts.map +1 -0
- package/dist/validate/recipe-checks.js +205 -0
- package/dist/validate/recipe-checks.js.map +1 -0
- package/dist/validate/recipe.d.ts +41 -0
- package/dist/validate/recipe.d.ts.map +1 -0
- package/dist/validate/recipe.js +215 -0
- package/dist/validate/recipe.js.map +1 -0
- package/dist/validate/report.d.ts +35 -0
- package/dist/validate/report.d.ts.map +1 -0
- package/dist/validate/report.js +80 -0
- package/dist/validate/report.js.map +1 -0
- package/dist/validate/run.d.ts +101 -0
- package/dist/validate/run.d.ts.map +1 -0
- package/dist/validate/run.js +471 -0
- package/dist/validate/run.js.map +1 -0
- package/dist/validate/signal-stage.d.ts +40 -0
- package/dist/validate/signal-stage.d.ts.map +1 -0
- package/dist/validate/signal-stage.js +116 -0
- package/dist/validate/signal-stage.js.map +1 -0
- package/dist/validate/target.d.ts +70 -0
- package/dist/validate/target.d.ts.map +1 -0
- package/dist/validate/target.js +231 -0
- package/dist/validate/target.js.map +1 -0
- package/dist/validate/telemetry.d.ts +24 -0
- package/dist/validate/telemetry.d.ts.map +1 -0
- package/dist/validate/telemetry.js +60 -0
- package/dist/validate/telemetry.js.map +1 -0
- package/dist/validate/types.d.ts +115 -0
- package/dist/validate/types.d.ts.map +1 -0
- package/dist/validate/types.js +31 -0
- package/dist/validate/types.js.map +1 -0
- package/dist/validate/wallet.d.ts +63 -0
- package/dist/validate/wallet.d.ts.map +1 -0
- package/dist/validate/wallet.js +66 -0
- package/dist/validate/wallet.js.map +1 -0
- package/openclaw.plugin.json +1 -1
- 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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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",
|