@senpi/trading-recipe 1.0.69 → 1.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/README.md +1 -1
  2. package/dist/actions/close-position/close-position.action.js +4 -4
  3. package/dist/actions/close-position/close-position.action.js.map +1 -1
  4. package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
  5. package/dist/actions/open-position/open-position.action.js +4 -5
  6. package/dist/actions/open-position/open-position.action.js.map +1 -1
  7. package/dist/actions/types.d.ts +1 -1
  8. package/dist/actions/types.d.ts.map +1 -1
  9. package/dist/cli/guide-commands.d.ts +1 -0
  10. package/dist/cli/guide-commands.d.ts.map +1 -1
  11. package/dist/cli/guide-commands.js +102 -12
  12. package/dist/cli/guide-commands.js.map +1 -1
  13. package/dist/cli/senpi-commands.d.ts.map +1 -1
  14. package/dist/cli/senpi-commands.js +162 -10
  15. package/dist/cli/senpi-commands.js.map +1 -1
  16. package/dist/dsl/plugin/index.d.ts +22 -0
  17. package/dist/dsl/plugin/index.d.ts.map +1 -1
  18. package/dist/dsl/plugin/index.js +189 -59
  19. package/dist/dsl/plugin/index.js.map +1 -1
  20. package/dist/health/index.d.ts +22 -2
  21. package/dist/health/index.d.ts.map +1 -1
  22. package/dist/health/index.js +186 -4
  23. package/dist/health/index.js.map +1 -1
  24. package/dist/health/types.d.ts +114 -0
  25. package/dist/health/types.d.ts.map +1 -0
  26. package/dist/health/types.js +2 -0
  27. package/dist/health/types.js.map +1 -0
  28. package/dist/index.d.ts +3 -2
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +219 -18
  31. package/dist/index.js.map +1 -1
  32. package/dist/runtime/build-action-scan-payload.d.ts +4 -4
  33. package/dist/runtime/build-action-scan-payload.d.ts.map +1 -1
  34. package/dist/runtime/build-action-scan-payload.js +15 -19
  35. package/dist/runtime/build-action-scan-payload.js.map +1 -1
  36. package/dist/runtime/create-action-context.d.ts +3 -3
  37. package/dist/runtime/create-action-context.d.ts.map +1 -1
  38. package/dist/runtime/create-action-context.js +5 -5
  39. package/dist/runtime/create-action-context.js.map +1 -1
  40. package/dist/runtime/create-actions.d.ts +1 -1
  41. package/dist/runtime/create-actions.d.ts.map +1 -1
  42. package/dist/runtime/create-actions.js +2 -3
  43. package/dist/runtime/create-actions.js.map +1 -1
  44. package/dist/runtime/create-runtime-context.d.ts +12 -12
  45. package/dist/runtime/create-runtime-context.d.ts.map +1 -1
  46. package/dist/runtime/create-runtime-context.js +15 -13
  47. package/dist/runtime/create-runtime-context.js.map +1 -1
  48. package/dist/runtime/create-scanner-module.d.ts +1 -1
  49. package/dist/runtime/create-scanner-module.js +4 -4
  50. package/dist/runtime/create-scanner-module.js.map +1 -1
  51. package/dist/runtime/index.d.ts +4 -4
  52. package/dist/runtime/index.d.ts.map +1 -1
  53. package/dist/runtime/index.js +3 -3
  54. package/dist/runtime/index.js.map +1 -1
  55. package/dist/runtime/load-trading-recipe.d.ts +2 -2
  56. package/dist/runtime/load-trading-recipe.d.ts.map +1 -1
  57. package/dist/runtime/load-trading-recipe.js +22 -10
  58. package/dist/runtime/load-trading-recipe.js.map +1 -1
  59. package/dist/runtime/map-strategies-registration.d.ts +6 -4
  60. package/dist/runtime/map-strategies-registration.d.ts.map +1 -1
  61. package/dist/runtime/map-strategies-registration.js +14 -22
  62. package/dist/runtime/map-strategies-registration.js.map +1 -1
  63. package/dist/runtime/map-strategies.d.ts +6 -4
  64. package/dist/runtime/map-strategies.d.ts.map +1 -1
  65. package/dist/runtime/map-strategies.js +42 -44
  66. package/dist/runtime/map-strategies.js.map +1 -1
  67. package/dist/runtime/recipe-version.d.ts +15 -0
  68. package/dist/runtime/recipe-version.d.ts.map +1 -0
  69. package/dist/runtime/recipe-version.js +25 -0
  70. package/dist/runtime/recipe-version.js.map +1 -0
  71. package/dist/runtime/reconcile-state.d.ts +1 -1
  72. package/dist/runtime/reconcile-state.js +1 -1
  73. package/dist/runtime/run.d.ts +5 -0
  74. package/dist/runtime/run.d.ts.map +1 -1
  75. package/dist/runtime/run.js +7 -0
  76. package/dist/runtime/run.js.map +1 -1
  77. package/dist/runtime/runtime.d.ts +8 -4
  78. package/dist/runtime/runtime.d.ts.map +1 -1
  79. package/dist/runtime/runtime.js +75 -40
  80. package/dist/runtime/runtime.js.map +1 -1
  81. package/dist/runtime/state-layout.d.ts +48 -0
  82. package/dist/runtime/state-layout.d.ts.map +1 -0
  83. package/dist/runtime/state-layout.js +87 -0
  84. package/dist/runtime/state-layout.js.map +1 -0
  85. package/dist/runtime/strategy-registry.d.ts +17 -0
  86. package/dist/runtime/strategy-registry.d.ts.map +1 -1
  87. package/dist/runtime/strategy-registry.js +32 -0
  88. package/dist/runtime/strategy-registry.js.map +1 -1
  89. package/dist/runtime/trading-recipe-schema.d.ts +16 -634
  90. package/dist/runtime/trading-recipe-schema.d.ts.map +1 -1
  91. package/dist/runtime/trading-recipe-schema.js +3 -9
  92. package/dist/runtime/trading-recipe-schema.js.map +1 -1
  93. package/dist/scanners/engine/engine.d.ts +7 -0
  94. package/dist/scanners/engine/engine.d.ts.map +1 -1
  95. package/dist/scanners/engine/engine.js +20 -12
  96. package/dist/scanners/engine/engine.js.map +1 -1
  97. package/dist/scanners/engine/strategy-registry.d.ts +3 -0
  98. package/dist/scanners/engine/strategy-registry.d.ts.map +1 -1
  99. package/dist/scanners/engine/strategy-registry.js +10 -0
  100. package/dist/scanners/engine/strategy-registry.js.map +1 -1
  101. package/dist/scanners/runtime-module.d.ts +10 -6
  102. package/dist/scanners/runtime-module.d.ts.map +1 -1
  103. package/dist/scanners/runtime-module.js +254 -12
  104. package/dist/scanners/runtime-module.js.map +1 -1
  105. package/dist/scripts/run-dsl-standalone-live.js +5 -7
  106. package/dist/scripts/run-dsl-standalone-live.js.map +1 -1
  107. package/dist/scripts/run-dsl-standalone-mock.js +3 -4
  108. package/dist/scripts/run-dsl-standalone-mock.js.map +1 -1
  109. package/dist/types/runtime.d.ts +1 -1
  110. package/dist/types/runtime.d.ts.map +1 -1
  111. package/examples/strategies/dsl-showcase.yaml +8 -3
  112. package/examples/strategies/dsl.yaml +4 -5
  113. package/examples/strategies/fox-minimal-loosened.yaml +8 -9
  114. package/examples/strategies/fox-minimal.yaml +8 -9
  115. package/examples/strategies/minimal.yaml +7 -8
  116. package/examples/strategies/viper.yaml +7 -8
  117. package/examples/strategies/wolf.yaml +7 -8
  118. package/examples/yamls/sample-with-dsl-and-emerging-movers.yaml +9 -10
  119. package/openclaw.plugin.json +1 -1
  120. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"map-strategies.js","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"map-strategies.js","sourceRoot":"","sources":["../../src/runtime/map-strategies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * YAML recipe version constants.
