@senpi/runtime 3.0.9-dev.feat-strategy-compos.20260717153418 → 3.0.9-dev.feat-strategy-compos.20260719221425
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 +118 -2
- package/dist/composer/authoring/archetypes/classifier.py +1 -0
- package/dist/composer/authoring/archetypes/relative_value.py +41 -19
- package/dist/composer/authoring/archetypes/thesis_fund.py +1 -0
- package/dist/composer/authoring/builder.py +7 -1
- package/dist/composer/authoring/emit.py +8 -2
- package/dist/composer/authoring/generate.py +90 -4
- package/dist/composer/authoring/runtime_emit.py +69 -33
- package/dist/composer/cli.py +50 -1
- package/dist/composer/generated/catalog.md +4 -24
- package/dist/composer/generated/describe.md +20 -0
- package/dist/composer/generated/graph.schema.json +4 -0
- package/dist/composer/pure_fn/models.py +8 -0
- package/dist/composer/pure_fn/runtests.py +70 -2
- package/dist/composer/registry/generate.py +190 -7
- package/dist/composer/validator/errors.py +8 -0
- package/dist/composer/verbs/__init__.py +6 -0
- package/dist/composer/verbs/_box.py +138 -9
- package/dist/composer/verbs/_dsl_state.py +419 -0
- package/dist/composer/verbs/_unit_diff.py +446 -0
- package/dist/composer/verbs/check.py +225 -13
- package/dist/composer/verbs/deploy.py +1 -1
- package/dist/composer/verbs/docs.py +8 -3
- package/dist/composer/verbs/install.py +16 -7
- package/dist/composer/verbs/runtime_validate.py +62 -0
- package/dist/composer/verbs/update.py +596 -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 +1 -1
|
@@ -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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"}
|
|
@@ -20,9 +20,11 @@ from .answers import (
|
|
|
20
20
|
Answers,
|
|
21
21
|
ExitSignals,
|
|
22
22
|
Indicator,
|
|
23
|
+
Protection,
|
|
23
24
|
Risk,
|
|
24
25
|
Scoring,
|
|
25
26
|
Universe,
|
|
27
|
+
defaulted_interview_fields,
|
|
26
28
|
load_answers,
|
|
27
29
|
load_answers_file,
|
|
28
30
|
)
|
|
@@ -37,9 +39,11 @@ __all__ = [
|
|
|
37
39
|
"Answers",
|
|
38
40
|
"ExitSignals",
|
|
39
41
|
"Indicator",
|
|
42
|
+
"Protection",
|
|
40
43
|
"Risk",
|
|
41
44
|
"Scoring",
|
|
42
45
|
"Universe",
|
|
46
|
+
"defaulted_interview_fields",
|
|
43
47
|
"load_answers",
|
|
44
48
|
"load_answers_file",
|
|
45
49
|
"ARCHETYPES",
|
|
@@ -71,7 +71,15 @@ class ExitSignals(BaseModel):
|
|
|
71
71
|
|
|
72
72
|
``interval_seconds`` is the exit scanner's poll cadence; ``enter_threshold`` / ``exit_threshold``
|
|
73
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).
|
|
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)."""
|
|
75
83
|
|
|
76
84
|
model_config = ConfigDict(extra="forbid")
|
|
77
85
|
|
|
@@ -79,6 +87,32 @@ class ExitSignals(BaseModel):
|
|
|
79
87
|
enter_threshold: float = 3.0
|
|
80
88
|
exit_threshold: float = 2.0
|
|
81
89
|
reentry_cooldown_seconds: int = 1800
|
|
90
|
+
min_divergence: float = 0.0 # per-window vote noise gate (0.0 = no-op); relative_value only
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class Protection(BaseModel):
|
|
94
|
+
"""The MATERIALIZED exit-protection spec — the FULL resolved protection carried IN the graph
|
|
95
|
+
(F1 "the graph IS the spec"). Before F1 the exit values were resolved from a named preset only
|
|
96
|
+
at EMIT time, invisible in the graph and un-editable (a hand-edit of the emitted runtime.yaml
|
|
97
|
+
breaks the content-addressed install hash). Now ``composer new`` RESOLVES the seeding preset's
|
|
98
|
+
``dsl_preset`` (time-cuts + phase1 floor + the phase2 tier ladder) and the risk-overridden
|
|
99
|
+
``guard_rails`` into ``metadata.spec.protection``, so every tunable exit knob lives in the graph
|
|
100
|
+
and survives regeneration. Edit it there, then ``composer check`` (which re-validates the
|
|
101
|
+
ladder through the LIVE Zod+DSL oracle over the emitted runtime.yaml) + ``deploy``.
|
|
102
|
+
|
|
103
|
+
``seeded_from`` is PROVENANCE only — the preset name that seeded these values at generation
|
|
104
|
+
(an edit does not change it; it never re-resolves from the preset). ``dsl_preset`` and
|
|
105
|
+
``guard_rails`` are kept as plain dicts, NOT re-typed here: the single authority on ladder
|
|
106
|
+
validity is the live oracle over the emitted runtime.yaml (a re-typed twin would drift from the
|
|
107
|
+
real Zod schema). A structurally-malformed hand-edit is caught pure-Python (CMP124) before emit;
|
|
108
|
+
a value-level one (tier order, ranges, breaches) is caught by the oracle (CMP110)."""
|
|
109
|
+
|
|
110
|
+
model_config = ConfigDict(extra="forbid")
|
|
111
|
+
|
|
112
|
+
seeded_from: str
|
|
113
|
+
interval_seconds: int = 60
|
|
114
|
+
dsl_preset: dict = Field(default_factory=dict)
|
|
115
|
+
guard_rails: dict = Field(default_factory=dict)
|
|
82
116
|
|
|
83
117
|
|
|
84
118
|
class Universe(BaseModel):
|
|
@@ -187,6 +221,14 @@ class Answers(BaseModel):
|
|
|
187
221
|
unmanaged: bool = False # explicit opt-out: no exit section (else CMP120 RED at check)
|
|
188
222
|
risk: Risk = Field(default_factory=Risk)
|
|
189
223
|
edge: str = "" # the user's EDGE, verbatim; the machine never interprets it
|
|
224
|
+
# F1 — the MATERIALIZED protection spec + a free-prose thesis, both carried in metadata.spec.
|
|
225
|
+
# ``protection`` is None on directly-constructed answers (byte-identical to before) and is set by
|
|
226
|
+
# `composer new` (generate._materialize_protection) so the resolved exit ladder lives IN the graph
|
|
227
|
+
# and survives regeneration + edit. ``thesis`` is an optional one-line intent summary generation
|
|
228
|
+
# derives from the edge (never blocking). Both emit into metadata.spec ONLY when set (round-trip
|
|
229
|
+
# discipline: an answers object without them round-trips byte-identically).
|
|
230
|
+
protection: Optional[Protection] = None
|
|
231
|
+
thesis: str = ""
|
|
190
232
|
requires: tuple[RequiredCapability, ...] = ()
|
|
191
233
|
# F1 — OPTIONAL expressiveness surface. Absent (the defaults below) => byte-identical to
|
|
192
234
|
# the pre-F1 output; present => the archetype re-selects gates/weights (scoring) and adds
|
|
@@ -234,6 +276,9 @@ class Answers(BaseModel):
|
|
|
234
276
|
block: dict = {
|
|
235
277
|
"archetype": self.archetype,
|
|
236
278
|
"strategy": self.strategy,
|
|
279
|
+
# F1: a one-line intent thesis, emitted ONLY when generation derived one (round-trip
|
|
280
|
+
# discipline — an answers object with thesis="" carries no key and round-trips as before).
|
|
281
|
+
**({"thesis": self.thesis} if self.thesis else {}),
|
|
237
282
|
"universe": {
|
|
238
283
|
"whitelist": list(self.universe.whitelist),
|
|
239
284
|
"long_basket": list(self.universe.long_basket),
|
|
@@ -247,8 +292,25 @@ class Answers(BaseModel):
|
|
|
247
292
|
"intervals": list(self.intervals),
|
|
248
293
|
"max_positions": self.max_positions,
|
|
249
294
|
"ttl_seconds": self.ttl_seconds,
|
|
250
|
-
"exit_preset": self.exit_preset, # LIVE: the emitted runtime.yaml exit preset
|
|
295
|
+
"exit_preset": self.exit_preset, # LIVE: the emitted runtime.yaml exit preset (SEED)
|
|
251
296
|
"unmanaged": self.unmanaged, # explicit protection opt-out
|
|
297
|
+
# F1: the MATERIALIZED protection block — the resolved exit ladder + guard rails carried
|
|
298
|
+
# IN the graph so they are visible + editable + survive regeneration. Emitted ONLY when
|
|
299
|
+
# set (a directly-constructed answers has protection=None and round-trips byte-identically;
|
|
300
|
+
# `composer new` materializes it — generate._materialize_protection). runtime_emit reads
|
|
301
|
+
# this when present; the preset is only the SEED at generation time.
|
|
302
|
+
**(
|
|
303
|
+
{
|
|
304
|
+
"protection": {
|
|
305
|
+
"seeded_from": self.protection.seeded_from,
|
|
306
|
+
"interval_seconds": self.protection.interval_seconds,
|
|
307
|
+
"dsl_preset": self.protection.dsl_preset,
|
|
308
|
+
"guard_rails": self.protection.guard_rails,
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if self.protection is not None
|
|
312
|
+
else {}
|
|
313
|
+
),
|
|
252
314
|
"risk": {
|
|
253
315
|
"margin_pct": self.risk.margin_pct,
|
|
254
316
|
"leverage": self.risk.leverage,
|
|
@@ -294,6 +356,10 @@ class Answers(BaseModel):
|
|
|
294
356
|
"exit_threshold": self.exit_signals.exit_threshold,
|
|
295
357
|
"reentry_cooldown_seconds": self.exit_signals.reentry_cooldown_seconds,
|
|
296
358
|
}
|
|
359
|
+
# min_divergence is exit-composition-era (post the original 4 keys): emit it ONLY when
|
|
360
|
+
# non-zero so an unset gate round-trips byte-identically to the pre-gate metadata block.
|
|
361
|
+
if self.exit_signals.min_divergence:
|
|
362
|
+
block["exit_signals"]["min_divergence"] = self.exit_signals.min_divergence
|
|
297
363
|
return block
|
|
298
364
|
|
|
299
365
|
|
|
@@ -333,6 +399,56 @@ def load_answers(
|
|
|
333
399
|
return Answers(**merged)
|
|
334
400
|
|
|
335
401
|
|
|
402
|
+
# --------------------------------------------------------------------------- interview echo (E4)
|
|
403
|
+
# The interview-relevant answer fields whose SILENT default is worth surfacing after a successful
|
|
404
|
+
# `composer new` (the live-dev-test failure: the agent never asked the protection question, so
|
|
405
|
+
# exit_preset defaulted silently, and never offered drawdown_halt_pct). Pydantic's
|
|
406
|
+
# ``model_fields_set`` tells us EXACTLY which keys the answers file/flags carried — a field ABSENT
|
|
407
|
+
# from that set took its default. We recurse it into the submodels so a whole-block default (no
|
|
408
|
+
# ``risk:`` at all) reports each knob, not just the block. Order here is the emit order.
|
|
409
|
+
_RISK_ECHO_FIELDS = ("margin_pct", "leverage", "drawdown_halt_pct")
|
|
410
|
+
_EXIT_SIGNALS_ECHO_FIELDS = (
|
|
411
|
+
"enter_threshold", "exit_threshold", "reentry_cooldown_seconds", "min_divergence",
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
def defaulted_interview_fields(answers: Answers) -> list[tuple[str, Any]]:
|
|
416
|
+
"""Interview-relevant fields NOT explicitly provided in the answers (file OR flags), as
|
|
417
|
+
``(dotted_field_name, value_that_got_baked)`` pairs, in emit order (E4 DEFAULTED echo).
|
|
418
|
+
|
|
419
|
+
Uses ``model_fields_set`` on :class:`Answers` and each submodel: a key absent from the set
|
|
420
|
+
was defaulted. ``exit_preset`` is reported unless the author explicitly opted out
|
|
421
|
+
(``unmanaged=true``) — an unmanaged unit deliberately has no preset. The exit_signals knobs
|
|
422
|
+
are reported ONLY when a thesis-exit block is present (otherwise no exit scanner is emitted
|
|
423
|
+
and the knobs bake into nothing). The caller renders the skill-pointer parenthetical for
|
|
424
|
+
``exit_preset`` and plain ``(defaulted)`` for the rest."""
|
|
425
|
+
top_set = answers.model_fields_set
|
|
426
|
+
out: list[tuple[str, Any]] = []
|
|
427
|
+
|
|
428
|
+
# exit_preset — the mandated ASK. Skip when unmanaged (no preset is the deliberate opt-out).
|
|
429
|
+
if "exit_preset" not in top_set and not answers.unmanaged:
|
|
430
|
+
out.append(("exit_preset", answers.exit_preset))
|
|
431
|
+
|
|
432
|
+
# risk knobs — recurse into the submodel's fields-set (empty when `risk:` was wholly absent).
|
|
433
|
+
risk_set = answers.risk.model_fields_set if "risk" in top_set else frozenset()
|
|
434
|
+
for name in _RISK_ECHO_FIELDS:
|
|
435
|
+
if name not in risk_set:
|
|
436
|
+
out.append((f"risk.{name}", getattr(answers.risk, name)))
|
|
437
|
+
|
|
438
|
+
# memory dedup window.
|
|
439
|
+
if "ttl_seconds" not in top_set:
|
|
440
|
+
out.append(("ttl_seconds", answers.ttl_seconds))
|
|
441
|
+
|
|
442
|
+
# thesis-exit tuning — only meaningful when an exit_signals block exists (else nothing emits).
|
|
443
|
+
if answers.exit_signals is not None:
|
|
444
|
+
es_set = answers.exit_signals.model_fields_set if "exit_signals" in top_set else frozenset()
|
|
445
|
+
for name in _EXIT_SIGNALS_ECHO_FIELDS:
|
|
446
|
+
if name not in es_set:
|
|
447
|
+
out.append((f"exit_signals.{name}", getattr(answers.exit_signals, name)))
|
|
448
|
+
|
|
449
|
+
return out
|
|
450
|
+
|
|
451
|
+
|
|
336
452
|
def dumps_answers_template(archetype: str) -> str:
|
|
337
453
|
"""A blank answers-file skeleton for an archetype (used by `composer new --help`-style
|
|
338
454
|
scaffolding and the docs); deterministic."""
|
|
@@ -89,6 +89,7 @@ def build(answers: Answers) -> GraphBuilder:
|
|
|
89
89
|
fn=_common.CLASSIFIER_FN,
|
|
90
90
|
tests=_common.classifier_tests(_MIN_SCORE),
|
|
91
91
|
header=("pure_fn classifier — THE EDGE SLOT (edit the body; see the EDGE block above).",),
|
|
92
|
+
title="direction classifier from 4h/1h trend + smart-money lean",
|
|
92
93
|
)
|
|
93
94
|
b.set_edge_anchor("classify")
|
|
94
95
|
|
|
@@ -83,7 +83,9 @@ DESCRIBE = [
|
|
|
83
83
|
"",
|
|
84
84
|
"Answers that matter: universe.whitelist = [target, benchmark] (EXACTLY two — no discover),",
|
|
85
85
|
"intervals (the candle interval + window bar counts), exit_signals.{enter_threshold,",
|
|
86
|
-
"exit_threshold, interval_seconds, reentry_cooldown_seconds} (present => the
|
|
86
|
+
"exit_threshold, interval_seconds, reentry_cooldown_seconds, min_divergence} (present => the",
|
|
87
|
+
"exit tail; min_divergence is the per-window vote NOISE GATE threaded into the scoring pure_fn —",
|
|
88
|
+
"a window abstains unless the two legs diverge by more than it, default 0.0 = no gate),",
|
|
87
89
|
"exit_preset (unset => protected_wide with a signal exit, protected_standard entry-only),",
|
|
88
90
|
"risk.*.",
|
|
89
91
|
]
|
|
@@ -115,22 +117,30 @@ _BARS_PER_DAY: dict[str, int] = {
|
|
|
115
117
|
_DEFAULT_ENTER = 3.0
|
|
116
118
|
_DEFAULT_EXIT = 2.0
|
|
117
119
|
_SIGNAL_STRENGTH = 1.0
|
|
120
|
+
# Per-window vote NOISE GATE (answers.exit_signals.min_divergence). 0.0 is a no-op — the
|
|
121
|
+
# pre-gate behaviour where any sign difference votes — so an unset gate leaves emitted output
|
|
122
|
+
# semantically identical. A positive value makes a window ABSTAIN unless the two legs diverge by
|
|
123
|
+
# strictly more than this (kills sub-threshold noise from near-tied windows).
|
|
124
|
+
_DEFAULT_MIN_DIVERGENCE = 0.0
|
|
118
125
|
|
|
119
126
|
# The two-output signed-net-score comparison (D2 kind 2). Generic over the bound pair/weights/
|
|
120
127
|
# thresholds (all passed as params); emitted verbatim AND executed in _relative_value_tests to
|
|
121
128
|
# synthesize inline fixtures that pass by construction. Deterministic, math-only (purity-checked).
|
|
122
129
|
RELATIVE_VALUE_FN = '''\
|
|
123
|
-
def score_relative_value(ret_3d, ret_7d, ret_30d, positions, benchmark, target, w_3d, w_7d, w_30d, enter_threshold, exit_threshold, signal_strength):
|
|
130
|
+
def score_relative_value(ret_3d, ret_7d, ret_30d, positions, benchmark, target, w_3d, w_7d, w_30d, enter_threshold, exit_threshold, signal_strength, min_divergence):
|
|
124
131
|
# TODO(edit): the PAIRWISE relative-value edge (a WORKING DEFAULT). For each lookback window
|
|
125
|
-
# compare the TARGET's return to the BENCHMARK's: the benchmark
|
|
126
|
-
#
|
|
127
|
-
#
|
|
128
|
-
#
|
|
129
|
-
#
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
133
|
-
#
|
|
132
|
+
# compare the TARGET's return to the BENCHMARK's: the DIVERGENCE is (benchmark - target) return.
|
|
133
|
+
# The benchmark OUT-returning the target (divergence > min_divergence) means the target is
|
|
134
|
+
# relatively cheap -> +weight (a BUY vote); the target OUT-returning the benchmark
|
|
135
|
+
# (-divergence > min_divergence) means the thesis has FLIPPED -> -weight (a CLOSE vote). The
|
|
136
|
+
# min_divergence NOISE GATE makes a window ABSTAIN unless the legs diverge by more than it (0.0
|
|
137
|
+
# = any sign difference votes). The signed weighted sum is the net score. ENTER LONG the target
|
|
138
|
+
# when net >= enter_threshold AND it is NOT already held; CLOSE the target when net <=
|
|
139
|
+
# -exit_threshold AND it IS held; between the thresholds (the hysteresis dead band) emit NOTHING.
|
|
140
|
+
# Held-exclusion lives here (via positions) so entry and exit never both fire. A window missing
|
|
141
|
+
# either leg simply abstains (no vote), never raises. The benchmark is a REFERENCE leg only —
|
|
142
|
+
# never scored, never emitted. Encode YOUR edge by editing this body; it is purity-checked (no
|
|
143
|
+
# ctx/MCP/I/O, math only) and its inline tests run at validate time.
|
|
134
144
|
windows = [(ret_3d, w_3d, "3d"), (ret_7d, w_7d, "7d"), (ret_30d, w_30d, "30d")]
|
|
135
145
|
net = 0.0
|
|
136
146
|
enter_reasons = []
|
|
@@ -140,10 +150,11 @@ def score_relative_value(ret_3d, ret_7d, ret_30d, positions, benchmark, target,
|
|
|
140
150
|
target_ret = series.get(target)
|
|
141
151
|
if bench_ret is None or target_ret is None:
|
|
142
152
|
continue
|
|
143
|
-
|
|
153
|
+
divergence = bench_ret - target_ret
|
|
154
|
+
if divergence > min_divergence:
|
|
144
155
|
net = net + weight * signal_strength
|
|
145
156
|
enter_reasons.append("bench_outperf_" + label)
|
|
146
|
-
elif
|
|
157
|
+
elif -divergence > min_divergence:
|
|
147
158
|
net = net - weight * signal_strength
|
|
148
159
|
exit_reasons.append("target_outperf_" + label)
|
|
149
160
|
held_direction = None
|
|
@@ -172,12 +183,15 @@ def _exec_fn(fn_src: str):
|
|
|
172
183
|
|
|
173
184
|
|
|
174
185
|
def _relative_value_tests(
|
|
175
|
-
target: str, benchmark: str, weights: tuple[float, ...], enter: float, exit_threshold: float
|
|
186
|
+
target: str, benchmark: str, weights: tuple[float, ...], enter: float, exit_threshold: float,
|
|
187
|
+
min_divergence: float = _DEFAULT_MIN_DIVERGENCE,
|
|
176
188
|
) -> tuple[dict, ...]:
|
|
177
189
|
"""Five inline fixtures whose expected values are computed from the default body itself with
|
|
178
|
-
the BOUND pair / weights / thresholds, so they pass by construction (emitted body
|
|
179
|
-
body). The five semantic cases: all-windows entry, flip exit, dead band,
|
|
180
|
-
suppresses entry, flat-no-exit. Held positions are the open_positions record
|
|
190
|
+
the BOUND pair / weights / thresholds / noise gate, so they pass by construction (emitted body
|
|
191
|
+
== executed body). The five semantic cases: all-windows entry, flip exit, dead band,
|
|
192
|
+
held-exclusion suppresses entry, flat-no-exit. Held positions are the open_positions record
|
|
193
|
+
shape. (The noise gate itself is exercised directly in the python-tests — its effect only shows
|
|
194
|
+
for min_divergence > 0, whereas these fixtures self-compute against the BOUND value.)"""
|
|
181
195
|
fn = _exec_fn(RELATIVE_VALUE_FN)
|
|
182
196
|
w3, w7, w30 = weights
|
|
183
197
|
held = [{
|
|
@@ -187,7 +201,7 @@ def _relative_value_tests(
|
|
|
187
201
|
|
|
188
202
|
def call(r3, r7, r30, positions):
|
|
189
203
|
entry, ex = fn(r3, r7, r30, positions, benchmark, target,
|
|
190
|
-
w3, w7, w30, enter, exit_threshold, _SIGNAL_STRENGTH)
|
|
204
|
+
w3, w7, w30, enter, exit_threshold, _SIGNAL_STRENGTH, min_divergence)
|
|
191
205
|
return {"entry_scores": entry, "exit_scores": ex}
|
|
192
206
|
|
|
193
207
|
# bench out-returns target in every window -> max +net.
|
|
@@ -254,6 +268,9 @@ def build(answers: Answers) -> GraphBuilder:
|
|
|
254
268
|
es = answers.exit_signals
|
|
255
269
|
enter_threshold = es.enter_threshold if es is not None else _DEFAULT_ENTER
|
|
256
270
|
exit_threshold = es.exit_threshold if es is not None else _DEFAULT_EXIT
|
|
271
|
+
# per-window vote noise gate — same exit_signals seam as the enter/exit thresholds (0.0 = no-op,
|
|
272
|
+
# so an unset gate leaves the scoring semantically identical to the pre-gate archetype).
|
|
273
|
+
min_divergence = es.min_divergence if es is not None else _DEFAULT_MIN_DIVERGENCE
|
|
257
274
|
|
|
258
275
|
# --- sources ---
|
|
259
276
|
b.add("account", "clearinghouse_state",
|
|
@@ -311,11 +328,16 @@ def build(answers: Answers) -> GraphBuilder:
|
|
|
311
328
|
"doc": "Net score (as -exit_threshold) to CLOSE (bottom of the dead band)."},
|
|
312
329
|
{"name": "signal_strength", "type": "float", "default": _SIGNAL_STRENGTH,
|
|
313
330
|
"doc": "Per-window vote unit multiplier."},
|
|
331
|
+
{"name": "min_divergence", "type": "float", "default": min_divergence,
|
|
332
|
+
"doc": "Per-window vote noise gate: a window abstains unless |bench-target| return "
|
|
333
|
+
"diverges by more than this (0.0 = any sign difference votes)."},
|
|
314
334
|
),
|
|
315
335
|
fn=RELATIVE_VALUE_FN,
|
|
316
|
-
tests=_relative_value_tests(target, benchmark, weights, enter_threshold, exit_threshold
|
|
336
|
+
tests=_relative_value_tests(target, benchmark, weights, enter_threshold, exit_threshold,
|
|
337
|
+
min_divergence),
|
|
317
338
|
header=("pure_fn signed-net-score comparison — THE EDGE SLOT (edit the body; see the EDGE",
|
|
318
339
|
"block above). TWO outputs: entry_scores (entry tail) + exit_scores (exit tail).",),
|
|
340
|
+
title="signed net-score: target vs benchmark across lookbacks",
|
|
319
341
|
)
|
|
320
342
|
b.set_edge_anchor("score")
|
|
321
343
|
|
|
@@ -84,6 +84,7 @@ def build(answers: Answers) -> GraphBuilder:
|
|
|
84
84
|
fn=_common.THESIS_FN,
|
|
85
85
|
tests=_common.thesis_tests(list(u.long_basket), list(u.short_basket), _MIN_SCORE),
|
|
86
86
|
header=("pure_fn confirmation scorer — THE EDGE SLOT (edit the body; see the EDGE block above).",),
|
|
87
|
+
title="per-leg thesis confirmation score",
|
|
87
88
|
)
|
|
88
89
|
b.set_edge_anchor("score")
|
|
89
90
|
|