@sumicom/quicksave 0.8.5 → 0.8.7

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 (193) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -93
  3. package/dist/ai/asyncQueue.d.ts.map +1 -1
  4. package/dist/ai/asyncQueue.js +2 -0
  5. package/dist/ai/asyncQueue.js.map +1 -1
  6. package/dist/ai/attachmentStaging.d.ts +71 -0
  7. package/dist/ai/attachmentStaging.d.ts.map +1 -0
  8. package/dist/ai/attachmentStaging.js +243 -0
  9. package/dist/ai/attachmentStaging.js.map +1 -0
  10. package/dist/ai/attachmentStore.d.ts +40 -0
  11. package/dist/ai/attachmentStore.d.ts.map +1 -0
  12. package/dist/ai/attachmentStore.js +173 -0
  13. package/dist/ai/attachmentStore.js.map +1 -0
  14. package/dist/ai/cardBuilder.d.ts +6 -6
  15. package/dist/ai/cardBuilder.d.ts.map +1 -1
  16. package/dist/ai/cardBuilder.js +164 -16
  17. package/dist/ai/cardBuilder.js.map +1 -1
  18. package/dist/ai/claudeCliProvider.d.ts +34 -15
  19. package/dist/ai/claudeCliProvider.d.ts.map +1 -1
  20. package/dist/ai/claudeCliProvider.js +108 -64
  21. package/dist/ai/claudeCliProvider.js.map +1 -1
  22. package/dist/ai/claudeCodeProvider.d.ts.map +1 -1
  23. package/dist/ai/claudeCodeProvider.js +2 -0
  24. package/dist/ai/claudeCodeProvider.js.map +1 -1
  25. package/dist/ai/claudeSdkProvider.d.ts +6 -3
  26. package/dist/ai/claudeSdkProvider.d.ts.map +1 -1
  27. package/dist/ai/claudeSdkProvider.js +97 -29
  28. package/dist/ai/claudeSdkProvider.js.map +1 -1
  29. package/dist/ai/codexAppServer/approvalMapping.d.ts.map +1 -1
  30. package/dist/ai/codexAppServer/approvalMapping.js.map +1 -1
  31. package/dist/ai/codexAppServer/cardAdapter.d.ts +0 -3
  32. package/dist/ai/codexAppServer/cardAdapter.d.ts.map +1 -1
  33. package/dist/ai/codexAppServer/cardAdapter.js +40 -5
  34. package/dist/ai/codexAppServer/cardAdapter.js.map +1 -1
  35. package/dist/ai/codexAppServer/index.d.ts.map +1 -1
  36. package/dist/ai/codexAppServer/index.js +2 -0
  37. package/dist/ai/codexAppServer/index.js.map +1 -1
  38. package/dist/ai/codexAppServer/overrideStore.d.ts.map +1 -1
  39. package/dist/ai/codexAppServer/overrideStore.js.map +1 -1
  40. package/dist/ai/codexAppServer/permissionMapping.d.ts.map +1 -1
  41. package/dist/ai/codexAppServer/permissionMapping.js.map +1 -1
  42. package/dist/ai/codexAppServer/processManager.d.ts.map +1 -1
  43. package/dist/ai/codexAppServer/processManager.js +2 -0
  44. package/dist/ai/codexAppServer/processManager.js.map +1 -1
  45. package/dist/ai/codexAppServer/provider.d.ts.map +1 -1
  46. package/dist/ai/codexAppServer/provider.js +9 -24
  47. package/dist/ai/codexAppServer/provider.js.map +1 -1
  48. package/dist/ai/codexAppServer/rpcClient.d.ts.map +1 -1
  49. package/dist/ai/codexAppServer/rpcClient.js.map +1 -1
  50. package/dist/ai/codexAppServer/schema/index.d.ts.map +1 -1
  51. package/dist/ai/codexAppServer/schema/index.js +2 -0
  52. package/dist/ai/codexAppServer/schema/index.js.map +1 -1
  53. package/dist/ai/codexAppServer/stdioTransport.d.ts.map +1 -1
  54. package/dist/ai/codexAppServer/stdioTransport.js.map +1 -1
  55. package/dist/ai/codexAppServer/tokenAccounting.d.ts.map +1 -1
  56. package/dist/ai/codexAppServer/tokenAccounting.js.map +1 -1
  57. package/dist/ai/codexAppServer/version.d.ts.map +1 -1
  58. package/dist/ai/codexAppServer/version.js +2 -0
  59. package/dist/ai/codexAppServer/version.js.map +1 -1
  60. package/dist/ai/codexLogin.d.ts.map +1 -1
  61. package/dist/ai/codexLogin.js +2 -0
  62. package/dist/ai/codexLogin.js.map +1 -1
  63. package/dist/ai/codexMcpProvider.d.ts.map +1 -1
  64. package/dist/ai/codexMcpProvider.js +7 -10
  65. package/dist/ai/codexMcpProvider.js.map +1 -1
  66. package/dist/ai/commitSummary.d.ts.map +1 -1
  67. package/dist/ai/commitSummary.js +2 -0
  68. package/dist/ai/commitSummary.js.map +1 -1
  69. package/dist/ai/commitSummaryCli.d.ts.map +1 -1
  70. package/dist/ai/commitSummaryCli.js +2 -0
  71. package/dist/ai/commitSummaryCli.js.map +1 -1
  72. package/dist/ai/commitSummaryStore.d.ts.map +1 -1
  73. package/dist/ai/commitSummaryStore.js +2 -0
  74. package/dist/ai/commitSummaryStore.js.map +1 -1
  75. package/dist/ai/contentBlocks.d.ts +9 -0
  76. package/dist/ai/contentBlocks.d.ts.map +1 -0
  77. package/dist/ai/contentBlocks.js +86 -0
  78. package/dist/ai/contentBlocks.js.map +1 -0
  79. package/dist/ai/debugLogger.d.ts.map +1 -1
  80. package/dist/ai/debugLogger.js +2 -0
  81. package/dist/ai/debugLogger.js.map +1 -1
  82. package/dist/ai/enrichEntry.d.ts.map +1 -1
  83. package/dist/ai/enrichEntry.js.map +1 -1
  84. package/dist/ai/pdfMeta.d.ts +8 -0
  85. package/dist/ai/pdfMeta.d.ts.map +1 -0
  86. package/dist/ai/pdfMeta.js +51 -0
  87. package/dist/ai/pdfMeta.js.map +1 -0
  88. package/dist/ai/provider.d.ts +21 -8
  89. package/dist/ai/provider.d.ts.map +1 -1
  90. package/dist/ai/provider.js.map +1 -1
  91. package/dist/ai/sandboxMcp.d.ts.map +1 -1
  92. package/dist/ai/sandboxMcp.js +2 -0
  93. package/dist/ai/sandboxMcp.js.map +1 -1
  94. package/dist/ai/sandboxMcpStdio.d.ts.map +1 -1
  95. package/dist/ai/sandboxMcpStdio.js +2 -0
  96. package/dist/ai/sandboxMcpStdio.js.map +1 -1
  97. package/dist/ai/sessionManager.d.ts +19 -7
  98. package/dist/ai/sessionManager.d.ts.map +1 -1
  99. package/dist/ai/sessionManager.js +81 -23
  100. package/dist/ai/sessionManager.js.map +1 -1
  101. package/dist/ai/sessionRegistry.d.ts.map +1 -1
  102. package/dist/ai/sessionRegistry.js +2 -0
  103. package/dist/ai/sessionRegistry.js.map +1 -1
  104. package/dist/ai/sessionStore.d.ts.map +1 -1
  105. package/dist/ai/sessionStore.js +2 -0
  106. package/dist/ai/sessionStore.js.map +1 -1
  107. package/dist/ai/systemPrompt.d.ts.map +1 -1
  108. package/dist/ai/systemPrompt.js +3 -0
  109. package/dist/ai/systemPrompt.js.map +1 -1
  110. package/dist/config.d.ts.map +1 -1
  111. package/dist/config.js +2 -0
  112. package/dist/config.js.map +1 -1
  113. package/dist/connection/connection.d.ts.map +1 -1
  114. package/dist/connection/connection.js +2 -0
  115. package/dist/connection/connection.js.map +1 -1
  116. package/dist/connection/e2eHarness.d.ts +1 -1
  117. package/dist/connection/e2eHarness.d.ts.map +1 -1
  118. package/dist/connection/e2eHarness.js +26 -8
  119. package/dist/connection/e2eHarness.js.map +1 -1
  120. package/dist/connection/fakeRelay.d.ts.map +1 -1
  121. package/dist/connection/fakeRelay.js +2 -0
  122. package/dist/connection/fakeRelay.js.map +1 -1
  123. package/dist/connection/pubsub.d.ts.map +1 -1
  124. package/dist/connection/pubsub.js +2 -0
  125. package/dist/connection/pubsub.js.map +1 -1
  126. package/dist/connection/relay.d.ts.map +1 -1
  127. package/dist/connection/relay.js +2 -0
  128. package/dist/connection/relay.js.map +1 -1
  129. package/dist/files/fileBrowser.d.ts.map +1 -1
  130. package/dist/files/fileBrowser.js +44 -2
  131. package/dist/files/fileBrowser.js.map +1 -1
  132. package/dist/git/operations.d.ts.map +1 -1
  133. package/dist/git/operations.js +2 -0
  134. package/dist/git/operations.js.map +1 -1
  135. package/dist/handlers/legacyBusAdapter.d.ts +1 -1
  136. package/dist/handlers/legacyBusAdapter.d.ts.map +1 -1
  137. package/dist/handlers/legacyBusAdapter.js +13 -1
  138. package/dist/handlers/legacyBusAdapter.js.map +1 -1
  139. package/dist/handlers/messageHandler.d.ts +23 -0
  140. package/dist/handlers/messageHandler.d.ts.map +1 -1
  141. package/dist/handlers/messageHandler.js +226 -14
  142. package/dist/handlers/messageHandler.js.map +1 -1
  143. package/dist/index.js +42 -2
  144. package/dist/index.js.map +1 -1
  145. package/dist/messageBus/busServerTransport.d.ts.map +1 -1
  146. package/dist/messageBus/busServerTransport.js +2 -0
  147. package/dist/messageBus/busServerTransport.js.map +1 -1
  148. package/dist/service/debugHttpServer.d.ts.map +1 -1
  149. package/dist/service/debugHttpServer.js +2 -0
  150. package/dist/service/debugHttpServer.js.map +1 -1
  151. package/dist/service/ensureDaemon.d.ts.map +1 -1
  152. package/dist/service/ensureDaemon.js +27 -2
  153. package/dist/service/ensureDaemon.js.map +1 -1
  154. package/dist/service/index.d.ts.map +1 -1
  155. package/dist/service/index.js +2 -0
  156. package/dist/service/index.js.map +1 -1
  157. package/dist/service/ipcClient.d.ts.map +1 -1
  158. package/dist/service/ipcClient.js +3 -1
  159. package/dist/service/ipcClient.js.map +1 -1
  160. package/dist/service/ipcServer.d.ts.map +1 -1
  161. package/dist/service/ipcServer.js +2 -0
  162. package/dist/service/ipcServer.js.map +1 -1
  163. package/dist/service/pushClient.d.ts.map +1 -1
  164. package/dist/service/pushClient.js +2 -0
  165. package/dist/service/pushClient.js.map +1 -1
  166. package/dist/service/run.d.ts.map +1 -1
  167. package/dist/service/run.js +14 -1
  168. package/dist/service/run.js.map +1 -1
  169. package/dist/service/singleton.d.ts +1 -0
  170. package/dist/service/singleton.d.ts.map +1 -1
  171. package/dist/service/singleton.js +5 -0
  172. package/dist/service/singleton.js.map +1 -1
  173. package/dist/service/stateStore.d.ts.map +1 -1
  174. package/dist/service/stateStore.js +2 -0
  175. package/dist/service/stateStore.js.map +1 -1
  176. package/dist/service/systemdUnit.d.ts +149 -0
  177. package/dist/service/systemdUnit.d.ts.map +1 -0
  178. package/dist/service/systemdUnit.js +322 -0
  179. package/dist/service/systemdUnit.js.map +1 -0
  180. package/dist/service/types.d.ts +6 -0
  181. package/dist/service/types.d.ts.map +1 -1
  182. package/dist/service/types.js +3 -1
  183. package/dist/service/types.js.map +1 -1
  184. package/dist/storage/eventStore.d.ts.map +1 -1
  185. package/dist/storage/eventStore.js +2 -0
  186. package/dist/storage/eventStore.js.map +1 -1
  187. package/dist/terminal/terminalManager.d.ts.map +1 -1
  188. package/dist/terminal/terminalManager.js +2 -0
  189. package/dist/terminal/terminalManager.js.map +1 -1
  190. package/dist/tombstoneCheck.d.ts.map +1 -1
  191. package/dist/tombstoneCheck.js +2 -0
  192. package/dist/tombstoneCheck.js.map +1 -1
  193. package/package.json +3 -3
