@openrig/cli 0.5.3 → 0.5.4

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 (194) hide show
  1. package/daemon/assets/plugins/openrig-core/.claude-plugin/plugin.json +1 -1
  2. package/daemon/assets/plugins/openrig-core/.codex-plugin/plugin.json +1 -1
  3. package/daemon/assets/plugins/openrig-core/README.md +1 -1
  4. package/daemon/assets/plugins/openrig-core/hooks/scripts/refocus.cjs +32 -12
  5. package/daemon/assets/plugins/openrig-core/skills/openrig-skills/SKILL.md +3 -0
  6. package/daemon/assets/plugins/openrig-core/skills/software-for-agents/SKILL.md +4 -9
  7. package/daemon/context-packs/skills/core/agent-starters/manifest.yaml +1 -1
  8. package/daemon/context-packs/skills/core/agent-startup-and-context-ingestion/manifest.yaml +1 -1
  9. package/daemon/context-packs/skills/core/attention-queue/manifest.yaml +1 -1
  10. package/daemon/context-packs/skills/core/cross-host-rig-commands/manifest.yaml +1 -1
  11. package/daemon/context-packs/skills/core/human-in-the-loop/manifest.yaml +1 -1
  12. package/daemon/context-packs/skills/core/openrig-architect/manifest.yaml +1 -1
  13. package/daemon/context-packs/skills/core/openrig-cmux/manifest.yaml +1 -1
  14. package/daemon/context-packs/skills/core/openrig-herdr/manifest.yaml +1 -1
  15. package/daemon/context-packs/skills/core/openrig-upgrade/manifest.yaml +1 -1
  16. package/daemon/context-packs/skills/core/rig-bundles-and-shareable-artifacts/manifest.yaml +1 -1
  17. package/daemon/context-packs/skills/core/rig-lifecycle/manifest.yaml +1 -1
  18. package/daemon/context-packs/skills/core/session-source-fork/manifest.yaml +1 -1
  19. package/daemon/context-packs/skills/core/specification-system/manifest.yaml +1 -1
  20. package/daemon/context-packs/skills/core/topology-mutation-and-seat-management/manifest.yaml +1 -1
  21. package/daemon/context-packs/skills/core/watchdog/manifest.yaml +1 -1
  22. package/daemon/context-packs/skills/pm/backlog-capture/manifest.yaml +1 -1
  23. package/daemon/context-packs/skills/pm/context-builder/manifest.yaml +1 -1
  24. package/daemon/context-packs/skills/pm/exec-summary/manifest.yaml +1 -1
  25. package/daemon/context-packs/skills/pm/office-hours/manifest.yaml +1 -1
  26. package/daemon/context-packs/skills/pm/plan-review/manifest.yaml +1 -1
  27. package/daemon/context-packs/skills/pm/requirements-writer/manifest.yaml +1 -1
  28. package/daemon/context-packs/skills/pm/ui-mockup/manifest.yaml +1 -1
  29. package/daemon/context-packs/skills/pods/development-team/manifest.yaml +1 -1
  30. package/daemon/context-packs/skills/pods/orchestration-team/manifest.yaml +1 -1
  31. package/daemon/context-packs/skills/pods/oversight-team/manifest.yaml +1 -1
  32. package/daemon/context-packs/skills/pods/review-team/manifest.yaml +1 -1
  33. package/daemon/context-packs/skills/process/agent-browser/manifest.yaml +1 -1
  34. package/daemon/context-packs/skills/process/brainstorming/manifest.yaml +1 -1
  35. package/daemon/context-packs/skills/process/context-engineering/manifest.yaml +1 -1
  36. package/daemon/context-packs/skills/process/dogfood/manifest.yaml +1 -1
  37. package/daemon/context-packs/skills/process/executing-plans/manifest.yaml +1 -1
  38. package/daemon/context-packs/skills/process/frontend-design/manifest.yaml +1 -1
  39. package/daemon/context-packs/skills/process/systematic-debugging/manifest.yaml +1 -1
  40. package/daemon/context-packs/skills/process/test-driven-development/manifest.yaml +1 -1
  41. package/daemon/context-packs/skills/process/using-superpowers/manifest.yaml +1 -1
  42. package/daemon/context-packs/skills/process/verification-before-completion/manifest.yaml +1 -1
  43. package/daemon/context-packs/skills/process/writing-plans/manifest.yaml +1 -1
  44. package/daemon/context-packs/world/install/manifest.yaml +1 -1
  45. package/daemon/dist/adapters/tmux.d.ts +31 -0
  46. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  47. package/daemon/dist/adapters/tmux.js +31 -11
  48. package/daemon/dist/adapters/tmux.js.map +1 -1
  49. package/daemon/dist/build-info.js +3 -3
  50. package/daemon/dist/daemon-db-path.d.ts.map +1 -1
  51. package/daemon/dist/daemon-db-path.js +50 -2
  52. package/daemon/dist/daemon-db-path.js.map +1 -1
  53. package/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
  54. package/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  55. package/daemon/dist/domain/plugin-discovery-service.js +175 -1
  56. package/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  57. package/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
  58. package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  59. package/daemon/dist/domain/plugin-vendor-service.js +101 -12
  60. package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  61. package/daemon/dist/domain/queue-repository.d.ts +3 -1
  62. package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  63. package/daemon/dist/domain/queue-repository.js +50 -2
  64. package/daemon/dist/domain/queue-repository.js.map +1 -1
  65. package/daemon/dist/domain/reconciler.d.ts.map +1 -1
  66. package/daemon/dist/domain/reconciler.js +6 -1
  67. package/daemon/dist/domain/reconciler.js.map +1 -1
  68. package/daemon/dist/domain/rig-repository.d.ts +4 -0
  69. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  70. package/daemon/dist/domain/rig-repository.js +9 -0
  71. package/daemon/dist/domain/rig-repository.js.map +1 -1
  72. package/daemon/dist/domain/rigspec-instantiator.d.ts +9 -0
  73. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  74. package/daemon/dist/domain/rigspec-instantiator.js +32 -0
  75. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  76. package/daemon/dist/domain/running-name-guard.d.ts +52 -0
  77. package/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
  78. package/daemon/dist/domain/running-name-guard.js +34 -0
  79. package/daemon/dist/domain/running-name-guard.js.map +1 -0
  80. package/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
  81. package/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
  82. package/daemon/dist/domain/seat-lifecycle-service.js +312 -0
  83. package/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
  84. package/daemon/dist/domain/session-transport.d.ts +8 -5
  85. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  86. package/daemon/dist/domain/session-transport.js +39 -16
  87. package/daemon/dist/domain/session-transport.js.map +1 -1
  88. package/daemon/dist/domain/types.d.ts +36 -0
  89. package/daemon/dist/domain/types.d.ts.map +1 -1
  90. package/daemon/dist/domain/types.js.map +1 -1
  91. package/daemon/dist/routes/queue.d.ts.map +1 -1
  92. package/daemon/dist/routes/queue.js +29 -24
  93. package/daemon/dist/routes/queue.js.map +1 -1
  94. package/daemon/dist/routes/rigspec.js +20 -6
  95. package/daemon/dist/routes/rigspec.js.map +1 -1
  96. package/daemon/dist/routes/seat.d.ts.map +1 -1
  97. package/daemon/dist/routes/seat.js +58 -0
  98. package/daemon/dist/routes/seat.js.map +1 -1
  99. package/daemon/dist/routes/transport.d.ts.map +1 -1
  100. package/daemon/dist/routes/transport.js +40 -36
  101. package/daemon/dist/routes/transport.js.map +1 -1
  102. package/daemon/dist/routes/up.js +21 -2
  103. package/daemon/dist/routes/up.js.map +1 -1
  104. package/dist/build-info.js +3 -3
  105. package/dist/cli-error.js +1 -1
  106. package/dist/cli-error.js.map +1 -1
  107. package/dist/commands/broadcast.js +6 -0
  108. package/dist/commands/broadcast.js.map +1 -1
  109. package/dist/commands/context.d.ts.map +1 -1
  110. package/dist/commands/context.js +13 -3
  111. package/dist/commands/context.js.map +1 -1
  112. package/dist/commands/daemon.d.ts.map +1 -1
  113. package/dist/commands/daemon.js +23 -2
  114. package/dist/commands/daemon.js.map +1 -1
  115. package/dist/commands/import.d.ts.map +1 -1
  116. package/dist/commands/import.js +10 -0
  117. package/dist/commands/import.js.map +1 -1
  118. package/dist/commands/queue.d.ts.map +1 -1
  119. package/dist/commands/queue.js +36 -13
  120. package/dist/commands/queue.js.map +1 -1
  121. package/dist/commands/seat.d.ts.map +1 -1
  122. package/dist/commands/seat.js +88 -0
  123. package/dist/commands/seat.js.map +1 -1
  124. package/dist/commands/send.d.ts.map +1 -1
  125. package/dist/commands/send.js +224 -20
  126. package/dist/commands/send.js.map +1 -1
  127. package/dist/commands/up.d.ts.map +1 -1
  128. package/dist/commands/up.js +8 -0
  129. package/dist/commands/up.js.map +1 -1
  130. package/dist/commands/walk.d.ts +1 -1
  131. package/dist/commands/walk.d.ts.map +1 -1
  132. package/dist/commands/walk.js +20 -10
  133. package/dist/commands/walk.js.map +1 -1
  134. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts +31 -0
  135. package/node_modules/@openrig/daemon/dist/adapters/tmux.d.ts.map +1 -1
  136. package/node_modules/@openrig/daemon/dist/adapters/tmux.js +31 -11
  137. package/node_modules/@openrig/daemon/dist/adapters/tmux.js.map +1 -1
  138. package/node_modules/@openrig/daemon/dist/build-info.js +3 -3
  139. package/node_modules/@openrig/daemon/dist/daemon-db-path.d.ts.map +1 -1
  140. package/node_modules/@openrig/daemon/dist/daemon-db-path.js +50 -2
  141. package/node_modules/@openrig/daemon/dist/daemon-db-path.js.map +1 -1
  142. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts +16 -0
  143. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.d.ts.map +1 -1
  144. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js +175 -1
  145. package/node_modules/@openrig/daemon/dist/domain/plugin-discovery-service.js.map +1 -1
  146. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts +9 -5
  147. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
  148. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js +101 -12
  149. package/node_modules/@openrig/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
  150. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts +3 -1
  151. package/node_modules/@openrig/daemon/dist/domain/queue-repository.d.ts.map +1 -1
  152. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js +50 -2
  153. package/node_modules/@openrig/daemon/dist/domain/queue-repository.js.map +1 -1
  154. package/node_modules/@openrig/daemon/dist/domain/reconciler.d.ts.map +1 -1
  155. package/node_modules/@openrig/daemon/dist/domain/reconciler.js +6 -1
  156. package/node_modules/@openrig/daemon/dist/domain/reconciler.js.map +1 -1
  157. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts +4 -0
  158. package/node_modules/@openrig/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  159. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js +9 -0
  160. package/node_modules/@openrig/daemon/dist/domain/rig-repository.js.map +1 -1
  161. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts +9 -0
  162. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  163. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js +32 -0
  164. package/node_modules/@openrig/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  165. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts +52 -0
  166. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.d.ts.map +1 -0
  167. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js +34 -0
  168. package/node_modules/@openrig/daemon/dist/domain/running-name-guard.js.map +1 -0
  169. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts +97 -0
  170. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.d.ts.map +1 -0
  171. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js +312 -0
  172. package/node_modules/@openrig/daemon/dist/domain/seat-lifecycle-service.js.map +1 -0
  173. package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts +8 -5
  174. package/node_modules/@openrig/daemon/dist/domain/session-transport.d.ts.map +1 -1
  175. package/node_modules/@openrig/daemon/dist/domain/session-transport.js +39 -16
  176. package/node_modules/@openrig/daemon/dist/domain/session-transport.js.map +1 -1
  177. package/node_modules/@openrig/daemon/dist/domain/types.d.ts +36 -0
  178. package/node_modules/@openrig/daemon/dist/domain/types.d.ts.map +1 -1
  179. package/node_modules/@openrig/daemon/dist/domain/types.js.map +1 -1
  180. package/node_modules/@openrig/daemon/dist/routes/queue.d.ts.map +1 -1
  181. package/node_modules/@openrig/daemon/dist/routes/queue.js +29 -24
  182. package/node_modules/@openrig/daemon/dist/routes/queue.js.map +1 -1
  183. package/node_modules/@openrig/daemon/dist/routes/rigspec.js +20 -6
  184. package/node_modules/@openrig/daemon/dist/routes/rigspec.js.map +1 -1
  185. package/node_modules/@openrig/daemon/dist/routes/seat.d.ts.map +1 -1
  186. package/node_modules/@openrig/daemon/dist/routes/seat.js +58 -0
  187. package/node_modules/@openrig/daemon/dist/routes/seat.js.map +1 -1
  188. package/node_modules/@openrig/daemon/dist/routes/transport.d.ts.map +1 -1
  189. package/node_modules/@openrig/daemon/dist/routes/transport.js +40 -36
  190. package/node_modules/@openrig/daemon/dist/routes/transport.js.map +1 -1
  191. package/node_modules/@openrig/daemon/dist/routes/up.js +21 -2
  192. package/node_modules/@openrig/daemon/dist/routes/up.js.map +1 -1
  193. package/node_modules/@openrig/daemon/package.json +1 -1
  194. package/package.json +1 -1
