@dsh-enhanced/lark-channel 0.1.64 → 0.1.66

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 (155) hide show
  1. package/README.md +20 -6
  2. package/cordis.patch.yml +1 -0
  3. package/docs/operations.md +1 -1
  4. package/docs/progress-security.md +3 -0
  5. package/docs/rsi-setup.md +11 -7
  6. package/docs/setup.md +2 -1
  7. package/lib/adapter.d.ts +8 -0
  8. package/lib/adapter.d.ts.map +1 -1
  9. package/lib/adapter.js +34 -2
  10. package/lib/adapter.js.map +1 -1
  11. package/lib/config.d.ts +4 -0
  12. package/lib/config.d.ts.map +1 -1
  13. package/lib/config.js +52 -8
  14. package/lib/config.js.map +1 -1
  15. package/lib/index.d.ts +5 -0
  16. package/lib/index.d.ts.map +1 -1
  17. package/lib/index.js +24 -1
  18. package/lib/index.js.map +1 -1
  19. package/lib/progress.d.ts +11 -1
  20. package/lib/progress.d.ts.map +1 -1
  21. package/lib/progress.js +13 -1
  22. package/lib/progress.js.map +1 -1
  23. package/lib/rsi-authority-runtime.d.ts +1 -0
  24. package/lib/rsi-authority-runtime.d.ts.map +1 -1
  25. package/lib/rsi-authority-runtime.js +121 -18
  26. package/lib/rsi-authority-runtime.js.map +1 -1
  27. package/lib/rsi-bootstrap-manifest.d.ts +12 -5
  28. package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
  29. package/lib/rsi-bootstrap-manifest.js +63 -9
  30. package/lib/rsi-bootstrap-manifest.js.map +1 -1
  31. package/lib/rsi-bootstrap.js +3 -3
  32. package/lib/rsi-bootstrap.js.map +1 -1
  33. package/lib/rsi-build.d.ts +12 -0
  34. package/lib/rsi-build.d.ts.map +1 -1
  35. package/lib/rsi-build.js +55 -5
  36. package/lib/rsi-build.js.map +1 -1
  37. package/lib/rsi-creation-build.d.ts +3 -0
  38. package/lib/rsi-creation-build.d.ts.map +1 -1
  39. package/lib/rsi-creation-build.js +45 -0
  40. package/lib/rsi-creation-build.js.map +1 -1
  41. package/lib/rsi-host-update.d.ts +51 -0
  42. package/lib/rsi-host-update.d.ts.map +1 -1
  43. package/lib/rsi-host-update.js +61 -1
  44. package/lib/rsi-host-update.js.map +1 -1
  45. package/lib/rsi-install.d.ts +10 -3
  46. package/lib/rsi-install.d.ts.map +1 -1
  47. package/lib/rsi-install.js +65 -15
  48. package/lib/rsi-install.js.map +1 -1
  49. package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
  50. package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
  51. package/lib/rsi-linux-cgroup-roots.js +3 -0
  52. package/lib/rsi-linux-cgroup-roots.js.map +1 -0
  53. package/lib/rsi-linux-creation-build.d.ts +36 -0
  54. package/lib/rsi-linux-creation-build.d.ts.map +1 -0
  55. package/lib/rsi-linux-creation-build.js +213 -0
  56. package/lib/rsi-linux-creation-build.js.map +1 -0
  57. package/lib/rsi-linux-native-materialize.d.ts +31 -0
  58. package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
  59. package/lib/rsi-linux-native-materialize.js +162 -0
  60. package/lib/rsi-linux-native-materialize.js.map +1 -0
  61. package/lib/rsi-linux-native-relocation.d.ts +120 -0
  62. package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
  63. package/lib/rsi-linux-native-relocation.js +1555 -0
  64. package/lib/rsi-linux-native-relocation.js.map +1 -0
  65. package/lib/rsi-linux-native-resources.d.ts +97 -0
  66. package/lib/rsi-linux-native-resources.d.ts.map +1 -0
  67. package/lib/rsi-linux-native-resources.js +521 -0
  68. package/lib/rsi-linux-native-resources.js.map +1 -0
  69. package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
  70. package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
  71. package/lib/rsi-linux-repository-bootstrap.js +317 -0
  72. package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
  73. package/lib/rsi-linux-runner-states.d.ts +20 -0
  74. package/lib/rsi-linux-runner-states.d.ts.map +1 -0
  75. package/lib/rsi-linux-runner-states.js +70 -0
  76. package/lib/rsi-linux-runner-states.js.map +1 -0
  77. package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
  78. package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
  79. package/lib/rsi-linux-runtime-bootstrap.js +38 -0
  80. package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
  81. package/lib/rsi-linux-source-build.d.ts +28 -0
  82. package/lib/rsi-linux-source-build.d.ts.map +1 -0
  83. package/lib/rsi-linux-source-build.js +43 -0
  84. package/lib/rsi-linux-source-build.js.map +1 -0
  85. package/lib/rsi-local-install.d.ts +2 -0
  86. package/lib/rsi-local-install.d.ts.map +1 -1
  87. package/lib/rsi-local-install.js +42 -1
  88. package/lib/rsi-local-install.js.map +1 -1
  89. package/lib/rsi-local-pair-install.d.ts +15 -0
  90. package/lib/rsi-local-pair-install.d.ts.map +1 -1
  91. package/lib/rsi-local-pair-install.js +21 -6
  92. package/lib/rsi-local-pair-install.js.map +1 -1
  93. package/lib/rsi-local-resources.d.ts +2 -2
  94. package/lib/rsi-local-resources.d.ts.map +1 -1
  95. package/lib/rsi-local-resources.js +5 -0
  96. package/lib/rsi-local-resources.js.map +1 -1
  97. package/lib/rsi-local-update-build.d.ts +25 -6
  98. package/lib/rsi-local-update-build.d.ts.map +1 -1
  99. package/lib/rsi-local-update-build.js +46 -7
  100. package/lib/rsi-local-update-build.js.map +1 -1
  101. package/lib/rsi-local-update.d.ts +5 -2
  102. package/lib/rsi-local-update.d.ts.map +1 -1
  103. package/lib/rsi-local-update.js +6 -5
  104. package/lib/rsi-local-update.js.map +1 -1
  105. package/lib/rsi-plugin-creation.d.ts +16 -1
  106. package/lib/rsi-plugin-creation.d.ts.map +1 -1
  107. package/lib/rsi-plugin-creation.js +60 -14
  108. package/lib/rsi-plugin-creation.js.map +1 -1
  109. package/lib/rsi-plugin-revision.d.ts +35 -0
  110. package/lib/rsi-plugin-revision.d.ts.map +1 -0
  111. package/lib/rsi-plugin-revision.js +200 -0
  112. package/lib/rsi-plugin-revision.js.map +1 -0
  113. package/lib/rsi-profile.d.ts +8 -0
  114. package/lib/rsi-profile.d.ts.map +1 -1
  115. package/lib/rsi-profile.js +55 -2
  116. package/lib/rsi-profile.js.map +1 -1
  117. package/lib/rsi-release-build.d.ts +24 -8
  118. package/lib/rsi-release-build.d.ts.map +1 -1
  119. package/lib/rsi-release-build.js +89 -37
  120. package/lib/rsi-release-build.js.map +1 -1
  121. package/lib/rsi-scanner-retirement-config.d.ts +34 -0
  122. package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
  123. package/lib/rsi-scanner-retirement-config.js +272 -0
  124. package/lib/rsi-scanner-retirement-config.js.map +1 -0
  125. package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
  126. package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
  127. package/lib/rsi-scanner-retirement-runtime.js +98 -0
  128. package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
  129. package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
  130. package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
  131. package/lib/rsi-scanner-retirement-stage.js +183 -0
  132. package/lib/rsi-scanner-retirement-stage.js.map +1 -0
  133. package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
  134. package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
  135. package/lib/rsi-scanner-retirement-transition.js +320 -0
  136. package/lib/rsi-scanner-retirement-transition.js.map +1 -0
  137. package/lib/rsi-setup.d.ts +20 -0
  138. package/lib/rsi-setup.d.ts.map +1 -1
  139. package/lib/rsi-setup.js +102 -5
  140. package/lib/rsi-setup.js.map +1 -1
  141. package/lib/rsi-source-maintenance.d.ts +9 -1
  142. package/lib/rsi-source-maintenance.d.ts.map +1 -1
  143. package/lib/rsi-source-maintenance.js +64 -5
  144. package/lib/rsi-source-maintenance.js.map +1 -1
  145. package/lib/rsi-source-update.js +2 -2
  146. package/lib/rsi-source-update.js.map +1 -1
  147. package/lib/service.d.ts.map +1 -1
  148. package/lib/service.js +1 -0
  149. package/lib/service.js.map +1 -1
  150. package/lib/setup-profile.d.ts.map +1 -1
  151. package/lib/setup-profile.js +1 -0
  152. package/lib/setup-profile.js.map +1 -1
  153. package/lib/version.d.ts +1 -1
  154. package/lib/version.js +1 -1
  155. package/package.json +21 -21