3
+ * The `version` field in a trading recipe YAML controls which structural shape is accepted.
4
+ * Increment CURRENT_RECIPE_VERSION when a breaking structural change is introduced
5
+ * and add the new version to SUPPORTED_RECIPE_VERSIONS.
6
+ */
7
+ export declare const CURRENT_RECIPE_VERSION = 1;
8
+ export declare const SUPPORTED_RECIPE_VERSIONS: readonly number[];
9
+ /**
10
+ * Extract the major (structural) version from the YAML `version` field.
11
+ * Accepts an integer (e.g. `1`), a semver-like string (e.g. `"1.6.0"` → `1`),
12
+ * or undefined/null (defaults to CURRENT_RECIPE_VERSION).
13
+ */
14
+ export declare function extractMajorVersion(version: string | number | undefined | null): number;
15
+ //# sourceMappingURL=recipe-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-version.d.ts","sourceRoot":"","sources":["../../src/runtime/recipe-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAAQ,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAUvF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * YAML recipe version constants.
3
+ * The `version` field in a trading recipe YAML controls which structural shape is accepted.
4
+ * Increment CURRENT_RECIPE_VERSION when a breaking structural change is introduced
5
+ * and add the new version to SUPPORTED_RECIPE_VERSIONS.
6
+ */
7
+ export const CURRENT_RECIPE_VERSION = 1;
8
+ export const SUPPORTED_RECIPE_VERSIONS = [1];
9
+ /**
10
+ * Extract the major (structural) version from the YAML `version` field.
11
+ * Accepts an integer (e.g. `1`), a semver-like string (e.g. `"1.6.0"` → `1`),
12
+ * or undefined/null (defaults to CURRENT_RECIPE_VERSION).
13
+ */
14
+ export function extractMajorVersion(version) {
15
+ if (version == null)
16
+ return CURRENT_RECIPE_VERSION;
17
+ if (typeof version === "number")
18
+ return version;
19
+ const match = version.match(/^(\d+)/);
20
+ if (!match) {
21
+ throw new Error(`Cannot parse version "${version}". Expected an integer (e.g. 1) or semver string (e.g. "1.0.0").`);
22
+ }
23
+ return parseInt(match[1], 10);
24
+ }
25
+ //# sourceMappingURL=recipe-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe-version.js","sourceRoot":"","sources":["../../src/runtime/recipe-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAsB,CAAC,CAAC,CAAC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA2C;IAC7E,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,sBAAsB,CAAC;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,yBAAyB,OAAO,kEAAkE,CACnG,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -30,7 +30,7 @@ export interface ReconcileOptions {
30
30
  *
