@senpi/runtime 3.0.9-dev.feat-strategy-compos.20260716233548 → 3.0.9-dev.feat-strategy-compos.20260718011320
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/composer-commands.d.ts +7 -0
- package/dist/cli/composer-commands.d.ts.map +1 -1
- package/dist/cli/composer-commands.js +95 -1
- package/dist/cli/composer-commands.js.map +1 -1
- package/dist/composer/authoring/__init__.py +4 -0
- package/dist/composer/authoring/answers.py +110 -3
- package/dist/composer/authoring/archetypes/__init__.py +19 -2
- package/dist/composer/authoring/archetypes/breakout.py +18 -0
- package/dist/composer/authoring/archetypes/classifier.py +16 -0
- package/dist/composer/authoring/archetypes/relative_value.py +375 -0
- package/dist/composer/authoring/archetypes/thesis_fund.py +17 -0
- package/dist/composer/authoring/archetypes/trend_momentum.py +16 -0
- package/dist/composer/authoring/generate.py +56 -9
- package/dist/composer/authoring/presets.py +3 -0
- package/dist/composer/authoring/runtime_emit.py +57 -1
- package/dist/composer/cli.py +80 -8
- package/dist/composer/compiler/__init__.py +25 -4
- package/dist/composer/compiler/compile.py +230 -12
- package/dist/composer/examples/conviction_scorer.graph.yaml +1 -1
- package/dist/composer/examples/pair_relative_strength.graph.yaml +263 -0
- package/dist/composer/examples/pre_listing_classifier.graph.yaml +1 -1
- package/dist/composer/generated/catalog.md +29 -1
- package/dist/composer/generated/describe.md +49 -0
- package/dist/composer/generated/graph.schema.json +50 -0
- package/dist/composer/primitives/emitters.py +55 -0
- package/dist/composer/primitives/sources.py +77 -0
- package/dist/composer/primitives/stateful.py +2 -2
- package/dist/composer/pure_fn/runtests.py +70 -2
- package/dist/composer/registry/__init__.py +2 -0
- package/dist/composer/registry/generate.py +250 -2
- package/dist/composer/registry/models.py +28 -0
- package/dist/composer/registry/nodes.py +74 -2
- package/dist/composer/templates/scan.py.j2 +2 -1
- package/dist/composer/validator/errors.py +11 -0
- package/dist/composer/verbs/__init__.py +6 -0
- package/dist/composer/verbs/_box.py +138 -9
- package/dist/composer/verbs/check.py +181 -18
- package/dist/composer/verbs/deploy.py +26 -0
- package/dist/composer/verbs/docs.py +60 -4
- package/dist/composer/verbs/install.py +16 -7
- package/dist/composer/verbs/runtime_validate.py +152 -2
- package/dist/composer/verbs/update.py +453 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/composer/AUTHORING.md +0 -435
|
@@ -32,6 +32,13 @@ interface CommanderCommand {
|
|
|
32
32
|
* (src/index.ts: `new URL("./scanners/external", import.meta.url)`).
|
|
33
33
|
*/
|
|
34
34
|
export declare function resolveComposerRoot(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Build the compact RED trailer (legibility fix E2): the verdict, the FIRST failing stage, its
|
|
37
|
+
* CMP codes and the leading teaching error — the LAST lines a `composer check` writes on RED, so
|
|
38
|
+
* an agent that only sees the tail of the combined output still learns the verdict AND why. Mirrors
|
|
39
|
+
* the Python `CheckResult._red_trailer()` so the direct-CLI render and this rim render agree.
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildRedTrailer(graph: string, verdict: string, json: Record<string, unknown>): string[];
|
|
35
42
|
export declare function registerComposerCli(senpi: CommanderCommand): void;
|
|
36
43
|
export {};
|
|
37
44
|
//# sourceMappingURL=composer-commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer-commands.d.ts","sourceRoot":"","sources":["../../src/cli/composer-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CACJ,EAAE,EACE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC5B,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzD,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzE,gBAAgB,CAAC;CACrB;AAYD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;
|
|
1
|
+
{"version":3,"file":"composer-commands.d.ts","sourceRoot":"","sources":["../../src/cli/composer-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,UAAU,gBAAgB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAC9D,MAAM,CACJ,EAAE,EACE,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAC5B,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzD,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACzE,gBAAgB,CAAC;CACrB;AAYD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AA0GD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAuBvG;AAYD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAyUjE"}
|
|
@@ -121,15 +121,58 @@ function printErrors(errors) {
|
|
|
121
121
|
console.error(` fix: ${e.fix_hint}`);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Build the compact RED trailer (legibility fix E2): the verdict, the FIRST failing stage, its
|
|
126
|
+
* CMP codes and the leading teaching error — the LAST lines a `composer check` writes on RED, so
|
|
127
|
+
* an agent that only sees the tail of the combined output still learns the verdict AND why. Mirrors
|
|
128
|
+
* the Python `CheckResult._red_trailer()` so the direct-CLI render and this rim render agree.
|
|
129
|
+
*/
|
|
130
|
+
export function buildRedTrailer(graph, verdict, json) {
|
|
131
|
+
const lines = ["", "=".repeat(60), `${verdict}: ${graph}`];
|
|
132
|
+
const stages = json.stages ?? [];
|
|
133
|
+
const first = stages.find((s) => s.status === "RED");
|
|
134
|
+
if (!first) {
|
|
135
|
+
// No per-stage detail (e.g. an env/parse edge) — fall back to the flattened error list.
|
|
136
|
+
const errs = json.errors ?? [];
|
|
137
|
+
const codes = [...new Set(errs.map((e) => e.code).filter(Boolean))];
|
|
138
|
+
if (codes.length)
|
|
139
|
+
lines.push(`errors: ${codes.join(", ")}`);
|
|
140
|
+
return lines;
|
|
141
|
+
}
|
|
142
|
+
const errs = first.errors ?? [];
|
|
143
|
+
const codes = [...new Set(errs.map((e) => e.code).filter((c) => Boolean(c)))];
|
|
144
|
+
lines.push(`first failing stage: ${first.stage ?? "?"}${codes.length ? ` (${codes.join(", ")})` : ""}`);
|
|
145
|
+
if (errs.length) {
|
|
146
|
+
const e = errs[0];
|
|
147
|
+
lines.push(` [${e.code ?? "?"}] ${renderLocation(e.location)}: ${e.message ?? ""}`);
|
|
148
|
+
if (e.fix_hint)
|
|
149
|
+
lines.push(` fix: ${e.fix_hint}`);
|
|
150
|
+
if (errs.length > 1)
|
|
151
|
+
lines.push(` (+${errs.length - 1} more error(s) shown above)`);
|
|
152
|
+
}
|
|
153
|
+
else if ((first.messages ?? []).length) {
|
|
154
|
+
lines.push(` ${first.messages[0]}`);
|
|
155
|
+
}
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* `--verbose` opts back into full plugin logging for a composer verb. The composer command group
|
|
160
|
+
* runs the plugin logger quiet (`error`) by default (see wantsQuietComposerLogs in src/index.ts,
|
|
161
|
+
* applied at register time from process.argv) so a GREEN/RED verdict is not buried under startup /
|
|
162
|
+
* telemetry INFO noise. The flag is detected in argv there; it is declared on every verb here only
|
|
163
|
+
* so commander accepts it (the Python core never receives it). SENPI_LOG_LEVEL also overrides.
|
|
164
|
+
*/
|
|
165
|
+
const VERBOSE_HELP = "Show plugin startup/telemetry logs (composer verbs run quiet at error level by default)";
|
|
124
166
|
export function registerComposerCli(senpi) {
|
|
125
167
|
const composer = senpi.command("composer");
|
|
126
|
-
composer.description("Strategy Composer: new / validate / compile / check / deploy / fund / install / close / status a strategy graph; catalog / describe nodes");
|
|
168
|
+
composer.description("Strategy Composer: new / validate / compile / check / deploy / fund / install / update / close / status a strategy graph; catalog / describe nodes");
|
|
127
169
|
// new / validate / compile stream Python's own (rich) human render through — teaching
|
|
128
170
|
// errors, gap reports, emitted scan.py — forwarding only the relevant flags. Thin: no
|
|
129
171
|
// TS-side interpretation; the exit code is Python's (0 ok, 2 gap report, 3 clobber-refused).
|
|
130
172
|
composer
|
|
131
173
|
.command("new <id>")
|
|
132
174
|
.description("Generate a COMPLETE, VALID strategy graph from interview answers (D7)")
|
|
175
|
+
.option("--verbose", VERBOSE_HELP)
|
|
133
176
|
.option("--archetype <name>", "Archetype template (trend_momentum | classifier | thesis_fund)")
|
|
134
177
|
.option("--answers <file>", "Path to a YAML/JSON answers-file (flags override it)")
|
|
135
178
|
.option("-o, --out <dir>", "Output directory (default: cwd)")
|
|
@@ -161,6 +204,7 @@ export function registerComposerCli(senpi) {
|
|
|
161
204
|
composer
|
|
162
205
|
.command("validate <graph>")
|
|
163
206
|
.description("Validate a strategy graph (schema + graph checks) with teaching errors")
|
|
207
|
+
.option("--verbose", VERBOSE_HELP)
|
|
164
208
|
.option("--json", "Emit the structured result as JSON")
|
|
165
209
|
.action(async (graph, opts) => {
|
|
166
210
|
const args = ["validate", graph];
|
|
@@ -180,6 +224,7 @@ export function registerComposerCli(senpi) {
|
|
|
180
224
|
composer
|
|
181
225
|
.command("compile <graph>")
|
|
182
226
|
.description("Compile a validated strategy graph into a scan.py on the external_scanner contract")
|
|
227
|
+
.option("--verbose", VERBOSE_HELP)
|
|
183
228
|
.option("-o, --out <file>", "Write the emitted scan.py here (default: stdout)")
|
|
184
229
|
.action(async (graph, opts) => {
|
|
185
230
|
const args = ["compile", graph];
|
|
@@ -199,6 +244,7 @@ export function registerComposerCli(senpi) {
|
|
|
199
244
|
composer
|
|
200
245
|
.command("check <graph>")
|
|
201
246
|
.description("ONE verdict: validate + pure_fn tests + compile + fixture smoke (GREEN/RED)")
|
|
247
|
+
.option("--verbose", VERBOSE_HELP)
|
|
202
248
|
.option("--json", "Print the raw Python verdict JSON")
|
|
203
249
|
.action(async (graph, opts) => {
|
|
204
250
|
const { status, stdout, json } = runComposer(["check", graph, "--json"]);
|
|
@@ -220,12 +266,17 @@ export function registerComposerCli(senpi) {
|
|
|
220
266
|
else {
|
|
221
267
|
console.log(`RED: ${graph} — ${errors.length} error(s); deploy is refused until GREEN.`);
|
|
222
268
|
printErrors(errors);
|
|
269
|
+
// Re-emit a compact verdict trailer as the LAST thing written (stderr, after the stdout
|
|
270
|
+
// verdict line + errors) so a RED verdict + its first failing stage/CMP is impossible to
|
|
271
|
+
// miss even when only the tail of the combined output is seen. (Legibility fix E2.)
|
|
272
|
+
process.stderr.write(buildRedTrailer(graph, verdict, json).join("\n") + "\n");
|
|
223
273
|
}
|
|
224
274
|
process.exitCode = status;
|
|
225
275
|
});
|
|
226
276
|
composer
|
|
227
277
|
.command("deploy <graph>")
|
|
228
278
|
.description("Stage the deployable artifact set (idempotent); hard-gated on a GREEN check")
|
|
279
|
+
.option("--verbose", VERBOSE_HELP)
|
|
229
280
|
.option("-o, --out <dir>", "Staging directory (default: dist)")
|
|
230
281
|
.option("--json", "Print the raw Python verdict JSON")
|
|
231
282
|
.action(async (graph, opts) => {
|
|
@@ -262,6 +313,7 @@ export function registerComposerCli(senpi) {
|
|
|
262
313
|
composer
|
|
263
314
|
.command("fund <target>")
|
|
264
315
|
.description("Create + fund the strategy's wallet (MCP strategy_create_custom_strategy): preflights the balance, waits for ACTIVE, safe to re-run while funding settles")
|
|
316
|
+
.option("--verbose", VERBOSE_HELP)
|
|
265
317
|
.option("--budget <usd>", "Explicit USD to fund this strategy's wallet with (>= $100; never derived/split)")
|
|
266
318
|
.option("-o, --out <dir>", "Staging dir (when target is a graph file, not a staged dir)")
|
|
267
319
|
.option("--state-dir <dir>", "Base senpi-state dir (default: $SENPI_STATE_DIR or ~/.openclaw/senpi-state)")
|
|
@@ -292,6 +344,7 @@ export function registerComposerCli(senpi) {
|
|
|
292
344
|
composer
|
|
293
345
|
.command("install <target>")
|
|
294
346
|
.description("Bind a staged unit onto THIS box: copy to a canonical hash dir, bind --wallet (or auto-bind a funded wallet.json), run `openclaw senpi runtime create`")
|
|
347
|
+
.option("--verbose", VERBOSE_HELP)
|
|
295
348
|
.option("--wallet <address>", "The strategy's ACTIVE 0x… wallet to bind (omit to auto-bind a funded wallet.json)")
|
|
296
349
|
.option("-o, --out <dir>", "Staging dir (when target is a graph file, not a staged dir)")
|
|
297
350
|
.option("--state-dir <dir>", "Base senpi-state dir (default: $SENPI_STATE_DIR or ~/.openclaw/senpi-state)")
|
|
@@ -322,9 +375,47 @@ export function registerComposerCli(senpi) {
|
|
|
322
375
|
process.stderr.write(stderr);
|
|
323
376
|
process.exitCode = status;
|
|
324
377
|
});
|
|
378
|
+
composer
|
|
379
|
+
.command("update <target>")
|
|
380
|
+
.description("Swap an installed strategy's runtime version in place: delete the old runtime, install the new staged content on the SAME wallet. Strategy, wallet, and funds untouched (no strategy_close); refuses on open/unverifiable positions unless --yes")
|
|
381
|
+
.option("--verbose", VERBOSE_HELP)
|
|
382
|
+
.option("--wallet <address>", "The strategy's ACTIVE 0x… wallet (omit to use the funded wallet.json)")
|
|
383
|
+
.option("--yes", "Acknowledge the brief protection gap and swap even with open/unverifiable positions")
|
|
384
|
+
.option("-o, --out <dir>", "Staging dir (when target is a graph file, not a staged dir)")
|
|
385
|
+
.option("--state-dir <dir>", "Base senpi-state dir (default: $SENPI_STATE_DIR or ~/.openclaw/senpi-state)")
|
|
386
|
+
.option("--runtime-id <id>", "Override the derived runtime id (default: <strategy>-<hash8>)")
|
|
387
|
+
.option("--json", "Print the raw Python update verdict JSON")
|
|
388
|
+
.action(async (target, opts) => {
|
|
389
|
+
const args = ["update", target];
|
|
390
|
+
if (opts.wallet)
|
|
391
|
+
args.push("--wallet", opts.wallet);
|
|
392
|
+
if (opts.yes)
|
|
393
|
+
args.push("--yes");
|
|
394
|
+
if (opts.out)
|
|
395
|
+
args.push("--out", opts.out);
|
|
396
|
+
if (opts.stateDir)
|
|
397
|
+
args.push("--state-dir", opts.stateDir);
|
|
398
|
+
if (opts.runtimeId)
|
|
399
|
+
args.push("--runtime-id", opts.runtimeId);
|
|
400
|
+
// Inject the wall-clock here (the rim owns the clock; the Python core stays deterministic).
|
|
401
|
+
args.push("--bound-at", new Date().toISOString());
|
|
402
|
+
if (opts.json)
|
|
403
|
+
args.push("--json");
|
|
404
|
+
const { status, stdout, stderr, envError } = runComposer(args);
|
|
405
|
+
if (envError) {
|
|
406
|
+
process.exitCode = 1;
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
409
|
+
if (stdout)
|
|
410
|
+
process.stdout.write(stdout);
|
|
411
|
+
if (stderr)
|
|
412
|
+
process.stderr.write(stderr);
|
|
413
|
+
process.exitCode = status;
|
|
414
|
+
});
|
|
325
415
|
composer
|
|
326
416
|
.command("close <target>")
|
|
327
417
|
.description("Safe teardown: stop the runtime, confirm gone, then trigger MCP strategy_close (flattens positions + returns funds). Idempotent — re-run to poll")
|
|
418
|
+
.option("--verbose", VERBOSE_HELP)
|
|
328
419
|
.option("--wallet <address>", "Close the strategy on this 0x… wallet directly")
|
|
329
420
|
.option("--strategy-id <id>", "Close this strategyId directly (legacy/ops-deployed strategies)")
|
|
330
421
|
.option("--state-dir <dir>", "Base senpi-state dir (default: $SENPI_STATE_DIR or ~/.openclaw/senpi-state)")
|
|
@@ -353,6 +444,7 @@ export function registerComposerCli(senpi) {
|
|
|
353
444
|
composer
|
|
354
445
|
.command("status <target>")
|
|
355
446
|
.description("Derived lifecycle position + the next verb to run (graph file or staging dir)")
|
|
447
|
+
.option("--verbose", VERBOSE_HELP)
|
|
356
448
|
.option("-o, --out <dir>", "Staging directory to check for a deployed artifact")
|
|
357
449
|
.option("--state-dir <dir>", "Base senpi-state dir — extend status down the on-box install chain")
|
|
358
450
|
.option("--json", "Print the raw Python status JSON")
|
|
@@ -375,6 +467,7 @@ export function registerComposerCli(senpi) {
|
|
|
375
467
|
composer
|
|
376
468
|
.command("catalog")
|
|
377
469
|
.description("Print the registry-generated node catalog index")
|
|
470
|
+
.option("--verbose", VERBOSE_HELP)
|
|
378
471
|
.action(async () => {
|
|
379
472
|
const { status, stdout, stderr } = runComposer(["catalog"]);
|
|
380
473
|
process.stdout.write(stdout);
|
|
@@ -385,6 +478,7 @@ export function registerComposerCli(senpi) {
|
|
|
385
478
|
composer
|
|
386
479
|
.command("describe <node>")
|
|
387
480
|
.description("Print one node's full ports/params/example")
|
|
481
|
+
.option("--verbose", VERBOSE_HELP)
|
|
388
482
|
.action(async (node) => {
|
|
389
483
|
const { status, stdout, stderr } = runComposer(["describe", node]);
|
|
390
484
|
process.stdout.write(stdout);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer-commands.js","sourceRoot":"","sources":["../../src/cli/composer-commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composer-commands.js","sourceRoot":"","sources":["../../src/cli/composer-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,12 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
from .answers import (
|
|
20
20
|
Answers,
|
|
21
|
+
ExitSignals,
|
|
21
22
|
Indicator,
|
|
22
23
|
Risk,
|
|
23
24
|
Scoring,
|
|
24
25
|
Universe,
|
|
26
|
+
defaulted_interview_fields,
|
|
25
27
|
load_answers,
|
|
26
28
|
load_answers_file,
|
|
27
29
|
)
|
|
@@ -34,10 +36,12 @@ from .strategy_manifest import render_strategy_yaml
|
|
|
34
36
|
|
|
35
37
|
__all__ = [
|
|
36
38
|
"Answers",
|
|
39
|
+
"ExitSignals",
|
|
37
40
|
"Indicator",
|
|
38
41
|
"Risk",
|
|
39
42
|
"Scoring",
|
|
40
43
|
"Universe",
|
|
44
|
+
"defaulted_interview_fields",
|
|
41
45
|
"load_answers",
|
|
42
46
|
"load_answers_file",
|
|
43
47
|
"ARCHETYPES",
|
|
@@ -56,6 +56,38 @@ class Risk(BaseModel):
|
|
|
56
56
|
max_consecutive_losses: Optional[int] = None # stop after N losses
|
|
57
57
|
cooldown_seconds: Optional[int] = None # post-loss cooldown (>= 60)
|
|
58
58
|
max_entries_per_day: Optional[int] = None # per-day entry cap (>= 1)
|
|
59
|
+
# post-close per-asset re-entry cooldown (guard_rails.per_asset_cooldown_seconds, floor 300);
|
|
60
|
+
# None -> preset default, OR (for a signal-exit pair) the exit_signals.reentry_cooldown_seconds
|
|
61
|
+
# default. An explicit value here ALWAYS wins (RISK_OVERRIDE_KEYS carries it into guard_rails).
|
|
62
|
+
per_asset_cooldown_seconds: Optional[int] = None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ExitSignals(BaseModel):
|
|
66
|
+
"""OPTIONAL thesis-exit knobs — the hysteresis dead band + post-close re-entry cooldown for a
|
|
67
|
+
signal-driven (thesis) exit (exit-composition slice). Absent (the default ``None`` on
|
|
68
|
+
:class:`Answers`) => byte-identical output EVERYWHERE (the hard regression constraint): no exit
|
|
69
|
+
scanner, no CLOSE_POSITION action, no per-asset cooldown guard rail. Present => the composer
|
|
70
|
+
additionally emits the exit scanner + CLOSE action pair and the per-asset cooldown (design §1.2).
|
|
71
|
+
|
|
72
|
+
``interval_seconds`` is the exit scanner's poll cadence; ``enter_threshold`` / ``exit_threshold``
|
|
73
|
+
are the net-score hysteresis band the compiled predicate uses; ``reentry_cooldown_seconds`` is
|
|
74
|
+
the post-close per-asset re-entry cooldown (schema floor 300).
|
|
75
|
+
|
|
76
|
+
``min_divergence`` is the per-window NOISE GATE the relative_value archetype threads into its
|
|
77
|
+
scoring pure_fn (a window only casts a vote when the two legs diverge by MORE than this — see
|
|
78
|
+
relative_value.RELATIVE_VALUE_FN). Default ``0.0`` is a no-op (any sign difference votes, the
|
|
79
|
+
pre-gate behaviour); a positive value abstains on sub-threshold windows. It rides the
|
|
80
|
+
exit_signals block for the SAME reason enter/exit thresholds do (the archetype reads the whole
|
|
81
|
+
thesis-tuning surface from one place); it is emitted into the metadata block ONLY when non-zero,
|
|
82
|
+
so an unset gate keeps the exit_signals metadata byte-identical (the F1/round-trip discipline)."""
|
|
83
|
+
|
|
84
|
+
model_config = ConfigDict(extra="forbid")
|
|
85
|
+
|
|
86
|
+
interval_seconds: int = 300
|
|
87
|
+
enter_threshold: float = 3.0
|
|
88
|
+
exit_threshold: float = 2.0
|
|
89
|
+
reentry_cooldown_seconds: int = 1800
|
|
90
|
+
min_divergence: float = 0.0 # per-window vote noise gate (0.0 = no-op); relative_value only
|
|
59
91
|
|
|
60
92
|
|
|
61
93
|
class Universe(BaseModel):
|
|
@@ -154,9 +186,12 @@ class Answers(BaseModel):
|
|
|
154
186
|
intervals: tuple[str, ...] = ("4h",)
|
|
155
187
|
max_positions: int = 1 # cardinality -> ranker choice (single-best vs pool-cap)
|
|
156
188
|
ttl_seconds: int = 240 # memory -> ttl_dedup_state dedup window
|
|
157
|
-
# LIVE: emitted as the runtime.yaml exit: section. Default None = "unset"
|
|
158
|
-
#
|
|
159
|
-
#
|
|
189
|
+
# LIVE: emitted as the runtime.yaml exit: section. Default None = "unset" (unset-vs-explicit
|
|
190
|
+
# semantics): `composer new` RESOLVES an unset preset at build time — protected_standard when
|
|
191
|
+
# there is no exit_signals (today's default, byte-identical), protected_wide when exit_signals
|
|
192
|
+
# is present (the DSL demotes to a WIDE safety net so it never front-runs the thesis exit). An
|
|
193
|
+
# EXPLICIT value ALWAYS wins. A graph reaching `check` with exit_preset unset AND unmanaged
|
|
194
|
+
# False is the RED CMP120 contradiction.
|
|
160
195
|
exit_preset: Optional[str] = None
|
|
161
196
|
unmanaged: bool = False # explicit opt-out: no exit section (else CMP120 RED at check)
|
|
162
197
|
risk: Risk = Field(default_factory=Risk)
|
|
@@ -167,6 +202,10 @@ class Answers(BaseModel):
|
|
|
167
202
|
# registry indicator nodes (indicators) mechanically, no hand edit. See the two submodels.
|
|
168
203
|
scoring: Optional[Scoring] = None
|
|
169
204
|
indicators: tuple[Indicator, ...] = ()
|
|
205
|
+
# exit-composition — OPTIONAL thesis-exit surface. Absent (None) => byte-identical to today
|
|
206
|
+
# (no exit scanner / CLOSE action / per-asset cooldown). Present => the composer emits the
|
|
207
|
+
# entry/exit scanner pair. See :class:`ExitSignals` and the PRESET POLICY on exit_preset.
|
|
208
|
+
exit_signals: Optional[ExitSignals] = None
|
|
170
209
|
|
|
171
210
|
@field_validator("exit_preset")
|
|
172
211
|
@classmethod
|
|
@@ -232,6 +271,11 @@ class Answers(BaseModel):
|
|
|
232
271
|
{"name": c.name, "kind": c.kind, "need": c.need} for c in self.requires
|
|
233
272
|
],
|
|
234
273
|
}
|
|
274
|
+
# per_asset_cooldown_seconds joins the risk block ONLY when set — the sibling knobs above
|
|
275
|
+
# always emit (None -> null), but this one is exit-composition-era and must stay ABSENT for
|
|
276
|
+
# exit-less answers to keep the metadata byte-identical (round-trips via Answers(**block)).
|
|
277
|
+
if self.risk.per_asset_cooldown_seconds is not None:
|
|
278
|
+
block["risk"]["per_asset_cooldown_seconds"] = self.risk.per_asset_cooldown_seconds
|
|
235
279
|
# F1: emit the optional surface ONLY when set, so answers without it round-trip
|
|
236
280
|
# byte-identically to the pre-F1 metadata block (the HARD regression constraint).
|
|
237
281
|
# Both survive `Answers(**block)` deterministically (the deploy metadata re-derive path).
|
|
@@ -250,6 +294,19 @@ class Answers(BaseModel):
|
|
|
250
294
|
"source": i.source}
|
|
251
295
|
for i in self.indicators
|
|
252
296
|
]
|
|
297
|
+
# exit-composition: the thesis-exit knobs, emitted ONLY when set (same F1 discipline) so
|
|
298
|
+
# exit-less answers round-trip byte-identically. Survives Answers(**block) as ExitSignals.
|
|
299
|
+
if self.exit_signals is not None:
|
|
300
|
+
block["exit_signals"] = {
|
|
301
|
+
"interval_seconds": self.exit_signals.interval_seconds,
|
|
302
|
+
"enter_threshold": self.exit_signals.enter_threshold,
|
|
303
|
+
"exit_threshold": self.exit_signals.exit_threshold,
|
|
304
|
+
"reentry_cooldown_seconds": self.exit_signals.reentry_cooldown_seconds,
|
|
305
|
+
}
|
|
306
|
+
# min_divergence is exit-composition-era (post the original 4 keys): emit it ONLY when
|
|
307
|
+
# non-zero so an unset gate round-trips byte-identically to the pre-gate metadata block.
|
|
308
|
+
if self.exit_signals.min_divergence:
|
|
309
|
+
block["exit_signals"]["min_divergence"] = self.exit_signals.min_divergence
|
|
253
310
|
return block
|
|
254
311
|
|
|
255
312
|
|
|
@@ -289,6 +346,56 @@ def load_answers(
|
|
|
289
346
|
return Answers(**merged)
|
|
290
347
|
|
|
291
348
|
|
|
349
|
+
# --------------------------------------------------------------------------- interview echo (E4)
|
|
350
|
+
# The interview-relevant answer fields whose SILENT default is worth surfacing after a successful
|
|
351
|
+
# `composer new` (the live-dev-test failure: the agent never asked the protection question, so
|
|
352
|
+
# exit_preset defaulted silently, and never offered drawdown_halt_pct). Pydantic's
|
|
353
|
+
# ``model_fields_set`` tells us EXACTLY which keys the answers file/flags carried — a field ABSENT
|
|
354
|
+
# from that set took its default. We recurse it into the submodels so a whole-block default (no
|
|
355
|
+
# ``risk:`` at all) reports each knob, not just the block. Order here is the emit order.
|
|
356
|
+
_RISK_ECHO_FIELDS = ("margin_pct", "leverage", "drawdown_halt_pct")
|
|
357
|
+
_EXIT_SIGNALS_ECHO_FIELDS = (
|
|
358
|
+
"enter_threshold", "exit_threshold", "reentry_cooldown_seconds", "min_divergence",
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
def defaulted_interview_fields(answers: Answers) -> list[tuple[str, Any]]:
|
|
363
|
+
"""Interview-relevant fields NOT explicitly provided in the answers (file OR flags), as
|
|
364
|
+
``(dotted_field_name, value_that_got_baked)`` pairs, in emit order (E4 DEFAULTED echo).
|
|
365
|
+
|
|
366
|
+
Uses ``model_fields_set`` on :class:`Answers` and each submodel: a key absent from the set
|
|
367
|
+
was defaulted. ``exit_preset`` is reported unless the author explicitly opted out
|
|
368
|
+
(``unmanaged=true``) — an unmanaged unit deliberately has no preset. The exit_signals knobs
|
|
369
|
+
are reported ONLY when a thesis-exit block is present (otherwise no exit scanner is emitted
|
|
370
|
+
and the knobs bake into nothing). The caller renders the skill-pointer parenthetical for
|
|
371
|
+
``exit_preset`` and plain ``(defaulted)`` for the rest."""
|
|
372
|
+
top_set = answers.model_fields_set
|
|
373
|
+
out: list[tuple[str, Any]] = []
|
|
374
|
+
|
|
375
|
+
# exit_preset — the mandated ASK. Skip when unmanaged (no preset is the deliberate opt-out).
|
|
376
|
+
if "exit_preset" not in top_set and not answers.unmanaged:
|
|
377
|
+
out.append(("exit_preset", answers.exit_preset))
|
|
378
|
+
|
|
379
|
+
# risk knobs — recurse into the submodel's fields-set (empty when `risk:` was wholly absent).
|
|
380
|
+
risk_set = answers.risk.model_fields_set if "risk" in top_set else frozenset()
|
|
381
|
+
for name in _RISK_ECHO_FIELDS:
|
|
382
|
+
if name not in risk_set:
|
|
383
|
+
out.append((f"risk.{name}", getattr(answers.risk, name)))
|
|
384
|
+
|
|
385
|
+
# memory dedup window.
|
|
386
|
+
if "ttl_seconds" not in top_set:
|
|
387
|
+
out.append(("ttl_seconds", answers.ttl_seconds))
|
|
388
|
+
|
|
389
|
+
# thesis-exit tuning — only meaningful when an exit_signals block exists (else nothing emits).
|
|
390
|
+
if answers.exit_signals is not None:
|
|
391
|
+
es_set = answers.exit_signals.model_fields_set if "exit_signals" in top_set else frozenset()
|
|
392
|
+
for name in _EXIT_SIGNALS_ECHO_FIELDS:
|
|
393
|
+
if name not in es_set:
|
|
394
|
+
out.append((f"exit_signals.{name}", getattr(answers.exit_signals, name)))
|
|
395
|
+
|
|
396
|
+
return out
|
|
397
|
+
|
|
398
|
+
|
|
292
399
|
def dumps_answers_template(archetype: str) -> str:
|
|
293
400
|
"""A blank answers-file skeleton for an archetype (used by `composer new --help`-style
|
|
294
401
|
scaffolding and the docs); deterministic."""
|
|
@@ -12,15 +12,32 @@ Each module exposes ``build(answers) -> GraphBuilder`` and a ``BANNER`` header.
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
-
from . import breakout, classifier, skeleton, thesis_fund, trend_momentum
|
|
15
|
+
from . import breakout, classifier, relative_value, skeleton, thesis_fund, trend_momentum
|
|
16
16
|
|
|
17
17
|
ARCHETYPES = {
|
|
18
18
|
"trend_momentum": trend_momentum,
|
|
19
19
|
"breakout": breakout,
|
|
20
20
|
"classifier": classifier,
|
|
21
21
|
"thesis_fund": thesis_fund,
|
|
22
|
+
"relative_value": relative_value,
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
SKELETON = skeleton
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+
|
|
28
|
+
def archetype_names() -> list[str]:
|
|
29
|
+
"""The recognised archetype names (a `describe <archetype>` namespace)."""
|
|
30
|
+
return sorted(ARCHETYPES)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def render_describe_archetype(name: str) -> str | None:
|
|
34
|
+
"""The describe reference for ONE archetype (its ``DESCRIBE`` block — the single home for
|
|
35
|
+
the archetype's shape), or None if the name is not a recognised archetype. The skeleton
|
|
36
|
+
fallback is deliberately excluded: "no matching archetype" is its trigger, not a name."""
|
|
37
|
+
module = ARCHETYPES.get(name)
|
|
38
|
+
if module is None:
|
|
39
|
+
return None
|
|
40
|
+
return "\n".join(module.DESCRIBE) + "\n"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
__all__ = ["ARCHETYPES", "SKELETON", "archetype_names", "render_describe_archetype"]
|
|
@@ -20,6 +20,24 @@ from ..answers import Answers
|
|
|
20
20
|
from ..builder import GraphBuilder
|
|
21
21
|
from . import _common
|
|
22
22
|
|
|
23
|
+
DESCRIBE = [
|
|
24
|
+
"# breakout (archetype)",
|
|
25
|
+
"",
|
|
26
|
+
"Thesis shape: a directional range-break (breakout_detect) is the HARD gate; 4h trend",
|
|
27
|
+
"structure, a volume surge, and smart-money lean are weighted contributors; single-best",
|
|
28
|
+
"(or pool-cap) emission with TTL signal-dedup. Universe is a fixed basket OR discovered",
|
|
29
|
+
"each tick from the live instrument board.",
|
|
30
|
+
"",
|
|
31
|
+
"Emits: clearinghouse_state, ttl_dedup_state, (instrument_list + universe_discover when",
|
|
32
|
+
"discovering), held_asset_exclusion, recent_signal_ttl_dedup, candles_fetch, sm_lean,",
|
|
33
|
+
"breakout_detect, trend_structure, volume_surge_ratio, hard_gates_all (THE EDGE slot),",
|
|
34
|
+
"a ranker, signal_envelope.",
|
|
35
|
+
"",
|
|
36
|
+
"Answers that matter: universe.whitelist OR universe.discover (+ dex / name_prefix /",
|
|
37
|
+
"max_leverage_cap / min_day_volume), intervals, max_positions, ttl_seconds, risk.*, and",
|
|
38
|
+
"scoring / indicators (e.g. the four-hard-gate discovery variant).",
|
|
39
|
+
]
|
|
40
|
+
|
|
23
41
|
BANNER = [
|
|
24
42
|
"breakout strategy — machine-generated anchor (composer new).",
|
|
25
43
|
"",
|
|
@@ -15,6 +15,22 @@ from ..answers import Answers
|
|
|
15
15
|
from ..builder import GraphBuilder
|
|
16
16
|
from . import _common
|
|
17
17
|
|
|
18
|
+
DESCRIBE = [
|
|
19
|
+
"# classifier (archetype)",
|
|
20
|
+
"",
|
|
21
|
+
"Thesis shape: trend structure at 4h + 1h feeds a per-graph pure_fn CLASSIFIER that fixes",
|
|
22
|
+
"the side and confirms with smart money (magpie pre-listing shape). Universe is discovered",
|
|
23
|
+
"each tick from the live board (funding / leverage / volume signature) or a fixed whitelist.",
|
|
24
|
+
"",
|
|
25
|
+
"Emits: clearinghouse_state, ttl_dedup_state, (instrument_list + classifier_predicate +",
|
|
26
|
+
"universe_discover when discovering), held_asset_exclusion, recent_signal_ttl_dedup,",
|
|
27
|
+
"candles_fetch, sm_lean, trend_structure x2, a `classify` pure_fn (THE EDGE slot — edit the",
|
|
28
|
+
"body), a ranker, signal_envelope.",
|
|
29
|
+
"",
|
|
30
|
+
"Answers that matter: universe.discover (+ dex / name_prefix / max_leverage_cap /",
|
|
31
|
+
"min_day_volume) OR universe.whitelist, intervals, max_positions, ttl_seconds, risk.*.",
|
|
32
|
+
]
|
|
33
|
+
|
|
18
34
|
BANNER = [
|
|
19
35
|
"classifier strategy — machine-generated anchor (composer new).",
|
|
20
36
|
"",
|