@dharma-ai-labs/agent-fabric 0.2.152 → 0.2.154

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 (309) hide show
  1. package/dist/bootstrapGitScope.test.d.ts +2 -0
  2. package/dist/bootstrapGitScope.test.d.ts.map +1 -0
  3. package/dist/bootstrapGitScope.test.js +115 -0
  4. package/dist/bootstrapGitScope.test.js.map +1 -0
  5. package/dist/bootstrapHostFiles.d.ts +5 -0
  6. package/dist/bootstrapHostFiles.d.ts.map +1 -0
  7. package/dist/bootstrapHostFiles.js +150 -0
  8. package/dist/bootstrapHostFiles.js.map +1 -0
  9. package/dist/bootstrapHostFiles.test.d.ts +2 -0
  10. package/dist/bootstrapHostFiles.test.d.ts.map +1 -0
  11. package/dist/bootstrapHostFiles.test.js +127 -0
  12. package/dist/bootstrapHostFiles.test.js.map +1 -0
  13. package/dist/bootstrapHostScope.d.ts +42 -0
  14. package/dist/bootstrapHostScope.d.ts.map +1 -0
  15. package/dist/bootstrapHostScope.js +224 -0
  16. package/dist/bootstrapHostScope.js.map +1 -0
  17. package/dist/bootstrapHostScope.test.d.ts +2 -0
  18. package/dist/bootstrapHostScope.test.d.ts.map +1 -0
  19. package/dist/bootstrapHostScope.test.js +577 -0
  20. package/dist/bootstrapHostScope.test.js.map +1 -0
  21. package/dist/bootstrapInstallationScope.test.d.ts +2 -0
  22. package/dist/bootstrapInstallationScope.test.d.ts.map +1 -0
  23. package/dist/bootstrapInstallationScope.test.js +68 -0
  24. package/dist/bootstrapInstallationScope.test.js.map +1 -0
  25. package/dist/bootstrapLauncherCaller.test.d.ts +2 -0
  26. package/dist/bootstrapLauncherCaller.test.d.ts.map +1 -0
  27. package/dist/bootstrapLauncherCaller.test.js +91 -0
  28. package/dist/bootstrapLauncherCaller.test.js.map +1 -0
  29. package/dist/bootstrapOwnedChildren.test.d.ts +2 -0
  30. package/dist/bootstrapOwnedChildren.test.d.ts.map +1 -0
  31. package/dist/bootstrapOwnedChildren.test.js +93 -0
  32. package/dist/bootstrapOwnedChildren.test.js.map +1 -0
  33. package/dist/bootstrapPolicyScope.test.d.ts +2 -0
  34. package/dist/bootstrapPolicyScope.test.d.ts.map +1 -0
  35. package/dist/bootstrapPolicyScope.test.js +261 -0
  36. package/dist/bootstrapPolicyScope.test.js.map +1 -0
  37. package/dist/bootstrapProcessCaller.test.d.ts +2 -0
  38. package/dist/bootstrapProcessCaller.test.d.ts.map +1 -0
  39. package/dist/bootstrapProcessCaller.test.js +262 -0
  40. package/dist/bootstrapProcessCaller.test.js.map +1 -0
  41. package/dist/bootstrapRegistryCaller.test.d.ts +2 -0
  42. package/dist/bootstrapRegistryCaller.test.d.ts.map +1 -0
  43. package/dist/bootstrapRegistryCaller.test.js +128 -0
  44. package/dist/bootstrapRegistryCaller.test.js.map +1 -0
  45. package/dist/bootstrapVaultScope.test.d.ts +2 -0
  46. package/dist/bootstrapVaultScope.test.d.ts.map +1 -0
  47. package/dist/bootstrapVaultScope.test.js +105 -0
  48. package/dist/bootstrapVaultScope.test.js.map +1 -0
  49. package/dist/codexBootstrapCompletion.test.d.ts +2 -0
  50. package/dist/codexBootstrapCompletion.test.d.ts.map +1 -0
  51. package/dist/codexBootstrapCompletion.test.js +630 -0
  52. package/dist/codexBootstrapCompletion.test.js.map +1 -0
  53. package/dist/codexBoundSession.d.ts +2 -2
  54. package/dist/codexBoundSession.d.ts.map +1 -1
  55. package/dist/codexBoundSession.js +23 -17
  56. package/dist/codexBoundSession.js.map +1 -1
  57. package/dist/codexBoundSession.test.js +3 -0
  58. package/dist/codexBoundSession.test.js.map +1 -1
  59. package/dist/codexInboxSession.d.ts.map +1 -1
  60. package/dist/codexInboxSession.js +3 -3
  61. package/dist/codexInboxSession.js.map +1 -1
  62. package/dist/codexScopedDispatch.test.d.ts +2 -0
  63. package/dist/codexScopedDispatch.test.d.ts.map +1 -0
  64. package/dist/codexScopedDispatch.test.js +56 -0
  65. package/dist/codexScopedDispatch.test.js.map +1 -0
  66. package/dist/codexSetupAdmission.d.ts +108 -0
  67. package/dist/codexSetupAdmission.d.ts.map +1 -0
  68. package/dist/codexSetupAdmission.js +214 -0
  69. package/dist/codexSetupAdmission.js.map +1 -0
  70. package/dist/codexSetupAdmission.test.d.ts +2 -0
  71. package/dist/codexSetupAdmission.test.d.ts.map +1 -0
  72. package/dist/codexSetupAdmission.test.js +578 -0
  73. package/dist/codexSetupAdmission.test.js.map +1 -0
  74. package/dist/codexSetupChildProvider.test.d.ts +2 -0
  75. package/dist/codexSetupChildProvider.test.d.ts.map +1 -0
  76. package/dist/codexSetupChildProvider.test.js +210 -0
  77. package/dist/codexSetupChildProvider.test.js.map +1 -0
  78. package/dist/codexSetupChildStartup.d.ts +38 -0
  79. package/dist/codexSetupChildStartup.d.ts.map +1 -0
  80. package/dist/codexSetupChildStartup.js +115 -0
  81. package/dist/codexSetupChildStartup.js.map +1 -0
  82. package/dist/codexSetupChildStartup.test.d.ts +2 -0
  83. package/dist/codexSetupChildStartup.test.d.ts.map +1 -0
  84. package/dist/codexSetupChildStartup.test.js +141 -0
  85. package/dist/codexSetupChildStartup.test.js.map +1 -0
  86. package/dist/codexSetupCliDispatch.test.d.ts +2 -0
  87. package/dist/codexSetupCliDispatch.test.d.ts.map +1 -0
  88. package/dist/codexSetupCliDispatch.test.js +138 -0
  89. package/dist/codexSetupCliDispatch.test.js.map +1 -0
  90. package/dist/codexSetupJournalOpen.test.d.ts +2 -0
  91. package/dist/codexSetupJournalOpen.test.d.ts.map +1 -0
  92. package/dist/codexSetupJournalOpen.test.js +101 -0
  93. package/dist/codexSetupJournalOpen.test.js.map +1 -0
  94. package/dist/codexSetupNativeHost.d.ts +31 -0
  95. package/dist/codexSetupNativeHost.d.ts.map +1 -0
  96. package/dist/codexSetupNativeHost.js +208 -0
  97. package/dist/codexSetupNativeHost.js.map +1 -0
  98. package/dist/codexSetupNativeHost.test.d.ts +2 -0
  99. package/dist/codexSetupNativeHost.test.d.ts.map +1 -0
  100. package/dist/codexSetupNativeHost.test.js +456 -0
  101. package/dist/codexSetupNativeHost.test.js.map +1 -0
  102. package/dist/codexSetupNativeWire.test.d.ts +2 -0
  103. package/dist/codexSetupNativeWire.test.d.ts.map +1 -0
  104. package/dist/codexSetupNativeWire.test.js +243 -0
  105. package/dist/codexSetupNativeWire.test.js.map +1 -0
  106. package/dist/codexSetupOwnedConnection.d.ts +14 -0
  107. package/dist/codexSetupOwnedConnection.d.ts.map +1 -0
  108. package/dist/codexSetupOwnedConnection.js +64 -0
  109. package/dist/codexSetupOwnedConnection.js.map +1 -0
  110. package/dist/codexSetupOwnedConnection.test.d.ts +2 -0
  111. package/dist/codexSetupOwnedConnection.test.d.ts.map +1 -0
  112. package/dist/codexSetupOwnedConnection.test.js +192 -0
  113. package/dist/codexSetupOwnedConnection.test.js.map +1 -0
  114. package/dist/codexSetupPortalCommand.test.d.ts +2 -0
  115. package/dist/codexSetupPortalCommand.test.d.ts.map +1 -0
  116. package/dist/codexSetupPortalCommand.test.js +146 -0
  117. package/dist/codexSetupPortalCommand.test.js.map +1 -0
  118. package/dist/codexSetupReadiness.d.ts +23 -0
  119. package/dist/codexSetupReadiness.d.ts.map +1 -0
  120. package/dist/codexSetupReadiness.js +74 -0
  121. package/dist/codexSetupReadiness.js.map +1 -0
  122. package/dist/codexSetupReadiness.test.d.ts +2 -0
  123. package/dist/codexSetupReadiness.test.d.ts.map +1 -0
  124. package/dist/codexSetupReadiness.test.js +145 -0
  125. package/dist/codexSetupReadiness.test.js.map +1 -0
  126. package/dist/codexSetupSessionCaller.test.d.ts +2 -0
  127. package/dist/codexSetupSessionCaller.test.d.ts.map +1 -0
  128. package/dist/codexSetupSessionCaller.test.js +352 -0
  129. package/dist/codexSetupSessionCaller.test.js.map +1 -0
  130. package/dist/codexSetupSessionHandoff.d.ts +48 -0
  131. package/dist/codexSetupSessionHandoff.d.ts.map +1 -0
  132. package/dist/codexSetupSessionHandoff.js +146 -0
  133. package/dist/codexSetupSessionHandoff.js.map +1 -0
  134. package/dist/codexSetupSessionHandoff.test.d.ts +2 -0
  135. package/dist/codexSetupSessionHandoff.test.d.ts.map +1 -0
  136. package/dist/codexSetupSessionHandoff.test.js +289 -0
  137. package/dist/codexSetupSessionHandoff.test.js.map +1 -0
  138. package/dist/codexSetupTransport.test.d.ts +2 -0
  139. package/dist/codexSetupTransport.test.d.ts.map +1 -0
  140. package/dist/codexSetupTransport.test.js +206 -0
  141. package/dist/codexSetupTransport.test.js.map +1 -0
  142. package/dist/codexSetupVaultJournal.d.ts +13 -0
  143. package/dist/codexSetupVaultJournal.d.ts.map +1 -0
  144. package/dist/codexSetupVaultJournal.js +28 -0
  145. package/dist/codexSetupVaultJournal.js.map +1 -0
  146. package/dist/codexSetupVaultJournal.test.d.ts +2 -0
  147. package/dist/codexSetupVaultJournal.test.d.ts.map +1 -0
  148. package/dist/codexSetupVaultJournal.test.js +104 -0
  149. package/dist/codexSetupVaultJournal.test.js.map +1 -0
  150. package/dist/containerChildCleanup.test.d.ts +2 -0
  151. package/dist/containerChildCleanup.test.d.ts.map +1 -0
  152. package/dist/containerChildCleanup.test.js +145 -0
  153. package/dist/containerChildCleanup.test.js.map +1 -0
  154. package/dist/containerRelayLifecycle.d.ts +1 -1
  155. package/dist/containerRelayLifecycle.d.ts.map +1 -1
  156. package/dist/containerRelayLifecycle.js +29 -37
  157. package/dist/containerRelayLifecycle.js.map +1 -1
  158. package/dist/containerRelayLifecycle.test.js +13 -0
  159. package/dist/containerRelayLifecycle.test.js.map +1 -1
  160. package/dist/cooperativeInboxSession.d.ts +2 -2
  161. package/dist/cooperativeInboxSession.d.ts.map +1 -1
  162. package/dist/cooperativeInboxSession.js +21 -13
  163. package/dist/cooperativeInboxSession.js.map +1 -1
  164. package/dist/cooperativeInboxSession.test.js +65 -0
  165. package/dist/cooperativeInboxSession.test.js.map +1 -1
  166. package/dist/demoWatchControl.d.ts +3 -3
  167. package/dist/index.d.ts +55 -14
  168. package/dist/index.d.ts.map +1 -1
  169. package/dist/index.js +1650 -557
  170. package/dist/index.js.map +1 -1
  171. package/dist/namedCodexSkillDiscovery.d.ts +15 -0
  172. package/dist/namedCodexSkillDiscovery.d.ts.map +1 -0
  173. package/dist/namedCodexSkillDiscovery.js +90 -0
  174. package/dist/namedCodexSkillDiscovery.js.map +1 -0
  175. package/dist/namedCodexSkillDiscovery.test.d.ts +2 -0
  176. package/dist/namedCodexSkillDiscovery.test.d.ts.map +1 -0
  177. package/dist/namedCodexSkillDiscovery.test.js +37 -0
  178. package/dist/namedCodexSkillDiscovery.test.js.map +1 -0
  179. package/dist/namedCodexThread.d.ts +2 -0
  180. package/dist/namedCodexThread.d.ts.map +1 -1
  181. package/dist/namedCodexThread.js +13 -4
  182. package/dist/namedCodexThread.js.map +1 -1
  183. package/dist/namedSessionChildOwner.d.ts +17 -0
  184. package/dist/namedSessionChildOwner.d.ts.map +1 -0
  185. package/dist/namedSessionChildOwner.js +122 -0
  186. package/dist/namedSessionChildOwner.js.map +1 -0
  187. package/dist/namedSessionChildOwner.test.d.ts +2 -0
  188. package/dist/namedSessionChildOwner.test.d.ts.map +1 -0
  189. package/dist/namedSessionChildOwner.test.js +203 -0
  190. package/dist/namedSessionChildOwner.test.js.map +1 -0
  191. package/dist/namedSessionEvidence.d.ts +2 -2
  192. package/dist/namedSessionEvidence.d.ts.map +1 -1
  193. package/dist/namedSessionEvidence.js +2 -2
  194. package/dist/namedSessionEvidence.js.map +1 -1
  195. package/dist/namedSessionEvidence.test.js +24 -1
  196. package/dist/namedSessionEvidence.test.js.map +1 -1
  197. package/dist/namedSessionRepositoryState.d.ts +2 -2
  198. package/dist/namedSessionRepositoryState.d.ts.map +1 -1
  199. package/dist/namedSessionService.d.ts +4 -2
  200. package/dist/namedSessionService.d.ts.map +1 -1
  201. package/dist/namedSessionService.js +18 -1
  202. package/dist/namedSessionService.js.map +1 -1
  203. package/dist/namedSessionService.test.js +31 -2
  204. package/dist/namedSessionService.test.js.map +1 -1
  205. package/dist/namedSessionTaskExportSync.d.ts +3 -3
  206. package/dist/namedSessionTaskExportSync.d.ts.map +1 -1
  207. package/dist/namedSessionTaskExportSync.js +6 -6
  208. package/dist/namedSessionTaskExportSync.js.map +1 -1
  209. package/dist/namedSessionTrust.d.ts +2 -2
  210. package/dist/namedSessionTrust.d.ts.map +1 -1
  211. package/dist/namedSessionTrust.js +3 -2
  212. package/dist/namedSessionTrust.js.map +1 -1
  213. package/dist/namedSessionTrust.test.js +2 -1
  214. package/dist/namedSessionTrust.test.js.map +1 -1
  215. package/dist/ownedChildLifecycle.d.ts +13 -0
  216. package/dist/ownedChildLifecycle.d.ts.map +1 -0
  217. package/dist/ownedChildLifecycle.js +87 -0
  218. package/dist/ownedChildLifecycle.js.map +1 -0
  219. package/dist/ownedChildLifecycle.test.d.ts +2 -0
  220. package/dist/ownedChildLifecycle.test.d.ts.map +1 -0
  221. package/dist/ownedChildLifecycle.test.js +133 -0
  222. package/dist/ownedChildLifecycle.test.js.map +1 -0
  223. package/dist/pidLock.test.js +242 -9
  224. package/dist/pidLock.test.js.map +1 -1
  225. package/dist/providerSessionChannel.d.ts +1 -1
  226. package/dist/providerSessionChannel.d.ts.map +1 -1
  227. package/dist/providerSessionChannel.js +7 -3
  228. package/dist/providerSessionChannel.js.map +1 -1
  229. package/dist/providerSessionChannel.test.js +20 -0
  230. package/dist/providerSessionChannel.test.js.map +1 -1
  231. package/dist/providerSessionReplyRecovery.d.ts +2 -2
  232. package/dist/providerSessionReplyRecovery.d.ts.map +1 -1
  233. package/dist/providerSessionReplyRecovery.js +3 -3
  234. package/dist/providerSessionReplyRecovery.js.map +1 -1
  235. package/dist/relayAutostart.d.ts.map +1 -1
  236. package/dist/relayAutostart.js +12 -9
  237. package/dist/relayAutostart.js.map +1 -1
  238. package/dist/relayRuntimeUpgrade.d.ts +1 -1
  239. package/dist/relayRuntimeUpgrade.d.ts.map +1 -1
  240. package/dist/relayRuntimeUpgrade.js +3 -1
  241. package/dist/relayRuntimeUpgrade.js.map +1 -1
  242. package/dist/relayRuntimeUpgrade.test.js +113 -0
  243. package/dist/relayRuntimeUpgrade.test.js.map +1 -1
  244. package/dist/relayRuntimeUpgradeCaller.test.js +12 -1
  245. package/dist/relayRuntimeUpgradeCaller.test.js.map +1 -1
  246. package/dist/relaySupervisor.d.ts.map +1 -1
  247. package/dist/relaySupervisor.js +19 -14
  248. package/dist/relaySupervisor.js.map +1 -1
  249. package/dist/relaySupervisor.test.js +26 -0
  250. package/dist/relaySupervisor.test.js.map +1 -1
  251. package/dist/relaySupervisorCleanup.test.d.ts +2 -0
  252. package/dist/relaySupervisorCleanup.test.d.ts.map +1 -0
  253. package/dist/relaySupervisorCleanup.test.js +69 -0
  254. package/dist/relaySupervisorCleanup.test.js.map +1 -0
  255. package/dist/repositoryInstallerFiles.d.ts +19 -1
  256. package/dist/repositoryInstallerFiles.d.ts.map +1 -1
  257. package/dist/repositoryInstallerFiles.js +205 -29
  258. package/dist/repositoryInstallerFiles.js.map +1 -1
  259. package/dist/repositoryInstallerScope.test.d.ts +2 -0
  260. package/dist/repositoryInstallerScope.test.d.ts.map +1 -0
  261. package/dist/repositoryInstallerScope.test.js +513 -0
  262. package/dist/repositoryInstallerScope.test.js.map +1 -0
  263. package/dist/repositoryKnowledge.d.ts.map +1 -1
  264. package/dist/repositoryKnowledge.js +177 -37
  265. package/dist/repositoryKnowledge.js.map +1 -1
  266. package/dist/repositoryKnowledgeScope.test.d.ts +2 -0
  267. package/dist/repositoryKnowledgeScope.test.d.ts.map +1 -0
  268. package/dist/repositoryKnowledgeScope.test.js +316 -0
  269. package/dist/repositoryKnowledgeScope.test.js.map +1 -0
  270. package/dist/repositoryOnboardingCaller.test.js +61 -4
  271. package/dist/repositoryOnboardingCaller.test.js.map +1 -1
  272. package/dist/repositoryPackage.d.ts.map +1 -1
  273. package/dist/repositoryPackage.js +340 -59
  274. package/dist/repositoryPackage.js.map +1 -1
  275. package/dist/repositoryPackageDelivery.test.js +65 -0
  276. package/dist/repositoryPackageDelivery.test.js.map +1 -1
  277. package/dist/repositoryPackageScope.test.d.ts +2 -0
  278. package/dist/repositoryPackageScope.test.d.ts.map +1 -0
  279. package/dist/repositoryPackageScope.test.js +578 -0
  280. package/dist/repositoryPackageScope.test.js.map +1 -0
  281. package/dist/schemas/codex-setup-child-start.schema.json +12 -0
  282. package/dist/schemas/codex-setup-intent.schema.json +27 -0
  283. package/dist/schemas/local-codex-setup-session.schema.json +39 -0
  284. package/dist/schemas/setup-claim-failure.schema.json +15 -0
  285. package/dist/skillInstallationScope.test.d.ts +2 -0
  286. package/dist/skillInstallationScope.test.d.ts.map +1 -0
  287. package/dist/skillInstallationScope.test.js +64 -0
  288. package/dist/skillInstallationScope.test.js.map +1 -0
  289. package/dist/skillPreparationCache.test.js +12 -4
  290. package/dist/skillPreparationCache.test.js.map +1 -1
  291. package/dist/skillPreparationCaller.test.js +31 -1
  292. package/dist/skillPreparationCaller.test.js.map +1 -1
  293. package/dist/startupCommitScope.test.d.ts +2 -0
  294. package/dist/startupCommitScope.test.d.ts.map +1 -0
  295. package/dist/startupCommitScope.test.js +172 -0
  296. package/dist/startupCommitScope.test.js.map +1 -0
  297. package/dist/workspaceRegistry.d.ts.map +1 -1
  298. package/dist/workspaceRegistry.js +7 -3
  299. package/dist/workspaceRegistry.js.map +1 -1
  300. package/dist/workspaceRegistry.test.js +51 -0
  301. package/dist/workspaceRegistry.test.js.map +1 -1
  302. package/dist/workspaceRegistryRecovery.d.ts.map +1 -1
  303. package/dist/workspaceRegistryRecovery.js +171 -64
  304. package/dist/workspaceRegistryRecovery.js.map +1 -1
  305. package/dist/workspaceRegistryRecoveryScope.test.d.ts +2 -0
  306. package/dist/workspaceRegistryRecoveryScope.test.d.ts.map +1 -0
  307. package/dist/workspaceRegistryRecoveryScope.test.js +416 -0
  308. package/dist/workspaceRegistryRecoveryScope.test.js.map +1 -0
  309. package/package.json +7 -7