31
31
  * Call after hydrate() in Runtime.start() and periodically from the DSL monitor tick.
32
32
  *
33
- * @param addressesOrStrategiesMap - strategy addresses to reconcile, or strategies Map (uses its keys)
33
+ * @param addresses - strategy addresses to reconcile
34
34
  * @param options - optional bus to emit POSITION_CLOSED when archiving (e.g. from monitor)
35
35
  */
36
36
  export declare function reconcileStateWithBackend(stateManager: StateManager, senpi: SenpiClient, addressesOrStrategiesMap: string[] | Map<string, StrategyConfig>, options?: ReconcileOptions): Promise<void>;
@@ -56,7 +56,7 @@ async function resolveMissingPositionCloseReason(senpi, state, strategyState, st
56
56
  *
57
57
  * Call after hydrate() in Runtime.start() and periodically from the DSL monitor tick.
58
58
  *
59
- * @param addressesOrStrategiesMap - strategy addresses to reconcile, or strategies Map (uses its keys)
59
+ * @param addresses - strategy addresses to reconcile
60
60
  * @param options - optional bus to emit POSITION_CLOSED when archiving (e.g. from monitor)
61
61
  */
62
62
  export async function reconcileStateWithBackend(stateManager, senpi, addressesOrStrategiesMap, options) {
@@ -2,6 +2,7 @@
2
2
  * Programmatic entry: load trading recipe and start runtime. Returns handle with stop().
3
3
  */
4
4
  import type { McpTransport } from "../senpi/types.js";
5
+ import type { RuntimeHealthStatus, RuntimeSystemState } from "../health/index.js";
5
6
  import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
6
7
  import type { DslPlugin } from "../dsl/plugin/index.js";
7
8
  export interface RunOptions {
@@ -14,6 +15,10 @@ export interface RunOptions {
14
15
  export interface RuntimeHandle {
15
16
  stop(): Promise<void>;
16
17
  dsl: DslPlugin | null;
18
+ /** Wallet address from the recipe's strategy block. */
19
+ wallet: string;
20
+ getHealthStatus(): Promise<RuntimeHealthStatus | null>;
21
+ getSystemState(): Promise<RuntimeSystemState | null>;
17
22
  /** Cancel exchange SLs and archive DSL state for all strategies before deleting a recipe. */
18
23
  teardownDslForRecipeDeletion(): Promise<void>;
19
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,6FAA6F;IAC7F,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,CA4BxB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;IACtB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IAEf,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACvD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACrD,6FAA6F;IAC7F,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAsB,GAAG,CACvB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,aAAa,CAAC,CAmCxB"}
@@ -31,6 +31,13 @@ export async function run(recipePathOrContent, options) {
31
31
  await runtime.stop();
32
32
  },
33
33
  dsl: runtime.dsl,
34
+ wallet: config.strategy?.wallet ?? "",
35
+ async getHealthStatus() {
36
+ return runtime.getHealthStatus();
37
+ },
38
+ async getSystemState() {
39
+ return runtime.getSystemState();
40
+ },
34
41
  teardownDslForRecipeDeletion() {
35
42
  return runtime.teardownDslForRecipeDeletion();
36
43
  },
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiBvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,mBAA2B,EAC3B,OAAoB;IAEpB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;QAClC,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;KAC5C,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,4BAA4B;YAC1B,OAAO,OAAO,CAAC,4BAA4B,EAAE,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsBvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,mBAA2B,EAC3B,OAAoB;IAEpB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE;QAClC,QAAQ;QACR,YAAY;QACZ,MAAM;QACN,gBAAgB,EAAE,OAAO,EAAE,gBAAgB;KAC5C,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;QACrC,KAAK,CAAC,eAAe;YACnB,OAAO,OAAO,CAAC,eAAe,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,cAAc;YAClB,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QAClC,CAAC;QACD,4BAA4B;YAC1B,OAAO,OAAO,CAAC,4BAA4B,EAAE,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -5,6 +5,7 @@ import type { TradingRecipeConfig } from "./trading-recipe-config.js";
5
5
  import type { McpTransport } from "../senpi/types.js";
6
6
  import type { ScannerDataProviders } from "../scanners/engine/data-providers.js";
7
7
  import { DslPlugin as DslPluginClass } from "../dsl/plugin/index.js";
8
+ import type { RuntimeHealthStatus, RuntimeSystemState } from "../health/types.js";
8
9
  export interface RuntimeOptions {
9
10
  stateDir: string;
10
11
  mcpTransport?: McpTransport;
@@ -20,25 +21,28 @@ export declare class Runtime {
20
21
  private scannerModule;
21
22
  private dslPlugin;
22
23
  private senpi;
24
+ private healthStateModule;
23
25
  private started;
26
+ private startedAt;
24
27
  /** Serial signal processing: queue and consumer so only one signal is handled at a time. */
25
28
  private signalQueue;
26
29
  private signalQueueWait;
27
30
  private signalConsumerStopped;
28
31
  private signalConsumerDone;
29
32
  private runActionsForSignal;
30
- private strategiesMap;
31
- private strategyStates;
33
+ private strategyConfig;
32
34
  /** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
33
35
  private onScannerRunComplete;
34
36
  constructor(config: TradingRecipeConfig, options: RuntimeOptions);
35
37
  get dsl(): DslPluginClass | null;
38
+ getHealthStatus(): Promise<RuntimeHealthStatus | null>;
39
+ getSystemState(): Promise<RuntimeSystemState | null>;
36
40
  start(): Promise<void>;
37
41
  /**
38
- * Cancel exchange SLs and archive DSL state for one strategy, then drop runtime tracking for that address.
42
+ * Cancel exchange SLs and archive DSL state for the strategy, then log removal.
39
43
  */
40
44
  removeStrategy(address: string): Promise<void>;
41
- /** Tear down DSL for every recipe strategy before deleting the recipe (gateway / CLI). */
45
+ /** Tear down DSL for the recipe strategy before deleting the recipe (gateway / CLI). */
42
46
  teardownDslForRecipeDeletion(): Promise<void>;
43
47
  /**
44
48
  * Single consumer: process one scanner:run:complete at a time so slot counts stay correct.
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAoBjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AASrE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAOD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,OAAO,CAAS;IAExB,4FAA4F;IAC5F,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,cAAc,CAA8B;IAEpD,kGAAkG;IAClG,OAAO,CAAC,oBAAoB,CAA0D;gBAE1E,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc;IAKhE,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,CAE/B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4J5B;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpD,0FAA0F;IACpF,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;YACW,iBAAiB;IAoDzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B5B"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAItE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAyBjF,OAAO,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOrE,OAAO,KAAK,EAEV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAOD,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAuB;IAExC,4FAA4F;IAC5F,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,cAAc,CAAkB;IAExC,kGAAkG;IAClG,OAAO,CAAC,oBAAoB,CAA0D;gBAE1E,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,cAAc;IAKhE,IAAI,GAAG,IAAI,cAAc,GAAG,IAAI,CAE/B;IAEK,eAAe,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAItD,cAAc,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAIpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6J5B;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD,wFAAwF;IAClF,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;YACW,iBAAiB;IA2CzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B5B"}
@@ -9,20 +9,21 @@ import { StateManager } from "../state/index.js";
9
9
  import { createContextBuilder } from "../context/index.js";
10
10
  import { createRiskGuard } from "./risk-guard.js";
11
11
  import { createNotificationService } from "./notifications.js";
12
- import { mapStrategiesToConfig } from "./map-strategies.js";
12
+ import { resolveStrategyConfig } from "./map-strategies.js";
13
13
  import { mapTradingRecipeExitToDslConfig } from "./map-exit-config.js";
14
14
  import { buildActionScanPayload } from "./build-action-scan-payload.js";
15
15
  import { createScannerModuleFromTradingRecipe } from "./create-scanner-module.js";
16
- import { createRuntimeContext } from "./create-runtime-context.js";
16
+ import { createRuntimeContext, createStrategyStatesMap } from "./create-runtime-context.js";
17
17
  import { createActions } from "./create-actions.js";
18
18
  import { validateDslPositionTracking } from "./validate-dsl-position-tracking.js";
19
19
  import { ScannerRegistry } from "./scanner-registry.js";
20
20
  import { ActionRegistry } from "./action-registry.js";
21
21
  import { initRisk } from "../risk/index.js";
22
- import { initHealth } from "../health/index.js";
22
+ import { createHealthStateModule, } from "../health/index.js";
23
23
  import { DslPlugin as DslPluginClass } from "../dsl/plugin/index.js";
24
24
  import { HOOK_EVENT } from "../types/hooks.js";
25
25
  import { MaxLeverageCache } from "../leverage/max-leverage-cache.js";
26
+ import { buildStateLayout } from "./state-layout.js";
26
27
  import { createLogger } from "../utils/logger.js";
27
28
  const logger = createLogger("[senpi-core][runtime]");
28
29
  export class Runtime {
@@ -34,15 +35,16 @@ export class Runtime {
34
35
  scannerModule;
35
36
  dslPlugin = null;
36
37
  senpi = null;
38
+ healthStateModule = null;
37
39
  started = false;
40
+ startedAt = null;
38
41
  /** Serial signal processing: queue and consumer so only one signal is handled at a time. */
39
42
  signalQueue = [];
40
43
  signalQueueWait = null;
41
44
  signalConsumerStopped = false;
42
45
  signalConsumerDone = null;
43
46
  runActionsForSignal;
44
- strategiesMap;
45
- strategyStates;
47
+ strategyConfig;
46
48
  /** Stored so we can call off() in stop() and avoid retaining Runtime via scanner EventEmitter. */
47
49
  onScannerRunComplete = null;
48
50
  constructor(config, options) {
@@ -52,10 +54,17 @@ export class Runtime {
52
54
  get dsl() {
53
55
  return this.dslPlugin;
54
56
  }
57
+ async getHealthStatus() {
58
+ return this.healthStateModule?.getHealthStatus() ?? null;
59
+ }
60
+ async getSystemState() {
61
+ return this.healthStateModule?.getSystemState() ?? null;
62
+ }
55
63
  async start() {
56
64
  if (this.started)
57
65
  return;
58
66
  logger.info("Runtime.start() entered", { configName: this.config.name });
67
+ this.startedAt = Date.now();
59
68
  const { stateDir, mcpTransport, apiKey, scannerProviders } = this.options;
60
69
  if (!mcpTransport && !apiKey) {
61
70
  throw new Error("Runtime requires mcpTransport or apiKey for full operation (positions, LLM)");
@@ -87,10 +96,10 @@ export class Runtime {
87
96
  await senpi.connect();
88
97
  }
89
98
  this.senpi = senpi;
90
- this.strategiesMap = mapStrategiesToConfig(this.config);
99
+ this.strategyConfig = resolveStrategyConfig(this.config);
91
100
  try {
92
101
  const { reconcileStateWithBackend } = await import("./reconcile-state.js");
93
- await reconcileStateWithBackend(this.stateManager, senpi, this.strategiesMap);
102
+ await reconcileStateWithBackend(this.stateManager, senpi, [this.strategyConfig.address]);
94
103
  }
95
104
  catch (err) {
96
105
  logger.warn("reconcile after hydrate failed, continuing", { err });
@@ -103,13 +112,14 @@ export class Runtime {
103
112
  mcpTransport: this.options.mcpTransport,
104
113
  });
105
114
  logger.info("Runtime.start() creating scanner module");
115
+ const layout = buildStateLayout(stateDir);
106
116
  // Augment caller-supplied providers with StateManager-backed DSL state access
107
117
  const augmentedProviders = {
108
118
  ...scannerProviders,
109
119
  getDslStatesForStrategy: scannerProviders?.getDslStatesForStrategy
110
120
  ?? (async (address) => this.stateManager.listDslStates(address)),
111
121
  };
112
- this.scannerModule = createScannerModuleFromTradingRecipe(this.config, stateDir, augmentedProviders);
122
+ this.scannerModule = createScannerModuleFromTradingRecipe(this.config, layout.scannerRoot, augmentedProviders);
113
123
  logger.info("Runtime.start() scanner module created, calling start()");
114
124
  // Pre-load max leverage cache (non-blocking — log warning on failure)
115
125
  const maxLeverageCache = new MaxLeverageCache(senpi);
@@ -120,18 +130,16 @@ export class Runtime {
120
130
  logger.warn("failed to pre-load max leverage cache, will retry on first use", { err });
121
131
  }
122
132
  // Build RuntimeContext once per trading recipe and reuse for all actions.
123
- const runtimeContext = createRuntimeContext(this.strategiesMap, {
133
+ const runtimeContext = createRuntimeContext(this.strategyConfig, {
124
134
  senpi,
125
135
  hookSystem: this.hookSystem,
126
136
  llmDecision,
127
137
  contextBuilder,
128
138
  riskGuard,
129
139
  notifications,
130
- stateManager: this.stateManager,
131
140
  scannerModule: this.scannerModule,
132
141
  maxLeverageCache,
133
142
  });
134
- this.strategyStates = runtimeContext.strategyStates;
135
143
  const { runActionsForSignal } = createActions(this.config, {
136
144
  bus: this.bus,
137
145
  senpi,
@@ -154,7 +162,7 @@ export class Runtime {
154
162
  stateDir,
155
163
  stateManager: this.stateManager,
156
164
  senpiClient: senpi,
157
- strategyStates: runtimeContext.strategyStates,
165
+ strategyStates: createStrategyStatesMap(this.strategyConfig, senpi),
158
166
  notifications: dslNotificationsDisabled ? undefined : notifications,
159
167
  notifySlUpdates: dslNotifySlUpdates,
160
168
  strategyName: this.config.name,
@@ -164,15 +172,16 @@ export class Runtime {
164
172
  this.dslPlugin = null;
165
173
  }
166
174
  initRisk(this.bus);
167
- initHealth(this.bus);
175
+ this.healthStateModule = createHealthStateModule({
176
+ recipeName: this.config.name,
177
+ stateDir,
178
+ startedAt: this.startedAt,
179
+ providers: {
180
+ scanners: this.scannerModule,
181
+ dsl: this.dslPlugin ?? createDisabledDslProvider(),
182
+ },
183
+ });
168
184
  this.onScannerRunComplete = (event) => {
169
- logger.info("scanner:run:complete received, enqueuing", {
170
- address: event.result.address,
171
- scannerId: event.result.scannerId,
172
- status: event.result.status,
173
- signalCount: event.result.signals.length,
174
- queueDepth: this.signalQueue.length + 1,
175
- });
176
185
  this.signalQueue.push({ result: event.result });
177
186
  if (this.signalQueueWait) {
178
187
  const w = this.signalQueueWait;
@@ -195,22 +204,17 @@ export class Runtime {
195
204
  this.started = true;
196
205
  }
197
206
  /**
198
- * Cancel exchange SLs and archive DSL state for one strategy, then drop runtime tracking for that address.
207
+ * Cancel exchange SLs and archive DSL state for the strategy, then log removal.
199
208
  */
200
209
  async removeStrategy(address) {
201
210
  if (this.dslPlugin) {
202
211
  await this.dslPlugin.deleteDslsForStrategy(address);
203
212
  }
204
- this.strategiesMap.delete(address);
205
- this.strategyStates.delete(address);
206
213
  logger.info("[runtime] strategy removed", { address });
207
214
  }
208
- /** Tear down DSL for every recipe strategy before deleting the recipe (gateway / CLI). */
215
+ /** Tear down DSL for the recipe strategy before deleting the recipe (gateway / CLI). */
209
216
  async teardownDslForRecipeDeletion() {
210
- const addresses = [...this.strategiesMap.keys()];
211
- for (const address of addresses) {
212
- await this.removeStrategy(address);
213
- }
217
+ await this.removeStrategy(this.strategyConfig.address);
214
218
  }
215
219
  /**
216
220
  * Single consumer: process one scanner:run:complete at a time so slot counts stay correct.
@@ -229,13 +233,8 @@ export class Runtime {
229
233
  if (!item)
230
234
  continue;
231
235
  try {
232
- logger.info("signal consumer dequeued item", {
233
- address: item.result.address,
234
- scannerId: item.result.scannerId,
235
- signalCount: item.result.signals.length,
236
- });
237
- const usedSlotsByStrategy = await this.stateManager.getUsedSlotsByStrategy(Array.from(this.strategiesMap.keys()));
238
- const payload = buildActionScanPayload(item.result, this.strategiesMap, {
236
+ const usedSlotsByStrategy = await this.stateManager.getUsedSlotsByStrategy([this.strategyConfig.address]);
237
+ const payload = buildActionScanPayload(item.result, this.strategyConfig, {
239
238
  usedSlotsByStrategy,
240
239
  address: item.result.address,
241
240
  });
@@ -246,17 +245,13 @@ export class Runtime {
246
245
  data: payload,
247
246
  timestamp: new Date().toISOString(),
248
247
  };
249
- logger.info("emitting ON_SIGNAL_DETECTED, dispatching to actions", {
250
- address: item.result.address,
251
- scannerId: item.result.scannerId,
252
- });
253
248
  this.bus.emit(HOOK_EVENT.ON_SIGNAL_DETECTED, hookEvent);
254
249
  await this.runActionsForSignal(hookEvent);
255
250
  }
256
251
  catch (err) {
257
252
  const message = err instanceof Error ? err.message : String(err);
258
253
  const stack = err instanceof Error ? err.stack : undefined;
259
- logger.error("signal processing error", { message, stack, address: item.result.address, scannerId: item.result.scannerId });
254
+ console.error("[senpi-recipe] signal processing error", message, stack ?? "");
260
255
  this.bus.emit("signal_processing_error", {
261
256
  error: err,
262
257
  address: item.result.address,
@@ -293,9 +288,49 @@ export class Runtime {
293
288
  await this.senpi.disconnect();
294
289
  this.senpi = null;
295
290
  }
291
+ this.healthStateModule = null;
296
292
  if (this.bus.removeAllListeners) {
297
293
  this.bus.removeAllListeners();
298
294
  }
299
295
  }
300
296
  }
297
+ function createDisabledDslProvider() {
298
+ return {
299
+ async getHealthStatus() {
300
+ return {
301
+ component: "dsl",
302
+ health: "disabled",
303
+ updatedAt: new Date().toISOString(),
304
+ summary: "DSL is not configured for this runtime.",
305
+ enabled: false,
306
+ activePositions: 0,
307
+ };
308
+ },
309
+ async getSystemState() {
310
+ return {
311
+ component: "dsl",
312
+ health: "disabled",
313
+ updatedAt: new Date().toISOString(),
314
+ state: {
315
+ enabled: false,
316
+ intervalMs: 0,
317
+ preset: "disabled",
318
+ monitor: {
319
+ running: false,
320
+ inFlight: false,
321
+ lastTickStartedAt: null,
322
+ lastTickFinishedAt: null,
323
+ lastTickError: null,
324
+ nextTickAt: null,
325
+ tickAttemptCount: 0,
326
+ tickSuccessCount: 0,
327
+ tickErrorCount: 0,
328
+ },
329
+ activePositions: [],
330
+ positions: [],
331
+ },
332
+ };
333
+ },
334
+ };
335
+ }
301
336
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Canonical state-directory layout helpers and archive operations.
3
+ *
4
+ * The runtime uses these to build deterministic per-recipe state paths
5
+ * and to archive state directories when recipes are deleted.
6
+ */
7
+ /**
8
+ * Describes the explicit paths the runtime provides to each component.
9
+ * Components must store their state only within the path they receive.
10
+ */
11
+ export interface StateLayout {
12
+ /** Recipe state root (e.g. `<baseStateDir>/<recipeId>-<wallet>`). */
13
+ root: string;
14
+ /** Root passed to scanner stores (same as `root` today; scanners add `strategies/<wallet>/...` internally). */
15
+ scannerRoot: string;
16
+ /** Root passed to StateManager / DslPlugin (same as `root`; they add `<wallet>/dsl-*` internally). */
17
+ dslRoot: string;
18
+ }
19
+ /**
20
+ * Build the per-recipe state directory path.
21
+ * Convention: `<baseStateDir>/<recipeId>-<wallet>`.
22
+ */
23
+ export declare function buildRecipeStateDir(baseStateDir: string, recipeId: string, wallet: string): string;
24
+ /**
25
+ * Build a `StateLayout` from a recipe's state directory.
26
+ * Currently all roots resolve to the same directory; kept explicit so
27
+ * a future version can split them without changing call-sites.
28
+ */
29
+ export declare function buildStateLayout(recipeStateDir: string): StateLayout;
30
+ export interface ArchiveEntry {
31
+ path: string;
32
+ recipeId: string;
33
+ wallet: string;
34
+ timestamp: number;
35
+ }
36
+ /**
37
+ * Archive a recipe's state directory by moving it into the archives folder.
38
+ * Target: `<archiveBaseDir>/<recipeId>-<wallet>-<timestamp>/`.
39
+ * Falls back to recursive copy + remove when `rename` fails (cross-device).
40
+ * Returns the archive destination path.
41
+ */
42
+ export declare function archiveStateDir(recipeStateDir: string, archiveBaseDir: string, recipeId: string, wallet: string): Promise<string>;
43
+ /**
44
+ * List archived recipe state directories, sorted newest-first.
45
+ * Parses directory names matching `<recipeId>-<wallet>-<timestamp>`.
46
+ */
47
+ export declare function listArchives(archiveBaseDir: string): Promise<ArchiveEntry[]>;
48
+ //# sourceMappingURL=state-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-layout.d.ts","sourceRoot":"","sources":["../../src/runtime/state-layout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,+GAA+G;IAC/G,WAAW,EAAE,MAAM,CAAC;IACpB,sGAAsG;IACtG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAElG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAMpE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAajB;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAgClF"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Canonical state-directory layout helpers and archive operations.
3
+ *
4
+ * The runtime uses these to build deterministic per-recipe state paths
5
+ * and to archive state directories when recipes are deleted.
6
+ */
7
+ import { join } from "node:path";
8
+ import { mkdir, rename, readdir, cp, rm, stat } from "node:fs/promises";
9
+ /**
10
+ * Build the per-recipe state directory path.
11
+ * Convention: `<baseStateDir>/<recipeId>-<wallet>`.
12
+ */
13
+ export function buildRecipeStateDir(baseStateDir, recipeId, wallet) {
14
+ return join(baseStateDir, `${recipeId}-${wallet}`);
15
+ }
16
+ /**
17
+ * Build a `StateLayout` from a recipe's state directory.
18
+ * Currently all roots resolve to the same directory; kept explicit so
19
+ * a future version can split them without changing call-sites.
20
+ */
21
+ export function buildStateLayout(recipeStateDir) {
22
+ return {
23
+ root: recipeStateDir,
24
+ scannerRoot: recipeStateDir,
25
+ dslRoot: recipeStateDir,
26
+ };
27
+ }
28
+ /**
29
+ * Archive a recipe's state directory by moving it into the archives folder.
30
+ * Target: `<archiveBaseDir>/<recipeId>-<wallet>-<timestamp>/`.
31
+ * Falls back to recursive copy + remove when `rename` fails (cross-device).
32
+ * Returns the archive destination path.
33
+ */
34
+ export async function archiveStateDir(recipeStateDir, archiveBaseDir, recipeId, wallet) {
35
+ await mkdir(archiveBaseDir, { recursive: true });
36
+ const ts = Date.now();
37
+ const archiveName = `${recipeId}-${wallet}-${ts}`;
38
+ const dest = join(archiveBaseDir, archiveName);
39
+ try {
40
+ await rename(recipeStateDir, dest);
41
+ }
42
+ catch {
43
+ await cp(recipeStateDir, dest, { recursive: true });
44
+ await rm(recipeStateDir, { recursive: true, force: true });
45
+ }
46
+ return dest;
47
+ }
48
+ const ARCHIVE_DIR_PATTERN = /^(.+)-([^-]+-[^-]+)$/;
49
+ /**
50
+ * List archived recipe state directories, sorted newest-first.
51
+ * Parses directory names matching `<recipeId>-<wallet>-<timestamp>`.
52
+ */
53
+ export async function listArchives(archiveBaseDir) {
54
+ let entries;
55
+ try {
56
+ entries = await readdir(archiveBaseDir);
57
+ }
58
+ catch {
59
+ return [];
60
+ }
61
+ const results = [];
62
+ for (const name of entries) {
63
+ const fullPath = join(archiveBaseDir, name);
64
+ let info;
65
+ try {
66
+ info = await stat(fullPath);
67
+ }
68
+ catch {
69
+ continue;
70
+ }
71
+ if (!info.isDirectory())
72
+ continue;
73
+ const m = ARCHIVE_DIR_PATTERN.exec(name);
74
+ if (!m)
75
+ continue;
76
+ const [, recipeId, walletAndTs] = m;
77
+ const tsDash = walletAndTs.lastIndexOf("-");
78
+ const wallet = walletAndTs.slice(0, tsDash);
79
+ const ts = Number(walletAndTs.slice(tsDash + 1));
80
+ if (!Number.isFinite(ts) || ts <= 0)
81
+ continue;
82
+ results.push({ path: fullPath, recipeId, wallet, timestamp: ts });
83
+ }
84
+ results.sort((a, b) => b.timestamp - a.timestamp);
85
+ return results;
86
+ }
87
+ //# sourceMappingURL=state-layout.js.map