@plurnk/plurnk-service 2.0.0 → 3.0.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 (251) hide show
  1. package/.env.defaults +11 -15
  2. package/INSTALL.md +3 -2
  3. package/README.md +1 -2
  4. package/SPEC.md +329 -320
  5. package/dist/build-info.json +1 -1
  6. package/dist/content/edit-receipt.d.ts +1 -1
  7. package/dist/content/edit-receipt.d.ts.map +1 -1
  8. package/dist/content/edit-receipt.js +1 -1
  9. package/dist/content/edit-receipt.js.map +1 -1
  10. package/dist/content/read-projector.d.ts.map +1 -1
  11. package/dist/content/read-projector.js +3 -12
  12. package/dist/content/read-projector.js.map +1 -1
  13. package/dist/core/AdministrativeLoop.d.ts +1 -1
  14. package/dist/core/AdministrativeLoop.d.ts.map +1 -1
  15. package/dist/core/AdministrativeLoop.js +2 -6
  16. package/dist/core/AdministrativeLoop.js.map +1 -1
  17. package/dist/core/BudgetReadout.d.ts +1 -0
  18. package/dist/core/BudgetReadout.d.ts.map +1 -1
  19. package/dist/core/BudgetReadout.js +12 -0
  20. package/dist/core/BudgetReadout.js.map +1 -1
  21. package/dist/core/CapabilityPolicies.d.ts +2 -4
  22. package/dist/core/CapabilityPolicies.d.ts.map +1 -1
  23. package/dist/core/CapabilityPolicies.js +3 -23
  24. package/dist/core/CapabilityPolicies.js.map +1 -1
  25. package/dist/core/CapabilityResolver.d.ts +9 -2
  26. package/dist/core/CapabilityResolver.d.ts.map +1 -1
  27. package/dist/core/CapabilityResolver.js +34 -5
  28. package/dist/core/CapabilityResolver.js.map +1 -1
  29. package/dist/core/ChannelWrite.d.ts +0 -2
  30. package/dist/core/ChannelWrite.d.ts.map +1 -1
  31. package/dist/core/ChannelWrite.js.map +1 -1
  32. package/dist/core/ClientInteractions.d.ts +3 -2
  33. package/dist/core/ClientInteractions.d.ts.map +1 -1
  34. package/dist/core/ClientInteractions.js +21 -12
  35. package/dist/core/ClientInteractions.js.map +1 -1
  36. package/dist/core/ClientInteractions.sql +8 -2
  37. package/dist/core/CoreSchemeServices.d.ts +1 -0
  38. package/dist/core/CoreSchemeServices.d.ts.map +1 -1
  39. package/dist/core/CoreSchemeServices.js +1 -0
  40. package/dist/core/CoreSchemeServices.js.map +1 -1
  41. package/dist/core/DataStatementRunner.js +1 -1
  42. package/dist/core/DataStatementRunner.js.map +1 -1
  43. package/dist/core/Dispatcher.d.ts +1 -0
  44. package/dist/core/Dispatcher.d.ts.map +1 -1
  45. package/dist/core/Dispatcher.js +12 -13
  46. package/dist/core/Dispatcher.js.map +1 -1
  47. package/dist/core/Engine.d.ts +1 -1
  48. package/dist/core/Engine.d.ts.map +1 -1
  49. package/dist/core/Engine.js +3 -2
  50. package/dist/core/Engine.js.map +1 -1
  51. package/dist/core/EnvFlags.d.ts.map +1 -1
  52. package/dist/core/EnvFlags.js +4 -3
  53. package/dist/core/EnvFlags.js.map +1 -1
  54. package/dist/core/FabricatedLog.js +1 -1
  55. package/dist/core/FabricatedLog.js.map +1 -1
  56. package/dist/core/HostPaths.d.ts +0 -1
  57. package/dist/core/HostPaths.d.ts.map +1 -1
  58. package/dist/core/HostPaths.js +0 -2
  59. package/dist/core/HostPaths.js.map +1 -1
  60. package/dist/core/KillHandler.js +1 -1
  61. package/dist/core/KillHandler.js.map +1 -1
  62. package/dist/core/LogVisibility.d.ts.map +1 -1
  63. package/dist/core/LogVisibility.js +8 -17
  64. package/dist/core/LogVisibility.js.map +1 -1
  65. package/dist/core/LoopDriver.d.ts.map +1 -1
  66. package/dist/core/LoopDriver.js +4 -6
  67. package/dist/core/LoopDriver.js.map +1 -1
  68. package/dist/core/LoopLifecycle.d.ts.map +1 -1
  69. package/dist/core/LoopLifecycle.js +4 -9
  70. package/dist/core/LoopLifecycle.js.map +1 -1
  71. package/dist/core/LoopLifecycle.sql +6 -6
  72. package/dist/core/OperatorConfig.d.ts +1 -0
  73. package/dist/core/OperatorConfig.d.ts.map +1 -1
  74. package/dist/core/OperatorConfig.js +10 -2
  75. package/dist/core/OperatorConfig.js.map +1 -1
  76. package/dist/core/PacketBuilder.d.ts +5 -7
  77. package/dist/core/PacketBuilder.d.ts.map +1 -1
  78. package/dist/core/PacketBuilder.js +48 -118
  79. package/dist/core/PacketBuilder.js.map +1 -1
  80. package/dist/core/PacketBuilder.sql +15 -0
  81. package/dist/core/ProposalLifecycle.d.ts +1 -1
  82. package/dist/core/ProposalLifecycle.d.ts.map +1 -1
  83. package/dist/core/ProposalLifecycle.js +18 -20
  84. package/dist/core/ProposalLifecycle.js.map +1 -1
  85. package/dist/core/ProposalPolicies.d.ts +6 -0
  86. package/dist/core/ProposalPolicies.d.ts.map +1 -0
  87. package/dist/core/ProposalPolicies.js +28 -0
  88. package/dist/core/ProposalPolicies.js.map +1 -0
  89. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  90. package/dist/core/ProviderInstantiate.js +3 -4
  91. package/dist/core/ProviderInstantiate.js.map +1 -1
  92. package/dist/core/ResourceSelector.js +2 -2
  93. package/dist/core/ResourceSelector.js.map +1 -1
  94. package/dist/core/ResourceTransfers.js +3 -3
  95. package/dist/core/ResourceTransfers.js.map +1 -1
  96. package/dist/core/RuntimeWorker.sql +1 -2
  97. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  98. package/dist/core/SchemeRegistry.js +4 -5
  99. package/dist/core/SchemeRegistry.js.map +1 -1
  100. package/dist/core/ToolInputSchema.d.ts +1 -0
  101. package/dist/core/ToolInputSchema.d.ts.map +1 -1
  102. package/dist/core/ToolInputSchema.js +8 -2
  103. package/dist/core/ToolInputSchema.js.map +1 -1
  104. package/dist/core/ToolResources.d.ts +1 -0
  105. package/dist/core/ToolResources.d.ts.map +1 -1
  106. package/dist/core/ToolResources.js +7 -1
  107. package/dist/core/ToolResources.js.map +1 -1
  108. package/dist/core/TurnDispositionHandler.d.ts.map +1 -1
  109. package/dist/core/TurnDispositionHandler.js +1 -7
  110. package/dist/core/TurnDispositionHandler.js.map +1 -1
  111. package/dist/core/TurnMaterialization.js +1 -1
  112. package/dist/core/TurnMaterialization.js.map +1 -1
  113. package/dist/core/TurnRunner.d.ts.map +1 -1
  114. package/dist/core/TurnRunner.js +74 -57
  115. package/dist/core/TurnRunner.js.map +1 -1
  116. package/dist/core/WorkerControlHandler.d.ts.map +1 -1
  117. package/dist/core/WorkerControlHandler.js +1 -8
  118. package/dist/core/WorkerControlHandler.js.map +1 -1
  119. package/dist/core/WorkerName.d.ts +1 -0
  120. package/dist/core/WorkerName.d.ts.map +1 -1
  121. package/dist/core/WorkerName.js +2 -0
  122. package/dist/core/WorkerName.js.map +1 -1
  123. package/dist/core/WorkerName.sql +2 -2
  124. package/dist/core/WorkerOwners.d.ts +13 -0
  125. package/dist/core/WorkerOwners.d.ts.map +1 -0
  126. package/dist/core/WorkerOwners.js +44 -0
  127. package/dist/core/WorkerOwners.js.map +1 -0
  128. package/dist/core/WorkerOwners.sql +55 -0
  129. package/dist/core/env-catalog.d.ts +3 -0
  130. package/dist/core/env-catalog.d.ts.map +1 -1
  131. package/dist/core/env-catalog.js +44 -9
  132. package/dist/core/env-catalog.js.map +1 -1
  133. package/dist/core/fork.sql +3 -4
  134. package/dist/core/packet-inject.js +0 -2
  135. package/dist/core/packet-inject.js.map +1 -1
  136. package/dist/core/packet-wire.d.ts +2 -10
  137. package/dist/core/packet-wire.d.ts.map +1 -1
  138. package/dist/core/packet-wire.js +31 -114
  139. package/dist/core/packet-wire.js.map +1 -1
  140. package/dist/core/plurnk-uri.d.ts +1 -1
  141. package/dist/core/plurnk-uri.d.ts.map +1 -1
  142. package/dist/core/plurnk-uri.js +4 -4
  143. package/dist/core/plurnk-uri.js.map +1 -1
  144. package/dist/core/scheme-types.d.ts +2 -1
  145. package/dist/core/scheme-types.d.ts.map +1 -1
  146. package/dist/core/types.d.ts +0 -1
  147. package/dist/core/types.d.ts.map +1 -1
  148. package/dist/core/unregistered-scheme.d.ts +1 -3
  149. package/dist/core/unregistered-scheme.d.ts.map +1 -1
  150. package/dist/core/unregistered-scheme.js +3 -11
  151. package/dist/core/unregistered-scheme.js.map +1 -1
  152. package/dist/evidence/EvidenceReader.d.ts.map +1 -1
  153. package/dist/evidence/EvidenceReader.js +4 -1
  154. package/dist/evidence/EvidenceReader.js.map +1 -1
  155. package/dist/evidence/digest.sql +1 -2
  156. package/dist/schemes/EffectPolicy.d.ts.map +1 -1
  157. package/dist/schemes/EffectPolicy.js +1 -10
  158. package/dist/schemes/EffectPolicy.js.map +1 -1
  159. package/dist/schemes/Exec.d.ts.map +1 -1
  160. package/dist/schemes/Exec.js +16 -23
  161. package/dist/schemes/Exec.js.map +1 -1
  162. package/dist/schemes/File.d.ts.map +1 -1
  163. package/dist/schemes/File.js +10 -16
  164. package/dist/schemes/File.js.map +1 -1
  165. package/dist/schemes/QuestionTool.d.ts.map +1 -1
  166. package/dist/schemes/QuestionTool.js +1 -3
  167. package/dist/schemes/QuestionTool.js.map +1 -1
  168. package/dist/schemes/Worker.d.ts.map +1 -1
  169. package/dist/schemes/Worker.js +6 -8
  170. package/dist/schemes/Worker.js.map +1 -1
  171. package/dist/schemes/_entry-fts.d.ts.map +1 -1
  172. package/dist/schemes/_entry-fts.js +3 -9
  173. package/dist/schemes/_entry-fts.js.map +1 -1
  174. package/dist/schemes/_entry-ops.js +1 -1
  175. package/dist/schemes/_entry-ops.js.map +1 -1
  176. package/dist/server/ConfigurationDiagnostics.d.ts +1 -0
  177. package/dist/server/ConfigurationDiagnostics.d.ts.map +1 -1
  178. package/dist/server/ConfigurationDiagnostics.js +9 -0
  179. package/dist/server/ConfigurationDiagnostics.js.map +1 -1
  180. package/dist/server/Daemon.d.ts +12 -8
  181. package/dist/server/Daemon.d.ts.map +1 -1
  182. package/dist/server/Daemon.js +51 -52
  183. package/dist/server/Daemon.js.map +1 -1
  184. package/dist/server/DrainSupervisor.d.ts +1 -4
  185. package/dist/server/DrainSupervisor.d.ts.map +1 -1
  186. package/dist/server/DrainSupervisor.js +1 -11
  187. package/dist/server/DrainSupervisor.js.map +1 -1
  188. package/dist/server/EnvFunctionality.d.ts +2 -4
  189. package/dist/server/EnvFunctionality.d.ts.map +1 -1
  190. package/dist/server/EnvFunctionality.js +3 -5
  191. package/dist/server/EnvFunctionality.js.map +1 -1
  192. package/dist/server/Functionality.d.ts.map +1 -1
  193. package/dist/server/Functionality.js +42 -13
  194. package/dist/server/Functionality.js.map +1 -1
  195. package/dist/server/FunctionalityManager.d.ts +3 -4
  196. package/dist/server/FunctionalityManager.d.ts.map +1 -1
  197. package/dist/server/FunctionalityManager.js +17 -9
  198. package/dist/server/FunctionalityManager.js.map +1 -1
  199. package/dist/server/HttpListener.d.ts.map +1 -1
  200. package/dist/server/HttpListener.js +9 -3
  201. package/dist/server/HttpListener.js.map +1 -1
  202. package/dist/server/MembersFunctionality.d.ts +2 -5
  203. package/dist/server/MembersFunctionality.d.ts.map +1 -1
  204. package/dist/server/MembersFunctionality.js +5 -3
  205. package/dist/server/MembersFunctionality.js.map +1 -1
  206. package/dist/server/WorkspaceStorage.d.ts +0 -1
  207. package/dist/server/WorkspaceStorage.d.ts.map +1 -1
  208. package/dist/server/WorkspaceStorage.js +1 -24
  209. package/dist/server/WorkspaceStorage.js.map +1 -1
  210. package/dist/server/client-input.d.ts +1 -2
  211. package/dist/server/client-input.d.ts.map +1 -1
  212. package/dist/server/client-input.js +2 -13
  213. package/dist/server/client-input.js.map +1 -1
  214. package/dist/server/dispatch-as-plurnk.js +1 -1
  215. package/dist/server/dispatch-as-plurnk.js.map +1 -1
  216. package/dist/server/drain.sql +6 -6
  217. package/dist/server/envelope.d.ts +2 -1
  218. package/dist/server/envelope.d.ts.map +1 -1
  219. package/dist/server/envelope.js +7 -17
  220. package/dist/server/envelope.js.map +1 -1
  221. package/dist/server/envelope.sql +5 -5
  222. package/dist/server/seam-proposal-list.sql +6 -4
  223. package/dist/server/workspace-storage.sql +0 -5
  224. package/dist/service.d.ts.map +1 -1
  225. package/dist/service.js +23 -33
  226. package/dist/service.js.map +1 -1
  227. package/migrations/003_loops.sql +2 -2
  228. package/migrations/006_log.sql +1 -1
  229. package/migrations/016_selection_statements.sql +1 -0
  230. package/migrations/017_skills_module.sql +1 -0
  231. package/migrations/018_worker_owners.sql +102 -0
  232. package/migrations/019_interactive_owners.sql +6 -0
  233. package/migrations/020_log_projection.sql +143 -0
  234. package/package.json +37 -41
  235. package/dist/core/LegacyHome.d.ts +0 -10
  236. package/dist/core/LegacyHome.d.ts.map +0 -1
  237. package/dist/core/LegacyHome.js +0 -170
  238. package/dist/core/LegacyHome.js.map +0 -1
  239. package/dist/core/LoopPolicies.d.ts +0 -7
  240. package/dist/core/LoopPolicies.d.ts.map +0 -1
  241. package/dist/core/LoopPolicies.js +0 -42
  242. package/dist/core/LoopPolicies.js.map +0 -1
  243. package/dist/core/LoopPolicyReader.d.ts +0 -7
  244. package/dist/core/LoopPolicyReader.d.ts.map +0 -1
  245. package/dist/core/LoopPolicyReader.js +0 -33
  246. package/dist/core/LoopPolicyReader.js.map +0 -1
  247. package/dist/core/LoopPolicyReader.sql +0 -6
  248. package/dist/index.d.ts +0 -14
  249. package/dist/index.d.ts.map +0 -1
  250. package/dist/index.js +0 -21
  251. package/dist/index.js.map +0 -1