@@ -0,0 +1,133 @@
1
+ import assert from 'node:assert/strict';
2
+ import { spawn } from 'node:child_process';
3
+ import { EventEmitter } from 'node:events';
4
+ import test from 'node:test';
5
+ import { watchOwnedChild } from './ownedChildLifecycle.js';
6
+ function fixture() {
7
+ const child = new EventEmitter();
8
+ Object.assign(child, { pid: 12345, exitCode: null, signalCode: null });
9
+ const signals = [];
10
+ child.kill = signal => { signals.push(String(signal)); return true; };
11
+ return { child, signals };
12
+ }
13
+ const tick = () => new Promise(done => setImmediate(done));
14
+ test('owned child signal error does not confirm process termination', async () => {
15
+ const f = fixture();
16
+ const owned = watchOwnedChild(f.child);
17
+ let exited = false;
18
+ void owned.exited.then(() => { exited = true; });
19
+ f.child.emit('error', new Error('PRIVATE_CANARY'));
20
+ await tick();
21
+ assert.equal(owned.failed, true);
22
+ assert.equal(owned.stopped, false);
23
+ assert.equal(exited, false);
24
+ f.child.emit('exit', null, 'SIGTERM');
25
+ await owned.exited;
26
+ assert.equal(owned.stopped, true);
27
+ });
28
+ test('owned child failed spawn without a PID is not treated as a live process', async () => {
29
+ const f = fixture();
30
+ Object.assign(f.child, { pid: undefined });
31
+ const owned = watchOwnedChild(f.child);
32
+ f.child.emit('error', new Error('synthetic spawn failure'));
33
+ await owned.exited;
34
+ await owned.stop();
35
+ assert.equal(owned.failed, true);
36
+ assert.equal(owned.stopped, true);
37
+ assert.deepEqual(f.signals, []);
38
+ });
39
+ test('owned child concurrent cancellation waits for actual exit and signals once', async () => {
40
+ const f = fixture();
41
+ const owned = watchOwnedChild(f.child);
42
+ let settled = false;
43
+ const first = owned.stop({ graceMs: 500 }).then(() => { settled = true; });
44
+ const second = owned.stop({ graceMs: 500 });
45
+ await tick();
46
+ assert.equal(settled, false);
47
+ assert.deepEqual(f.signals, ['SIGTERM']);
48
+ f.child.emit('error', new Error('synthetic kill error'));
49
+ await tick();
50
+ assert.equal(settled, false);
51
+ f.child.emit('exit', null, 'SIGTERM');
52
+ await Promise.all([first, second]);
53
+ assert.equal(owned.stopped, true);
54
+ assert.deepEqual(f.signals, ['SIGTERM']);
55
+ });
56
+ test('owned child escalation rechecks attribution before signalling the retained handle', async () => {
57
+ const f = fixture();
58
+ const owned = watchOwnedChild(f.child);
59
+ let checks = 0;
60
+ f.child.kill = signal => {
61
+ f.signals.push(String(signal));
62
+ if (signal === 'SIGKILL')
63
+ queueMicrotask(() => f.child.emit('exit', null, 'SIGKILL'));
64
+ return true;
65
+ };
66
+ await owned.stop({ graceMs: 5, verify: async () => { checks++; return true; } });
67
+ assert.equal(checks, 2);
68
+ assert.deepEqual(f.signals, ['SIGTERM', 'SIGKILL']);
69
+ assert.equal(owned.stopped, true);
70
+ });
71
+ test('owned child lost attribution neither kills another process nor claims stop', async () => {
72
+ const f = fixture();
73
+ const owned = watchOwnedChild(f.child);
74
+ let checks = 0;
75
+ await assert.rejects(owned.stop({ graceMs: 5, verify: async () => ++checks === 1 }), /^Error: owned_child_stop_unconfirmed$/);
76
+ assert.deepEqual(f.signals, ['SIGTERM']);
77
+ assert.equal(owned.stopped, false);
78
+ assert.equal(f.child.listenerCount('exit'), 1);
79
+ f.child.emit('exit', null, 'SIGTERM');
80
+ await owned.exited;
81
+ });
82
+ test('owned child attribution error stays sanitized and preserves live-child observation', async () => {
83
+ const f = fixture();
84
+ const owned = watchOwnedChild(f.child);
85
+ await assert.rejects(owned.stop({ verify: async () => { throw new Error('PRIVATE_CANARY'); } }), /^Error: owned_child_stop_unconfirmed$/);
86
+ assert.deepEqual(f.signals, []);
87
+ assert.equal(owned.stopped, false);
88
+ f.child.emit('exit', 0, null);
89
+ await owned.exited;
90
+ });
91
+ test('owned child timeout retains uncertainty instead of deleting the exit listener', async () => {
92
+ const f = fixture();
93
+ const owned = watchOwnedChild(f.child);
94
+ f.child.kill = signal => {
95
+ f.signals.push(String(signal));
96
+ f.child.emit('error', new Error('PRIVATE_CANARY'));
97
+ return false;
98
+ };
99
+ await assert.rejects(owned.stop({ graceMs: 5 }), /^Error: owned_child_stop_unconfirmed$/);
100
+ assert.equal(owned.stopped, false);
101
+ assert.deepEqual(f.signals, ['SIGTERM', 'SIGKILL']);
102
+ assert.equal(f.child.listenerCount('exit'), 1);
103
+ f.child.emit('exit', 0, null);
104
+ await owned.exited;
105
+ assert.equal(owned.stopped, true);
106
+ });
107
+ test('owned child already terminal requires no signal or attribution lookup', async () => {
108
+ const f = fixture();
109
+ Object.assign(f.child, { exitCode: 0 });
110
+ const owned = watchOwnedChild(f.child);
111
+ await owned.stop({ verify: async () => { throw new Error('must not inspect'); } });
112
+ assert.equal(owned.stopped, true);
113
+ assert.deepEqual(f.signals, []);
114
+ });
115
+ test('owned child cancellation drains a real C-only spawned process', async () => {
116
+ const child = spawn(process.execPath, ['-e', 'console.log("ready"); setInterval(() => {}, 1000)'], { stdio: ['ignore', 'pipe', 'ignore'] });
117
+ const owned = watchOwnedChild(child);
118
+ try {
119
+ await new Promise((resolveReady, reject) => {
120
+ const timer = setTimeout(() => reject(new Error('fixture readiness timeout')), 5000);
121
+ child.stdout.once('data', () => { clearTimeout(timer); resolveReady(); });
122
+ child.once('error', error => { clearTimeout(timer); reject(error); });
123
+ });
124
+ assert.equal(owned.stopped, false);
125
+ await owned.stop({ graceMs: 1000 });
126
+ assert.equal(owned.stopped, true);
127
+ assert.ok(child.exitCode !== null || child.signalCode !== null);
128
+ }
129
+ finally {
130
+ await owned.stop({ graceMs: 1000 });
131
+ }
132
+ });
133
+ //# sourceMappingURL=ownedChildLifecycle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownedChildLifecycle.test.js","sourceRoot":"","sources":["../src/ownedChildLifecycle.test.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { fileURLToPath } from 'node:url';
7
7
  import { runInNewContext } from 'node:vm';
