@idlekit/core 0.2.1 → 0.3.0

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 (82) hide show
  1. package/dist/index.d.ts +12 -0
  2. package/dist/index.js +12 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/scenario/compile.d.ts +25 -0
  5. package/dist/scenario/compile.js +60 -0
  6. package/dist/scenario/compile.js.map +1 -1
  7. package/dist/scenario/scenarioContract.d.ts +152 -0
  8. package/dist/scenario/scenarioContract.js +2815 -0
  9. package/dist/scenario/scenarioContract.js.map +1 -0
  10. package/dist/sim/analysis/analyzers.d.ts +245 -0
  11. package/dist/sim/analysis/analyzers.js +1076 -0
  12. package/dist/sim/analysis/analyzers.js.map +1 -0
  13. package/dist/sim/analysis/contracts.d.ts +147 -0
  14. package/dist/sim/analysis/contracts.js +1230 -0
  15. package/dist/sim/analysis/contracts.js.map +1 -0
  16. package/dist/sim/analysis/distribution.d.ts +199 -0
  17. package/dist/sim/analysis/distribution.js +1246 -0
  18. package/dist/sim/analysis/distribution.js.map +1 -0
  19. package/dist/sim/analysis/eta.d.ts +118 -0
  20. package/dist/sim/analysis/eta.js +968 -70
  21. package/dist/sim/analysis/eta.js.map +1 -1
  22. package/dist/sim/analysis/experiment.d.ts +300 -0
  23. package/dist/sim/analysis/experiment.js +2206 -0
  24. package/dist/sim/analysis/experiment.js.map +1 -0
  25. package/dist/sim/analysis/growth.d.ts +2 -0
  26. package/dist/sim/analysis/growth.js +5 -1
  27. package/dist/sim/analysis/growth.js.map +1 -1
  28. package/dist/sim/analysis/growthFit.d.ts +183 -0
  29. package/dist/sim/analysis/growthFit.js +1798 -0
  30. package/dist/sim/analysis/growthFit.js.map +1 -0
  31. package/dist/sim/analysis/inspect.d.ts +236 -0
  32. package/dist/sim/analysis/inspect.js +388 -0
  33. package/dist/sim/analysis/inspect.js.map +1 -0
  34. package/dist/sim/analysis/metrics.d.ts +91 -0
  35. package/dist/sim/analysis/metrics.js +266 -0
  36. package/dist/sim/analysis/metrics.js.map +1 -0
  37. package/dist/sim/analysis/prestigeCycle.d.ts +6 -0
  38. package/dist/sim/analysis/prestigeCycle.js +10 -1
  39. package/dist/sim/analysis/prestigeCycle.js.map +1 -1
  40. package/dist/sim/analysis/registry.d.ts +41 -0
  41. package/dist/sim/analysis/registry.js +54 -0
  42. package/dist/sim/analysis/registry.js.map +1 -0
  43. package/dist/sim/analysis/resetActions.d.ts +7 -0
  44. package/dist/sim/analysis/resetActions.js +45 -0
  45. package/dist/sim/analysis/resetActions.js.map +1 -0
  46. package/dist/sim/analysis/resetCycle.d.ts +175 -0
  47. package/dist/sim/analysis/resetCycle.js +1009 -0
  48. package/dist/sim/analysis/resetCycle.js.map +1 -0
  49. package/dist/sim/analysis/resetOptimization.d.ts +198 -0
  50. package/dist/sim/analysis/resetOptimization.js +2187 -0
  51. package/dist/sim/analysis/resetOptimization.js.map +1 -0
  52. package/dist/sim/analysis/sensitivity.d.ts +73 -0
  53. package/dist/sim/analysis/sensitivity.js +160 -0
  54. package/dist/sim/analysis/sensitivity.js.map +1 -0
  55. package/dist/sim/monteCarlo.d.ts +12 -0
  56. package/dist/sim/monteCarlo.js +33 -4
  57. package/dist/sim/monteCarlo.js.map +1 -1
  58. package/dist/sim/observation.d.ts +22 -0
  59. package/dist/sim/observation.js +33 -0
  60. package/dist/sim/observation.js.map +1 -1
  61. package/dist/sim/offline.js +9 -2
  62. package/dist/sim/offline.js.map +1 -1
  63. package/dist/sim/random.d.ts +15 -0
  64. package/dist/sim/random.js +28 -0
  65. package/dist/sim/random.js.map +1 -1
  66. package/dist/sim/session.d.ts +7 -0
  67. package/dist/sim/session.js +13 -0
  68. package/dist/sim/session.js.map +1 -1
  69. package/dist/sim/simulator.js +7 -1
  70. package/dist/sim/simulator.js.map +1 -1
  71. package/dist/sim/step.d.ts +67 -1
  72. package/dist/sim/step.js +100 -18
  73. package/dist/sim/step.js.map +1 -1
  74. package/dist/sim/strategy/opt/freshRun.d.ts +3 -0
  75. package/dist/sim/strategy/opt/freshRun.js +6 -0
  76. package/dist/sim/strategy/opt/freshRun.js.map +1 -0
  77. package/dist/sim/strategy/opt/runner.js +2 -2
  78. package/dist/sim/strategy/opt/runner.js.map +1 -1
  79. package/dist/sim/strategy/planner.d.ts +26 -0
  80. package/dist/sim/strategy/planner.js +30 -0
  81. package/dist/sim/strategy/planner.js.map +1 -1
  82. package/package.json +2 -2