@@ -4,7 +4,7 @@
4
4
  -- an edit here.
5
5
 
6
6
  -- loops
7
- -- policy: immutable per-loop proposal disposition ({§loop-policy-effective-read}).
7
+ -- policy: immutable per-loop proposal disposition.
8
8
  CREATE TABLE IF NOT EXISTS loops (
9
9
  id INTEGER NOT NULL PRIMARY KEY,
10
10
  version INTEGER NOT NULL DEFAULT 0 CHECK (version >= 0),
@@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS loops (
16
16
  -- NULL means the owning worker itself. Denormalized headline of the loop's
17
17
  -- first message ({§message-arrival}); the inbox row below is the one published.
18
18
  prompt_source TEXT CHECK (prompt_source IS NULL OR length(prompt_source) > 0),
19
- -- {§loop-policy-composition}: every insert states the complete policy; a column default would
19
+ -- Every insert states the complete policy; a column default would
20
20
  -- be a second home for a choice the panel owns. Likewise max_turns below.
21
21
  policy TEXT NOT NULL CHECK (json_valid(policy)),
22
22
  -- {§worker-model-selection}: immutable loop snapshots of the resolved model route and the
@@ -212,7 +212,7 @@ CREATE TABLE IF NOT EXISTS log_entry_projections (
212
212
  -- {§db-fk-indexes} Opening a turn checks admissions that cite a turn; without this every projection row is read.
213
213
  CREATE INDEX IF NOT EXISTS log_entry_projections_output_admission_turn ON log_entry_projections (output_admission_turn_id) WHERE output_admission_turn_id IS NOT NULL;
214
214
 
215
- -- {§context-output-selection} Admission is a durable projection decision, not
215
+ -- Admission is a durable projection decision, not
216
216
  -- deletion or proof of provider delivery. It cannot be reset to replay output.
217
217
  CREATE TRIGGER IF NOT EXISTS log_output_admission_immutable
218
218
  BEFORE UPDATE OF output_admission_turn_id, output_withheld ON log_entry_projections
@@ -1,4 +1,5 @@
1
1
  -- MIGRATE: 16 selection_statements
2
+ -- Released in 2.0.0 and frozen ({§db-migrations}): a shape change is the next MIGRATE version, never an edit here.
2
3
  -- {§target-group} {§db-migrations}: normalize derived ASTs, never original emissions or reasoning.
3
4
  -- Historical group members determined dispatch; duplicated top-level fields did not override them.
4
5
  UPDATE turns
@@ -1,4 +1,5 @@
1
1
  -- MIGRATE: 17 skills module
2
+ -- Released in 2.0.0 and frozen ({§db-migrations}): a shape change is the next MIGRATE version, never an edit here.
2
3
  -- {§skills-module} — rename ownership; definitions and enabledness remain exact.
3
4
  UPDATE workspace_module_state
4
5
  SET namespace_owner = '@plurnk/plurnk-skills'
@@ -0,0 +1,102 @@
1
+ -- MIGRATE: 18 worker owners
2
+ -- {§worker-owner-creation} Ownership is durable; incoming messages confer no authority.
3
+
4
+ CREATE TABLE worker_owners (
5
+ workspace_id INTEGER NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
6
+ address TEXT NOT NULL CHECK (length(address) > 0),
7
+ tools TEXT NOT NULL CHECK (json_valid(tools) AND json_type(tools) = 'array'),
8
+ PRIMARY KEY (workspace_id, address),
9
+ CHECK (address != '_plurnk' OR tools = '[]')
10
+ ) STRICT;
11
+
12
+ INSERT INTO worker_owners (workspace_id, address, tools)
13
+ SELECT id, '_plurnk', '[]' FROM workspaces;
14
+
15
+ ALTER TABLE workers ADD COLUMN owner TEXT NOT NULL DEFAULT '_plurnk' CHECK (length(owner) > 0);
16
+
17
+ -- SQLite cannot add a composite foreign key to an existing table. These guards enforce
18
+ -- the same workspace/address reference without rebuilding workers and their descendants.
19
+ CREATE TRIGGER worker_owner_insert
20
+ BEFORE INSERT ON workers
21
+ WHEN EXISTS (SELECT 1 FROM workspaces WHERE id = NEW.workspace_id) AND NOT EXISTS (
22
+ SELECT 1 FROM worker_owners WHERE workspace_id = NEW.workspace_id AND address = NEW.owner
23
+ )
24
+ OR (NEW.origin = '_plurnk' AND NEW.owner != '_plurnk')
25
+ OR (NEW.parent_worker_id IS NOT NULL AND EXISTS (
26
+ SELECT 1 FROM workers WHERE id = NEW.parent_worker_id AND workspace_id != NEW.workspace_id
27
+ ))
28
+ BEGIN
29
+ SELECT RAISE(ABORT, 'worker owner or parent does not belong to its workspace');
30
+ END;
31
+
32
+ CREATE TRIGGER worker_owner_update
33
+ BEFORE UPDATE OF owner, workspace_id ON workers
34
+ WHEN NOT EXISTS (
35
+ SELECT 1 FROM worker_owners WHERE workspace_id = NEW.workspace_id AND address = NEW.owner
36
+ )
37
+ OR (NEW.origin = '_plurnk' AND NEW.owner != '_plurnk')
38
+ BEGIN
39
+ SELECT RAISE(ABORT, 'worker owner does not belong to its workspace');
40
+ END;
41
+
42
+ CREATE TRIGGER worker_owner_identity
43
+ BEFORE UPDATE OF workspace_id, address ON worker_owners
44
+ BEGIN
45
+ SELECT RAISE(ABORT, 'worker owner identity is immutable');
46
+ END;
47
+
48
+ CREATE TRIGGER worker_owner_referenced
49
+ BEFORE DELETE ON worker_owners
50
+ WHEN EXISTS (SELECT 1 FROM workspaces WHERE id = OLD.workspace_id)
51
+ AND EXISTS (SELECT 1 FROM workers WHERE workspace_id = OLD.workspace_id AND owner = OLD.address)
52
+ BEGIN
53
+ SELECT RAISE(ABORT, 'worker owner is still referenced');
54
+ END;
55
+
56
+ CREATE INDEX workers_owner ON workers (workspace_id, owner);
57
+
58
+ -- {§a2a-worker-ownership} Released A2A contexts were roots. Retained causal
59
+ -- message identities distinguish them from ordinary model conversations.
60
+ CREATE TEMP TABLE a2a_context_parents AS
61
+ SELECT DISTINCT context.id, context.workspace_id
62
+ FROM workers context
63
+ JOIN workers task ON task.parent_worker_id = context.id
64
+ JOIN loops l ON l.worker_id = task.id
65
+ WHERE context.origin = 'model' AND context.parent_worker_id IS NULL
66
+ AND context.default_conversation = 0 AND task.origin = 'model'
67
+ AND l.prompt_source GLOB 'a2a://*'
68
+ AND instr(l.prompt_source, '/contexts/' || context.name || '/tasks/' || task.name || '/messages/') > 0
69
+ AND substr(l.prompt_source, -1) != '/';
70
+
71
+ INSERT INTO workers (workspace_id, name, origin)
72
+ SELECT DISTINCT context.workspace_id, '_plurnk', '_plurnk'
73
+ FROM a2a_context_parents context
74
+ WHERE NOT EXISTS (SELECT 1 FROM workers runtime WHERE runtime.workspace_id = context.workspace_id AND runtime.origin = '_plurnk');
75
+
76
+ UPDATE workers SET parent_worker_id = (
77
+ SELECT runtime.id FROM workers runtime
78
+ WHERE runtime.workspace_id = workers.workspace_id AND runtime.origin = '_plurnk'
79
+ )
80
+ WHERE id IN (SELECT id FROM a2a_context_parents);
81
+ DROP TABLE a2a_context_parents;
82
+
83
+ -- Old process-local interaction waiters cannot survive a daemon restart; ordinary
84
+ -- orphan recovery settles these rows without inventing a client for them.
85
+ ALTER TABLE client_interactions ADD COLUMN recipient TEXT NOT NULL DEFAULT '_plurnk';
86
+
87
+ -- The runtime installs the current fork trigger after migrations.
88
+ DROP TRIGGER IF EXISTS workers_fork_copies_history;
89
+ ALTER TABLE loops DROP COLUMN policy;
90
+
91
+ -- {§schedule-delivery} A stored schedule remains a message definition, not an
92
+ -- approval grant. Preserve its rule, target, prompt, enabled state and provenance.
93
+ UPDATE workspace_module_state
94
+ SET state = json_set(state, '$.definitions', (
95
+ SELECT json_group_object(key, json_remove(value, '$.definition.policy'))
96
+ FROM json_each(state, '$.definitions')
97
+ ))
98
+ WHERE namespace_owner = '@plurnk/plurnk-schedule'
99
+ AND EXISTS (
100
+ SELECT 1 FROM json_each(state, '$.definitions')
101
+ WHERE json_type(value, '$.definition.policy') IS NOT NULL
102
+ );
@@ -0,0 +1,6 @@
1
+ -- MIGRATE: 19 interactive owners
2
+ -- {§worker-ownership} An owner states whether a person attends it. Existing owners are
3
+ -- unattended until their client declares otherwise; the runtime owner never is.
4
+
5
+ ALTER TABLE worker_owners ADD COLUMN interactive INTEGER NOT NULL DEFAULT 0
6
+ CHECK (interactive IN (0, 1) AND (address != '_plurnk' OR interactive = 0));
@@ -0,0 +1,143 @@
1
+ -- MIGRATE: 20 log projection
2
+ -- {§worker-wait-timing} A WAIT receipt's `waiting` is the accepted maximum in non-negative seconds;
3
+ -- a receipt without one carries no bound. The attrs guard is redeclared around this one rewrite.
4
+ DROP TRIGGER IF EXISTS log_entries_immutable_attrs;
5
+
6
+ UPDATE log_entries
7
+ SET attrs = json_remove(attrs, '$.waiting')
8
+ WHERE op = 'WAIT' AND json_extract(attrs, '$.waiting') = -1;
9
+
10
+ CREATE TRIGGER log_entries_immutable_attrs
11
+ BEFORE UPDATE OF attrs ON log_entries
12
+ WHEN COALESCE((
13
+ json_type(OLD.attrs, '$.__plurnk_curation') = 'object'
14
+ AND NEW.attrs = json_remove(OLD.attrs, '$.__plurnk_curation')
15
+ ), 0) = 0
16
+ BEGIN
17
+ SELECT RAISE(ABORT, 'log_entries attrs are immutable outside curation payload removal');
18
+ END;
19
+
20
+ -- {§log-history-projection} A projection row is its event's membership and folded intervals.
21
+ -- No foreign key points at log_entry_projections, so the table is rebuilt with those columns
22
+ -- ({§db-migrations}). The view that reads it and the process triggers that name it would be
23
+ -- re-resolved by the RENAME while the table is absent, so they are dropped first: the view is
24
+ -- redeclared below and the processes on the next open ({§db-process-triggers}).
25
+ CREATE TABLE log_entry_projections_rebuilt (
26
+ log_entry_id INTEGER NOT NULL PRIMARY KEY,
27
+ active INTEGER NOT NULL DEFAULT 1 CHECK (active IN (0, 1)),
28
+ folded TEXT NOT NULL DEFAULT '[]'
29
+ CHECK (json_valid(folded) AND json_type(folded) = 'array'),
30
+ FOREIGN KEY (log_entry_id) REFERENCES log_entries(id) ON DELETE CASCADE
31
+ ) STRICT, WITHOUT ROWID;
32
+
33
+ INSERT INTO log_entry_projections_rebuilt (log_entry_id, active, folded)
34
+ SELECT log_entry_id, active, folded FROM log_entry_projections;
35
+
36
+ DROP VIEW IF EXISTS active_log_entries;
37
+ DROP TRIGGER IF EXISTS log_entries_initialize_projection;
38
+ DROP TRIGGER IF EXISTS log_entries_apply_curation;
39
+ DROP TRIGGER IF EXISTS workers_fork_copies_history;
40
+ DROP TRIGGER IF EXISTS log_output_admission_immutable;
41
+ DROP TRIGGER IF EXISTS log_output_admission_owner;
42
+ DROP TABLE log_entry_projections;
43
+ ALTER TABLE log_entry_projections_rebuilt RENAME TO log_entry_projections;
44
+
45
+ -- A folded interval is an inclusive [start,end] pair. Ranges are positive,
46
+ -- sorted, disjoint, and non-adjacent; -1 is the final open-ended endpoint.
47
+ -- Canonical intervals make visibility equality and curation effects exact.
48
+ CREATE TRIGGER log_entry_projections_folded_valid_insert
49
+ BEFORE INSERT ON log_entry_projections
50
+ WHEN EXISTS (
51
+ SELECT 1
52
+ FROM json_each(NEW.folded) range
53
+ WHERE range.type != 'array'
54
+ OR json_array_length(range.value) != 2
55
+ OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
56
+ OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
57
+ OR json_extract(range.value, '$[0]') < 1
58
+ OR (
59
+ json_extract(range.value, '$[1]') != -1
60
+ AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
61
+ )
62
+ OR EXISTS (
63
+ SELECT 1
64
+ FROM json_each(NEW.folded) previous
65
+ WHERE previous.key = range.key - 1
66
+ AND (
67
+ json_extract(previous.value, '$[1]') = -1
68
+ OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
69
+ )
70
+ )
71
+ )
72
+ BEGIN
73
+ SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
74
+ END;
75
+
76
+ CREATE TRIGGER log_entry_projections_folded_valid_update
77
+ BEFORE UPDATE OF folded ON log_entry_projections
78
+ WHEN EXISTS (
79
+ SELECT 1
80
+ FROM json_each(NEW.folded) range
81
+ WHERE range.type != 'array'
82
+ OR json_array_length(range.value) != 2
83
+ OR COALESCE(json_type(range.value, '$[0]'), '') != 'integer'
84
+ OR COALESCE(json_type(range.value, '$[1]'), '') != 'integer'
85
+ OR json_extract(range.value, '$[0]') < 1
86
+ OR (
87
+ json_extract(range.value, '$[1]') != -1
88
+ AND json_extract(range.value, '$[1]') < json_extract(range.value, '$[0]')
89
+ )
90
+ OR EXISTS (
91
+ SELECT 1
92
+ FROM json_each(NEW.folded) previous
93
+ WHERE previous.key = range.key - 1
94
+ AND (
95
+ json_extract(previous.value, '$[1]') = -1
96
+ OR json_extract(range.value, '$[0]') <= json_extract(previous.value, '$[1]') + 1
97
+ )
98
+ )
99
+ )
100
+ BEGIN
101
+ SELECT RAISE(ABORT, 'log entry projection folded ranges are invalid');
102
+ END;
103
+
104
+ CREATE TRIGGER log_entry_projections_kill_terminal
105
+ BEFORE UPDATE OF active ON log_entry_projections
106
+ WHEN OLD.active = 0 AND NEW.active != 0
107
+ BEGIN
108
+ SELECT RAISE(ABORT, 'a killed log entry cannot re-enter the active projection');
109
+ END;
110
+
111
+ CREATE TRIGGER log_entry_projections_delete_with_event_only
112
+ BEFORE DELETE ON log_entry_projections
113
+ WHEN EXISTS (SELECT 1 FROM log_entries WHERE id = OLD.log_entry_id)
114
+ BEGIN
115
+ SELECT RAISE(ABORT, 'a durable log event must retain its projection');
116
+ END;
117
+
118
+ -- {§emission-row} An emission is curated whole: its projection is retired, never trimmed.
119
+ CREATE TRIGGER log_entry_projections_emission_whole
120
+ BEFORE UPDATE OF folded ON log_entry_projections
121
+ WHEN json(NEW.folded) != json('[]')
122
+ AND EXISTS (
123
+ SELECT 1 FROM log_entries
124
+ WHERE id = NEW.log_entry_id AND json_extract(attrs, '$.kind') = 'emission'
125
+ )
126
+ BEGIN
127
+ SELECT RAISE(ABORT, 'an emission row is curated whole');
128
+ END;
129
+
130
+ -- The ordinary operation surface reads this view. Forensic and lifecycle
131
+ -- machinery names log_entries directly and therefore retains complete history.
132
+ CREATE VIEW active_log_entries AS
133
+ SELECT le.id, le.version, le.worker_id, le.loop_id, le.turn_id, le.sequence,
134
+ le.at, le.origin, le.source, le.ambient_event_id, le.inherited_history,
135
+ le.deep_hash, le.model_call_id, le.subscription_publication_id,
136
+ le.op, le.signal, le.scheme, le.username, le.password,
137
+ le.hostname, le.port, le.pathname, le.query, le.fragment, le.lineMarker,
138
+ le.tx, le.mimetype_tx,
139
+ le.rx, le.mimetype_rx, le.status_rx, le.weight,
140
+ le.state, le.outcome, le.attrs, le.initial_folded, projection.folded
141
+ FROM log_entries le
142
+ JOIN log_entry_projections projection ON projection.log_entry_id = le.id
143
+ WHERE projection.active = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plurnk/plurnk-service",
3
- "version": "2.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Plurnk agent runtime — the server / engine / core. Implements the @plurnk/plurnk-contracts contract.",
5
5
  "keywords": [
6
6
  "plurnk",
@@ -17,10 +17,6 @@
17
17
  "node": ">=26"
18
18
  },
19
19
  "exports": {
20
- ".": {
21
- "types": "./dist/index.d.ts",
22
- "default": "./dist/index.js"
23
- },
24
20
  "./launch": {
25
21
  "types": "./dist/launch/Launch.d.ts",
26
22
  "default": "./dist/launch/Launch.js"
@@ -91,26 +87,26 @@
91
87
  "@opentelemetry/resources": "^2.11.0",
92
88
  "@opentelemetry/sdk-metrics": "^2.11.0",
93
89
  "@opentelemetry/sdk-trace-base": "^2.11.0",
94
- "@plurnk/plurnk-a2a": "2.0.0",
95
- "@plurnk/plurnk-agui": "2.0.0",
96
- "@plurnk/plurnk-contracts": "2.0.0",
97
- "@plurnk/plurnk-parser": "2.0.0",
98
- "@plurnk/plurnk-schedule": "2.0.0",
99
- "@plurnk/plurnk-skills": "2.0.0",
100
- "@plurnk/plurnk-execs": "2.0.0",
101
- "@plurnk/plurnk-execs-common": "2.0.0",
102
- "@plurnk/plurnk-execs-jq": "2.0.0",
103
- "@plurnk/plurnk-execs-sqlite": "2.0.0",
104
- "@plurnk/plurnk-hooks": "2.0.0",
105
- "@plurnk/plurnk-mcp": "2.0.0",
106
- "@plurnk/plurnk-meta": "2.0.0",
90
+ "@plurnk/plurnk-a2a": "3.0.0",
91
+ "@plurnk/plurnk-agui": "3.0.0",
92
+ "@plurnk/plurnk-contracts": "3.0.1",
93
+ "@plurnk/plurnk-parser": "3.0.1",
94
+ "@plurnk/plurnk-schedule": "3.0.0",
95
+ "@plurnk/plurnk-skills": "3.0.0",
96
+ "@plurnk/plurnk-execs": "3.0.0",
97
+ "@plurnk/plurnk-execs-common": "2.0.1",
98
+ "@plurnk/plurnk-execs-jq": "2.0.1",
99
+ "@plurnk/plurnk-execs-sqlite": "2.0.1",
100
+ "@plurnk/plurnk-hooks": "2.0.1",
101
+ "@plurnk/plurnk-mcp": "3.0.0",
102
+ "@plurnk/plurnk-meta": "2.0.2",
107
103
  "@plurnk/plurnk-agent-plugins": "2.0.0",
108
- "@plurnk/plurnk-agent-skills": "2.0.0",
109
- "@plurnk/plurnk-mimetypes": "2.0.0",
110
- "@plurnk/plurnk-mimetypes-application-ipynb": "2.0.0",
111
- "@plurnk/plurnk-mimetypes-application-json": "2.0.0",
112
- "@plurnk/plurnk-mimetypes-application-jsonl": "2.0.0",
113
- "@plurnk/plurnk-mimetypes-application-xml": "2.0.0",
104
+ "@plurnk/plurnk-agent-skills": "2.0.1",
105
+ "@plurnk/plurnk-mimetypes": "3.0.0",
106
+ "@plurnk/plurnk-mimetypes-application-ipynb": "2.0.1",
107
+ "@plurnk/plurnk-mimetypes-application-json": "2.0.1",
108
+ "@plurnk/plurnk-mimetypes-application-jsonl": "2.0.1",
109
+ "@plurnk/plurnk-mimetypes-application-xml": "2.0.1",
114
110
  "@plurnk/plurnk-mimetypes-grammar-bash": "2.0.0",
115
111
  "@plurnk/plurnk-mimetypes-grammar-c": "2.0.0",
116
112
  "@plurnk/plurnk-mimetypes-grammar-cpp": "2.0.0",
@@ -137,24 +133,24 @@
137
133
  "@plurnk/plurnk-mimetypes-grammar-typescript": "2.0.0",
138
134
  "@plurnk/plurnk-mimetypes-grammar-yaml": "2.0.0",
139
135
  "@plurnk/plurnk-mimetypes-grammar-zig": "2.0.0",
140
- "@plurnk/plurnk-mimetypes-application-pdf": "2.0.0",
141
- "@plurnk/plurnk-mimetypes-image": "2.0.0",
142
- "@plurnk/plurnk-mimetypes-audio": "2.0.0",
143
- "@plurnk/plurnk-mimetypes-text-csv": "2.0.0",
144
- "@plurnk/plurnk-mimetypes-text-diff": "2.0.0",
145
- "@plurnk/plurnk-mimetypes-text-dotenv": "2.0.0",
146
- "@plurnk/plurnk-mimetypes-text-html": "2.0.0",
147
- "@plurnk/plurnk-mimetypes-text-ini": "2.0.0",
148
- "@plurnk/plurnk-mimetypes-text-markdown": "2.0.0",
149
- "@plurnk/plurnk-mimetypes-text-plain": "2.0.0",
150
- "@plurnk/plurnk-models": "2.0.0",
151
- "@plurnk/plurnk-modules": "2.0.0",
152
- "@plurnk/plurnk-providers": "2.0.0",
153
- "@plurnk/plurnk-schemes": "2.0.0",
154
- "@plurnk/plurnk-schemes-http": "2.0.0",
136
+ "@plurnk/plurnk-mimetypes-application-pdf": "2.0.1",
137
+ "@plurnk/plurnk-mimetypes-image": "2.0.1",
138
+ "@plurnk/plurnk-mimetypes-audio": "2.0.1",
139
+ "@plurnk/plurnk-mimetypes-text-csv": "2.0.1",
140
+ "@plurnk/plurnk-mimetypes-text-diff": "2.0.1",
141
+ "@plurnk/plurnk-mimetypes-text-dotenv": "2.0.1",
142
+ "@plurnk/plurnk-mimetypes-text-html": "2.0.1",
143
+ "@plurnk/plurnk-mimetypes-text-ini": "2.0.1",
144
+ "@plurnk/plurnk-mimetypes-text-markdown": "2.0.1",
145
+ "@plurnk/plurnk-mimetypes-text-plain": "2.0.1",
146
+ "@plurnk/plurnk-models": "3.0.0",
147
+ "@plurnk/plurnk-modules": "3.0.0",
148
+ "@plurnk/plurnk-providers": "3.0.0",
149
+ "@plurnk/plurnk-schemes": "3.0.0",
150
+ "@plurnk/plurnk-schemes-http": "2.0.1",
155
151
  "@possumtech/sqlrite": "^6.5.3",
156
152
  "diff": "^9.0.0",
157
- "@plurnk/plurnk-digest": "2.0.0"
153
+ "@plurnk/plurnk-digest": "3.0.0"
158
154
  },
159
155
  "devDependencies": {
160
156
  "@a2a-js/sdk": "1.3.0",
@@ -172,5 +168,5 @@
172
168
  "url": "git+https://github.com/plurnk/plurnk-service.git",
173
169
  "directory": "plurnk-core"
174
170
  },
175
- "gitHead": "3b2cae63115333d1b2e820abcf44b0fe4959d9ea"
171
+ "gitHead": "9a63339d5a4db00f767a55407e0117190fa55f39"
176
172
  }
@@ -1,10 +0,0 @@
1
- import type HostPaths from "./HostPaths.ts";
2
- export interface LegacyMigrationMove {
3
- readonly source: string;
4
- readonly destination: string;
5
- }
6
- export default class LegacyHome {
7
- static assertCanonical(paths: HostPaths): Promise<void>;
8
- static migrate(paths: HostPaths): Promise<readonly LegacyMigrationMove[]>;
9
- }
10
- //# sourceMappingURL=LegacyHome.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyHome.d.ts","sourceRoot":"","sources":["../../src/core/LegacyHome.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AA0C5C,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAChC;AAID,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,OAAa,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;IAED,OAAa,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAmG9E;CACJ"}
@@ -1,170 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { constants } from "node:fs";
4
- import { access, chmod, copyFile, lstat, mkdir, readdir, rmdir, stat, unlink, } from "node:fs/promises";
5
- import { join } from "node:path";
6
- import DaemonLock from "../server/DaemonLock.js";
7
- const CONFIG_MEMBERS = new Map([
8
- [".env", ".env"],
9
- ["AGENTS.md", "AGENTS.md"],
10
- ]);
11
- const DATA_MEMBERS = new Map([
12
- ["plurnk.db", "plurnk.db"],
13
- ["plurnk.db-wal", "plurnk.db-wal"],
14
- ["plurnk.db-shm", "plurnk.db-shm"],
15
- ]);
16
- const GENERATED_MEMBERS = new Set([".env.defaults", ".env.example", "INSTALL.md"]);
17
- const LOCK_MEMBER = "plurnk.db.lock";
18
- const exists = async (path) => access(path, constants.F_OK)
19
- .then(() => true)
20
- .catch(() => false);
21
- const hashFile = async (path) => {
22
- const hash = createHash("sha256");
23
- for await (const chunk of createReadStream(path))
24
- hash.update(chunk);
25
- return hash.digest("hex");
26
- };
27
- const copyVerified = async (source, destination) => {
28
- const sourceStat = await stat(source);
29
- let created = false;
30
- try {
31
- await copyFile(source, destination, constants.COPYFILE_EXCL);
32
- created = true;
33
- await chmod(destination, sourceStat.mode & 0o777);
34
- const [sourceHash, destinationHash] = await Promise.all([hashFile(source), hashFile(destination)]);
35
- if (sourceHash !== destinationHash) {
36
- throw new Error(`copy verification failed: ${source} -> ${destination}`);
37
- }
38
- }
39
- catch (cause) {
40
- if (created)
41
- await unlink(destination).catch(() => { });
42
- throw cause;
43
- }
44
- };
45
- // {§legacy-home-transition} — the only reader of the retired mixed home. It is
46
- // an explicit one-way operation, not a compatibility path used by the daemon.
47
- export default class LegacyHome {
48
- static async assertCanonical(paths) {
49
- if (!await exists(paths.legacyDir))
50
- return;
51
- const canonical = await Promise.all([exists(paths.configDir), exists(paths.dataDir)]);
52
- if (canonical.some(Boolean)) {
53
- throw new Error(`legacy ${paths.legacyDir} and canonical Plurnk paths both exist; `
54
- + "resolve the conflict without guessing, then run plurnk-service paths migrate");
55
- }
56
- throw new Error(`legacy Plurnk home found at ${paths.legacyDir}; run plurnk-service paths migrate`);
57
- }
58
- static async migrate(paths) {
59
- if (!await exists(paths.legacyDir))
60
- return [];
61
- const legacyStat = await lstat(paths.legacyDir);
62
- if (!legacyStat.isDirectory())
63
- throw new Error(`legacy Plurnk home is not a directory: ${paths.legacyDir}`);
64
- const entries = await readdir(paths.legacyDir, { withFileTypes: true });
65
- const known = new Set([
66
- ...CONFIG_MEMBERS.keys(),
67
- ...DATA_MEMBERS.keys(),
68
- ...GENERATED_MEMBERS,
69
- LOCK_MEMBER,
70
- ]);
71
- const unknown = entries.filter((entry) => !known.has(entry.name)).map((entry) => entry.name).sort();
72
- if (unknown.length > 0) {
73
- throw new Error(`legacy Plurnk home contains unknown member(s): ${unknown.join(", ")}`);
74
- }
75
- const nonFiles = entries
76
- .filter((entry) => !entry.isFile())
77
- .map((entry) => entry.name)
78
- .sort();
79
- if (nonFiles.length > 0) {
80
- throw new Error(`legacy Plurnk member(s) are not regular files: ${nonFiles.join(", ")}`);
81
- }
82
- const existingDestinations = (await Promise.all([
83
- paths.configDir,
84
- paths.dataDir,
85
- ].map(async (path) => await exists(path) ? path : null))).filter((path) => path !== null);
86
- if (existingDestinations.length > 0) {
87
- throw new Error(`canonical Plurnk destination(s) already exist: ${existingDestinations.join(", ")}`);
88
- }
89
- const names = new Set(entries.map((entry) => entry.name));
90
- const hasDatabaseState = [...DATA_MEMBERS.keys(), LOCK_MEMBER].some((name) => names.has(name));
91
- const lock = hasDatabaseState ? await DaemonLock.acquire(join(paths.legacyDir, "plurnk.db")) : null;
92
- const moves = [
93
- ...[...CONFIG_MEMBERS].flatMap(([sourceName, destinationName]) => names.has(sourceName) ? [{
94
- source: join(paths.legacyDir, sourceName),
95
- destination: join(paths.configDir, destinationName),
96
- }] : []),
97
- ...[...DATA_MEMBERS].flatMap(([sourceName, destinationName]) => names.has(sourceName) ? [{
98
- source: join(paths.legacyDir, sourceName),
99
- destination: join(paths.dataDir, destinationName),
100
- }] : []),
101
- ];
102
- const createdDirectories = [];
103
- const copied = [];
104
- let commitStarted = false;
105
- try {
106
- if ([...CONFIG_MEMBERS.keys()].some((name) => names.has(name))) {
107
- await mkdir(paths.configDir, { recursive: true, mode: 0o700 });
108
- createdDirectories.push(paths.configDir);
109
- }
110
- if ([...DATA_MEMBERS.keys()].some((name) => names.has(name))) {
111
- await mkdir(paths.dataDir, { recursive: true, mode: 0o700 });
112
- createdDirectories.push(paths.dataDir);
113
- }
114
- // Always copy first, including on one filesystem. Every source stays
115
- // authoritative until every destination has passed byte verification.
116
- for (const { source, destination } of moves) {
117
- await copyVerified(source, destination);
118
- copied.push(destination);
119
- }
120
- for (const { destination } of moves) {
121
- if (!await exists(destination))
122
- throw new Error(`migration destination verification failed: ${destination}`);
123
- }
124
- for (const sourceName of GENERATED_MEMBERS) {
125
- if (names.has(sourceName))
126
- await unlink(join(paths.legacyDir, sourceName));
127
- }
128
- commitStarted = true;
129
- for (const { source } of moves)
130
- await unlink(source);
131
- }
132
- catch (cause) {
133
- if (!commitStarted) {
134
- const rollbackErrors = [];
135
- for (const destination of copied.toReversed()) {
136
- try {
137
- await unlink(destination);
138
- }
139
- catch (rollbackCause) {
140
- if (rollbackCause.code !== "ENOENT")
141
- rollbackErrors.push(rollbackCause);
142
- }
143
- }
144
- for (const directory of createdDirectories.toReversed()) {
145
- try {
146
- await rmdir(directory);
147
- }
148
- catch (rollbackCause) {
149
- if (rollbackCause.code !== "ENOENT")
150
- rollbackErrors.push(rollbackCause);
151
- }
152
- }
153
- if (rollbackErrors.length > 0) {
154
- throw new AggregateError([cause, ...rollbackErrors], "legacy path migration failed and rollback was incomplete");
155
- }
156
- }
157
- throw cause;
158
- }
159
- finally {
160
- await lock?.release();
161
- }
162
- const survivors = await readdir(paths.legacyDir);
163
- if (survivors.length > 0) {
164
- throw new Error(`legacy Plurnk home was not emptied: ${survivors.join(", ")}`);
165
- }
166
- await rmdir(paths.legacyDir);
167
- return moves;
168
- }
169
- }
170
- //# sourceMappingURL=LegacyHome.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegacyHome.js","sourceRoot":"","sources":["../../src/core/LegacyHome.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type LoopPolicy, type LoopPolicyRequest } from "@plurnk/plurnk-contracts";
2
- export default class LoopPolicies {
3
- #private;
4
- static compose(stated: LoopPolicyRequest): LoopPolicy;
5
- static validateConfiguration(): void;
6
- }
7
- //# sourceMappingURL=LoopPolicies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LoopPolicies.d.ts","sourceRoot":"","sources":["../../src/core/LoopPolicies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOjH,MAAM,CAAC,OAAO,OAAO,YAAY;;IAI7B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAuBpD;IAGD,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAInC;CAOJ"}