@senpi/runtime 3.0.9-dev.feat-strategy-compos.20260717153418 → 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 +2 -0
- package/dist/composer/authoring/answers.py +64 -1
- package/dist/composer/authoring/archetypes/relative_value.py +40 -19
- package/dist/composer/authoring/generate.py +44 -4
- package/dist/composer/cli.py +50 -1
- package/dist/composer/pure_fn/runtests.py +70 -2
- package/dist/composer/validator/errors.py +7 -0
- package/dist/composer/verbs/__init__.py +6 -0
- package/dist/composer/verbs/_box.py +138 -9
- package/dist/composer/verbs/check.py +151 -12
- package/dist/composer/verbs/install.py +16 -7
- 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 +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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"}
|
|
@@ -23,6 +23,7 @@ from .answers import (
|
|
|
23
23
|
Risk,
|
|
24
24
|
Scoring,
|
|
25
25
|
Universe,
|
|
26
|
+
defaulted_interview_fields,
|
|
26
27
|
load_answers,
|
|
27
28
|
load_answers_file,
|
|
28
29
|
)
|
|
@@ -40,6 +41,7 @@ __all__ = [
|
|
|
40
41
|
"Risk",
|
|
41
42
|
"Scoring",
|
|
42
43
|
"Universe",
|
|
44
|
+
"defaulted_interview_fields",
|
|
43
45
|
"load_answers",
|
|
44
46
|
"load_answers_file",
|
|
45
47
|
"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,7 @@ 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
|
|
82
91
|
|
|
83
92
|
|
|
84
93
|
class Universe(BaseModel):
|
|
@@ -294,6 +303,10 @@ class Answers(BaseModel):
|
|
|
294
303
|
"exit_threshold": self.exit_signals.exit_threshold,
|
|
295
304
|
"reentry_cooldown_seconds": self.exit_signals.reentry_cooldown_seconds,
|
|
296
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
|
|
297
310
|
return block
|
|
298
311
|
|
|
299
312
|
|
|
@@ -333,6 +346,56 @@ def load_answers(
|
|
|
333
346
|
return Answers(**merged)
|
|
334
347
|
|
|
335
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
|
+
|
|
336
399
|
def dumps_answers_template(archetype: str) -> str:
|
|
337
400
|
"""A blank answers-file skeleton for an archetype (used by `composer new --help`-style
|
|
338
401
|
scaffolding and the docs); deterministic."""
|
|
@@ -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,9 +328,13 @@ 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).",),
|
|
319
340
|
)
|
|
@@ -16,12 +16,12 @@ write, so the behaviour is unit-testable without disk.
|
|
|
16
16
|
|
|
17
17
|
from __future__ import annotations
|
|
18
18
|
|
|
19
|
-
from dataclasses import dataclass
|
|
19
|
+
from dataclasses import dataclass, field
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
from typing import Optional
|
|
22
22
|
|
|
23
23
|
from . import emit
|
|
24
|
-
from .answers import Answers
|
|
24
|
+
from .answers import Answers, defaulted_interview_fields
|
|
25
25
|
from .archetypes import ARCHETYPES, SKELETON
|
|
26
26
|
from .gaps import GapReport, detect_gaps
|
|
27
27
|
|
|
@@ -37,6 +37,9 @@ class NewResult:
|
|
|
37
37
|
clobber_refused: bool = False # set (and ok=False) when the target is edited
|
|
38
38
|
used_skeleton: bool = False # true when the archetype was off-map
|
|
39
39
|
message: str = ""
|
|
40
|
+
# E4 — the DEFAULTED echo: one rendered line per interview-relevant field that was NOT
|
|
41
|
+
# explicitly provided (so the agent surfaces every silent default; empty == none defaulted).
|
|
42
|
+
defaulted: list[str] = field(default_factory=list)
|
|
40
43
|
|
|
41
44
|
def to_json(self) -> dict:
|
|
42
45
|
out: dict = {
|
|
@@ -45,6 +48,7 @@ class NewResult:
|
|
|
45
48
|
"used_skeleton": self.used_skeleton,
|
|
46
49
|
"clobber_refused": self.clobber_refused,
|
|
47
50
|
"message": self.message,
|
|
51
|
+
"defaulted": list(self.defaulted),
|
|
48
52
|
}
|
|
49
53
|
if self.gap_report is not None:
|
|
50
54
|
out["gap_report"] = self.gap_report.to_json()
|
|
@@ -69,6 +73,37 @@ def _bind_protection_default(answers: Answers) -> Answers:
|
|
|
69
73
|
return answers
|
|
70
74
|
|
|
71
75
|
|
|
76
|
+
def _fmt_default_value(value) -> str:
|
|
77
|
+
"""Render a baked default value for the DEFAULTED echo: ``None`` (a preset-default knob like
|
|
78
|
+
drawdown_halt_pct) reads as ``none`` so the reader sees it was never offered."""
|
|
79
|
+
return "none" if value is None else str(value)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _defaulted_lines(answers: Answers) -> list[str]:
|
|
83
|
+
"""The DEFAULTED echo lines for `composer new` (E4). One line per interview-relevant field
|
|
84
|
+
the answers did NOT explicitly set, with the value that got baked. exit_preset (the MANDATED
|
|
85
|
+
protection ask) resolves to the value `composer new` binds and carries the skill pointer; the
|
|
86
|
+
rest read plainly. Empty list == every interview field was explicitly set."""
|
|
87
|
+
resolved_preset = _bind_protection_default(answers).exit_preset
|
|
88
|
+
lines: list[str] = []
|
|
89
|
+
for name, value in defaulted_interview_fields(answers):
|
|
90
|
+
if name == "exit_preset":
|
|
91
|
+
lines.append(
|
|
92
|
+
f"exit_preset = {_fmt_default_value(resolved_preset)} "
|
|
93
|
+
f"(defaulted — the skill says ASK the protection question)"
|
|
94
|
+
)
|
|
95
|
+
else:
|
|
96
|
+
lines.append(f"{name} = {_fmt_default_value(value)} (defaulted)")
|
|
97
|
+
return lines
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _defaulted_message(lines: list[str]) -> str:
|
|
101
|
+
"""The human DEFAULTED block appended to the NewResult message (relayed to the user)."""
|
|
102
|
+
if not lines:
|
|
103
|
+
return "DEFAULTED: none — all interview fields explicitly set."
|
|
104
|
+
return "DEFAULTED:\n" + "\n".join(f" {ln}" for ln in lines)
|
|
105
|
+
|
|
106
|
+
|
|
72
107
|
def render_graph(answers: Answers) -> tuple[str, bool]:
|
|
73
108
|
"""Build + render the graph for these answers; returns (yaml_text, used_skeleton)."""
|
|
74
109
|
answers = _bind_protection_default(answers)
|
|
@@ -124,15 +159,20 @@ def compose_new(
|
|
|
124
159
|
used_skeleton=used_skeleton,
|
|
125
160
|
message=(
|
|
126
161
|
f"refusing to overwrite {path.name}: {reason}. "
|
|
127
|
-
f"
|
|
162
|
+
f"To KEEP those edits, the graph is now the source of truth — edit it "
|
|
163
|
+
f"directly (params live in the graph too), or generate to a different "
|
|
164
|
+
f"--output path and merge. Re-run with --force only to discard the edits "
|
|
165
|
+
f"permanently."
|
|
128
166
|
),
|
|
129
167
|
)
|
|
130
168
|
|
|
131
169
|
verb = "skeleton (off-map archetype)" if used_skeleton else f"archetype {answers.archetype!r}"
|
|
170
|
+
defaulted = _defaulted_lines(answers)
|
|
132
171
|
return NewResult(
|
|
133
172
|
ok=True,
|
|
134
173
|
yaml_text=yaml_text,
|
|
135
174
|
output_path=str(path),
|
|
136
175
|
used_skeleton=used_skeleton,
|
|
137
|
-
message=f"generated a valid graph from {verb}
|
|
176
|
+
message=f"generated a valid graph from {verb}.\n{_defaulted_message(defaulted)}",
|
|
177
|
+
defaulted=defaulted,
|
|
138
178
|
)
|