@@ -0,0 +1,266 @@
1
+ import { analysisAlgorithmVersion, classifyAmount, classifyFinite, unavailableReading, } from "./contracts";
2
+ const NET_WORTH_FALLBACK = "netWorth missing; wallet amount used";
3
+ // Attach the observer to the original predicate so met overrides keep working.
4
+ // A shared symbol also works when a plugin and its caller load separate core copies.
5
+ const GOAL_OBSERVATION = Symbol.for("@idlekit/core.goalObservation.v1");
6
+ export function walletMoneyMetric() {
7
+ return {
8
+ id: "money",
9
+ version: 1,
10
+ meaning: "Current wallet amount",
11
+ domain: "amount",
12
+ timeAxis: "instant",
13
+ kind: "stock",
14
+ extract(_ctx, state) {
15
+ return {
16
+ available: true,
17
+ domain: "amount",
18
+ amount: state.wallet.money.amount,
19
+ unit: state.wallet.money.unit.code,
20
+ };
21
+ },
22
+ };
23
+ }
24
+ export function netWorthMetric(read) {
25
+ return {
26
+ id: "netWorth",
27
+ version: 1,
28
+ meaning: "Current net worth amount",
29
+ domain: "amount",
30
+ timeAxis: "instant",
31
+ kind: "stock",
32
+ extract(ctx, state) {
33
+ const worth = read(ctx, state);
34
+ if (!worth)
35
+ return { available: false, status: "unsupported", reason: "netWorth is not provided" };
36
+ return { available: true, domain: "amount", amount: worth.amount, unit: worth.unit };
37
+ },
38
+ };
39
+ }
40
+ export function prestigePointsMetric() {
41
+ return {
42
+ id: "prestige.points",
43
+ version: 1,
44
+ meaning: "Current prestige points",
45
+ domain: "amount",
46
+ timeAxis: "instant",
47
+ kind: "stock",
48
+ extract(_ctx, state) {
49
+ return {
50
+ available: true,
51
+ domain: "amount",
52
+ amount: state.prestige.points,
53
+ unit: "prestige.points",
54
+ };
55
+ },
56
+ };
57
+ }
58
+ export function finiteValueMetric(args) {
59
+ return {
60
+ id: args.id,
61
+ version: args.version ?? 1,
62
+ meaning: args.meaning,
63
+ domain: args.domain,
64
+ timeAxis: args.timeAxis ?? "instant",
65
+ kind: args.kind ?? "stock",
66
+ extract(ctx, state) {
67
+ const value = args.read(ctx, state);
68
+ if (value === undefined)
69
+ return { available: false, status: "unsupported", reason: "value is not provided" };
70
+ return { available: true, domain: args.domain, value };
71
+ },
72
+ };
73
+ }
74
+ export function readMetric(metric, ctx, state, method) {
75
+ const extracted = metric.extract(ctx, state);
76
+ const base = {
77
+ metricId: metric.id,
78
+ metricVersion: metric.version,
79
+ meaning: metric.meaning,
80
+ metricKind: metric.kind,
81
+ timeAxis: metric.timeAxis,
82
+ domain: metric.domain,
83
+ };
84
+ if (!extracted.available) {
85
+ return unavailableReading({
86
+ ...base,
87
+ status: extracted.status,
88
+ ...(extracted.reason !== undefined ? { reason: extracted.reason } : {}),
89
+ });
90
+ }
91
+ // A registered extractor is typed apart from its definition. A mismatch is reported, not mixed into one reading.
92
+ if (extracted.domain !== metric.domain) {
93
+ return unavailableReading({
94
+ ...base,
95
+ status: "invalid",
96
+ reason: `extractor returned domain ${extracted.domain}; the metric declares ${metric.domain}`,
97
+ });
98
+ }
99
+ const classified = extracted.domain === "amount"
100
+ ? classifyAmount(ctx.E, extracted.amount, extracted.unit)
101
+ : classifyFinite(extracted.value);
102
+ const reading = method === undefined ? "observed" : "estimated";
103
+ return {
104
+ ...base,
105
+ reading: classified.status === "ok" ? reading : "unavailable",
106
+ ...classified,
107
+ ...(method !== undefined && classified.status === "ok" ? { method } : {}),
108
+ };
109
+ }
110
+ function amountGoalObservation(target, read) {
111
+ const observe = (state, ctx) => {
112
+ // Some decimal engines saturate an Infinity spelling to a finite sentinel.
113
+ if (/^[+-]?(?:nan|infinity)$/i.test(target.trim()))
114
+ return { status: "invalid" };
115
+ const threshold = ctx.E.from(target);
116
+ if (!ctx.E.isFinite(threshold))
117
+ return { status: "invalid" };
118
+ const amount = read(state, ctx);
119
+ if (amount === undefined)
120
+ return { status: "unsupported" };
121
+ if (!ctx.E.isFinite(amount))
122
+ return { status: "invalid" };
123
+ return { status: "ok", reached: ctx.E.cmp(amount, threshold) >= 0 };
124
+ };
125
+ const met = (state, ctx) => {
126
+ const result = observe(state, ctx);
127
+ return result.status === "ok" ? result.reached : undefined;
128
+ };
129
+ Object.defineProperty(met, GOAL_OBSERVATION, { value: observe });
130
+ return { met };
131
+ }
132
+ export function moneyAtLeast(target) {
133
+ return {
134
+ id: "money.atLeast",
135
+ version: 1,
136
+ observation: "state",
137
+ timeResolution: "step",
138
+ ...amountGoalObservation(target, (state) => state.wallet.money.amount),
139
+ };
140
+ }
141
+ export function netWorthAtLeast(args) {
142
+ return {
143
+ id: "netWorth.atLeast",
144
+ version: 1,
145
+ observation: "state",
146
+ timeResolution: "step",
147
+ ...amountGoalObservation(args.target, (state, ctx) => {
148
+ const worth = args.netWorth(state, ctx);
149
+ return worth ?? (args.fallbackToWallet ? state.wallet.money.amount : undefined);
150
+ }),
151
+ assumptionsFor(state, ctx) {
152
+ if (!args.fallbackToWallet || args.netWorth(state, ctx) !== undefined)
153
+ return [];
154
+ return [NET_WORTH_FALLBACK];
155
+ },
156
+ };
157
+ }
158
+ export function prestigePointsAtLeast(target) {
159
+ return {
160
+ id: "prestige.points.atLeast",
161
+ version: 1,
162
+ observation: "state",
163
+ timeResolution: "step",
164
+ ...amountGoalObservation(target, (state) => state.prestige.points),
165
+ };
166
+ }
167
+ export function milestoneReached(args) {
168
+ return {
169
+ id: `milestone.${args.key}`,
170
+ version: 1,
171
+ observation: "milestone-key",
172
+ timeResolution: "step",
173
+ met() {
174
+ return args.seen.includes(args.key);
175
+ },
176
+ };
177
+ }
178
+ export function defineGoal(goal) {
179
+ return goal;
180
+ }
181
+ export function evaluateGoal(goal, state, ctx) {
182
+ let observation;
183
+ const observe = goal.met[GOAL_OBSERVATION];
184
+ if (observe) {
185
+ observation = observe(state, ctx);
186
+ }
187
+ else {
188
+ const reached = goal.met(state, ctx);
189
+ observation = reached === undefined ? { status: "unsupported" } : { status: "ok", reached };
190
+ }
191
+ if (observation.status !== "ok") {
192
+ return {
193
+ goalId: goal.id,
194
+ goalVersion: goal.version,
195
+ status: observation.status,
196
+ assumptions: [],
197
+ };
198
+ }
199
+ return {
200
+ goalId: goal.id,
201
+ goalVersion: goal.version,
202
+ reached: observation.reached,
203
+ status: "ok",
204
+ assumptions: goal.assumptionsFor?.(state, ctx) ?? [],
205
+ };
206
+ }
207
+ function withMethod(evaluation, method) {
208
+ if (evaluation.status !== "ok") {
209
+ return {
210
+ goalId: evaluation.goalId,
211
+ goalVersion: evaluation.goalVersion,
212
+ status: evaluation.status,
213
+ assumptions: evaluation.assumptions,
214
+ };
215
+ }
216
+ return {
217
+ goalId: evaluation.goalId,
218
+ goalVersion: evaluation.goalVersion,
219
+ status: "ok",
220
+ method,
221
+ ...(evaluation.reached !== undefined ? { reached: evaluation.reached } : {}),
222
+ assumptions: evaluation.assumptions,
223
+ };
224
+ }
225
+ export function evaluateGoalForEta(goal, state, ctx) {
226
+ return withMethod(evaluateGoal(goal, state, ctx), "fixed-step");
227
+ }
228
+ export function evaluateGoalForExperiment(goal, state, ctx) {
229
+ return withMethod(evaluateGoal(goal, state, ctx), "monte-carlo");
230
+ }
231
+ export function evaluateGoalForCheck(goal, state, ctx) {
232
+ return withMethod(evaluateGoal(goal, state, ctx), "exact");
233
+ }
234
+ export function capabilityKnowledge(declared, name) {
235
+ if (declared === undefined)
236
+ return "unknown";
237
+ if (declared[name] === "statically-known")
238
+ return "statically-known";
239
+ return "unsupported";
240
+ }
241
+ export function unsupportedCapabilityResult(name) {
242
+ return { capability: name, knowledge: "unsupported", status: "unsupported" };
243
+ }
244
+ export function buildAnalysisArtifact(draft = {}) {
245
+ const capabilities = draft.capabilities ?? {
246
+ metrics: "unknown",
247
+ goals: "unknown",
248
+ reset: "unknown",
249
+ flow: "unknown",
250
+ advance: "unknown",
251
+ };
252
+ return {
253
+ schemaVersion: 1,
254
+ algorithmVersion: draft.algorithmVersion ?? analysisAlgorithmVersion(),
255
+ assumptions: draft.assumptions ?? [],
256
+ warnings: draft.warnings ?? [],
257
+ observationCoverage: draft.observationCoverage ?? "unknown",
258
+ ...(draft.horizon !== undefined ? { horizon: draft.horizon } : {}),
259
+ ...(draft.sampleCount !== undefined ? { sampleCount: draft.sampleCount } : {}),
260
+ ...(draft.effectiveRunHash !== undefined ? { effectiveRunHash: draft.effectiveRunHash } : {}),
261
+ metrics: draft.metrics ?? [],
262
+ goals: draft.goals ?? [],
263
+ capabilities,
264
+ };
265
+ }
266
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/sim/analysis/metrics.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,11 @@ export type PrestigeCycleRow = Readonly<{
8
8
  breakEvenSec: number;
9
9
  stability: "stable" | "drifting";
10
10
  }>;