@@ -0,0 +1,149 @@
1
+ /**
2
+ * systemd user-unit integration.
3
+ *
4
+ * The CLI prefers letting systemd own the daemon lifecycle when a user-scoped
5
+ * `quicksave.service` unit is enabled. The hand-rolled detached spawn path in
6
+ * `ensureDaemon` stays as a fallback for non-systemd hosts (macOS, Windows,
7
+ * containers without systemd) and for users who haven't installed the unit.
8
+ *
9
+ * This module exposes both the read path used by `ensureDaemon` (`userUnitIs
10
+ * Enabled`, `startUserUnit`) and the install/uninstall path used by the
11
+ * IPC handler the PWA calls when the user toggles "Auto-start at login".
12
+ *
13
+ * The canonical unit text is generated here, not read from the
14
+ * `apps/agent/templates/quicksave.service` file. The package.json `files`
15
+ * allowlist only ships `dist/`, so a template loaded from disk would work in
16
+ * dev but be missing for npm-installed users. Generating the text in code
17
+ * also lets us bake the absolute `ExecStart` (node + entry path) computed
18
+ * from the running daemon, which is the part most users get wrong by hand.
19
+ */
20
+ export declare const QUICKSAVE_UNIT = "quicksave.service";
21
+ /**
22
+ * Where the user unit file lives. Honors `XDG_CONFIG_HOME` like systemd
23
+ * itself does.
24
+ */
25
+ export declare function getUserUnitDir(env?: NodeJS.ProcessEnv): string;
26
+ export declare function getUserUnitPath(env?: NodeJS.ProcessEnv): string;
27
+ /**
28
+ * Compute the `ExecStart` line that matches the currently running daemon —
29
+ * absolute node binary (`process.execPath`) plus the entry script that this
30
+ * process was loaded from. We resolve from `import.meta.url`, the same trick
31
+ * `handleAgentRestart` uses, so dev (tsx) and prod (compiled JS) both work
32
+ * without configuration. The resulting line is what the unit will run, so
33
+ * the systemd-managed daemon is byte-identical to whatever the user currently
34
+ * has installed.
35
+ */
36
+ export declare function computeExecStart(metaUrl?: string): string;
37
+ /**
38
+ * Generate the unit-file text. Kept tiny and opinionated — every option here
39
+ * is one we'd want to set for every user. Anything more exotic (custom env,
40
+ * resource limits) belongs in a `*.service.d/override.conf` drop-in the user
41
+ * authors themselves.
42
+ */
43
+ export declare function renderUnitText(execStart: string): string;
44
+ /**
45
+ * True when the current process was started by systemd. Read by the daemon
46
+ * boot path (`run.ts`) so we can stamp `service.json` with `managedBy:
47
+ * "systemd"` — that's the single source of truth the CLI uses to decide
48
+ * whether to delegate restarts to `systemctl` instead of self-spawning.
49
+ */
50
+ export declare function wasLaunchedBySystemd(env?: NodeJS.ProcessEnv): boolean;
51
+ /**
52
+ * True when `systemctl --user` works at all on this host (Linux + a running
53
+ * systemd user instance + DBus session). Used to gate the entire feature in
54
+ * the PWA — there's no point showing the toggle on macOS/Windows/no-systemd
55
+ * containers.
56
+ */
57
+ export declare function systemctlAvailable(): boolean;
58
+ /**
59
+ * True when a user-scoped quicksave.service is installed and enabled.
60
+ * Always false on non-Linux. Always false if `systemctl` isn't on PATH or
61
+ * the user has no systemd --user instance (e.g. headless sshd without
62
+ * lingering enabled).
63
+ */
64
+ export declare function userUnitIsEnabled(): boolean;
65
+ /**
66
+ * True when the unit is currently active (running). Distinct from "enabled"
67
+ * — a unit can be enabled but stopped, or active but not enabled (one-shot
68
+ * `systemctl start` without enabling at boot).
69
+ */
70
+ export declare function userUnitIsActive(): boolean;
71
+ /**
72
+ * Whether this user has lingering enabled (i.e. their systemd user instance
73
+ * survives logout). We can't enable this from inside the daemon — it
74
+ * requires polkit/sudo — so the PWA UI surfaces this as a read-only hint
75
+ * with a "run this command yourself" callout.
76
+ */
77
+ export declare function lingerIsEnabled(env?: NodeJS.ProcessEnv): boolean;
78
+ /**
79
+ * Ask systemd to (re)start the unit. Returns true on success.
80
+ *
81
+ * Uses `restart` rather than `start` so that a degraded daemon (e.g. lock
82
+ * held but socket dead) gets cleanly torn down before the new instance
83
+ * comes up. systemd's own `Restart=on-failure` already handles crash
84
+ * recovery; this is for explicit CLI-initiated transitions.
85
+ */
86
+ export declare function startUserUnit(): boolean;
87
+ /** Status snapshot returned to the PWA so the UI can render the toggle's
88
+ * current state and any inline hints. `available: false` is the signal to
89
+ * hide the entire section. */
90
+ export interface SystemdStatus {
91
+ available: boolean;
92
+ unitInstalled: boolean;
93
+ unitEnabled: boolean;
94
+ isActive: boolean;
95
+ lingerEnabled: boolean;
96
+ unitDir: string;
97
+ unitPath: string;
98
+ suggestedExecStart: string;
99
+ /** ExecStart line currently written to the unit file (parsed from disk),
100
+ * if installed. Lets the PWA warn when it's drifted from the daemon's
101
+ * computed value (e.g. user upgraded node, unit still points at old path). */
102
+ currentExecStart?: string;
103
+ }
104
+ export declare function readInstalledExecStart(): string | undefined;
105
+ export declare function getSystemdStatus(): SystemdStatus;
106
+ /**
107
+ * Result of an install/uninstall request.
108
+ *
109
+ * `success: false` always carries an `error` string suitable for surfacing
110
+ * directly in the PWA; the caller doesn't need to translate error codes.
111
+ */
112
+ export interface SystemdMutationResult {
113
+ success: boolean;
114
+ error?: string;
115
+ status: SystemdStatus;
116
+ }
117
+ /**
118
+ * Write the unit file, run `daemon-reload`, then `enable --now`.
119
+ *
120
+ * `--now` makes systemd start the unit immediately as part of the enable.
121
+ * The current daemon will likely be the one currently holding the singleton
122
+ * lock; that's fine — `enable --now` no-ops on the start step if a daemon
123
+ * is already running because the new instance will fail to acquire the
124
+ * lock and exit. We don't try to forcibly migrate the existing daemon
125
+ * under systemd here — the next IPC call from the CLI/PWA will go through
126
+ * `ensureDaemon`, which sees the unit is enabled and routes through
127
+ * `systemctl restart` from then on.
128
+ */
129
+ export declare function installUserUnit(execStart?: string): SystemdMutationResult;
130
+ /**
131
+ * `disable --now`, then remove the unit file, then `daemon-reload`.
132
+ *
133
+ * Important sequencing concern: when the *currently running daemon* was
134
+ * itself launched by systemd, `disable --now` will stop it — including the
135
+ * IPC server that's processing this very request. The IPC layer needs to
136
+ * have already flushed the response before we reach this function. The
137
+ * caller (`messageHandler.handleSystemdUninstall`) handles that by:
138
+ * 1. computing what the response will be
139
+ * 2. scheduling the uninstall on the next tick
140
+ * 3. returning the response synchronously
141
+ * so the PWA gets its ack before the socket dies.
142
+ *
143
+ * We also detach a "fallback re-spawn" so the user isn't left with no
144
+ * daemon at all after uninstalling. That's the caller's job — it must
145
+ * spawn the standalone daemon shortly after the uninstall completes if
146
+ * the request originated from a PWA that wants to keep working.
147
+ */
148
+ export declare function uninstallUserUnit(): SystemdMutationResult;
149
+ //# sourceMappingURL=systemdUnit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemdUnit.d.ts","sourceRoot":"","sources":["../../src/service/systemdUnit.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAElD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAK3E;AAED,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAwB,GAAG,MAAM,CAa1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAElF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAa5C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAQ1C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAQ7E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAQvC;AAED;;+BAE+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;mFAE+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAa3D;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAehD;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,SAAS,GAAE,MAA2B,GAAG,qBAAqB,CA+B7F;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,IAAI,qBAAqB,CAyBzD"}
@@ -0,0 +1,322 @@
1
+ // SPDX-FileCopyrightText: 2026 King Young Technology
2
+ // SPDX-License-Identifier: MIT
3
+ /**
4
+ * systemd user-unit integration.
5
+ *
6
+ * The CLI prefers letting systemd own the daemon lifecycle when a user-scoped
7
+ * `quicksave.service` unit is enabled. The hand-rolled detached spawn path in
8
+ * `ensureDaemon` stays as a fallback for non-systemd hosts (macOS, Windows,
9
+ * containers without systemd) and for users who haven't installed the unit.
10
+ *
11
+ * This module exposes both the read path used by `ensureDaemon` (`userUnitIs
12
+ * Enabled`, `startUserUnit`) and the install/uninstall path used by the
13
+ * IPC handler the PWA calls when the user toggles "Auto-start at login".
14
+ *
15
+ * The canonical unit text is generated here, not read from the
16
+ * `apps/agent/templates/quicksave.service` file. The package.json `files`
17
+ * allowlist only ships `dist/`, so a template loaded from disk would work in
18
+ * dev but be missing for npm-installed users. Generating the text in code
19
+ * also lets us bake the absolute `ExecStart` (node + entry path) computed
20
+ * from the running daemon, which is the part most users get wrong by hand.
21
+ */
22
+ import { spawnSync } from 'child_process';
23
+ import { mkdirSync, readFileSync, writeFileSync, existsSync, unlinkSync } from 'fs';
24
+ import { homedir, platform } from 'os';
25
+ import { dirname, join, resolve as resolvePath } from 'path';
26
+ import { fileURLToPath } from 'url';
27
+ export const QUICKSAVE_UNIT = 'quicksave.service';
28
+ /**
29
+ * Where the user unit file lives. Honors `XDG_CONFIG_HOME` like systemd
30
+ * itself does.
31
+ */
32
+ export function getUserUnitDir(env = process.env) {
33
+ const xdg = env.XDG_CONFIG_HOME && env.XDG_CONFIG_HOME.length > 0
34
+ ? env.XDG_CONFIG_HOME
35
+ : join(homedir(), '.config');
36
+ return join(xdg, 'systemd', 'user');
37
+ }
38
+ export function getUserUnitPath(env = process.env) {
39
+ return join(getUserUnitDir(env), QUICKSAVE_UNIT);
40
+ }
41
+ /**
42
+ * Compute the `ExecStart` line that matches the currently running daemon —
43
+ * absolute node binary (`process.execPath`) plus the entry script that this
44
+ * process was loaded from. We resolve from `import.meta.url`, the same trick
45
+ * `handleAgentRestart` uses, so dev (tsx) and prod (compiled JS) both work
46
+ * without configuration. The resulting line is what the unit will run, so
47
+ * the systemd-managed daemon is byte-identical to whatever the user currently
48
+ * has installed.
49
+ */
50
+ export function computeExecStart(metaUrl = import.meta.url) {
51
+ const thisFile = fileURLToPath(metaUrl);
52
+ const isTs = thisFile.endsWith('.ts');
53
+ const entryPath = resolvePath(dirname(thisFile), isTs ? '../index.ts' : '../index.js');
54
+ const node = process.execPath;
55
+ // Quote any path that contains whitespace; systemd's command parser is
56
+ // shell-like enough that bare paths work in the common case but break on
57
+ // e.g. `~/Library/Application Support/...`.
58
+ const q = (s) => (/\s/.test(s) ? `"${s}"` : s);
59
+ if (isTs) {
60
+ return `${q(node)} --import tsx ${q(entryPath)} service run`;
61
+ }
62
+ return `${q(node)} ${q(entryPath)} service run`;
63
+ }
64
+ /**
65
+ * Generate the unit-file text. Kept tiny and opinionated — every option here
66
+ * is one we'd want to set for every user. Anything more exotic (custom env,
67
+ * resource limits) belongs in a `*.service.d/override.conf` drop-in the user
68
+ * authors themselves.
69
+ */
70
+ export function renderUnitText(execStart) {
71
+ return [
72
+ '[Unit]',
73
+ 'Description=Quicksave agent daemon',
74
+ 'Documentation=https://quicksave.dev',
75
+ 'After=network-online.target',
76
+ 'Wants=network-online.target',
77
+ '',
78
+ '[Service]',
79
+ 'Type=simple',
80
+ `ExecStart=${execStart}`,
81
+ 'Restart=on-failure',
82
+ 'RestartSec=5',
83
+ 'TimeoutStopSec=10',
84
+ '',
85
+ '[Install]',
86
+ 'WantedBy=default.target',
87
+ '',
88
+ ].join('\n');
89
+ }
90
+ /**
91
+ * True when the current process was started by systemd. Read by the daemon
92
+ * boot path (`run.ts`) so we can stamp `service.json` with `managedBy:
93
+ * "systemd"` — that's the single source of truth the CLI uses to decide
94
+ * whether to delegate restarts to `systemctl` instead of self-spawning.
95
+ */
96
+ export function wasLaunchedBySystemd(env = process.env) {
97
+ return Boolean(env.INVOCATION_ID || env.JOURNAL_STREAM);
98
+ }
99
+ /**
100
+ * True when `systemctl --user` works at all on this host (Linux + a running
101
+ * systemd user instance + DBus session). Used to gate the entire feature in
102
+ * the PWA — there's no point showing the toggle on macOS/Windows/no-systemd
103
+ * containers.
104
+ */
105
+ export function systemctlAvailable() {
106
+ if (platform() !== 'linux')
107
+ return false;
108
+ // `systemctl --user --version` exits 0 even when there's no user instance
109
+ // running, so additionally probe `is-system-running` which fails fast
110
+ // (with status, not error) when DBus session is missing.
111
+ const ver = spawnSync('systemctl', ['--user', '--version'], {
112
+ stdio: 'ignore', timeout: 2000,
113
+ });
114
+ if (ver.error || ver.status === null)
115
+ return false;
116
+ // is-system-running prints e.g. "running", "degraded", "starting" and
117
+ // exits 0; "offline" / no-DBus exits non-zero. Either is fine for our
118
+ // purposes — the user has *some* form of `--user` instance reachable.
119
+ return true;
120
+ }
121
+ /**
122
+ * True when a user-scoped quicksave.service is installed and enabled.
123
+ * Always false on non-Linux. Always false if `systemctl` isn't on PATH or
124
+ * the user has no systemd --user instance (e.g. headless sshd without
125
+ * lingering enabled).
126
+ */
127
+ export function userUnitIsEnabled() {
128
+ if (platform() !== 'linux')
129
+ return false;
130
+ const result = spawnSync('systemctl', ['--user', 'is-enabled', '--quiet', QUICKSAVE_UNIT], {
131
+ stdio: 'ignore',
132
+ timeout: 2000,
133
+ });
134
+ if (result.error || result.status === null)
135
+ return false;
136
+ return result.status === 0;
137
+ }
138
+ /**
139
+ * True when the unit is currently active (running). Distinct from "enabled"
140
+ * — a unit can be enabled but stopped, or active but not enabled (one-shot
141
+ * `systemctl start` without enabling at boot).
142
+ */
143
+ export function userUnitIsActive() {
144
+ if (platform() !== 'linux')
145
+ return false;
146
+ const result = spawnSync('systemctl', ['--user', 'is-active', '--quiet', QUICKSAVE_UNIT], {
147
+ stdio: 'ignore',
148
+ timeout: 2000,
149
+ });
150
+ if (result.error || result.status === null)
151
+ return false;
152
+ return result.status === 0;
153
+ }
154
+ /**
155
+ * Whether this user has lingering enabled (i.e. their systemd user instance
156
+ * survives logout). We can't enable this from inside the daemon — it
157
+ * requires polkit/sudo — so the PWA UI surfaces this as a read-only hint
158
+ * with a "run this command yourself" callout.
159
+ */
160
+ export function lingerIsEnabled(env = process.env) {
161
+ if (platform() !== 'linux')
162
+ return false;
163
+ const user = env.USER || env.LOGNAME;
164
+ if (!user)
165
+ return false;
166
+ // /var/lib/systemd/linger/<user> is created by `loginctl enable-linger`.
167
+ // Reading this avoids spawning `loginctl show-user` which is ~5x slower
168
+ // and needs DBus.
169
+ return existsSync(join('/var/lib/systemd/linger', user));
170
+ }
171
+ /**
172
+ * Ask systemd to (re)start the unit. Returns true on success.
173
+ *
174
+ * Uses `restart` rather than `start` so that a degraded daemon (e.g. lock
175
+ * held but socket dead) gets cleanly torn down before the new instance
176
+ * comes up. systemd's own `Restart=on-failure` already handles crash
177
+ * recovery; this is for explicit CLI-initiated transitions.
178
+ */
179
+ export function startUserUnit() {
180
+ if (platform() !== 'linux')
181
+ return false;
182
+ const result = spawnSync('systemctl', ['--user', 'restart', QUICKSAVE_UNIT], {
183
+ stdio: 'ignore',
184
+ timeout: 10_000,
185
+ });
186
+ if (result.error || result.status === null)
187
+ return false;
188
+ return result.status === 0;
189
+ }
190
+ export function readInstalledExecStart() {
191
+ const path = getUserUnitPath();
192
+ if (!existsSync(path))
193
+ return undefined;
194
+ try {
195
+ const text = readFileSync(path, 'utf-8');
196
+ for (const line of text.split('\n')) {
197
+ const m = /^ExecStart\s*=\s*(.+)$/.exec(line.trim());
198
+ if (m)
199
+ return m[1].trim();
200
+ }
201
+ }
202
+ catch {
203
+ // Unreadable unit file — same outcome as missing for our purposes.
204
+ }
205
+ return undefined;
206
+ }
207
+ export function getSystemdStatus() {
208
+ const available = systemctlAvailable();
209
+ const unitPath = getUserUnitPath();
210
+ const unitInstalled = available && existsSync(unitPath);
211
+ return {
212
+ available,
213
+ unitInstalled,
214
+ unitEnabled: available ? userUnitIsEnabled() : false,
215
+ isActive: available ? userUnitIsActive() : false,
216
+ lingerEnabled: available ? lingerIsEnabled() : false,
217
+ unitDir: getUserUnitDir(),
218
+ unitPath,
219
+ suggestedExecStart: computeExecStart(),
220
+ currentExecStart: unitInstalled ? readInstalledExecStart() : undefined,
221
+ };
222
+ }
223
+ /**
224
+ * Write the unit file, run `daemon-reload`, then `enable --now`.
225
+ *
226
+ * `--now` makes systemd start the unit immediately as part of the enable.
227
+ * The current daemon will likely be the one currently holding the singleton
228
+ * lock; that's fine — `enable --now` no-ops on the start step if a daemon
229
+ * is already running because the new instance will fail to acquire the
230
+ * lock and exit. We don't try to forcibly migrate the existing daemon
231
+ * under systemd here — the next IPC call from the CLI/PWA will go through
232
+ * `ensureDaemon`, which sees the unit is enabled and routes through
233
+ * `systemctl restart` from then on.
234
+ */
235
+ export function installUserUnit(execStart = computeExecStart()) {
236
+ if (!systemctlAvailable()) {
237
+ return { success: false, error: 'systemctl --user is not available on this host', status: getSystemdStatus() };
238
+ }
239
+ try {
240
+ mkdirSync(getUserUnitDir(), { recursive: true });
241
+ writeFileSync(getUserUnitPath(), renderUnitText(execStart));
242
+ }
243
+ catch (err) {
244
+ return {
245
+ success: false,
246
+ error: `Failed to write unit file: ${err instanceof Error ? err.message : String(err)}`,
247
+ status: getSystemdStatus(),
248
+ };
249
+ }
250
+ const reload = spawnSync('systemctl', ['--user', 'daemon-reload'], { stdio: 'pipe', timeout: 10_000 });
251
+ if (reload.error || reload.status !== 0) {
252
+ return {
253
+ success: false,
254
+ error: `daemon-reload failed: ${stderrText(reload)}`,
255
+ status: getSystemdStatus(),
256
+ };
257
+ }
258
+ const enable = spawnSync('systemctl', ['--user', 'enable', '--now', QUICKSAVE_UNIT], { stdio: 'pipe', timeout: 15_000 });
259
+ if (enable.error || enable.status !== 0) {
260
+ return {
261
+ success: false,
262
+ error: `enable --now failed: ${stderrText(enable)}`,
263
+ status: getSystemdStatus(),
264
+ };
265
+ }
266
+ return { success: true, status: getSystemdStatus() };
267
+ }
268
+ /**
269
+ * `disable --now`, then remove the unit file, then `daemon-reload`.
270
+ *
271
+ * Important sequencing concern: when the *currently running daemon* was
272
+ * itself launched by systemd, `disable --now` will stop it — including the
273
+ * IPC server that's processing this very request. The IPC layer needs to
274
+ * have already flushed the response before we reach this function. The
275
+ * caller (`messageHandler.handleSystemdUninstall`) handles that by:
276
+ * 1. computing what the response will be
277
+ * 2. scheduling the uninstall on the next tick
278
+ * 3. returning the response synchronously
279
+ * so the PWA gets its ack before the socket dies.
280
+ *
281
+ * We also detach a "fallback re-spawn" so the user isn't left with no
282
+ * daemon at all after uninstalling. That's the caller's job — it must
283
+ * spawn the standalone daemon shortly after the uninstall completes if
284
+ * the request originated from a PWA that wants to keep working.
285
+ */
286
+ export function uninstallUserUnit() {
287
+ if (!systemctlAvailable()) {
288
+ return { success: false, error: 'systemctl --user is not available on this host', status: getSystemdStatus() };
289
+ }
290
+ // disable --now: ignore non-zero (the unit may already be disabled) but
291
+ // capture the message in case nothing else explains a later failure.
292
+ const disable = spawnSync('systemctl', ['--user', 'disable', '--now', QUICKSAVE_UNIT], { stdio: 'pipe', timeout: 15_000 });
293
+ let firstError;
294
+ if (disable.error || (disable.status !== 0 && disable.status !== 1)) {
295
+ firstError = `disable --now warning: ${stderrText(disable)}`;
296
+ }
297
+ try {
298
+ if (existsSync(getUserUnitPath()))
299
+ unlinkSync(getUserUnitPath());
300
+ }
301
+ catch (err) {
302
+ return {
303
+ success: false,
304
+ error: `Failed to remove unit file: ${err instanceof Error ? err.message : String(err)}`,
305
+ status: getSystemdStatus(),
306
+ };
307
+ }
308
+ spawnSync('systemctl', ['--user', 'daemon-reload'], { stdio: 'ignore', timeout: 10_000 });
309
+ // `reset-failed` clears any failed-state markers left over from the
310
+ // disable/stop so the unit doesn't show up in `systemctl --user --failed`.
311
+ spawnSync('systemctl', ['--user', 'reset-failed', QUICKSAVE_UNIT], { stdio: 'ignore', timeout: 5_000 });
312
+ return { success: true, error: firstError, status: getSystemdStatus() };
313
+ }
314
+ function stderrText(result) {
315
+ const txt = result.stderr ? result.stderr.toString().trim() : '';
316
+ if (txt)
317
+ return txt;
318
+ if (result.error)
319
+ return result.error.message;
320
+ return `exit code ${result.status}`;
321
+ }
322
+ //# sourceMappingURL=systemdUnit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemdUnit.js","sourceRoot":"","sources":["../../src/service/systemdUnit.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,12 @@ export interface ServiceState {
83
83
  signalingServer: string;