8
8
  import test from 'node:test';
9
9
  import ts from 'typescript';
10
+ import { currentBootstrapHostScope, prepareCodexBootstrapHost } from './bootstrapHostScope.js';
10
11
  // Parse and execute the production helper; inject only OS boundaries, not lock logic.
11
12
  async function acquire(overrides = {}) {
12
13
  const text = await fs.readFile(fileURLToPath(new URL('../src/index.ts', import.meta.url)), 'utf8');
@@ -18,9 +19,182 @@ async function acquire(overrides = {}) {
18
19
  });
19
20
  assert.equal(compiled.diagnostics?.filter(item => item.category === ts.DiagnosticCategory.Error).length, 0);
20
21
  return runInNewContext(`${compiled.outputText}\nacquirePidLock`, {
21
- ...fs, dirname, resolve, randomUUID, Date, setTimeout, process, ...overrides,
22
+ ...fs, dirname, resolve, randomUUID, Date, setTimeout, process, currentBootstrapHostScope, ...overrides,
22
23
  }, { timeout: 1000, contextCodeGeneration: { strings: false, wasm: false } });
23
24
  }
25
+ function scopedFixture(workspace, current) {
26
+ const now = Date.now(), digest = `sha256:${'a'.repeat(64)}`;
27
+ const id = (n) => `${String(n).padStart(8, '0')}-1111-4111-8111-111111111111`;
28
+ return prepareCodexBootstrapHost({ workspace, signal: new AbortController().signal, current,
29
+ intent: { schema: 'dharma.codex-setup-intent/v1', operationId: id(1), setupReference: id(2),
30
+ organizationId: 'org_demo', recipientMembershipId: id(3), origin: 'https://hq.example',
31
+ repositoryFingerprint: digest, policyRevision: 'policy-v1', scopeDigest: digest, contractDigest: digest,
32
+ hostContextId: id(4), issuedAt: new Date(now - 1000).toISOString(), expiresAt: new Date(now + 60_000).toISOString() } }).scope;
33
+ }
34
+ test('scoped PID lock denies a closed owner before filesystem admission', async () => {
35
+ const f = await fixture();
36
+ const calls = [];
37
+ const scope = scopedFixture(f.root, async () => true);
38
+ scope.close();
39
+ try {
40
+ const lock = await acquire({ currentBootstrapHostScope: () => scope,
41
+ mkdir: async () => { calls.push('mkdir'); } });
42
+ await assert.rejects(lock(resolve(f.root, 'new', 'lock'), 50, 'private-timeout-canary'), { message: 'codex_setup_host_scope_unavailable' });
43
+ assert.deepEqual(calls, []);
44
+ }
45
+ finally {
46
+ scope.close();
47
+ await f.cleanup();
48
+ }
49
+ });
50
+ for (const boundary of ['write', 'link', 'candidate_unlink']) {
51
+ test(`scoped PID lock releases acquired resources after withdrawal during ${boundary}`, async () => {
52
+ const f = await fixture();
53
+ await fs.unlink(f.lock);
54
+ let allowed = true;
55
+ const scope = scopedFixture(f.root, async () => allowed);
56
+ const effects = [];
57
+ try {
58
+ const lock = await acquire({ currentBootstrapHostScope: () => scope,
59
+ writeFile: async (path, value, options) => {
60
+ effects.push('write');
61
+ await fs.writeFile(path, value, options);
62
+ if (boundary === 'write')
63
+ allowed = false;
64
+ }, link: async (from, to) => {
65
+ effects.push('link');
66
+ await fs.link(from, to);
67
+ if (boundary === 'link')
68
+ allowed = false;
69
+ }, unlink: async (path) => {
70
+ effects.push(path === f.lock ? 'primary_unlink' : 'candidate_unlink');
71
+ await fs.unlink(path);
72
+ if (boundary === 'candidate_unlink' && path !== f.lock)
73
+ allowed = false;
74
+ } });
75
+ await assert.rejects(lock(f.lock, 50, 'private-timeout-canary'), { message: 'codex_setup_host_scope_unavailable' });
76
+ assert.deepEqual(await fs.readdir(f.root), []);
77
+ if (boundary === 'write')
78
+ assert.equal(effects.includes('link'), false);
79
+ }
80
+ finally {
81
+ scope.close();
82
+ await f.cleanup();
83
+ }
84
+ });
85
+ }
86
+ test('scoped PID contention cancellation preserves foreign lock and recovery ownership', async () => {
87
+ const f = await fixture();
88
+ let allowed = true;
89
+ await fs.mkdir(f.recovery);
90
+ await fs.writeFile(resolve(f.recovery, 'owner'), `${process.pid}\n`);
91
+ const before = await fs.readFile(f.lock, 'utf8'), scope = scopedFixture(f.root, async () => allowed);
92
+ try {
93
+ const lock = await acquire({ currentBootstrapHostScope: () => scope,
94
+ link: async (from, to) => {
95
+ try {
96
+ await fs.link(from, to);
97
+ }
98
+ catch (error) {
99
+ allowed = false;
100
+ throw error;
101
+ }
102
+ } });
103
+ await assert.rejects(lock(f.lock, 50, 'private-timeout-canary'), { message: 'codex_setup_host_scope_unavailable' });
104
+ assert.equal(await fs.readFile(f.lock, 'utf8'), before);
105
+ assert.equal(await fs.readFile(resolve(f.recovery, 'owner'), 'utf8'), `${process.pid}\n`);
106
+ assert.deepEqual((await fs.readdir(f.root)).sort(), ['startup.lock', 'startup.lock.recovery']);
107
+ }
108
+ finally {
109
+ scope.close();
110
+ await f.cleanup();
111
+ }
112
+ });
113
+ test('scoped PID lock cleanup never removes a replacement foreign lock', async () => {
114
+ const f = await fixture();
115
+ await fs.unlink(f.lock);
116
+ const scope = scopedFixture(f.root, async () => true);
117
+ try {
118
+ const lock = await acquire({ currentBootstrapHostScope: () => scope });
119
+ const release = await lock(f.lock, 50, 'timeout');
120
+ // Keep the old inode live so filesystem reuse cannot make a false match.
121
+ await fs.rename(f.lock, resolve(f.root, 'original'));
122
+ await fs.writeFile(f.lock, 'foreign-owner-canary\n');
123
+ scope.close();
124
+ await assert.rejects(release(), { message: 'codex_setup_host_lock_cleanup_unconfirmed' });
125
+ assert.equal(await fs.readFile(f.lock, 'utf8'), 'foreign-owner-canary\n');
126
+ }
127
+ finally {
128
+ scope.close();
129
+ await f.cleanup();
130
+ }
131
+ });
132
+ test('scoped PID lock current acquisition and repeated release preserve ordinary exclusion', async () => {
133
+ const f = await fixture();
134
+ await fs.unlink(f.lock);
135
+ const scope = scopedFixture(f.root, async () => true);
136
+ try {
137
+ const lock = await acquire({ currentBootstrapHostScope: () => scope });
138
+ const release = await lock(f.lock, 50, 'timeout');
139
+ assert.equal(await fs.readFile(f.lock, 'utf8'), `${process.pid}\n`);
140
+ scope.close();
141
+ await Promise.all([release(), release(), release()]);
142
+ await release();
143
+ assert.deepEqual(await fs.readdir(f.root), []);
144
+ }
145
+ finally {
146
+ scope.close();
147
+ await f.cleanup();
148
+ }
149
+ });
150
+ for (const boundary of ['recovery_publication', 'dead_primary_quarantine']) {
151
+ test(`scoped PID recovery preserves foreign evidence after withdrawal during ${boundary}`, async () => {
152
+ const f = await fixture();
153
+ await fs.writeFile(f.lock, '2147483647\n');
154
+ let allowed = true;
155
+ const scope = scopedFixture(f.root, async () => allowed);
156
+ try {
157
+ const lock = await acquire({ currentBootstrapHostScope: () => scope,
158
+ process: { platform: 'linux', pid: process.pid, kill: () => {
159
+ throw Object.assign(new Error('fixture dead PID'), { code: 'ESRCH' });
160
+ } }, rename: async (from, to) => {
161
+ await fs.rename(from, to);
162
+ if (boundary === 'recovery_publication' && to === f.recovery
163
+ || boundary === 'dead_primary_quarantine' && from === f.lock)
164
+ allowed = false;
165
+ } });
166
+ await assert.rejects(lock(f.lock, 100, 'private-timeout-canary'), { message: 'codex_setup_host_scope_unavailable' });
167
+ const files = await fs.readdir(f.root);
168
+ assert.equal(files.some(name => name.includes('.candidate') || name === 'startup.lock.recovery'), false);
169
+ const preserved = boundary === 'recovery_publication' ? f.lock
170
+ : resolve(f.root, files.find(name => name.startsWith('startup.lock.dead.')));
171
+ assert.equal(await fs.readFile(preserved, 'utf8'), '2147483647\n');
172
+ }
173
+ finally {
174
+ scope.close();
175
+ await f.cleanup();
176
+ }
177
+ });
178
+ }
179
+ test('scoped PID lock retains qualified stale-owner recovery', async () => {
180
+ const f = await fixture();
181
+ await fs.writeFile(f.lock, '2147483647\n');
182
+ const scope = scopedFixture(f.root, async () => true);
183
+ try {
184
+ const lock = await acquire({ currentBootstrapHostScope: () => scope,
185
+ process: { platform: 'linux', pid: process.pid, kill: () => {
186
+ throw Object.assign(new Error('fixture dead PID'), { code: 'ESRCH' });
187
+ } } });
188
+ const release = await lock(f.lock, 100, 'timeout');
189
+ assert.equal(await fs.readFile(f.lock, 'utf8'), `${process.pid}\n`);
190
+ await release();
191
+ assert.deepEqual(await fs.readdir(f.root), []);
192
+ }
193
+ finally {
194
+ scope.close();
195
+ await f.cleanup();
196
+ }
197
+ });
24
198
  function permissionError() {
25
199
  return Object.assign(new Error('Windows directory rename denied'), { code: 'EPERM' });
26
200
  }