11
+ /**
12
+ * The row fields above are the legacy interval scan.
13
+ * They are not counts of committed resets and not a steady state.
14
+ */
15
+ export declare const legacyPrestigeCycleWarnings: readonly ["stability is cycles >= 5 and is not a measured steady state", "breakEvenSec is min(interval, horizon) and is not a committed reset", "cycles is copied onto each row and is not a count of committed resets"];
11
16
  export declare function analyzePrestigeCycle<N, U extends string, Vars>(args: {
12
17
  scenario: CompiledScenario<N, U, Vars>;
13
18
  scan: Readonly<{
@@ -21,4 +26,5 @@ export declare function analyzePrestigeCycle<N, U extends string, Vars>(args: {
21
26
  }): Readonly<{
22
27
  best: PrestigeCycleRow;
23
28
  rows: PrestigeCycleRow[];
29
+ warnings: readonly string[];
24
30
  }>;
@@ -1,5 +1,14 @@
1
1
  import { runScenario } from "../simulator";
2
2
  import { assertHorizonReached } from "../types";
3
+ /**
4
+ * The row fields above are the legacy interval scan.
5
+ * They are not counts of committed resets and not a steady state.
6
+ */
7
+ export const legacyPrestigeCycleWarnings = [
8
+ "stability is cycles >= 5 and is not a measured steady state",
9
+ "breakEvenSec is min(interval, horizon) and is not a committed reset",
10
+ "cycles is copied onto each row and is not a count of committed resets",
11
+ ];
3
12
  function metric(row, objective) {
4
13
  return Number(objective === "netWorthPerHour" ? row.netWorthPerHour : row.pointsPerHour);
5
14
  }
@@ -71,6 +80,6 @@ export function analyzePrestigeCycle(args) {
71
80
  if (!best) {
72
81
  throw new Error(`analyzePrestigeCycle has no finite ${args.objective} to rank`);
73
82
  }
74
- return { best, rows };
83
+ return { best, rows, warnings: legacyPrestigeCycleWarnings };
75
84
  }
76
85
  //# sourceMappingURL=prestigeCycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prestigeCycle.js","sourceRoot":"","sources":["../../../src/sim/analysis/prestigeCycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prestigeCycle.js","sourceRoot":"","sources":["../../../src/sim/analysis/prestigeCycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { AnalysisCapabilityName, CapabilityKnowledge } from "./contracts";
2
+ import type { GoalDefinition, MetricDefinition } from "./metrics";
3
+ /**
4
+ * What one model version can explain.
5
+ * AnalyzerRegistry, which chooses an analysis method, is DX-02 and is not this type.
6
+ * Flow and advance method bodies stay in later PRs.
7
+ */
8
+ export type ModelAnalysisAdapter<N, U extends string, Vars> = Readonly<{
9
+ modelId: string;
10
+ modelVersion: number;
11
+ /** Omitted capabilities on a registered adapter are unsupported. */
12
+ capabilities?: Partial<Record<AnalysisCapabilityName, "statically-known" | "unsupported">>;
13
+ metrics?: readonly MetricDefinition<N, U, Vars>[];
14
+ goals?: readonly GoalDefinition<N, U, Vars>[];
15
+ }>;
16
+ export type ModelAnalysisRegistry<N, U extends string, Vars> = Readonly<{
17
+ register: (adapter: ModelAnalysisAdapter<N, U, Vars>) => void;
18
+ get: (modelId: string, modelVersion: number) => ModelAnalysisAdapter<N, U, Vars> | undefined;
19
+ list: () => readonly Readonly<{
20
+ modelId: string;
21
+ modelVersion: number;
22
+ }>[];
23
+ knowledge: (modelId: string, modelVersion: number, name: AnalysisCapabilityName) => CapabilityKnowledge;
24
+ }>;
25
+ export declare function createModelAnalysisRegistry<N, U extends string, Vars>(): ModelAnalysisRegistry<N, U, Vars>;
26
+ export declare function flowResult(knowledge: CapabilityKnowledge): Readonly<{
27
+ capability: "flow";
28
+ knowledge: CapabilityKnowledge;
29
+ status: "unsupported" | "insufficient-data";
30
+ }> | Readonly<{
31
+ capability: "flow";
32
+ knowledge: "statically-known";
33
+ status: "unsupported";
34
+ reason: string;
35
+ }>;
36
+ export declare function resetResult(knowledge: CapabilityKnowledge): Readonly<{
37
+ capability: "reset";
38
+ knowledge: CapabilityKnowledge;
39
+ status: "unsupported" | "insufficient-data";
40
+ reason?: string;
41
+ }>;
@@ -0,0 +1,54 @@
1
+ import { capabilityKnowledge } from "./metrics";
2
+ function keyOf(modelId, modelVersion) {
3
+ return `${modelId}@${modelVersion}`;
4
+ }
5
+ export function createModelAnalysisRegistry() {
6
+ const map = new Map();
7
+ return {
8
+ register(adapter) {
9
+ map.set(keyOf(adapter.modelId, adapter.modelVersion), adapter);
10
+ },
11
+ get(modelId, modelVersion) {
12
+ return map.get(keyOf(modelId, modelVersion));
13
+ },
14
+ list() {
15
+ return [...map.values()].map((adapter) => ({
16
+ modelId: adapter.modelId,
17
+ modelVersion: adapter.modelVersion,
18
+ }));
19
+ },
20
+ knowledge(modelId, modelVersion, name) {
21
+ const adapter = map.get(keyOf(modelId, modelVersion));
22
+ if (!adapter)
23
+ return "unknown";
24
+ return capabilityKnowledge(adapter.capabilities ?? {}, name);
25
+ },
26
+ };
27
+ }
28
+ export function flowResult(knowledge) {
29
+ if (knowledge === "unknown")
30
+ return { capability: "flow", knowledge, status: "insufficient-data" };
31
+ if (knowledge === "statically-known") {
32
+ return {
33
+ capability: "flow",
34
+ knowledge,
35
+ status: "unsupported",
36
+ reason: "flow method body is not in this PR",
37
+ };
38
+ }
39
+ return { capability: "flow", knowledge: "unsupported", status: "unsupported" };
40
+ }
41
+ export function resetResult(knowledge) {
42
+ if (knowledge === "unknown")
43
+ return { capability: "reset", knowledge, status: "insufficient-data" };
44
+ if (knowledge === "statically-known") {
45
+ return {
46
+ capability: "reset",
47
+ knowledge,
48
+ status: "unsupported",
49
+ reason: "reset execution is not in this PR",
50
+ };
51
+ }
52
+ return { capability: "reset", knowledge: "unsupported", status: "unsupported" };
53
+ }
54
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/sim/analysis/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAwBhD,SAAS,KAAK,CAAC,OAAe,EAAE,YAAoB;IAClD,OAAO,GAAG,OAAO,IAAI,YAAY,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA4C,CAAC;IAChE,OAAO;QACL,QAAQ,CAAC,OAAO;YACd,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,YAAY;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI;YACF,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACzC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC,CAAC;QACN,CAAC;QACD,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI;YACnC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAC/B,OAAO,mBAAmB,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAA8B;IAKvD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACnG,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,MAAM;YAClB,SAAS;YACT,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,oCAAoC;SAC7C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,SAA8B;IAMxD,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACpG,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,OAAO;YACnB,SAAS;YACT,MAAM,EAAE,aAAa;YACrB,MAAM,EAAE,mCAAmC;SAC5C,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;AAClF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Model } from "../types";
2
+ import type { ResetAdapter } from "./resetCycle";
3
+ /**
4
+ * The executor is the only reset authority. During an interval the strategy does not see the reset action,
5
+ * so it cannot commit a reset the artifact would not count. Without an adapter, prestige actions are hidden.
6
+ */
7
+ export declare function withoutResetActions<N, U extends string, Vars>(model: Model<N, U, Vars>, adapter: ResetAdapter<N, U, Vars> | undefined): Model<N, U, Vars>;
@@ -0,0 +1,45 @@
1
+ /*
2
+ * Internal to reset analysis. Not exported from the package barrel.
3
+ */
4
+ /**
5
+ * The executor is the only reset authority. During an interval the strategy does not see the reset action,
6
+ * so it cannot commit a reset the artifact would not count. Without an adapter, prestige actions are hidden.
7
+ */
8
+ export function withoutResetActions(model, adapter) {
9
+ const actions = (actionCtx, actionState) => {
10
+ // Prestige actions are resets under any adapter. A custom adapter does not make them ordinary interval actions.
11
+ const listed = model.actions(actionCtx, actionState).filter((candidate) => candidate.kind !== "prestige");
12
+ if (!adapter)
13
+ return listed;
14
+ // Resolve the adapter's reset for this state, whatever kind the adapter declares. A prestige-declared adapter can
15
+ // still return a custom action, and the strategy must not commit it during the interval.
16
+ const reset = adapter.action(actionCtx, actionState);
17
+ if (!reset || reset.kind === "prestige")
18
+ return listed;
19
+ // A listed reset is removed by identity, so an ordinary custom action sharing its id stays available.
20
+ if (listed.includes(reset))
21
+ return listed.filter((candidate) => candidate !== reset);
22
+ return listed.filter((candidate) => !(candidate.kind === "custom" && candidate.id === reset.id));
23
+ };
24
+ return delegateModel(model, actions);
25
+ }
26
+ /**
27
+ * A plain object whose members read from, and call on, the original model. Methods keep the model as
28
+ * their receiver, so class methods that use private fields still work.
29
+ */
30
+ function delegateModel(model, actions) {
31
+ const out = {};
32
+ const seen = new Set();
33
+ for (let level = model; level && level !== Object.prototype; level = Object.getPrototypeOf(level)) {
34
+ for (const key of Reflect.ownKeys(level)) {
35
+ if (key === "constructor" || seen.has(key))
36
+ continue;
37
+ seen.add(key);
38
+ const value = Reflect.get(model, key, model);
39
+ out[key] = typeof value === "function" ? value.bind(model) : value;
40
+ }
41
+ }
42
+ out.actions = actions;
43
+ return out;
44
+ }
45
+ //# sourceMappingURL=resetActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resetActions.js","sourceRoot":"","sources":["../../../src/sim/analysis/resetActions.ts"],"names":[],"mappings":"AAGA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAwB,EACxB,OAA6C;IAE7C,MAAM,OAAO,GAAG,CAAC,SAAiC,EAAE,WAAiC,EAAE,EAAE;QACvF,gHAAgH;QAChH,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAC1G,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QAC5B,kHAAkH;QAClH,yFAAyF;QACzF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,MAAM,CAAC;QACvD,sGAAsG;QACtG,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACnG,CAAC,CAAC;IACF,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,KAAwB,EACxB,OAAqC;IAErC,MAAM,GAAG,GAAiC,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,KAAK,IAAI,KAAK,GAAkB,KAAK,EAAE,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACjH,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACrD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACtD,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1G,CAAC;IACH,CAAC;IACD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,OAAO,GAAmC,CAAC;AAC7C,CAAC"}