84
84
  connectionState: 'connected' | 'connecting' | 'disconnected';
85
85
  peerCount: number;
86
+ /**
87
+ * Set to `'systemd'` when the daemon detected it was spawned by a systemd
88
+ * user unit. Absent otherwise — older daemons and direct invocations leave
89
+ * this field undefined, and the CLI treats undefined as "self-managed".
90
+ */
91
+ managedBy?: 'systemd';
86
92
  }
87
93
  export interface PairingInfoResult {
88
94
  agentId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 King Young Technology
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * Service daemon IPC protocol types.
3
5
  *
@@ -25,7 +27,7 @@ const IS_DEV = globalThis.__QUICKSAVE_DEV__ === true;
25
27
  * In dev mode, hashes source file mtimes so the value only changes when code
26
28
  * actually changes — avoids spurious daemon restarts.
27
29
  */
28
- const _PLACEHOLDER = 'a3bdcf3cbc1d';
30
+ const _PLACEHOLDER = '17aed35779ac';
29
31
  export const BUILD_ID = IS_DEV ? devBuildId() : _PLACEHOLDER;
30
32
  function devBuildId() {
31
33
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,+BAA+B;AAC/B;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,oDAAoD;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,MAAM,GAAI,UAA8C,CAAC,iBAAiB,KAAK,IAAI,CAAC;AAE1F;;;;GAIG;AACH,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;AAE7D,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,SAAS,IAAI,CAAC,GAAW;YACxB,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;oBAAE,SAAS;gBAClE,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,WAAW,EAAE;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;qBACxB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACX,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAkCD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,wBAAwB;IACxB,WAAW,EAAE,CAAC,KAAK;IACnB,eAAe,EAAE,CAAC,KAAK;IACvB,gBAAgB,EAAE,CAAC,KAAK;IACxB,cAAc,EAAE,CAAC,KAAK;IAEtB,uBAAuB;IACvB,iBAAiB,EAAE,CAAC,KAAK;IACzB,kBAAkB,EAAE,CAAC,KAAK;IAC1B,mBAAmB,EAAE,CAAC,KAAK;IAC3B,kBAAkB,EAAE,CAAC,KAAK;IAC1B,oBAAoB,EAAE,CAAC,KAAK;CACpB,CAAC;AA4JX,MAAM,UAAU,mBAAmB,CACjC,MAAmB,EACnB,GAA4C;IAE5C,IAAI,MAAM,CAAC,gBAAgB,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,UAAU;YAC7C,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE;YACvB,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAClC,CAAC;IACD,yEAAyE;IACzE,uEAAuE;IACvE,wEAAwE;IACxE,yDAAyD;IACzD,IAAI,MAAM,CAAC,aAAa,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"eventStore.d.ts","sourceRoot":"","sources":["../../src/storage/eventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB;AACrB;;;;4CAI4C;GAC1C,eAAe,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;kEAC8D;IAC9D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;;yEAEqE;IACrE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;wEAEoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAWD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAqB;gBAE7B,MAAM,EAAE,MAAM;IAyD1B,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAMR,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAqBhD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,MAAM,SAAI,GAAG,WAAW,EAAE;IAK3E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAkBnD,KAAK,IAAI,IAAI;CAGd;AAeD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
1
+ {"version":3,"file":"eventStore.d.ts","sourceRoot":"","sources":["../../src/storage/eventStore.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAOH,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,YAAY,GACZ,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB;AACrB;;;;4CAI4C;GAC1C,eAAe,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;kEAC8D;IAC9D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB;;yEAEqE;IACrE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;wEAEoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAWD,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,YAAY,CAAqB;gBAE7B,MAAM,EAAE,MAAM;IAyD1B,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAMR,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAqBhD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,EAAE,MAAM,SAAI,GAAG,WAAW,EAAE;IAK3E,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAkBnD,KAAK,IAAI,IAAI;CAGd;AAeD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 King Young Technology
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * Event store — append-only SQLite log of session activity.
3
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"eventStore.js","sourceRoot":"","sources":["../../src/storage/eventStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventStore.js","sourceRoot":"","sources":["../../src/storage/eventStore.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,+BAA+B;AAC/B;;;;;;;;;;;GAWG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgEtD,MAAM,OAAO,UAAU;IACb,EAAE,CAAoB;IACtB,UAAU,CAAqB;IAC/B,SAAS,CAAqB;IAC9B,cAAc,CAAqB;IACnC,kBAAkB,CAAqB;IACvC,iBAAiB,CAAqB;IACtC,YAAY,CAAqB;IAEzC,YAAY,MAAc;QACxB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAEvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;KAYZ,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC/B,+EAA+E,CAChF,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KAShC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACnC,4FAA4F,CAC7F,CAAC;QAEF,wEAAwE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACvC,kGAAkG,CACnG,CAAC;QAEF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACtC,0HAA0H,CAC3H,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACjC,gHAAgH,CACjH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAMN;QACC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7F,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAM3C,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAoC,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAwC,CAAC;QAC/F,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;SAC5C,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,SAAiB,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAe,CAAC;QAChF,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAsD,CAAC;QAClG,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1C,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YAC5C,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;YAC1D,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;YAClD,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;YAClC,qBAAqB,EAAE,OAAO,IAAI,CAAC,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;YAC9G,sBAAsB,EAAE,OAAO,IAAI,CAAC,sBAAsB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS;YACjH,2BAA2B,EAAE,OAAO,IAAI,CAAC,2BAA2B,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,SAAS;YAChI,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;SAC7C,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED,SAAS,WAAW,CAAC,GAAa;IAChC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAiB;QAC3B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KAC7C,CAAC;AACJ,CAAC;AAED,IAAI,QAAQ,GAAsB,IAAI,CAAC;AAEvC,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,eAAe;IAC7B,IAAI,QAAQ;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminalManager.d.ts","sourceRoot":"","sources":["../../src/terminal/terminalManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EAGvB,MAAM,2BAA2B,CAAC;AAsFnC,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;IACH,aAAa,IAAI,eAAe,EAAE;IAIlC;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAc3D,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IA2G3D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ7C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;IAcvE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe;IAW1D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,IAAI;IAoB9C,iEAAiE;IACjE,QAAQ,IAAI,IAAI;CASjB;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAGD,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD"}
1
+ {"version":3,"file":"terminalManager.d.ts","sourceRoot":"","sources":["../../src/terminal/terminalManager.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EAGvB,MAAM,2BAA2B,CAAC;AAsFnC,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;IACH,aAAa,IAAI,eAAe,EAAE;IAIlC;;;OAGG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAc3D,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IA2G3D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ7C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;IAcvE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe;IAW1D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,IAAI;IAoB9C,iEAAiE;IACjE,QAAQ,IAAI,IAAI;CASjB;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAGD,wBAAgB,4BAA4B,IAAI,IAAI,CAGnD"}
@@ -1,3 +1,5 @@
1
+ // SPDX-FileCopyrightText: 2026 King Young Technology
2
+ // SPDX-License-Identifier: MIT
1
3
  /**
2
4
  * TerminalManager — owns a pool of PTY-backed shells the PWA can drive remotely.
3
5
  *