@@ -0,0 +1,52 @@
1
+ import type Database from "better-sqlite3";
2
+ /**
3
+ * S5b (OPR.0.5.4.11) — the running-name guard, the FLOOR against duplicate rig
4
+ * identity: `rig up` on a name whose rig is RUNNING must refuse before any
5
+ * create/launch, because session addresses are name-keyed
6
+ * (`{pod}-{member}@{rig}`) and a second running rig collides tmux names, queue
7
+ * destinations, and transcripts while doubling seat launches on one namespace.
8
+ *
9
+ * RUNNING is derived exactly as the daemon already derives it — the rigs table
10
+ * has no status column; a rig is running iff it has at least one sessions row
11
+ * with status='running' (the classifier-lease liveness derivation,
12
+ * startup.ts; the ps summary running-count uses the same predicate).
13
+ *
14
+ * Deliberately NOT here: global name uniqueness, stopped-generation reuse
15
+ * semantics (plural-aware findRigsByName is load-bearing — a same-name rig
16
+ * whose sessions are all non-running never trips this guard), any schema
17
+ * change. The restore-vs-up name-reuse design is a 0.5.5 intake.
18
+ */
19
+ export interface RunningRigIdentity {
20
+ id: string;
21
+ name: string;
22
+ runningSessionCount: number;
23
+ }
24
+ export type RunningNameGuardVerdict = {
25
+ ok: true;
26
+ } | {
27
+ ok: false;
28
+ code: "rig_name_running";
29
+ message: string;
30
+ runningRig: RunningRigIdentity;
31
+ };
32
+ export interface RunningNameGuardDeps {
33
+ /** The repo's existing plural-aware name lookup (ORDER BY created_at). */
34
+ findRigsByName(name: string): Array<{
35
+ id: string;
36
+ name: string;
37
+ }>;
38
+ /** Count of sessions rows with status='running' belonging to the rig's nodes. */
39
+ countRunningSessions(rigId: string): number;
40
+ }
41
+ /** The one liveness read, shared by every caller: sessions joined through the
42
+ * rig's nodes, status='running' — the daemon's existing running-derivation. */
43
+ export declare function makeRunningSessionCounter(db: Database.Database): (rigId: string) => number;
44
+ /**
45
+ * The ONE guard every instantiator create path calls before `createRig()`.
46
+ * Returns ok when no same-name rig is running (including the all-stopped
47
+ * generations case — reuse proceeds unchanged); otherwise a teaching refusal
48
+ * naming the running rig, what was checked, that nothing was created or
49
+ * launched, and the supported alternatives.
50
+ */
51
+ export declare function checkRunningNameGuard(deps: RunningNameGuardDeps, name: string): RunningNameGuardVerdict;
52
+ //# sourceMappingURL=running-name-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"running-name-guard.d.ts","sourceRoot":"","sources":["../../src/domain/running-name-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GACZ;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE7F,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,iFAAiF;IACjF,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7C;AAED;gFACgF;AAChF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAO1F;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAkBvG"}
@@ -0,0 +1,34 @@
1
+ /** The one liveness read, shared by every caller: sessions joined through the
2
+ * rig's nodes, status='running' — the daemon's existing running-derivation. */
3
+ export function makeRunningSessionCounter(db) {
4
+ return (rigId) => {
5
+ const row = db.prepare("SELECT COUNT(*) AS c FROM sessions s JOIN nodes n ON n.id = s.node_id WHERE n.rig_id = ? AND s.status = 'running'").get(rigId);
6
+ return row.c;
7
+ };
8
+ }
9
+ /**
10
+ * The ONE guard every instantiator create path calls before `createRig()`.
11
+ * Returns ok when no same-name rig is running (including the all-stopped
12
+ * generations case — reuse proceeds unchanged); otherwise a teaching refusal
13
+ * naming the running rig, what was checked, that nothing was created or
14
+ * launched, and the supported alternatives.
15
+ */
16
+ export function checkRunningNameGuard(deps, name) {
17
+ for (const rig of deps.findRigsByName(name)) {
18
+ const runningSessionCount = deps.countRunningSessions(rig.id);
19
+ if (runningSessionCount > 0) {
20
+ return {
21
+ ok: false,
22
+ code: "rig_name_running",
23
+ message: `A rig named "${name}" is already RUNNING: ${rig.id} with ${runningSessionCount} running session(s) ` +
24
+ `(checked: existing rigs with this name for sessions in status 'running'). ` +
25
+ `Nothing was created or launched. Alternatives: work with the running rig ` +
26
+ `(rig ps --nodes / rig send), stop it first with 'rig down ${name}', ` +
27
+ `or launch this spec under a different name.`,
28
+ runningRig: { id: rig.id, name, runningSessionCount },
29
+ };
30
+ }
31
+ }
32
+ return { ok: true };
33
+ }
34
+ //# sourceMappingURL=running-name-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"running-name-guard.js","sourceRoot":"","sources":["../../src/domain/running-name-guard.ts"],"names":[],"mappings":"AAqCA;gFACgF;AAChF,MAAM,UAAU,yBAAyB,CAAC,EAAqB;IAC7D,OAAO,CAAC,KAAa,EAAU,EAAE;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,mHAAmH,CACpH,CAAC,GAAG,CAAC,KAAK,CAAkB,CAAC;QAC9B,OAAO,GAAG,CAAC,CAAC,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA0B,EAAE,IAAY;IAC5E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EACL,gBAAgB,IAAI,yBAAyB,GAAG,CAAC,EAAE,SAAS,mBAAmB,sBAAsB;oBACrG,4EAA4E;oBAC5E,2EAA2E;oBAC3E,6DAA6D,IAAI,KAAK;oBACtE,6CAA6C;gBAC/C,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,97 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { RigRepository } from "./rig-repository.js";
3
+ import type { SessionRegistry } from "./session-registry.js";
4
+ import type { EventBus } from "./event-bus.js";
5
+ import type { TmuxAdapter } from "../adapters/tmux.js";
6
+ export interface SeatLifecycleDeps {
7
+ db: Database.Database;
8
+ rigRepo: RigRepository;
9
+ sessionRegistry: SessionRegistry;
10
+ eventBus: EventBus;
11
+ tmuxAdapter: TmuxAdapter;
12
+ }
13
+ export interface SeatRefusal {
14
+ ok: false;
15
+ code: "seat_ref_required" | "seat_not_found" | "seat_ambiguous" | "missing_model" | "missing_reason" | "no_session" | "claimed_session" | "session_not_live" | "session_live" | "tmux_probe_failed" | "nothing_to_clean";
16
+ message: string;
17
+ guidance?: string;
18
+ matches?: Array<{
19
+ rig_name: string;
20
+ logical_id: string;
21
+ current_occupant: string | null;
22
+ }>;
23
+ }
24
+ export interface SeatDescriptor {
25
+ rigId: string;
26
+ rigName: string;
27
+ logicalId: string;
28
+ nodeId: string;
29
+ }
30
+ export type SetModelResult = {
31
+ ok: true;
32
+ seat: SeatDescriptor;
33
+ from: string | null;
34
+ to: string;
35
+ changed: boolean;
36
+ } | SeatRefusal;
37
+ export type StopSeatResult = {
38
+ ok: true;
39
+ seat: SeatDescriptor;
40
+ sessionName: string;
41
+ sessionId: string;
42
+ } | SeatRefusal;
43
+ export type CleanSeatResult = {
44
+ ok: true;
45
+ seat: SeatDescriptor;
46
+ actions: {
47
+ sessionsExited: string[];
48
+ bindingCleared: boolean;
49
+ };
50
+ } | SeatRefusal;
51
+ export declare class SeatLifecycleService {
52
+ private readonly db;
53
+ private readonly rigRepo;
54
+ private readonly sessionRegistry;
55
+ private readonly eventBus;
56
+ private readonly tmuxAdapter;
57
+ constructor(deps: SeatLifecycleDeps);
58
+ setModel(input: {
59
+ seatRef: string;
60
+ model: string;
61
+ reason: string;
62
+ operator?: string | null;
63
+ }): Promise<SetModelResult>;
64
+ stopSeat(input: {
65
+ seatRef: string;
66
+ reason: string;
67
+ operator?: string | null;
68
+ }): Promise<StopSeatResult>;
69
+ cleanSeat(input: {
70
+ seatRef: string;
71
+ reason: string;
72
+ operator?: string | null;
73
+ }): Promise<CleanSeatResult>;
74
+ /**
75
+ * The ONE liveness read both mutating verbs share (fix r1, row 9baac99f):
76
+ * the CLASSIFIED probeSession, never the collapsed hasSession view.
77
+ * present / absent → returned for the verb to act on (absent is
78
+ * POSITIVE tmux evidence, per OPR.0.5.4.2).
79
+ * transport_unavailable → an INDETERMINATE refusal: session existence was
80
+ * NOT determined, so neither verb may act — and the
81
+ * refusal never routes the operator to a
82
+ * destructive verb.
83
+ * unexpected probe throw → the same indeterminate refusal (fail closed).
84
+ */
85
+ private probeLiveness;
86
+ private requireReason;
87
+ private describe;
88
+ private latestSession;
89
+ /** The ONE resolution path, mirroring SeatStatusService.findMatches semantics
90
+ * (seat-status-service.ts) so every seat verb resolves identically: a canonical
91
+ * `name@rig` ref scopes to that rig's inventory; a bare ref scans all rigs;
92
+ * matches are by canonicalSessionName or logicalId; >1 match is a listed
93
+ * ambiguity, never a pick. */
94
+ private resolveSeat;
95
+ private findMatches;
96
+ }
97
+ //# sourceMappingURL=seat-lifecycle-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-lifecycle-service.d.ts","sourceRoot":"","sources":["../../src/domain/seat-lifecycle-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,312 @@
1
+ import { getNodeInventory } from "./node-inventory.js";
2
+ import { parseSessionName } from "./session-name.js";
3
+ /**
4
+ * S5 (OPR.0.5.4.7) — the seat-lifecycle verb surface: set-model, single-seat stop,
5
+ * dead-session clean. One coherent design (KI-5.3-9):
6
+ *
7
+ * - ONE seat-resolution path shared by all three verbs (the SeatStatusService
8
+ * findMatches semantics: parseSessionName greedy first-@ rig; canonical-name or
9
+ * logical-id match; ambiguity returns the match list) — never a per-verb resolver.
10
+ * - Every mutation is transactional and persists its audit event in the SAME
11
+ * transaction (node.model_changed / session.stopped / session.cleaned).
12
+ * - Every refusal names what was actually checked; an indeterminate tmux probe is
13
+ * a refusal, never a guess (the S1 error bar applied at birth).
14
+ */
15
+ const SEAT_LOOKUP_GUIDANCE = "List seats with: rig ps --nodes";
16
+ /** Terminal session statuses — rows the clean verb must NOT touch (they already
17
+ * record an ended tenancy; the vocabulary is shared with seat-handover-service
18
+ * and the watchdog's TERMINAL_SESSION_STATUSES). */
19
+ const TERMINAL_SESSION_STATUSES = new Set(["superseded", "detached", "exited"]);
20
+ export class SeatLifecycleService {
21
+ db;
22
+ rigRepo;
23
+ sessionRegistry;
24
+ eventBus;
25
+ tmuxAdapter;
26
+ constructor(deps) {
27
+ if (deps.db !== deps.rigRepo.db)
28
+ throw new Error("SeatLifecycleService: rigRepo must share the same db handle");
29
+ if (deps.db !== deps.sessionRegistry.db)
30
+ throw new Error("SeatLifecycleService: sessionRegistry must share the same db handle");
31
+ if (deps.db !== deps.eventBus.db)
32
+ throw new Error("SeatLifecycleService: eventBus must share the same db handle");
33
+ this.db = deps.db;
34
+ this.rigRepo = deps.rigRepo;
35
+ this.sessionRegistry = deps.sessionRegistry;
36
+ this.eventBus = deps.eventBus;
37
+ this.tmuxAdapter = deps.tmuxAdapter;
38
+ }
39
+ async setModel(input) {
40
+ const required = this.requireReason(input.reason);
41
+ if (required)
42
+ return required;
43
+ if (!input.model?.trim()) {
44
+ return { ok: false, code: "missing_model", message: "A target model id is required (--model)." };
45
+ }
46
+ const resolved = this.resolveSeat(input.seatRef);
47
+ if ("code" in resolved)
48
+ return resolved;
49
+ const model = input.model.trim();
50
+ const seat = this.describe(resolved);
51
+ const from = resolved.entry.model ?? null;
52
+ if (from === model) {
53
+ // Honest no-op: the persisted value already IS the target; no event is minted.
54
+ return { ok: true, seat, from, to: model, changed: false };
55
+ }
56
+ let persisted = null;
57
+ const tx = this.db.transaction(() => {
58
+ this.rigRepo.setNodeModel(resolved.nodeId, model);
59
+ persisted = this.eventBus.persistWithinTransaction({
60
+ type: "node.model_changed",
61
+ rigId: seat.rigId,
62
+ nodeId: seat.nodeId,
63
+ logicalId: seat.logicalId,
64
+ from,
65
+ to: model,
66
+ reason: input.reason.trim(),
67
+ operator: input.operator ?? null,
68
+ });
69
+ });
70
+ tx();
71
+ if (persisted)
72
+ this.eventBus.notifySubscribers(persisted);
73
+ return { ok: true, seat, from, to: model, changed: true };
74
+ }
75
+ async stopSeat(input) {
76
+ const required = this.requireReason(input.reason);
77
+ if (required)
78
+ return required;
79
+ const resolved = this.resolveSeat(input.seatRef);
80
+ if ("code" in resolved)
81
+ return resolved;
82
+ const seat = this.describe(resolved);
83
+ const session = this.latestSession(resolved.nodeId);
84
+ if (!session) {
85
+ return { ok: false, code: "no_session", message: `Seat "${input.seatRef}" has no session to stop (checked: latest sessions row for node ${seat.logicalId}).` };
86
+ }
87
+ if (session.origin === "claimed") {
88
+ return {
89
+ ok: false,
90
+ code: "claimed_session",
91
+ message: `Session "${session.session_name}" was adopted (origin=claimed), not launched by OpenRig — stop refuses to kill it.`,
92
+ guidance: "Release an adopted session with: rig unclaim",
93
+ };
94
+ }
95
+ // Wave-2 fix round 1 (r1 row 9baac99f): consume the CLASSIFIED probe, never the
96
+ // collapsed hasSession view — a transport blip is INDETERMINATE, not absence
97
+ // (KI-5.3-8 fabricated-absence class, destructive direction).
98
+ const probed = await this.probeLiveness(session.session_name, "stop refuses rather than kill blind");
99
+ if ("code" in probed)
100
+ return probed;
101
+ if (probed.state === "absent") {
102
+ return {
103
+ ok: false,
104
+ code: "session_not_live",
105
+ message: `Session "${session.session_name}" is absent in tmux (checked: tmux has-session, POSITIVE absence evidence) — there is nothing to stop.`,
106
+ guidance: "A dead seat with stale records is returned to launchable with: rig seat clean",
107
+ };
108
+ }
109
+ // Kill exactly this seat's own tmux session — structurally single-seat.
110
+ const kill = await this.tmuxAdapter.killSession(session.session_name);
111
+ if (kill && !kill.ok && kill.code !== "session_not_found") {
112
+ return {
113
+ ok: false,
114
+ code: "tmux_probe_failed",
115
+ message: `tmux kill-session for "${session.session_name}" failed: ${kill.message ?? kill.code}`,
116
+ };
117
+ }
118
+ let persisted = null;
119
+ const tx = this.db.transaction(() => {
120
+ this.sessionRegistry.updateStatus(session.id, "exited");
121
+ this.sessionRegistry.clearBinding(resolved.nodeId);
122
+ persisted = this.eventBus.persistWithinTransaction({
123
+ type: "session.stopped",
124
+ rigId: seat.rigId,
125
+ nodeId: seat.nodeId,
126
+ sessionName: session.session_name,
127
+ reason: input.reason.trim(),
128
+ operator: input.operator ?? null,
129
+ });
130
+ });
131
+ tx();
132
+ if (persisted)
133
+ this.eventBus.notifySubscribers(persisted);
134
+ return { ok: true, seat, sessionName: session.session_name, sessionId: session.id };
135
+ }
136
+ async cleanSeat(input) {
137
+ const required = this.requireReason(input.reason);
138
+ if (required)
139
+ return required;
140
+ const resolved = this.resolveSeat(input.seatRef);
141
+ if ("code" in resolved)
142
+ return resolved;
143
+ const seat = this.describe(resolved);
144
+ const binding = this.sessionRegistry.getBindingForNode(resolved.nodeId);
145
+ const nonTerminal = this.db.prepare("SELECT id, session_name, status, origin FROM sessions WHERE node_id = ? ORDER BY id").all(resolved.nodeId)
146
+ .filter((s) => !TERMINAL_SESSION_STATUSES.has(s.status));
147
+ // Fix r2-F3 (row 30045f39): clean MUTATES every non-terminal session row, so
148
+ // its safety checks must cover exactly that set — probing only the newest row
149
+ // fabricates safety for the others (older-live/newer-dead under canonical-name
150
+ // churn). Every row that would be touched is checked for adopted origin and
151
+ // probed for POSITIVE absence (r1 discipline); the binding's own tmux session
152
+ // is probed too when it names a session no row carries.
153
+ const mutationTargets = nonTerminal;
154
+ for (const row of mutationTargets) {
155
+ if (row.origin === "claimed") {
156
+ return {
157
+ ok: false,
158
+ code: "claimed_session",
159
+ message: `Session "${row.session_name}" was adopted (origin=claimed) — clean refuses to touch adopted state.`,
160
+ guidance: "Release an adopted session with: rig unclaim",
161
+ };
162
+ }
163
+ }
164
+ const probeNames = [...new Set([
165
+ ...mutationTargets.map((s) => s.session_name),
166
+ ...(binding?.tmuxSession ? [binding.tmuxSession] : []),
167
+ ])];
168
+ for (const name of probeNames) {
169
+ const probed = await this.probeLiveness(name, "clean refuses rather than clear state under a possibly-live seat");
170
+ if ("code" in probed)
171
+ return probed;
172
+ if (probed.state === "present") {
173
+ return {
174
+ ok: false,
175
+ code: "session_live",
176
+ message: `Session "${name}" is alive in tmux (checked: tmux has-session, against EVERY session row clean would mutate) — clean only operates on dead seats.`,
177
+ guidance: "Stop a live seat first with: rig seat stop",
178
+ };
179
+ }
180
+ }
181
+ const session = this.latestSession(resolved.nodeId);
182
+ if (!binding && nonTerminal.length === 0) {
183
+ return {
184
+ ok: false,
185
+ code: "nothing_to_clean",
186
+ message: `Seat "${input.seatRef}" is already clean (checked: no binding row for the node, and no session rows outside terminal statuses ${[...TERMINAL_SESSION_STATUSES].join("/")}).`,
187
+ };
188
+ }
189
+ const sessionsExited = [];
190
+ let persisted = null;
191
+ const tx = this.db.transaction(() => {
192
+ for (const row of nonTerminal) {
193
+ this.sessionRegistry.updateStatus(row.id, "exited");
194
+ sessionsExited.push(row.session_name);
195
+ }
196
+ this.sessionRegistry.clearBinding(resolved.nodeId);
197
+ persisted = this.eventBus.persistWithinTransaction({
198
+ type: "session.cleaned",
199
+ rigId: seat.rigId,
200
+ nodeId: seat.nodeId,
201
+ sessionName: session?.session_name ?? null,
202
+ reason: input.reason.trim(),
203
+ operator: input.operator ?? null,
204
+ actions: { sessionsExited, bindingCleared: binding !== null },
205
+ });
206
+ });
207
+ tx();
208
+ if (persisted)
209
+ this.eventBus.notifySubscribers(persisted);
210
+ return { ok: true, seat, actions: { sessionsExited, bindingCleared: binding !== null } };
211
+ }
212
+ // -- shared internals --
213
+ /**
214
+ * The ONE liveness read both mutating verbs share (fix r1, row 9baac99f):
215
+ * the CLASSIFIED probeSession, never the collapsed hasSession view.
216
+ * present / absent → returned for the verb to act on (absent is
217
+ * POSITIVE tmux evidence, per OPR.0.5.4.2).
218
+ * transport_unavailable → an INDETERMINATE refusal: session existence was
219
+ * NOT determined, so neither verb may act — and the
220
+ * refusal never routes the operator to a
221
+ * destructive verb.
222
+ * unexpected probe throw → the same indeterminate refusal (fail closed).
223
+ */
224
+ async probeLiveness(sessionName, refusalConsequence) {
225
+ let probe;
226
+ try {
227
+ probe = await this.tmuxAdapter.probeSession(sessionName);
228
+ }
229
+ catch (err) {
230
+ return {
231
+ ok: false,
232
+ code: "tmux_probe_failed",
233
+ message: `tmux liveness probe for "${sessionName}" failed (${err instanceof Error ? err.message : String(err)}) — liveness is INDETERMINATE, so ${refusalConsequence}.`,
234
+ };
235
+ }
236
+ if (probe.state === "transport_unavailable") {
237
+ return {
238
+ ok: false,
239
+ code: "tmux_probe_failed",
240
+ message: `tmux transport unavailable probing "${sessionName}" (${probe.cause}) — session existence was NOT determined (checked: classified tmux probe), so ${refusalConsequence}. Retry when the tmux transport is back.`,
241
+ };
242
+ }
243
+ return { state: probe.state };
244
+ }
245
+ requireReason(reason) {
246
+ if (!reason?.trim()) {
247
+ return { ok: false, code: "missing_reason", message: "An audit reason is required (--reason)." };
248
+ }
249
+ return null;
250
+ }
251
+ describe(resolved) {
252
+ return {
253
+ rigId: resolved.entry.rigId,
254
+ rigName: resolved.entry.rigName,
255
+ logicalId: resolved.entry.logicalId,
256
+ nodeId: resolved.nodeId,
257
+ };
258
+ }
259
+ latestSession(nodeId) {
260
+ const row = this.db.prepare("SELECT id, session_name, status, origin FROM sessions WHERE node_id = ? ORDER BY id DESC LIMIT 1").get(nodeId);
261
+ return row ?? null;
262
+ }
263
+ /** The ONE resolution path, mirroring SeatStatusService.findMatches semantics
264
+ * (seat-status-service.ts) so every seat verb resolves identically: a canonical
265
+ * `name@rig` ref scopes to that rig's inventory; a bare ref scans all rigs;
266
+ * matches are by canonicalSessionName or logicalId; >1 match is a listed
267
+ * ambiguity, never a pick. */
268
+ resolveSeat(seatRef) {
269
+ const ref = seatRef?.trim() ?? "";
270
+ if (!ref) {
271
+ return { ok: false, code: "seat_ref_required", message: "seat reference is required", guidance: SEAT_LOOKUP_GUIDANCE };
272
+ }
273
+ const matches = this.findMatches(ref);
274
+ if (matches.length === 0) {
275
+ return {
276
+ ok: false,
277
+ code: "seat_not_found",
278
+ message: `Seat "${ref}" not found (checked: canonical session names and logical ids across ${parseSessionName(ref).kind === "canonical" ? "the named rig" : "all rigs"}).`,
279
+ guidance: SEAT_LOOKUP_GUIDANCE,
280
+ };
281
+ }
282
+ if (matches.length > 1) {
283
+ return {
284
+ ok: false,
285
+ code: "seat_ambiguous",
286
+ message: `Seat "${ref}" matched multiple nodes`,
287
+ guidance: SEAT_LOOKUP_GUIDANCE,
288
+ matches: matches.map((entry) => ({
289
+ rig_name: entry.rigName,
290
+ logical_id: entry.logicalId,
291
+ current_occupant: entry.canonicalSessionName,
292
+ })),
293
+ };
294
+ }
295
+ const entry = matches[0];
296
+ const nodeRow = this.db.prepare("SELECT id FROM nodes WHERE rig_id = ? AND logical_id = ?").get(entry.rigId, entry.logicalId);
297
+ if (!nodeRow) {
298
+ return { ok: false, code: "seat_not_found", message: `Seat "${ref}" resolved to a node that no longer exists.`, guidance: SEAT_LOOKUP_GUIDANCE };
299
+ }
300
+ return { entry, nodeId: nodeRow.id };
301
+ }
302
+ findMatches(ref) {
303
+ const parsed = parseSessionName(ref);
304
+ if (parsed.kind === "canonical") {
305
+ const localRef = parsed.member;
306
+ const rigs = this.rigRepo.findRigsByName(parsed.rig);
307
+ return rigs.flatMap((rig) => getNodeInventory(this.db, rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === localRef));
308
+ }
309
+ return this.rigRepo.listRigs().flatMap((rig) => getNodeInventory(this.db, rig.id).filter((entry) => entry.canonicalSessionName === ref || entry.logicalId === ref));
310
+ }
311
+ }
312
+ //# sourceMappingURL=seat-lifecycle-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seat-lifecycle-service.js","sourceRoot":"","sources":["../../src/domain/seat-lifecycle-service.ts"],"names":[],"mappings":"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"}
@@ -138,11 +138,14 @@ export declare class SessionTransport {
138
138
  constructor(deps: SessionTransportDeps);
139
139
  /**
140
140
  * Slice-05 D5/D6 — when a live transport op (send/capture) observes that the
141
- * seat's tmux session is genuinely gone (`hasSession(sessionName) === false`),
142
- * durably record the SAME `session_missing` identity verdict the reconciler
143
- * would write, so `rig ps` stops reporting the dead seat as running WITHOUT
144
- * waiting for the next reconciler poll. This is the transport-side writer of
145
- * the shared verdict bridge; the reconciler is the poll-side writer.
141
+ * seat's tmux session is genuinely gone (a `probeSession` result of `absent`
142
+ * POSITIVE tmux evidence, never a transport failure; OPR.0.5.4.2 mini-req
143
+ * 5), durably record the SAME `session_missing` identity verdict the
144
+ * reconciler would write, so `rig ps` stops reporting the dead seat as
145
+ * running WITHOUT waiting for the next reconciler poll. This is the
146
+ * transport-side writer of the shared verdict bridge; the reconciler is the
147
+ * poll-side writer. Transport-absence must never reach this method: a blip
148
+ * against a live seat would otherwise fabricate a durable absence verdict.
146
149
  *
147
150
  * Only writes an APPLICABLE verdict: the join is narrowed to the node whose
148
151
  * LATEST running session_name equals the probed session (so
@@ -1 +1 @@
1
- {"version":3,"file":"session-transport.d.ts","sourceRoot":"","sources":["../../src/domain/session-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAmE1E,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA6CD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,CAsFpF;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,aAAa,CAAC,CAiGzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAK/F;AAmBD;;0FAE0F;AAC1F,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAMtF;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAInB;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IAMvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;qCAEiC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAOD,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CAGzB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,sBAAsB,GAAG,QAAQ,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,UAAU,oBAAoB;IAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAGxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAOD,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,cAAc,CAAC,CAA+B;gBAE1C,IAAI,EAAE,oBAAoB;IActC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,2BAA2B;IAyBnC,OAAO,CAAC,cAAc;IAmBhB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAgBjE,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,oBAAoB;IAyD5B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,6BAA6B;IAuC/B,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAwWnF,OAAO,CAAC,QAAQ;YAUF,WAAW;YA2DX,qBAAqB;IA6DnC,OAAO,CAAC,gBAAgB;YAWV,oBAAoB;IAwDlC,OAAO,CAAC,oBAAoB;IA2BtB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C/E,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAoDlG"}
1
+ {"version":3,"file":"session-transport.d.ts","sourceRoot":"","sources":["../../src/domain/session-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAA4C,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAmE1E,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AA6CD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,CAsFpF;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3D,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,OAAO,CAAC,aAAa,CAAC,CAiGzB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAK/F;AAmBD;;0FAE0F;AAC1F,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAMtF;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAInB;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACtB;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9F;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IAMvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;qCAEiC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAOD,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CAGzB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,sBAAsB,GAAG,QAAQ,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,UAAU,oBAAoB;IAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAGxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,4BAA4B,CAAC;CAC/C;AAOD,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC/B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,cAAc,CAAC,CAA+B;gBAE1C,IAAI,EAAE,oBAAoB;IActC;;;;;;;;;;;;;;;;;;OAkBG;IACH,OAAO,CAAC,2BAA2B;IAyBnC,OAAO,CAAC,cAAc;IAmBhB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAgBjE,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,oBAAoB;IAyD5B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,YAAY;IA0CpB,OAAO,CAAC,6BAA6B;IAuC/B,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAkXnF,OAAO,CAAC,QAAQ;YAUF,WAAW;YA2DX,qBAAqB;IA6DnC,OAAO,CAAC,gBAAgB;YAWV,oBAAoB;IAwDlC,OAAO,CAAC,oBAAoB;IA2BtB,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAuD/E,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAoDlG"}