@@ -0,0 +1,183 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isAbsolute, resolve } from 'node:path';
3
+ import { isDeepStrictEqual } from 'node:util';
4
+ import { inspectAutomationRetirementSnapshot } from '@dsh-enhanced/assistant-automations';
5
+ import { ActiveLarkOwnerBindingsSnapshotError, inspectActiveLarkOwnerBindingsLocally, inspectRevokedOwnerRouteLocally } from '@dsh-enhanced/assistant-delivery';
6
+ import { validateMemoryLearningOwner } from '@dsh-enhanced/assistant-growth-contract';
7
+ import { deriveScannerRetirementConfiguration } from './rsi-scanner-retirement-config.js';
8
+ import { applyScannerRetirementMaintenance } from './rsi-scanner-retirement-runtime.js';
9
+ import { prepareScannerRetirementOperations, verifyScannerRetirementTransition } from './rsi-scanner-retirement-transition.js';
10
+ export class ScannerRetirementStageError extends Error {
11
+ code;
12
+ constructor(code) {
13
+ super(`scanner retirement stage rejected: ${code}`);
14
+ this.code = code;
15
+ this.name = 'ScannerRetirementStageError';
16
+ }
17
+ }
18
+ function fail(code) { throw new ScannerRetirementStageError(code); }
19
+ function canonical(value) {
20
+ if (value === null || typeof value !== 'object')
21
+ return JSON.stringify(value);
22
+ if (Array.isArray(value))
23
+ return `[${value.map(canonical).join(',')}]`;
24
+ const object = value;
25
+ return `{${Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${canonical(object[key])}`).join(',')}}`;
26
+ }
27
+ const digest = (value) => createHash('sha256').update(canonical(value)).digest('hex');
28
+ const same = (a, b) => canonical(a) === canonical(b);
29
+ function freeze(value) {
30
+ if (value && typeof value === 'object' && !Object.isFrozen(value)) {
31
+ Object.values(value).forEach(freeze);
32
+ Object.freeze(value);
33
+ }
34
+ return value;
35
+ }
36
+ function sameStage(before, current) {
37
+ if (before.database.device !== current.database.device || before.database.inode !== current.database.inode)
38
+ fail('storage-drift');
39
+ }
40
+ function selectTargets(before, configured) {
41
+ return configured.filter(target => {
42
+ const record = before.records.find(row => row.id === target.automationId);
43
+ const marker = before.retirements.find(row => row.owner === target.owner && row.automationId === target.automationId);
44
+ if (record && record.owner !== target.owner)
45
+ fail('invalid-target');
46
+ // A formal marker can outlive its definition; neither case creates a row.
47
+ if (marker)
48
+ return false;
49
+ if (!record)
50
+ return false;
51
+ if (!['active', 'paused'].includes(record.status))
52
+ fail('invalid-target');
53
+ return true;
54
+ });
55
+ }
56
+ function proveActive(config, owner) {
57
+ const authority = config.ownerQuery.authority;
58
+ const active = inspectActiveLarkOwnerBindingsLocally({ databasePath: config.ownerQuery.databasePath,
59
+ account: authority.principal.account, tenant: authority.principal.tenant, workspace: authority.workspace, agentPreset: authority.agentPreset });
60
+ const matches = active.bindings.filter(binding => binding.owner.id === owner.principalRecordId
61
+ && binding.owner.version === owner.principalVersion && binding.owner.status === 'active' && binding.owner.role === 'owner'
62
+ && isDeepStrictEqual(binding.owner.principal, authority.principal) && isDeepStrictEqual(binding.principal, authority.principal)
63
+ && isDeepStrictEqual(binding.conversation, authority.conversation) && binding.workspace === authority.workspace
64
+ && binding.agentPreset === authority.agentPreset && binding.policyRef === authority.policyRef
65
+ && binding.generation >= authority.minimumGeneration);
66
+ if (matches.length !== 1)
67
+ fail('owner-unavailable');
68
+ }
69
+ function validatePlan(plan) {
70
+ try {
71
+ if (Object.keys(plan).sort().join(',') !== 'automationsDatabasePath,before,dshHome,effectiveConfigDigest,operations,owner,ownerProof,planDigest,profile,protocol,targets'
72
+ || plan.protocol !== 'lark-channel/scanner-retirement-plan/v1' || !/^[a-f0-9]{64}$/u.test(plan.effectiveConfigDigest)
73
+ || !isAbsolute(plan.automationsDatabasePath) || resolve(plan.automationsDatabasePath) !== plan.automationsDatabasePath
74
+ || plan.targets.length < 1 || plan.targets.length > 4)
75
+ fail('invalid-plan');
76
+ const { planDigest, ...unsigned } = plan;
77
+ if (digest(unsigned) !== planDigest)
78
+ fail('invalid-plan');
79
+ const owner = validateMemoryLearningOwner(plan.owner), proof = plan.ownerProof;
80
+ if (proof.frozenPrincipalVersion !== owner.principalVersion || proof.state.principalRecordId !== owner.principalRecordId
81
+ || proof.state.principalId !== owner.principalId || proof.state.authorityId !== owner.authorityId
82
+ || proof.state.authorityHash !== owner.authorityHash || proof.authority.workspace !== owner.workspace
83
+ || proof.authority.agentPreset !== owner.agentPreset)
84
+ fail('invalid-plan');
85
+ if (!same(prepareScannerRetirementOperations(plan), plan.operations))
86
+ fail('invalid-plan');
87
+ }
88
+ catch (error) {
89
+ if (error instanceof ScannerRetirementStageError)
90
+ throw error;
91
+ fail('invalid-plan');
92
+ }
93
+ }
94
+ function completion(plan, after) {
95
+ sameStage(plan.before, after);
96
+ const transition = verifyScannerRetirementTransition({ ...plan, after });
97
+ const unsigned = { protocol: 'lark-channel/scanner-retirement-completion/v1', planDigest: plan.planDigest, after, transition };
98
+ return freeze({ ...unsigned, completionDigest: digest(unsigned) });
99
+ }
100
+ /** Read-only preparation for a parent-attested, stopped stage. No Store is opened. */
101
+ export function captureScannerRetirementPlan(input) {
102
+ const { expectedStorageDigest, ...scope } = input;
103
+ const config = deriveScannerRetirementConfiguration(scope);
104
+ const before = inspectAutomationRetirementSnapshot(config.automationsDatabasePath);
105
+ if (!/^[a-f0-9]{64}$/u.test(expectedStorageDigest) || before.storageDigest !== expectedStorageDigest)
106
+ fail('storage-drift');
107
+ const noop = (reason) => freeze({ status: 'no-op', reason,
108
+ effectiveConfigDigest: config.effectiveConfigDigest, beforeSnapshotDigest: before.snapshotDigest, storageDigest: before.storageDigest });
109
+ let ownerProof;
110
+ try {
111
+ ownerProof = inspectRevokedOwnerRouteLocally(config.ownerQuery);
112
+ }
113
+ catch (error) {
114
+ if (!(error instanceof ActiveLarkOwnerBindingsSnapshotError) || error.code !== 'owner-not-revoked')
115
+ throw error;
116
+ proveActive(config, input.owner);
117
+ return noop('owner-active');
118
+ }
119
+ const targets = selectTargets(before, config.targets);
120
+ if (targets.length === 0)
121
+ return noop('no-targets');
122
+ const operations = prepareScannerRetirementOperations({ before, ownerProof, targets });
123
+ const unsigned = { protocol: 'lark-channel/scanner-retirement-plan/v1', dshHome: input.dshHome, profile: input.profile,
124
+ owner: structuredClone(input.owner), automationsDatabasePath: config.automationsDatabasePath,
125
+ effectiveConfigDigest: config.effectiveConfigDigest, before, ownerProof, targets, operations };
126
+ return freeze({ status: 'prepared', plan: { ...unsigned, planDigest: digest(unsigned) } });
127
+ }
128
+ /** Uses only the archived tuples; a partial or close failure never renews a key or grant. */
129
+ export async function applyScannerRetirementPlan(input) {
130
+ input.signal.throwIfAborted();
131
+ // Own a detached copy across every asynchronous maintenance boundary.
132
+ const plan = freeze(structuredClone(input.plan));
133
+ validatePlan(plan);
134
+ const config = deriveScannerRetirementConfiguration({ effectiveConfig: input.effectiveConfig, dshHome: plan.dshHome, profile: plan.profile, owner: plan.owner });
135
+ if (config.effectiveConfigDigest !== plan.effectiveConfigDigest || config.automationsDatabasePath !== plan.automationsDatabasePath
136
+ || !same(selectTargets(plan.before, config.targets), plan.targets)
137
+ || !same(config.ownerQuery.authority, plan.ownerProof.authority)
138
+ || config.ownerQuery.principalRecordId !== plan.ownerProof.state.principalRecordId
139
+ || config.ownerQuery.frozenPrincipalVersion !== plan.ownerProof.frozenPrincipalVersion)
140
+ fail('configuration-drift');
141
+ const ownerProof = inspectRevokedOwnerRouteLocally(config.ownerQuery);
142
+ if (ownerProof.snapshotDigest !== plan.ownerProof.snapshotDigest)
143
+ fail('owner-drift');
144
+ const current = inspectAutomationRetirementSnapshot(plan.automationsDatabasePath);
145
+ sameStage(plan.before, current);
146
+ const completed = plan.targets.filter(target => current.retirements.some(marker => marker.owner === target.owner && marker.automationId === target.automationId));
147
+ if (!same(current, plan.before))
148
+ verifyScannerRetirementTransition({ before: plan.before, after: current, ownerProof: plan.ownerProof, targets: completed });
149
+ input.signal.throwIfAborted();
150
+ if (completed.length === plan.targets.length)
151
+ return completion(plan, current);
152
+ await applyScannerRetirementMaintenance({ policyConfig: config.policyConfig, automationsConfig: config.automationsConfig,
153
+ operations: plan.operations, signal: input.signal });
154
+ input.signal.throwIfAborted();
155
+ return completion(plan, inspectAutomationRetirementSnapshot(plan.automationsDatabasePath));
156
+ }
157
+ /** Recheck permanent markers after legitimate task/history progress, using the frozen stage path. */
158
+ export function verifyScannerRetirementPersistence(input) {
159
+ const { plan, completion: receipt } = structuredClone(input);
160
+ validatePlan(plan);
161
+ const { completionDigest, ...unsigned } = receipt;
162
+ if (Object.keys(receipt).sort().join(',') !== 'after,completionDigest,planDigest,protocol,transition'
163
+ || receipt.protocol !== 'lark-channel/scanner-retirement-completion/v1' || receipt.planDigest !== plan.planDigest
164
+ || digest(unsigned) !== completionDigest || !same(completion(plan, receipt.after), receipt))
165
+ fail('invalid-plan');
166
+ const current = inspectAutomationRetirementSnapshot(plan.automationsDatabasePath);
167
+ sameStage(plan.before, current);
168
+ // A validated historical completion may remain on v16 without opening a
169
+ // writer. A v17 completion can never use that allowance to accept a downgrade.
170
+ const historicalV16 = current.schemaVersion === 16 && receipt.after.schemaVersion === 16
171
+ && (plan.before.schemaVersion === 15 || plan.before.schemaVersion === 16);
172
+ if (current.schemaVersion !== 17 && !historicalV16)
173
+ fail('persistence-drift');
174
+ for (const target of plan.targets) {
175
+ const record = receipt.after.records.find(row => row.id === target.automationId);
176
+ const marker = receipt.after.retirements.find(row => row.owner === target.owner && row.automationId === target.automationId);
177
+ if (!record || !marker || !same(record, current.records.find(row => row.id === target.automationId))
178
+ || !same(marker, current.retirements.find(row => row.owner === target.owner && row.automationId === target.automationId)))
179
+ fail('persistence-drift');
180
+ }
181
+ return current;
182
+ }
183
+ //# sourceMappingURL=rsi-scanner-retirement-stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-scanner-retirement-stage.js","sourceRoot":"","sources":["../src/rsi-scanner-retirement-stage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { AutomationRetirementReceipt, AutomationRetirementSnapshot } from '@dsh-enhanced/assistant-automations';
2
+ import type { RevokedOwnerRouteSnapshot } from '@dsh-enhanced/assistant-delivery';
3
+ declare const scannerPrefixes: {
4
+ readonly 'assistant-memory-learning': "memory-scan-";
5
+ readonly 'assistant-growth-usage': "usage-scan-";
6
+ readonly 'plugin-control-plane-task-observations': "task-observation-scan-";
7
+ readonly 'plugin-control-plane-live-qualification': "live-qualification-scan-";
8
+ };
9
+ export interface ScannerRetirementTarget {
10
+ readonly owner: keyof typeof scannerPrefixes;
11
+ readonly automationId: string;
12
+ }
13
+ export interface ScannerRetirementTransitionInput {
14
+ readonly before: AutomationRetirementSnapshot;
15
+ readonly after: AutomationRetirementSnapshot;
16
+ readonly ownerProof: RevokedOwnerRouteSnapshot;
17
+ readonly targets: readonly ScannerRetirementTarget[];
18
+ }
19
+ export type ScannerRetirementOperation = Pick<AutomationRetirementReceipt, 'owner' | 'automationId' | 'operationId' | 'definitionHash' | 'expectedVersion' | 'reason' | 'evidenceDigest'>;
20
+ export declare const scannerRetirementTransitionProtocol: "lark-channel/scanner-retirement-transition/v1";
21
+ export interface ScannerRetirementTransitionReceipt {
22
+ readonly protocol: typeof scannerRetirementTransitionProtocol;
23
+ readonly beforeSnapshotDigest: string;
24
+ readonly afterSnapshotDigest: string;
25
+ readonly ownerProofSnapshotDigest: string;
26
+ readonly targets: readonly Readonly<ScannerRetirementTarget & {
27
+ evidenceDigest: string;
28
+ markerDigest: string;
29
+ }>[];
30
+ readonly receiptDigest: string;
31
+ }
32
+ export type ScannerRetirementTransitionErrorCode = 'invalid-proof' | 'invalid-targets' | 'definitions-changed' | 'retirements-changed' | 'history-changed' | 'schema-changed';
33
+ export declare class ScannerRetirementTransitionError extends Error {
34
+ readonly code: ScannerRetirementTransitionErrorCode;
35
+ constructor(code: ScannerRetirementTransitionErrorCode);
36
+ }
37
+ /**
38
+ * Freeze the exact operations before any staged service is mounted. Inputs have
39
+ * the same trusted-reader and independently derived configuration requirements
40
+ * as transition verification. These tuples confer no permission: the writer must
41
+ * use the formal Automations service and retain them unchanged across retries.
42
+ */
43
+ export declare function prepareScannerRetirementOperations(input: Omit<ScannerRetirementTransitionInput, 'after'>): readonly ScannerRetirementOperation[];
44
+ /**
45
+ * Pure verification of a preselected retirement change; grants no write or execution permission.
46
+ * Both snapshots and ownerProof MUST come from the formal trusted local readers.
47
+ * The parent installer MUST independently derive exact targets from frozen effective
48
+ * configuration and bind that configuration, owner route and transaction to this call.
49
+ * For Memory, ownerProof.frozenPrincipalVersion MUST equal the frozen learning
50
+ * grant owner.principalVersion; its expectedOwner scope uses that grant version,
51
+ * while the observed revoked state can be at a later durable principal version.
52
+ * A matching scanner prefix does not prove that a definition belongs to that config.
53
+ * Digests are consistency checks after trusted reads, never external authenticity signatures.
54
+ */
55
+ export declare function verifyScannerRetirementTransition(input: ScannerRetirementTransitionInput): ScannerRetirementTransitionReceipt;
56
+ export {};
57
+ //# sourceMappingURL=rsi-scanner-retirement-transition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-scanner-retirement-transition.d.ts","sourceRoot":"","sources":["../src/rsi-scanner-retirement-transition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,2BAA2B,EAE3B,4BAA4B,EAC7B,MAAM,qCAAqC,CAAA;AAE5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAEjF,QAAA,MAAM,eAAe;;;;;CAKX,CAAA;AAEV,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,eAAe,CAAA;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAA;IAC5C,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAA;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAA;CACrD;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,2BAA2B,EACvE,OAAO,GAAG,cAAc,GAAG,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,QAAQ,GAAG,gBAAgB,CAAC,CAAA;AAEhH,eAAO,MAAM,mCAAmC,EAAG,+CAAwD,CAAA;AAE3G,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO,mCAAmC,CAAA;IAC7D,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACpC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAA;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,QAAQ,CAAC,uBAAuB,GAAG;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAA;IACjH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,MAAM,oCAAoC,GAAG,eAAe,GAAG,iBAAiB,GAAG,qBAAqB,GAC1G,qBAAqB,GAAG,iBAAiB,GAAG,gBAAgB,CAAA;AAEhE,qBAAa,gCAAiC,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,oCAAoC;gBAA1C,IAAI,EAAE,oCAAoC;CAIhE;AAgJD;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC,GACrD,SAAS,0BAA0B,EAAE,CAgCvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,gCAAgC,GAAG,kCAAkC,CAsE7H"}
@@ -0,0 +1,320 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { externalPrincipalId, ownerRouteAuthorityHash } from '@dsh-enhanced/assistant-delivery';
3
+ const scannerPrefixes = {
4
+ 'assistant-memory-learning': 'memory-scan-',
5
+ 'assistant-growth-usage': 'usage-scan-',
6
+ 'plugin-control-plane-task-observations': 'task-observation-scan-',
7
+ 'plugin-control-plane-live-qualification': 'live-qualification-scan-',
8
+ };
9
+ export const scannerRetirementTransitionProtocol = 'lark-channel/scanner-retirement-transition/v1';
10
+ export class ScannerRetirementTransitionError extends Error {
11
+ code;
12
+ constructor(code) {
13
+ super(`scanner retirement transition rejected: ${code}`);
14
+ this.code = code;
15
+ this.name = 'ScannerRetirementTransitionError';
16
+ }
17
+ }
18
+ const digestPattern = /^[a-f0-9]{64}$/u;
19
+ const digest = (value) => createHash('sha256').update(value).digest('hex');
20
+ const jsonDigest = (value) => digest(JSON.stringify(value));
21
+ const integer = (value, minimum = 0) => typeof value === 'number'
22
+ && Number.isSafeInteger(value) && value >= minimum;
23
+ function reject(code) { throw new ScannerRetirementTransitionError(code); }
24
+ function canonicalJson(value) {
25
+ if (value === null || typeof value !== 'object')
26
+ return JSON.stringify(value);
27
+ if (Array.isArray(value))
28
+ return `[${value.map(canonicalJson).join(',')}]`;
29
+ const object = value;
30
+ return `{${Object.keys(object).sort().map(key => `${JSON.stringify(key)}:${canonicalJson(object[key])}`).join(',')}}`;
31
+ }
32
+ function same(left, right) { return canonicalJson(left) === canonicalJson(right); }
33
+ function freeze(value) {
34
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
35
+ Object.values(value).forEach(freeze);
36
+ Object.freeze(value);
37
+ }
38
+ return value;
39
+ }
40
+ function uniqueMap(items, key, code) {
41
+ const result = new Map();
42
+ for (const item of items) {
43
+ const identity = key(item);
44
+ if (result.has(identity))
45
+ reject(code);
46
+ result.set(identity, item);
47
+ }
48
+ return result;
49
+ }
50
+ const markerKey = (marker) => JSON.stringify([marker.owner, marker.automationId]);
51
+ const schemaKey = (entry) => JSON.stringify([entry.type, entry.name]);
52
+ /** Reconstruct the exact scope insertion order passed by each production scanner runtime. */
53
+ function ownerEvidence(proof) {
54
+ if (proof.protocol !== 'assistant-delivery/revoked-owner-route-snapshot/v1'
55
+ || ![23, 24, 25, 26, 27, 28, 29, 30, 31].includes(proof.schemaVersion)
56
+ || !integer(proof.frozenPrincipalVersion, 1) || !digestPattern.test(proof.snapshotDigest))
57
+ reject('invalid-proof');
58
+ const authority = proof.authority;
59
+ const authorityHash = ownerRouteAuthorityHash(authority);
60
+ // The public hash function validates the full authority and canonicalizes it.
61
+ // Rebuild canonical field order to reject noncanonical values while accepting
62
+ // arbitrary incoming JSON key order, without importing another bundle's internals.
63
+ const conversation = authority.conversation;
64
+ const principal = authority.principal;
65
+ const orderedAuthority = {
66
+ id: authority.id,
67
+ conversation: { channel: conversation.channel, account: conversation.account, tenant: conversation.tenant,
68
+ kind: conversation.kind, chat: conversation.chat, ...(conversation.thread === undefined ? {} : { thread: conversation.thread }) },
69
+ principal: { channel: principal.channel, account: principal.account, tenant: principal.tenant, user: principal.user },
70
+ workspace: authority.workspace, agentPreset: authority.agentPreset, policyRef: authority.policyRef,
71
+ minimumGeneration: authority.minimumGeneration,
72
+ };
73
+ if (jsonDigest(orderedAuthority) !== authorityHash)
74
+ reject('invalid-proof');
75
+ const state = proof.state;
76
+ if (state.status !== 'revoked' || state.authorityId !== authority.id || state.authorityHash !== authorityHash
77
+ || state.principalId !== externalPrincipalId(principal)
78
+ || typeof state.principalRecordId !== 'string' || !/^principal_[0-9a-f-]{8,}$/u.test(state.principalRecordId)
79
+ || !integer(state.principalVersion, 1) || state.principalVersion < proof.frozenPrincipalVersion)
80
+ reject('invalid-proof');
81
+ const orderedState = { status: 'revoked', authorityId: authority.id, authorityHash,
82
+ principalId: externalPrincipalId(principal), principalRecordId: state.principalRecordId, principalVersion: state.principalVersion };
83
+ if (!same(state, orderedState))
84
+ reject('invalid-proof');
85
+ const { snapshotDigest, ...unsigned } = proof;
86
+ if (digest(canonicalJson(unsigned)) !== snapshotDigest)
87
+ reject('invalid-proof');
88
+ return owner => jsonDigest({ protocol: 'scanner-owner-revoked/v1',
89
+ scope: { authorityId: authority.id, principalId: orderedState.principalId,
90
+ workspace: authority.workspace, agentPreset: authority.agentPreset,
91
+ ...(owner === 'assistant-memory-learning' ? { expectedOwner: { authorityHash,
92
+ principalRecordId: orderedState.principalRecordId, principalVersion: proof.frozenPrincipalVersion } } : {}) },
93
+ state: orderedState });
94
+ }
95
+ function stableDefinition(record) {
96
+ const { status: _status, nextRunAt: _nextRunAt, updatedAt: _updatedAt, version: _version, ...stable } = record;
97
+ return stable;
98
+ }
99
+ /** Reproduce SQLite ADD COLUMN's insertion before the table constraints. */
100
+ function addRunQuiescenceColumnSql(sql) {
101
+ if (sql === null)
102
+ return undefined;
103
+ let depth = 0;
104
+ // Skip quoted strings/identifiers and comments when finding structural commas.
105
+ const tokens = /'(?:''|[^'])*'|"(?:""|[^"])*"|`(?:``|[^`])*`|\[[^\]]*\]|--[^\n]*|\/\*[\s\S]*?\*\/|[(),]/gu;
106
+ for (const token of sql.matchAll(tokens)) {
107
+ if (token[0] === '(')
108
+ depth++;
109
+ if (token[0] === ')') {
110
+ depth--;
111
+ if (depth === 0)
112
+ return `${sql.slice(0, token.index)}, quiescent INTEGER CHECK(quiescent IN (0, 1))${sql.slice(token.index)}`;
113
+ }
114
+ if (token[0] === ',' && depth === 1
115
+ && /^\s*(?:CHECK|CONSTRAINT|FOREIGN\s+KEY|PRIMARY\s+KEY|UNIQUE)\b/iu.test(sql.slice(token.index + 1))) {
116
+ return `${sql.slice(0, token.index)}, quiescent INTEGER CHECK(quiescent IN (0, 1))${sql.slice(token.index)}`;
117
+ }
118
+ }
119
+ return undefined;
120
+ }
121
+ function verifySchema(before, after) {
122
+ const original = uniqueMap(before.schemaEntries, schemaKey, 'schema-changed');
123
+ const current = uniqueMap(after.schemaEntries, schemaKey, 'schema-changed');
124
+ const upgradesQuiescence = before.schemaVersion < 17 && after.schemaVersion === 17;
125
+ for (const [key, entry] of original) {
126
+ const updated = current.get(key);
127
+ if (upgradesQuiescence && entry.type === 'table' && entry.name === 'automation_runs') {
128
+ // Preserve every byte of the pre-existing SQL, including table constraints.
129
+ const expectedSql = addRunQuiescenceColumnSql(entry.sql);
130
+ if (typeof expectedSql !== 'string' || expectedSql === entry.sql
131
+ || !same({ ...entry, sql: expectedSql }, updated))
132
+ reject('schema-changed');
133
+ }
134
+ else if (!same(entry, updated))
135
+ reject('schema-changed');
136
+ }
137
+ if (before.schemaVersion === after.schemaVersion) {
138
+ if (original.size !== current.size || !same(before.schemaEntries, after.schemaEntries)
139
+ || before.schemaDigest !== after.schemaDigest)
140
+ reject('schema-changed');
141
+ return;
142
+ }
143
+ // Formal readers verify the exact retirement table/trigger SQL. Preserve the
144
+ // historical seven-identity v15->v16 allowance; upgrading to v17 additionally
145
+ // permits only the exact run quiescence column and immutable trigger.
146
+ const additions = before.schemaVersion === 15 ? [
147
+ { type: 'table', name: 'automation_system_retirements', table: 'automation_system_retirements', sql: '' },
148
+ { type: 'index', name: 'sqlite_autoindex_automation_system_retirements_1', table: 'automation_system_retirements', sql: null },
149
+ { type: 'index', name: 'sqlite_autoindex_automation_system_retirements_2', table: 'automation_system_retirements', sql: null },
150
+ { type: 'trigger', name: 'automation_retirements_no_update', table: 'automation_system_retirements', sql: '' },
151
+ { type: 'trigger', name: 'automation_retirements_no_delete', table: 'automation_system_retirements', sql: '' },
152
+ { type: 'trigger', name: 'automation_retired_no_activate_insert', table: 'automation_definitions', sql: '' },
153
+ { type: 'trigger', name: 'automation_retired_no_activate_update', table: 'automation_definitions', sql: '' },
154
+ ] : [];
155
+ if (upgradesQuiescence)
156
+ additions.push({ type: 'trigger', name: 'automation_run_quiescence_immutable',
157
+ table: 'automation_runs', sql: `CREATE TRIGGER automation_run_quiescence_immutable\n BEFORE UPDATE OF quiescent ON automation_runs WHEN NEW.quiescent IS NOT OLD.quiescent\n BEGIN SELECT RAISE(ABORT, 'run quiescence observation is immutable'); END` });
158
+ const allowed = new Map(additions.map(entry => [schemaKey(entry), entry]));
159
+ if (current.size !== original.size + allowed.size)
160
+ reject('schema-changed');
161
+ for (const [key, entry] of current) {
162
+ if (original.has(key))
163
+ continue;
164
+ const expected = allowed.get(key);
165
+ if (expected === undefined || entry.table !== expected.table
166
+ || (entry.name === 'automation_run_quiescence_immutable' && entry.sql !== expected.sql)
167
+ || (expected.sql === null ? entry.sql !== null : typeof entry.sql !== 'string' || entry.sql.length === 0))
168
+ reject('schema-changed');
169
+ allowed.delete(key);
170
+ }
171
+ if (allowed.size !== 0)
172
+ reject('schema-changed');
173
+ }
174
+ /**
175
+ * Freeze the exact operations before any staged service is mounted. Inputs have
176
+ * the same trusted-reader and independently derived configuration requirements
177
+ * as transition verification. These tuples confer no permission: the writer must
178
+ * use the formal Automations service and retain them unchanged across retries.
179
+ */
180
+ export function prepareScannerRetirementOperations(input) {
181
+ try {
182
+ const { before, ownerProof } = input;
183
+ if (before.protocol !== 'assistant-automations/retirement-snapshot/v1'
184
+ || ![15, 16, 17].includes(before.schemaVersion) || before.inFlightCount !== 0
185
+ || !digestPattern.test(before.snapshotDigest))
186
+ reject('invalid-proof');
187
+ const evidenceForOwner = ownerEvidence(ownerProof);
188
+ if (!Array.isArray(input.targets) || input.targets.length > 4)
189
+ reject('invalid-targets');
190
+ const originals = uniqueMap(before.records, record => record.id, 'definitions-changed');
191
+ const oldMarkers = uniqueMap(before.retirements, markerKey, 'retirements-changed');
192
+ if (before.schemaVersion === 15 && oldMarkers.size !== 0)
193
+ reject('retirements-changed');
194
+ const owners = new Set();
195
+ return freeze(input.targets.map((inputTarget) => {
196
+ const target = { owner: inputTarget.owner, automationId: inputTarget.automationId };
197
+ const prefix = Object.hasOwn(scannerPrefixes, target.owner) ? scannerPrefixes[target.owner] : undefined;
198
+ if (!same(target, inputTarget) || prefix === undefined || typeof target.automationId !== 'string'
199
+ || !new RegExp(`^${prefix}[a-f0-9]{64}$`, 'u').test(target.automationId) || owners.has(target.owner))
200
+ reject('invalid-targets');
201
+ owners.add(target.owner);
202
+ const record = originals.get(target.automationId);
203
+ if (record === undefined || record.owner !== target.owner || record.runningTaskCount !== 0
204
+ || !['active', 'paused'].includes(record.status) || !integer(record.version, 1)
205
+ || !digestPattern.test(record.definitionHash))
206
+ reject('definitions-changed');
207
+ if (oldMarkers.has(markerKey(target)))
208
+ reject('retirements-changed');
209
+ const evidenceDigest = evidenceForOwner(target.owner);
210
+ return { ...target, definitionHash: record.definitionHash, expectedVersion: record.version,
211
+ operationId: `owner-revoked:${jsonDigest([target.owner, target.automationId, record.definitionHash, record.version, evidenceDigest])}`,
212
+ reason: 'owner-revoked', evidenceDigest };
213
+ }));
214
+ }
215
+ catch (error) {
216
+ if (error instanceof ScannerRetirementTransitionError)
217
+ throw error;
218
+ return reject('invalid-proof');
219
+ }
220
+ }
221
+ /**
222
+ * Pure verification of a preselected retirement change; grants no write or execution permission.
223
+ * Both snapshots and ownerProof MUST come from the formal trusted local readers.
224
+ * The parent installer MUST independently derive exact targets from frozen effective
225
+ * configuration and bind that configuration, owner route and transaction to this call.
226
+ * For Memory, ownerProof.frozenPrincipalVersion MUST equal the frozen learning
227
+ * grant owner.principalVersion; its expectedOwner scope uses that grant version,
228
+ * while the observed revoked state can be at a later durable principal version.
229
+ * A matching scanner prefix does not prove that a definition belongs to that config.
230
+ * Digests are consistency checks after trusted reads, never external authenticity signatures.
231
+ */
232
+ export function verifyScannerRetirementTransition(input) {
233
+ try {
234
+ const { before, after, ownerProof } = input;
235
+ if (before.protocol !== 'assistant-automations/retirement-snapshot/v1' || after.protocol !== before.protocol
236
+ || ![15, 16, 17].includes(before.schemaVersion) || ![16, 17].includes(after.schemaVersion)
237
+ || after.schemaVersion < before.schemaVersion
238
+ || before.inFlightCount !== 0 || after.inFlightCount !== 0
239
+ || !digestPattern.test(before.snapshotDigest) || !digestPattern.test(after.snapshotDigest))
240
+ reject('invalid-proof');
241
+ const operations = prepareScannerRetirementOperations(input);
242
+ const targets = input.targets.map(target => ({ owner: target.owner, automationId: target.automationId }));
243
+ const selected = uniqueMap(targets, target => target.automationId, 'invalid-targets');
244
+ const originals = uniqueMap(before.records, record => record.id, 'definitions-changed');
245
+ const current = uniqueMap(after.records, record => record.id, 'definitions-changed');
246
+ if (originals.size !== current.size)
247
+ reject('definitions-changed');
248
+ for (const [id, record] of originals) {
249
+ const updated = current.get(id);
250
+ if (updated === undefined || record.runningTaskCount !== 0 || updated.runningTaskCount !== 0
251
+ || record.immutableDigest !== updated.immutableDigest)
252
+ reject('definitions-changed');
253
+ if (!selected.has(id) && !same(record, updated))
254
+ reject('definitions-changed');
255
+ }
256
+ const oldMarkers = uniqueMap(before.retirements, markerKey, 'retirements-changed');
257
+ const newMarkers = uniqueMap(after.retirements, markerKey, 'retirements-changed');
258
+ uniqueMap(after.retirements, marker => marker.operationId, 'retirements-changed');
259
+ if ((before.schemaVersion === 15 && oldMarkers.size !== 0)
260
+ || newMarkers.size !== oldMarkers.size + targets.length)
261
+ reject('retirements-changed');
262
+ for (const [key, marker] of oldMarkers)
263
+ if (!same(marker, newMarkers.get(key)))
264
+ reject('retirements-changed');
265
+ const receipts = targets.map((target, index) => {
266
+ const operation = operations[index];
267
+ const { evidenceDigest } = operation;
268
+ const record = originals.get(target.automationId);
269
+ const updated = current.get(target.automationId);
270
+ if (record === undefined || updated === undefined || record.owner !== target.owner
271
+ || (record.status !== 'active' && record.status !== 'paused') || record.runningTaskCount !== 0
272
+ || updated.runningTaskCount !== 0 || !integer(record.version, 1) || !integer(updated.version, 2)
273
+ || updated.version !== record.version + 1 || updated.status !== 'paused' || Object.hasOwn(updated, 'nextRunAt')
274
+ || !same(stableDefinition(record), stableDefinition(updated)))
275
+ reject('definitions-changed');
276
+ const key = markerKey(target);
277
+ const marker = newMarkers.get(key);
278
+ if (oldMarkers.has(key) || marker === undefined || !integer(marker.retiredAt)
279
+ || updated.updatedAt !== marker.retiredAt)
280
+ reject('retirements-changed');
281
+ const expected = {
282
+ ...operation, definitionVersion: updated.version, automationStatus: 'paused', retiredAt: marker.retiredAt,
283
+ };
284
+ if (!same(marker, expected))
285
+ reject('retirements-changed');
286
+ return { ...target, evidenceDigest, markerDigest: digest(canonicalJson(expected)) };
287
+ });
288
+ const history = uniqueMap(before.historyTables, table => table.name, 'history-changed');
289
+ const updatedHistory = uniqueMap(after.historyTables, table => table.name, 'history-changed');
290
+ if (history.size !== updatedHistory.size)
291
+ reject('history-changed');
292
+ for (const [index, table] of before.historyTables.entries()) {
293
+ const updated = updatedHistory.get(table.name);
294
+ if (after.historyTables[index]?.name !== table.name)
295
+ reject('history-changed');
296
+ if (before.schemaVersion < 17 && after.schemaVersion === 17 && table.name === 'automation_runs') {
297
+ // Only the trusted reader can compute this old-column projection. The
298
+ // new nullable column must carry no retrospectively signed observations.
299
+ if (!updated || updated.rowCount !== table.rowCount || updated.legacyDigest !== table.digest
300
+ || updated.nonNullQuiescentCount !== 0
301
+ || Object.keys(table).sort().join(',') !== 'digest,name,rowCount'
302
+ || Object.keys(updated).sort().join(',') !== 'digest,legacyDigest,name,nonNullQuiescentCount,rowCount')
303
+ reject('history-changed');
304
+ }
305
+ else if (!same(table, updated))
306
+ reject('history-changed');
307
+ }
308
+ verifySchema(before, after);
309
+ receipts.sort((left, right) => left.owner < right.owner ? -1 : left.owner > right.owner ? 1 : 0);
310
+ const unsigned = { protocol: scannerRetirementTransitionProtocol, beforeSnapshotDigest: before.snapshotDigest,
311
+ afterSnapshotDigest: after.snapshotDigest, ownerProofSnapshotDigest: ownerProof.snapshotDigest, targets: receipts };
312
+ return freeze({ ...unsigned, receiptDigest: digest(canonicalJson(unsigned)) });
313
+ }
314
+ catch (error) {
315
+ if (error instanceof ScannerRetirementTransitionError)
316
+ throw error;
317
+ return reject('invalid-proof');
318
+ }
319
+ }
320
+ //# sourceMappingURL=rsi-scanner-retirement-transition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsi-scanner-retirement-transition.js","sourceRoot":"","sources":["../src/rsi-scanner-retirement-transition.ts"],"names":[],"mappings":"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"}