@@ -143,12 +317,26 @@ test('POSIX EPERM is not converted to Windows recovery contention', async () =>
143
317
  test('Windows recovery publication tolerates repeated owner turnover within its deadline', async () => {
144
318
  const f = await fixture();
145
319
  let pending;
320
+ let releasePublication;
321
+ const publication = new Promise(resolvePublication => { releasePublication = resolvePublication; });
322
+ let fifthDenial;
323
+ const denialsObserved = new Promise(resolveDenial => { fifthDenial = resolveDenial; });
146
324
  try {
147
- let denied = 0;
148
- const lock = await acquire({ process: { platform: 'win32', pid: process.pid, kill: process.kill.bind(process) },
325
+ let attempts = 0;
326
+ let clock = 0;
327
+ const lock = await acquire({ Date: { now: () => clock },
328
+ setTimeout: (done, milliseconds) => setImmediate(() => { clock += milliseconds; done(); }),
329
+ process: { platform: 'win32', pid: process.pid, kill: process.kill.bind(process) },
149
330
  rename: async (source, target) => {
150
- if (target === f.recovery && denied++ < 5)
151
- throw permissionError();
331
+ if (target === f.recovery) {
332
+ attempts++;
333
+ if (attempts <= 5) {
334
+ if (attempts === 5)
335
+ fifthDenial();
336
+ throw permissionError();
337
+ }
338
+ await publication;
339
+ }
152
340
  await fs.rename(source, target);
153
341
  } });
154
342
  let state = 'waiting';
@@ -156,16 +344,20 @@ test('Windows recovery publication tolerates repeated owner turnover within its
156
344
  state = 'acquired';
157
345
  await release();
158
346
  }, error => { state = error.code || error.message; });
159
- await new Promise(done => setTimeout(done, 75));
347
+ await Promise.race([denialsObserved, pending.then(() => { throw new Error('lock settled before five denials'); })]);
160
348
  assert.equal(state, 'waiting', 'transient publication denial must not fail early or claim ownership');
349
+ assert.equal(attempts, 5);
161
350
  assert.equal(await fs.readFile(f.lock, 'utf8'), `${process.pid}\n`);
162
351
  await fs.unlink(f.lock);
352
+ releasePublication();
163
353
  await pending;
164
354
  assert.equal(state, 'acquired');
165
- assert.ok(denied >= 6);
355
+ assert.equal(attempts, 6);
356
+ assert.ok(clock < 500, 'publication must still complete within the original deadline');
166
357
  assert.deepEqual(await fs.readdir(f.root), []);
167
358
  }
168
359
  finally {
360
+ releasePublication();
169
361
  await pending;
170
362
  await f.cleanup();
171
363
  }
@@ -174,7 +366,48 @@ test('native filesystem PID lock serializes concurrent contenders and removes it
174
366
  const f = await fixture();
175
367
  try {
176
368
  await fs.unlink(f.lock);
177
- const lock = await acquire();
369
+ const observations = [];
370
+ const observe = (value) => {
371
+ observations.push(value);
372
+ if (observations.length > 120)
373
+ observations.shift();
374
+ };
375
+ const label = (path) => path === f.recovery ? 'recovery'
376
+ : path === resolve(f.recovery, 'owner') ? 'owner' : 'candidate';
377
+ const lock = await acquire({
378
+ rename: async (source, target) => {
379
+ try {
380
+ await fs.rename(source, target);
381
+ observe(`rename:${label(target)}:ok`);
382
+ }
383
+ catch (error) {
384
+ observe(`rename:${label(target)}:${error.code}`);
385
+ throw error;
386
+ }
387
+ },
388
+ lstat: async (path) => {
389
+ try {
390
+ const stat = await fs.lstat(path);
391
+ observe(`lstat:${label(path)}:${stat.isSymbolicLink() ? 'symlink' : stat.isDirectory() ? 'directory' : 'file'}`);
392
+ return stat;
393
+ }
394
+ catch (error) {
395
+ observe(`lstat:${label(path)}:${error.code}`);
396
+ throw error;
397
+ }
398
+ },
399
+ readFile: async (path, encoding) => {
400
+ try {
401
+ const text = await fs.readFile(path, encoding);
402
+ observe(`read:${label(path)}:ok`);
403
+ return text;
404
+ }
405
+ catch (error) {
406
+ observe(`read:${label(path)}:${error.code}`);
407
+ throw error;
408
+ }
409
+ },
410
+ });
178
411
  let active = 0;
179
412
  let maximum = 0;
180
413
  let completed = 0;
@@ -192,7 +425,7 @@ test('native filesystem PID lock serializes concurrent contenders and removes it
192
425
  }
193
426
  }));
194
427
  const failures = results.filter(result => result.status === 'rejected');
195
- assert.deepEqual(failures, [], 'all contenders must finish before fixture cleanup');
428
+ assert.deepEqual(failures, [], `all contenders must finish before fixture cleanup; bounded fixture metadata: ${observations.join(',')}`);
196
429
  assert.equal(maximum, 1);
197
430
  assert.equal(completed, 20);
198
431
  assert.deepEqual(await fs.readdir(f.root), []);
@@ -1 +1 @@
1
- {"version":3,"file":"pidLock.test.js","sourceRoot":"","sources":["../src/pidLock.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pidLock.test.js","sourceRoot":"","sources":["../src/pidLock.test.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,7 @@ export declare function createProviderSessionChannel(input: {
49
49
  mode: Mode;
50
50
  expectedRevision: number;
51
51
  assertOwner(): Promise<boolean>;
52
- currentExpiresAt?: () => string | null;
52
+ currentExpiresAt?: () => string | null | Promise<string | null>;
53
53
  verifier: Pick<SessionQuestionVerifier, 'resolvePublicKey'>;
54
54
  authorizeContent(content: string, kind: 'question' | 'answer'): Promise<boolean>;
55
55
  now?: () => Date;
@@ -1 +1 @@
1
- {"version":3,"file":"providerSessionChannel.d.ts","sourceRoot":"","sources":["../src/providerSessionChannel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providerSessionChannel.d.ts","sourceRoot":"","sources":["../src/providerSessionChannel.ts"],"names":[],"mappings":"AACA,OAAO,EAAoC,KAAK,mBAAmB,EAAE,KAAK,eAAe,EACvF,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,KAAK,IAAI,GAAG,cAAc,GAAG,aAAa,CAAC;AAC3C,KAAK,WAAW,GAAG,sBAAsB,GAAG,eAAe,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AACvG,KAAK,YAAY,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAC5G,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IACxF,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AACxE,KAAK,eAAe,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IACnF,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AACjG,KAAK,KAAK,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC;AACrI,KAAK,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAC/E,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAC/F,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAiCnH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,KAAK,IAAI,MAAM,CAI5F;AAQD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE;QAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;IAC1F,KAAK,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IACjE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChE,QAAQ,EAAE,IAAI,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;IAC5D,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;;;;mBA7DgC,MAAM;qBAAe,MAAM;oBAAc,MAAM;6BAAuB,MAAM;sBAC7F,MAAM;kBAAY,MAAM;kBAAY,OAAO;cAAQ,IAAI;kBAAY,MAAM;eAChF,UAAU,GAAG,UAAU;oBAAc,MAAM;gBAAU,OAAO;;;;mBAFpC,MAAM;qBAAe,MAAM;oBAAc,MAAM;6BAAuB,MAAM;sBAC7F,MAAM;kBAAY,MAAM;kBAAY,OAAO;cAAQ,IAAI;kBAAY,MAAM;eAChF,UAAU,GAAG,UAAU;oBAAc,MAAM;gBAAU,OAAO;;;;mBAFpC,MAAM;qBAAe,MAAM;oBAAc,MAAM;6BAAuB,MAAM;sBAC7F,MAAM;kBAAY,MAAM;kBAAY,OAAO;cAAQ,IAAI;kBAAY,MAAM;eAChF,UAAU,GAAG,UAAU;oBAAc,MAAM;gBAAU,OAAO;;;;mBAFpC,MAAM;qBAAe,MAAM;oBAAc,MAAM;6BAAuB,MAAM;sBAC7F,MAAM;kBAAY,MAAM;kBAAY,OAAO;cAAQ,IAAI;kBAAY,MAAM;eAChF,UAAU,GAAG,UAAU;oBAAc,MAAM;gBAAU,OAAO;;;mBAuMlD;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,wBAAwB,EAAE,MAAM,CAAA;KAAE,YAAY;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE;yBAW9I,MAAM,UAAU,MAAM;qBAI1B,KAAK;uBAUH,MAAM,UAAU,MAAM,mBAAmB,MAAM,YAAY;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE;EAexG"}
@@ -81,12 +81,16 @@ export function createProviderSessionChannel(input) {
81
81
  async function owner(live = false) {
82
82
  if (closed)
83
83
  throw new Error('provider_session_channel_closed');
84
- let held = false;
84
+ let held = false, expiresAt = null;
85
85
  try {
86
86
  held = await input.assertOwner();
87
+ expiresAt = input.currentExpiresAt ? await input.currentExpiresAt() : scope.expiresAt;
88
+ if (input.currentExpiresAt)
89
+ held = held && await input.assertOwner();
90
+ }
91
+ catch {
92
+ held = false; /* Unconfirmed ownership cannot authorize another send. */
87
93
  }
88
- catch { /* Unconfirmed ownership cannot authorize another send. */ }
89
- const expiresAt = input.currentExpiresAt ? input.currentExpiresAt() : scope.expiresAt;
90
94
  if (!held || !expiresAt || !Number.isFinite(Date.parse(expiresAt))
91
95
  || !Number.isFinite(now().getTime()) || now().getTime() >= Date.parse(expiresAt)) {
92
96
  closed = true;