draken 0.1.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/ACCEPTANCE.md +34 -0
  2. package/CHANGELOG.md +65 -0
  3. package/CONTRIBUTING.md +129 -0
  4. package/MEMORY.md +118 -0
  5. package/PERSONA.md +67 -0
  6. package/README.md +168 -78
  7. package/SETUP.md +111 -0
  8. package/SOURCES.md +75 -0
  9. package/TRAY.md +54 -0
  10. package/VOICE.md +126 -0
  11. package/dist/auth/middleware.d.ts +3 -1
  12. package/dist/auth/middleware.d.ts.map +1 -1
  13. package/dist/auth/middleware.js +20 -15
  14. package/dist/auth/middleware.js.map +1 -1
  15. package/dist/cli.js +77 -113
  16. package/dist/cli.js.map +1 -1
  17. package/dist/db/agent-migration.d.ts +7 -0
  18. package/dist/db/agent-migration.d.ts.map +1 -0
  19. package/dist/db/agent-migration.js +36 -0
  20. package/dist/db/agent-migration.js.map +1 -0
  21. package/dist/db/evidence.d.ts +37 -0
  22. package/dist/db/evidence.d.ts.map +1 -0
  23. package/dist/db/evidence.js +110 -0
  24. package/dist/db/evidence.js.map +1 -0
  25. package/dist/db/pointer-migration.d.ts +7 -0
  26. package/dist/db/pointer-migration.d.ts.map +1 -0
  27. package/dist/db/pointer-migration.js +117 -0
  28. package/dist/db/pointer-migration.js.map +1 -0
  29. package/dist/db/retained-text.d.ts +8 -0
  30. package/dist/db/retained-text.d.ts.map +1 -0
  31. package/dist/db/retained-text.js +36 -0
  32. package/dist/db/retained-text.js.map +1 -0
  33. package/dist/db/schema.d.ts +1 -5
  34. package/dist/db/schema.d.ts.map +1 -1
  35. package/dist/db/schema.js +206 -55
  36. package/dist/db/schema.js.map +1 -1
  37. package/dist/db/snapshot-pointers.d.ts +5 -0
  38. package/dist/db/snapshot-pointers.d.ts.map +1 -0
  39. package/dist/db/snapshot-pointers.js +174 -0
  40. package/dist/db/snapshot-pointers.js.map +1 -0
  41. package/dist/memory/automatic.d.ts +38 -0
  42. package/dist/memory/automatic.d.ts.map +1 -0
  43. package/dist/memory/automatic.js +155 -0
  44. package/dist/memory/automatic.js.map +1 -0
  45. package/dist/memory/context.d.ts +12 -0
  46. package/dist/memory/context.d.ts.map +1 -0
  47. package/dist/memory/context.js +107 -0
  48. package/dist/memory/context.js.map +1 -0
  49. package/dist/memory/embedding-pool.d.ts +28 -0
  50. package/dist/memory/embedding-pool.d.ts.map +1 -0
  51. package/dist/memory/embedding-pool.js +135 -0
  52. package/dist/memory/embedding-pool.js.map +1 -0
  53. package/dist/memory/embedding-worker.d.ts +2 -0
  54. package/dist/memory/embedding-worker.d.ts.map +1 -0
  55. package/dist/memory/embedding-worker.js +32 -0
  56. package/dist/memory/embedding-worker.js.map +1 -0
  57. package/dist/memory/index.d.ts +32 -0
  58. package/dist/memory/index.d.ts.map +1 -0
  59. package/dist/memory/index.js +441 -0
  60. package/dist/memory/index.js.map +1 -0
  61. package/dist/memory/model-files.d.ts +9 -0
  62. package/dist/memory/model-files.d.ts.map +1 -0
  63. package/dist/memory/model-files.js +13 -0
  64. package/dist/memory/model-files.js.map +1 -0
  65. package/dist/memory/model.d.ts +15 -0
  66. package/dist/memory/model.d.ts.map +1 -0
  67. package/dist/memory/model.js +147 -0
  68. package/dist/memory/model.js.map +1 -0
  69. package/dist/memory/readiness.d.ts +16 -0
  70. package/dist/memory/readiness.d.ts.map +1 -0
  71. package/dist/memory/readiness.js +131 -0
  72. package/dist/memory/readiness.js.map +1 -0
  73. package/dist/memory/reconcile.d.ts +11 -0
  74. package/dist/memory/reconcile.d.ts.map +1 -0
  75. package/dist/memory/reconcile.js +132 -0
  76. package/dist/memory/reconcile.js.map +1 -0
  77. package/dist/memory/service.d.ts +10 -0
  78. package/dist/memory/service.d.ts.map +1 -0
  79. package/dist/memory/service.js +243 -0
  80. package/dist/memory/service.js.map +1 -0
  81. package/dist/memory/sources.d.ts +15 -0
  82. package/dist/memory/sources.d.ts.map +1 -0
  83. package/dist/memory/sources.js +94 -0
  84. package/dist/memory/sources.js.map +1 -0
  85. package/dist/memory/stamps.d.ts +13 -0
  86. package/dist/memory/stamps.d.ts.map +1 -0
  87. package/dist/memory/stamps.js +101 -0
  88. package/dist/memory/stamps.js.map +1 -0
  89. package/dist/memory/storage.d.ts +5 -0
  90. package/dist/memory/storage.d.ts.map +1 -0
  91. package/dist/memory/storage.js +116 -0
  92. package/dist/memory/storage.js.map +1 -0
  93. package/dist/memory/types.d.ts +89 -0
  94. package/dist/memory/types.d.ts.map +1 -0
  95. package/dist/memory/types.js +8 -0
  96. package/dist/memory/types.js.map +1 -0
  97. package/dist/memory/worker.d.ts +2 -0
  98. package/dist/memory/worker.d.ts.map +1 -0
  99. package/dist/memory/worker.js +84 -0
  100. package/dist/memory/worker.js.map +1 -0
  101. package/dist/npm-cli.d.ts +4 -0
  102. package/dist/npm-cli.d.ts.map +1 -0
  103. package/dist/npm-cli.js +36 -0
  104. package/dist/npm-cli.js.map +1 -0
  105. package/dist/pi/runtime.d.ts +34 -0
  106. package/dist/pi/runtime.d.ts.map +1 -0
  107. package/dist/pi/runtime.js +210 -0
  108. package/dist/pi/runtime.js.map +1 -0
  109. package/dist/pi/setup.d.ts +5 -0
  110. package/dist/pi/setup.d.ts.map +1 -0
  111. package/dist/pi/setup.js +147 -0
  112. package/dist/pi/setup.js.map +1 -0
  113. package/dist/routes/auth.d.ts.map +1 -1
  114. package/dist/routes/auth.js +3 -1
  115. package/dist/routes/auth.js.map +1 -1
  116. package/dist/routes/live-voice.d.ts +3 -0
  117. package/dist/routes/live-voice.d.ts.map +1 -0
  118. package/dist/routes/live-voice.js +49 -0
  119. package/dist/routes/live-voice.js.map +1 -0
  120. package/dist/routes/{browse.d.ts → memory.d.ts} +1 -1
  121. package/dist/routes/memory.d.ts.map +1 -0
  122. package/dist/routes/memory.js +18 -0
  123. package/dist/routes/memory.js.map +1 -0
  124. package/dist/routes/{tasks.d.ts → sync.d.ts} +1 -1
  125. package/dist/routes/sync.d.ts.map +1 -0
  126. package/dist/routes/sync.js +145 -0
  127. package/dist/routes/sync.js.map +1 -0
  128. package/dist/routes/{projects.d.ts → voice.d.ts} +1 -1
  129. package/dist/routes/voice.d.ts.map +1 -0
  130. package/dist/routes/voice.js +35 -0
  131. package/dist/routes/voice.js.map +1 -0
  132. package/dist/server-state.d.ts +30 -0
  133. package/dist/server-state.d.ts.map +1 -0
  134. package/dist/server-state.js +113 -0
  135. package/dist/server-state.js.map +1 -0
  136. package/dist/server-status.d.ts +7 -0
  137. package/dist/server-status.d.ts.map +1 -0
  138. package/dist/server-status.js +34 -0
  139. package/dist/server-status.js.map +1 -0
  140. package/dist/server.d.ts +5 -1
  141. package/dist/server.d.ts.map +1 -1
  142. package/dist/server.js +148 -46
  143. package/dist/server.js.map +1 -1
  144. package/dist/sources/adapters.d.ts +15 -0
  145. package/dist/sources/adapters.d.ts.map +1 -0
  146. package/dist/sources/adapters.js +159 -0
  147. package/dist/sources/adapters.js.map +1 -0
  148. package/dist/sources/registry.d.ts +17 -0
  149. package/dist/sources/registry.d.ts.map +1 -0
  150. package/dist/sources/registry.js +56 -0
  151. package/dist/sources/registry.js.map +1 -0
  152. package/dist/sync/collector.d.ts +3 -0
  153. package/dist/sync/collector.d.ts.map +1 -0
  154. package/dist/sync/collector.js +324 -0
  155. package/dist/sync/collector.js.map +1 -0
  156. package/dist/sync/cost.d.ts +7 -0
  157. package/dist/sync/cost.d.ts.map +1 -0
  158. package/dist/sync/cost.js +31 -0
  159. package/dist/sync/cost.js.map +1 -0
  160. package/dist/sync/jsonl.d.ts +34 -0
  161. package/dist/sync/jsonl.d.ts.map +1 -0
  162. package/dist/sync/jsonl.js +161 -0
  163. package/dist/sync/jsonl.js.map +1 -0
  164. package/dist/sync/manager.d.ts +15 -0
  165. package/dist/sync/manager.d.ts.map +1 -0
  166. package/dist/sync/manager.js +287 -0
  167. package/dist/sync/manager.js.map +1 -0
  168. package/dist/sync/normalize.d.ts +22 -0
  169. package/dist/sync/normalize.d.ts.map +1 -0
  170. package/dist/sync/normalize.js +107 -0
  171. package/dist/sync/normalize.js.map +1 -0
  172. package/dist/sync/pi-output.d.ts +33 -0
  173. package/dist/sync/pi-output.d.ts.map +1 -0
  174. package/dist/sync/pi-output.js +186 -0
  175. package/dist/sync/pi-output.js.map +1 -0
  176. package/dist/sync/pi.d.ts +15 -0
  177. package/dist/sync/pi.d.ts.map +1 -0
  178. package/dist/sync/pi.js +149 -0
  179. package/dist/sync/pi.js.map +1 -0
  180. package/dist/sync/recap.d.ts +25 -0
  181. package/dist/sync/recap.d.ts.map +1 -0
  182. package/dist/sync/recap.js +118 -0
  183. package/dist/sync/recap.js.map +1 -0
  184. package/dist/sync/reconciliation.d.ts +16 -0
  185. package/dist/sync/reconciliation.d.ts.map +1 -0
  186. package/dist/sync/reconciliation.js +22 -0
  187. package/dist/sync/reconciliation.js.map +1 -0
  188. package/dist/sync/references.d.ts +10 -0
  189. package/dist/sync/references.d.ts.map +1 -0
  190. package/dist/sync/references.js +50 -0
  191. package/dist/sync/references.js.map +1 -0
  192. package/dist/sync/source-files.d.ts +16 -0
  193. package/dist/sync/source-files.d.ts.map +1 -0
  194. package/dist/sync/source-files.js +56 -0
  195. package/dist/sync/source-files.js.map +1 -0
  196. package/dist/sync/store.d.ts +36 -0
  197. package/dist/sync/store.d.ts.map +1 -0
  198. package/dist/sync/store.js +359 -0
  199. package/dist/sync/store.js.map +1 -0
  200. package/dist/sync/summary-budget.d.ts +19 -0
  201. package/dist/sync/summary-budget.d.ts.map +1 -0
  202. package/dist/sync/summary-budget.js +39 -0
  203. package/dist/sync/summary-budget.js.map +1 -0
  204. package/dist/sync/tree.d.ts +69 -0
  205. package/dist/sync/tree.d.ts.map +1 -0
  206. package/dist/sync/tree.js +599 -0
  207. package/dist/sync/tree.js.map +1 -0
  208. package/dist/tray/controller.d.ts +51 -0
  209. package/dist/tray/controller.d.ts.map +1 -0
  210. package/dist/tray/controller.js +178 -0
  211. package/dist/tray/controller.js.map +1 -0
  212. package/dist/tray/launcher.d.ts +3 -0
  213. package/dist/tray/launcher.d.ts.map +1 -0
  214. package/dist/tray/launcher.js +47 -0
  215. package/dist/tray/launcher.js.map +1 -0
  216. package/dist/tray/native.d.ts +12 -0
  217. package/dist/tray/native.d.ts.map +1 -0
  218. package/dist/tray/native.js +93 -0
  219. package/dist/tray/native.js.map +1 -0
  220. package/dist/tray/processes.d.ts +5 -0
  221. package/dist/tray/processes.d.ts.map +1 -0
  222. package/dist/tray/processes.js +99 -0
  223. package/dist/tray/processes.js.map +1 -0
  224. package/dist/tray/worker.d.ts +4 -0
  225. package/dist/tray/worker.d.ts.map +1 -0
  226. package/dist/tray/worker.js +150 -0
  227. package/dist/tray/worker.js.map +1 -0
  228. package/dist/types.d.ts +221 -20
  229. package/dist/types.d.ts.map +1 -1
  230. package/dist/voice/continuation.d.ts +25 -0
  231. package/dist/voice/continuation.d.ts.map +1 -0
  232. package/dist/voice/continuation.js +95 -0
  233. package/dist/voice/continuation.js.map +1 -0
  234. package/dist/voice/history-focus.d.ts +14 -0
  235. package/dist/voice/history-focus.d.ts.map +1 -0
  236. package/dist/voice/history-focus.js +39 -0
  237. package/dist/voice/history-focus.js.map +1 -0
  238. package/dist/voice/legacy-history.d.ts +5 -0
  239. package/dist/voice/legacy-history.d.ts.map +1 -0
  240. package/dist/voice/legacy-history.js +34 -0
  241. package/dist/voice/legacy-history.js.map +1 -0
  242. package/dist/voice/live-context.d.ts +14 -0
  243. package/dist/voice/live-context.d.ts.map +1 -0
  244. package/dist/voice/live-context.js +137 -0
  245. package/dist/voice/live-context.js.map +1 -0
  246. package/dist/voice/live.d.ts +37 -0
  247. package/dist/voice/live.d.ts.map +1 -0
  248. package/dist/voice/live.js +462 -0
  249. package/dist/voice/live.js.map +1 -0
  250. package/dist/voice/preparation.d.ts +8 -0
  251. package/dist/voice/preparation.d.ts.map +1 -0
  252. package/dist/voice/preparation.js +59 -0
  253. package/dist/voice/preparation.js.map +1 -0
  254. package/package.json +49 -16
  255. package/public/assets/index-BQFBaSKm.js +40 -0
  256. package/public/assets/index-CYCbTSh1.js +131 -0
  257. package/public/assets/index-DntUQtGK.css +1 -0
  258. package/public/assets/persona-BVIfx5k8.js +1 -0
  259. package/public/assets/persona-C_m1CVKe.css +1 -0
  260. package/public/assets/scene-CBV2oPhA.js +3854 -0
  261. package/public/index.html +6 -8
  262. package/public/persona/THREE-LICENSE.txt +21 -0
  263. package/public/persona/call-poster.webp +0 -0
  264. package/public/persona/chat-avatar.webp +0 -0
  265. package/public/persona/reference.jpg +0 -0
  266. package/public/persona/sample.wav +0 -0
  267. package/public/persona.html +7 -0
  268. package/runtime/pi/package-lock.json +1549 -0
  269. package/runtime/pi/package.json +12 -0
  270. package/tests/fixtures/voice-question.wav +0 -0
  271. package/tray/assets/error.ico +0 -0
  272. package/tray/assets/error.png +0 -0
  273. package/tray/assets/running.ico +0 -0
  274. package/tray/assets/running.png +0 -0
  275. package/tray/assets/starting.ico +0 -0
  276. package/tray/assets/starting.png +0 -0
  277. package/tray/assets/stopped.ico +0 -0
  278. package/tray/assets/stopped.png +0 -0
  279. package/tray/assets/stopping.ico +0 -0
  280. package/tray/assets/stopping.png +0 -0
  281. package/tray/macos.js +72 -0
  282. package/tray/windows.ps1 +104 -0
  283. package/voice/realtime/README.md +84 -0
  284. package/voice/realtime/backend.mjs +81 -0
  285. package/voice/realtime/native.mjs +210 -0
  286. package/voice/realtime/peer.d.mts +15 -0
  287. package/voice/realtime/peer.mjs +116 -0
  288. package/voice/realtime/probe-browser.mjs +81 -0
  289. package/voice/realtime/probe-server.mjs +86 -0
  290. package/voice/realtime/probe.html +11 -0
  291. package/voice/realtime/probe.mjs +42 -0
  292. package/voice/realtime/rpc.mjs +118 -0
  293. package/voice/realtime/setup.mjs +32 -0
  294. package/voice/tls.mjs +49 -0
  295. package/dist/db/queries.d.ts +0 -16
  296. package/dist/db/queries.d.ts.map +0 -1
  297. package/dist/db/queries.js +0 -91
  298. package/dist/db/queries.js.map +0 -1
  299. package/dist/docker/dockerfile.d.ts +0 -50
  300. package/dist/docker/dockerfile.d.ts.map +0 -1
  301. package/dist/docker/dockerfile.js +0 -160
  302. package/dist/docker/dockerfile.js.map +0 -1
  303. package/dist/docker/manager.d.ts +0 -42
  304. package/dist/docker/manager.d.ts.map +0 -1
  305. package/dist/docker/manager.js +0 -421
  306. package/dist/docker/manager.js.map +0 -1
  307. package/dist/git/status.d.ts +0 -76
  308. package/dist/git/status.d.ts.map +0 -1
  309. package/dist/git/status.js +0 -332
  310. package/dist/git/status.js.map +0 -1
  311. package/dist/routes/browse.d.ts.map +0 -1
  312. package/dist/routes/browse.js +0 -49
  313. package/dist/routes/browse.js.map +0 -1
  314. package/dist/routes/git.d.ts +0 -9
  315. package/dist/routes/git.d.ts.map +0 -1
  316. package/dist/routes/git.js +0 -338
  317. package/dist/routes/git.js.map +0 -1
  318. package/dist/routes/projects.d.ts.map +0 -1
  319. package/dist/routes/projects.js +0 -220
  320. package/dist/routes/projects.js.map +0 -1
  321. package/dist/routes/tasks.d.ts.map +0 -1
  322. package/dist/routes/tasks.js +0 -313
  323. package/dist/routes/tasks.js.map +0 -1
  324. package/draken.dockerfile.template +0 -18
  325. package/public/assets/index-3ngsG5kF.css +0 -1
  326. package/public/assets/index-B3YSD0ee.js +0 -252
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../src/tray/processes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { nativeTray } from './native';
2
+ import { assertTrayDesktop } from './launcher';
3
+ export declare function runTrayWorker(helperFactory?: typeof nativeTray, checkDesktop?: typeof assertTrayDesktop): Promise<void>;
4
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/tray/worker.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C,wBAAsB,aAAa,CAAC,aAAa,oBAAa,EAAE,YAAY,2BAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF/G"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runTrayWorker = runTrayWorker;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const schema_1 = require("../db/schema");
10
+ const server_state_1 = require("../server-state");
11
+ const server_status_1 = require("../server-status");
12
+ const controller_1 = require("./controller");
13
+ const native_1 = require("./native");
14
+ const processes_1 = require("./processes");
15
+ const launcher_1 = require("./launcher");
16
+ // This library supplies heartbeat locks and stale-lock recovery across both OSes.
17
+ const lockfile = require('proper-lockfile');
18
+ async function runTrayWorker(helperFactory = native_1.nativeTray, checkDesktop = launcher_1.assertTrayDesktop) {
19
+ checkDesktop();
20
+ const directory = path_1.default.join((0, schema_1.getDataDir)(), 'tray');
21
+ fs_1.default.mkdirSync(directory, { recursive: true, mode: 0o700 });
22
+ if (fs_1.default.lstatSync(directory).isSymbolicLink() || !fs_1.default.statSync(directory).isDirectory())
23
+ throw new Error('The private tray directory must not be a symlink.');
24
+ fs_1.default.chmodSync(directory, 0o700);
25
+ let helper, controller, release;
26
+ let heartbeat, poll;
27
+ let run = '', ready = false, quitting, finished = false, lostHelper = false;
28
+ const errorLog = (message) => {
29
+ let fd;
30
+ try {
31
+ const file = path_1.default.join(directory, 'error.log');
32
+ if (fs_1.default.existsSync(file) && fs_1.default.lstatSync(file).isSymbolicLink())
33
+ return;
34
+ fd = fs_1.default.openSync(file, fs_1.default.constants.O_WRONLY | fs_1.default.constants.O_CREAT | fs_1.default.constants.O_TRUNC | (fs_1.default.constants.O_NOFOLLOW || 0), 0o600);
35
+ fs_1.default.fchmodSync(fd, 0o600);
36
+ fs_1.default.writeFileSync(fd, message.slice(0, 2000) + '\n');
37
+ }
38
+ catch { /* Do not hide primary failure. */ }
39
+ finally {
40
+ if (fd !== undefined)
41
+ fs_1.default.closeSync(fd);
42
+ }
43
+ };
44
+ let view = { phase: 'starting', title: 'Draken — Starting tray', detail: 'Checking the server', canOpen: false, canStart: false, canStop: false, owned: false };
45
+ let quit = false;
46
+ const publish = () => {
47
+ if (!run)
48
+ return;
49
+ const temp = path_1.default.join(run, 'state.tmp');
50
+ fs_1.default.writeFileSync(temp, JSON.stringify({ version: 1, updated: Date.now(), quit, ...view }), { mode: 0o600 });
51
+ fs_1.default.renameSync(temp, path_1.default.join(run, 'state.json'));
52
+ };
53
+ const shutdown = () => {
54
+ if (quitting)
55
+ return quitting;
56
+ quitting = (async () => {
57
+ if (controller && !await controller.close()) {
58
+ errorLog('Owned server shutdown was not confirmed. No replacement was started.');
59
+ return;
60
+ }
61
+ clearInterval(heartbeat);
62
+ clearInterval(poll);
63
+ quit = true;
64
+ try {
65
+ publish();
66
+ }
67
+ catch { /* Helper also has a heartbeat timeout. */ }
68
+ await helper?.close();
69
+ try {
70
+ await release?.();
71
+ }
72
+ catch {
73
+ errorLog('Tray lock release could not be confirmed; stale-lock recovery remains available.');
74
+ }
75
+ release = undefined;
76
+ if (run)
77
+ fs_1.default.rmSync(run, { recursive: true, force: true });
78
+ finished = true;
79
+ process.removeListener('SIGTERM', onSignal);
80
+ process.removeListener('SIGINT', onSignal);
81
+ process.removeListener('disconnect', onDisconnect);
82
+ if (process.connected)
83
+ process.disconnect();
84
+ })().finally(() => { quitting = undefined; });
85
+ return quitting;
86
+ };
87
+ const onSignal = () => { void shutdown(); };
88
+ const onDisconnect = () => { if (!ready)
89
+ void shutdown(); };
90
+ process.on('SIGTERM', onSignal);
91
+ process.on('SIGINT', onSignal);
92
+ process.on('disconnect', onDisconnect);
93
+ try {
94
+ release = await lockfile.lock(directory, { stale: 30_000, update: 5000, retries: 0, onCompromised: () => { errorLog('Tray lock lost. Stopping only the server owned by this tray.'); void shutdown(); } });
95
+ run = fs_1.default.mkdtempSync(path_1.default.join(directory, 'run-'));
96
+ publish();
97
+ helper = helperFactory(path_1.default.join(run, 'state.json'), action => {
98
+ if (action === 'quit')
99
+ void shutdown();
100
+ else if (ready)
101
+ void controller?.act(action).catch(() => { errorLog('Tray action failed. Check draken status.'); });
102
+ });
103
+ await helper.ready;
104
+ if (!process.connected)
105
+ throw new Error('Tray launch was cancelled before readiness');
106
+ // A host/port override must not hide an existing instance in the same DB
107
+ // directory and cause startup recovery under a second listener.
108
+ controller = new controller_1.TrayController({ target: () => (0, server_state_1.recordedServerTarget)() || (0, server_state_1.serverTarget)(), configured: server_state_1.configuredServerTarget, probe: server_status_1.probeServer,
109
+ launch: () => (0, processes_1.launchServer)(path_1.default.join(directory, 'server.log')), open: processes_1.openBrowser,
110
+ changed: value => { view = value; publish(); } });
111
+ ready = true;
112
+ process.send({ type: 'tray-ready' }, error => { if (error) {
113
+ ready = false;
114
+ void shutdown();
115
+ } });
116
+ heartbeat = setInterval(() => {
117
+ if (lostHelper) {
118
+ void shutdown();
119
+ return;
120
+ }
121
+ try {
122
+ publish();
123
+ }
124
+ catch {
125
+ errorLog('Cannot retain tray status.');
126
+ void shutdown();
127
+ }
128
+ }, 1000);
129
+ void helper.exited.then(() => {
130
+ lostHelper = true;
131
+ if (!finished && !quitting) {
132
+ errorLog('Native tray closed. Stopping its owned server.');
133
+ void shutdown();
134
+ }
135
+ });
136
+ await controller.initialize();
137
+ if (!finished && !quitting)
138
+ poll = setInterval(() => { void controller.poll().catch(() => { errorLog('Cannot check server status.'); }); }, 2000);
139
+ }
140
+ catch (error) {
141
+ const message = error.code === 'ELOCKED'
142
+ ? 'A tray already owns this data directory, or exited uncleanly. Close it or wait 30 seconds, then retry.'
143
+ : error instanceof Error ? error.message : 'Tray startup failed';
144
+ errorLog(message);
145
+ if (process.connected)
146
+ process.send({ type: 'tray-error', message }, () => { });
147
+ await shutdown();
148
+ }
149
+ }
150
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/tray/worker.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,32 +1,233 @@
1
- export interface Project {
2
- id: number;
1
+ export interface CallReadiness {
2
+ ready: boolean;
3
+ briefingReady: boolean;
4
+ historyReady: boolean;
5
+ preparing: boolean;
6
+ before: string | null;
7
+ error: string;
8
+ }
9
+ export type AgentKind = 'pi' | 'codex' | 'claude';
10
+ export interface AgentSource {
11
+ id: AgentKind;
3
12
  name: string;
13
+ enabled: boolean;
14
+ roots: {
15
+ path: string;
16
+ status: 'present' | 'missing' | 'unavailable';
17
+ }[];
18
+ }
19
+ export interface ObservedSession {
20
+ id: string;
21
+ agent: AgentKind;
22
+ external_id: string;
4
23
  path: string;
5
- dockerfile_exists: number;
24
+ cwd: string;
25
+ name: string;
26
+ included: number;
27
+ missing: number;
28
+ modified_at: string;
29
+ pending: number;
30
+ }
31
+ export interface Evidence {
32
+ agent?: AgentKind;
33
+ ref: string;
34
+ event_key: string;
35
+ session_id: string;
36
+ session_name: string;
37
+ source_path: string;
38
+ cwd: string;
39
+ entry_id: string;
40
+ sequence?: number;
41
+ timestamp: string;
42
+ role: string;
43
+ text: string;
44
+ unavailable?: string;
45
+ source_key?: string;
46
+ }
47
+ export interface AutoIndexSettings {
48
+ enabled: boolean;
49
+ check_seconds: number;
50
+ batch_records: number;
51
+ phase: 'off' | 'waiting' | 'scanning' | 'indexing' | 'paused' | 'stopping' | 'error';
52
+ pending_records: number;
53
+ last_completed_at: string | null;
54
+ error: string;
55
+ }
56
+ export interface SyncCost {
57
+ usd: number | null;
58
+ complete: boolean;
59
+ }
60
+ export interface PiAccounting {
61
+ source: 'pi-usage/catalog-pricing';
62
+ cost_usd: number | null;
63
+ complete: boolean;
64
+ responses: number;
65
+ tokens: {
66
+ input: number;
67
+ output: number;
68
+ cache_read: number;
69
+ cache_write: number;
70
+ reasoning: number;
71
+ };
72
+ models: string[];
73
+ }
74
+ export interface SyncSummary {
75
+ id: number;
76
+ status: 'open' | 'completed' | 'discarded';
77
+ created_at: string;
78
+ completed_at: string | null;
79
+ briefing: string;
80
+ decisions: string;
81
+ carry_forward: string;
82
+ item_count: number;
83
+ remaining_count: number;
84
+ snapshot_version: number;
85
+ snapshot_at: string;
86
+ recap: string;
87
+ recap_state: 'empty' | 'running' | 'ready' | 'failed';
88
+ recap_error: string;
89
+ aggregation_cost: SyncCost | null;
90
+ }
91
+ interface SyncCard {
92
+ aggregation_cost: SyncCost | null;
93
+ id: number;
94
+ status: SyncSummary['status'];
6
95
  created_at: string;
96
+ item_count: number;
97
+ preview: string;
98
+ preview_kind: 'recap' | 'previous_recap' | 'briefing' | 'empty';
99
+ busy: boolean;
100
+ calls: number;
101
+ needs_retry: boolean;
102
+ active_call: boolean;
7
103
  }
8
- export interface Task {
104
+ export interface PiSetupStatus {
105
+ source: 'managed' | 'external';
106
+ state: 'missing' | 'incompatible' | 'needs_login' | 'configured' | 'error';
107
+ version: string | null;
108
+ agent_dir: string;
109
+ message: string;
110
+ models: {
111
+ model: string;
112
+ state: 'configured' | 'needs_login' | 'unavailable';
113
+ }[];
114
+ }
115
+ export interface HomeOverview {
116
+ syncs: SyncCard[];
117
+ available: number;
118
+ included_unreviewed: number;
119
+ covered: number;
120
+ busy: boolean;
121
+ active_call: boolean;
122
+ next_cursor: number | null;
123
+ }
124
+ interface SyncMessage {
9
125
  id: number;
10
- project_id: number;
11
- prompt: string;
12
- status: 'pending' | 'running' | 'completed' | 'failed';
13
- container_id: string | null;
14
- logs: string | null;
15
- session_id: string | null;
16
- parent_task_id: number | null;
126
+ role: 'user' | 'assistant';
127
+ content: string;
17
128
  created_at: string;
129
+ }
130
+ export interface SyncDetail extends SyncSummary {
131
+ items: Evidence[];
132
+ context: Evidence[];
133
+ memory: {
134
+ sync_id: number;
135
+ decisions: string;
136
+ carry_forward: string;
137
+ recap?: string;
138
+ status?: string;
139
+ snapshot_at?: string;
140
+ }[];
141
+ messages: SyncMessage[];
142
+ busy: boolean;
143
+ history_since: string | null;
144
+ models: SyncModels;
145
+ tree: TreeProgress;
146
+ }
147
+ export interface SyncModels {
148
+ summary: string;
149
+ final: string;
150
+ max_invocations: number;
151
+ }
152
+ export type NodeKind = 'chunk' | 'session' | 'topics' | 'topic' | 'overview';
153
+ interface Observation {
154
+ topic: string;
155
+ state: 'requested' | 'in_progress' | 'reported_done' | 'validated' | 'blocked' | 'superseded' | 'unclear';
156
+ summary: string;
157
+ evidence: string[];
158
+ }
159
+ export interface NodeSummary {
160
+ observations: Observation[];
161
+ limitations: string[];
162
+ }
163
+ export interface TopicGroups {
164
+ groups: {
165
+ topic: string;
166
+ members: string[];
167
+ }[];
168
+ }
169
+ export interface TreeNode {
170
+ key: string;
171
+ kind: NodeKind;
172
+ label: string;
173
+ status: 'pending' | 'running' | 'done' | 'cached' | 'failed';
174
+ children: string[];
175
+ source_count: number;
176
+ error: string;
177
+ }
178
+ export interface ModelCallMetric {
179
+ accounting?: PiAccounting;
180
+ task: string;
181
+ stage: string | null;
182
+ repair: boolean;
183
+ model: string;
184
+ elapsed_ms: number;
185
+ input_characters: number;
186
+ input_tokens_estimate: number;
187
+ output_characters: number | null;
188
+ output_tokens_estimate: number | null;
189
+ status: 'completed' | 'cancelled' | 'failed';
190
+ }
191
+ export interface TreeRun {
192
+ id: number;
193
+ status: 'running' | 'completed' | 'failed' | 'cancelled' | 'interrupted';
194
+ stage: string;
195
+ summary_model: string;
196
+ final_model: string;
197
+ invocations: number;
198
+ max_invocations: number;
199
+ processed_entries: number;
200
+ total_entries: number;
201
+ cache_hits: number;
202
+ metrics: ModelCallMetric[];
203
+ error: string;
204
+ question: string | null;
205
+ request_id: string | null;
206
+ started_at: string;
18
207
  completed_at: string | null;
19
208
  }
20
- export interface DirectoryEntry {
21
- name: string;
22
- path: string;
23
- isDirectory: boolean;
209
+ export interface TreeProgress {
210
+ busy: boolean;
211
+ complete: boolean;
212
+ run: TreeRun | null;
213
+ nodes: TreeNode[];
24
214
  }
25
- export interface CreateProjectRequest {
26
- path: string;
27
- name?: string;
215
+ export interface ScanResult {
216
+ files: number;
217
+ added: number;
218
+ warnings: string[];
28
219
  }
29
- export interface CreateTaskRequest {
30
- prompt: string;
220
+ export interface Overview {
221
+ agents: AgentSource[];
222
+ sessions: ObservedSession[];
223
+ syncs: SyncSummary[];
224
+ pending: number;
225
+ active_sync_id: number | null;
226
+ session_root: string;
227
+ model: string;
228
+ history_since: string | null;
229
+ history_initialized: boolean;
230
+ summary_model: string;
31
231
  }
232
+ export {};
32
233
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** A bounded follow-through for one real user turn, never a second user message.
2
+ * This is delivery state, not a claim that a model's answer is true or was heard.
3
+ */
4
+ export declare class ReplyContinuation {
5
+ private readonly resume;
6
+ private readonly changed;
7
+ private readonly question;
8
+ private ready;
9
+ private input;
10
+ private busy;
11
+ private acknowledged;
12
+ private sent;
13
+ private finished;
14
+ private timer?;
15
+ private deadline?;
16
+ constructor(resume: () => Promise<void>, changed: (pending: boolean, error?: string) => void, question?: () => string);
17
+ lookupStarted(): void;
18
+ inputStarted(): void;
19
+ contextReady(): void;
20
+ response(text: string, final: boolean): void;
21
+ cancel(error?: string): void;
22
+ private fail;
23
+ private schedule;
24
+ }
25
+ //# sourceMappingURL=continuation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.d.ts","sourceRoot":"","sources":["../../src/voice/continuation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,iBAAiB;IAUhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAuB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAA8C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IATzJ,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAiB;gBAEL,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAmB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,EAAmB,QAAQ,GAAE,MAAM,MAAiB;IAElL,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;IA0BrC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM;IAMrB,OAAO,CAAC,IAAI;IAGZ,OAAO,CAAC,QAAQ;CAajB"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReplyContinuation = void 0;
4
+ /** A bounded follow-through for one real user turn, never a second user message.
5
+ * This is delivery state, not a claim that a model's answer is true or was heard.
6
+ */
7
+ class ReplyContinuation {
8
+ resume;
9
+ changed;
10
+ question;
11
+ ready = false;
12
+ input = false;
13
+ busy = false;
14
+ acknowledged = false;
15
+ sent = false;
16
+ finished = false;
17
+ timer;
18
+ deadline;
19
+ constructor(resume, changed, question = () => '') {
20
+ this.resume = resume;
21
+ this.changed = changed;
22
+ this.question = question;
23
+ }
24
+ lookupStarted() { if (!this.finished)
25
+ this.changed(true); }
26
+ inputStarted() { if (!this.finished) {
27
+ this.input = true;
28
+ this.schedule();
29
+ } }
30
+ contextReady() { if (!this.finished) {
31
+ this.ready = true;
32
+ this.schedule();
33
+ } }
34
+ response(text, final) {
35
+ if (this.finished || !this.input)
36
+ return;
37
+ this.busy = !final;
38
+ clearTimeout(this.timer);
39
+ if (!final)
40
+ return;
41
+ // A final transcript PART is not necessarily the end of an answer: V3
42
+ // also emits short backchannels. Neither those nor a lookup promise is the
43
+ // requested explanation.
44
+ // Be conservative: do not re-prompt a normal factual reply, or use a second
45
+ // model to judge it. The live prompt defaults to English.
46
+ const plain = text.trim().replace(/[’‘]/g, "'").replace(/[‐‑‒–—]/g, '-');
47
+ if (!plain) {
48
+ this.schedule();
49
+ return;
50
+ }
51
+ const social = /^(?:(?:thanks|thank you|okay|ok|got it|yes|no|yep|nope|hello|hi|hey|bye|goodbye)(?: draken)?)[.!…\s]*$/i.test(this.question().trim());
52
+ const acknowledgement = !social && plain.length <= 600 && (/(?:^|[.!?]\s+)(?:(?:sure|okay|ok|of course)[,\s—:-]+)?(?:i(?:'ll| will)|let me|let's)\s+(?:(?:just|quickly|first|now|briefly)\s+)*(?:check|look|search|review|pull|read|find|fetch|inspect|see|have a look)\b/i.test(plain) ||
53
+ /(?:^|[.!?]\s+)i(?:'m| am)\s+(?:(?:just|currently|now)\s+)*(?:checking|looking|searching|reviewing|pulling|reading|finding|fetching|inspecting)\b/i.test(plain) ||
54
+ /(?:^|[.!?]\s+)(?:checking|searching|looking up|pulling|picking up)\b/i.test(plain) ||
55
+ /^(?:checking|searching|looking it up|okay|ok|sure(?: thing)?|alright|all right|got it|understood|certainly|you bet|will do|on it|one (?:moment|second|sec)|(?:hold|hang) on|mm[- ]?hmm|uh[- ]?huh|hmm|mhm)[.!?…]*$/i.test(plain));
56
+ if (!acknowledgement) {
57
+ this.cancel();
58
+ return;
59
+ }
60
+ // An acknowledgement can be in flight before the cue, or its completion
61
+ // event can be repeated. Neither is permission for another cue or a reason
62
+ // to discard an explanation still arriving. The fixed deadline stays armed.
63
+ this.acknowledged = true;
64
+ this.schedule();
65
+ }
66
+ cancel(error) {
67
+ if (this.finished)
68
+ return;
69
+ this.finished = true;
70
+ clearTimeout(this.timer);
71
+ clearTimeout(this.deadline);
72
+ this.changed(false, error);
73
+ }
74
+ fail() {
75
+ this.cancel('The lookup finished, but a completed voice answer was not confirmed. You can ask again; no automatic retry loop was started.');
76
+ }
77
+ schedule() {
78
+ if (this.finished || this.sent || !this.ready || !this.input || this.busy)
79
+ return;
80
+ clearTimeout(this.timer);
81
+ // Let a direct response start normally. An already completed acknowledgement
82
+ // needs only a small event-ordering grace, not another user prompt.
83
+ this.timer = setTimeout(() => {
84
+ if (this.finished || this.sent || this.busy)
85
+ return;
86
+ this.sent = true;
87
+ this.deadline = setTimeout(() => this.fail(), 45_000);
88
+ this.deadline.unref();
89
+ void this.resume().catch(() => this.fail());
90
+ }, this.acknowledged ? 400 : 1500);
91
+ this.timer.unref();
92
+ }
93
+ }
94
+ exports.ReplyContinuation = ReplyContinuation;
95
+ //# sourceMappingURL=continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../src/voice/continuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { HistoryQuery } from '../memory/types';
3
+ export interface VoiceHistoryFocus {
4
+ sessions: string[];
5
+ question: string;
6
+ topics?: string[];
7
+ }
8
+ /** Resolve scope from admitted session metadata and the actual user's turns,
9
+ * never from commands or project names embedded in retrieved source text. */
10
+ export declare function voiceHistoryQuery(db: Database.Database, question: string, previous?: VoiceHistoryFocus): {
11
+ focus: VoiceHistoryFocus;
12
+ query: HistoryQuery;
13
+ };
14
+ //# sourceMappingURL=history-focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-focus.d.ts","sourceRoot":"","sources":["../../src/voice/history-focus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,WAAW,iBAAiB;IAAG,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AAK9F;6EAC6E;AAC7E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CA4B1J"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.voiceHistoryQuery = voiceHistoryQuery;
4
+ const reconcile_1 = require("../memory/reconcile");
5
+ const common = new Set('hello hi hey can could would please check tell about what whats happening going latest current now doing working work trying achieve project repo repository called have with from this that those these here there where which when your our app application ios native rewrite version status update progress mean meant exactly does how the and for are was were has had you it its into written make want thinking using upload uploading safety missing links visual parity screens screen functional original remains tests testing tested implementation implemented images photos profile navigation blocked blocker blockers unfinished unconfirmed remaining finished completed completion left long longer'.split(' '));
6
+ const words = (text) => [...new Set(text.toLowerCase().match(/[\p{L}\p{N}]+/gu) || [])].filter(word => word.length >= 3 && !common.has(word));
7
+ const conversationQuestion = (question) => /\b(?:what (?:did|have) (?:i|we|you) (?:ask|say|discuss|agree|decide)|(?:previous|earlier|last) (?:call|conversation|discussion)|remember (?:when|what)|quote (?:me|our))\b/i.test(question);
8
+ /** Resolve scope from admitted session metadata and the actual user's turns,
9
+ * never from commands or project names embedded in retrieved source text. */
10
+ function voiceHistoryQuery(db, question, previous) {
11
+ const terms = words(question);
12
+ const rows = db.prepare(`SELECT s.id,s.name,s.cwd FROM agent_sessions s JOIN agent_sources a ON a.id=s.agent
13
+ WHERE s.included=1 AND s.missing=0 AND a.enabled=1 ORDER BY s.id`).all();
14
+ const named = rows.map(row => ({ id: row.id, words: words(`${row.name} ${row.cwd.split(/[\\/]/).pop() || ''}`) }));
15
+ // Common workspace names cannot select a project shared by every session.
16
+ const matches = terms.map(word => ({ word, sessions: named.filter(row => row.words.includes(word)).map(row => row.id) }))
17
+ .filter(item => item.sessions.length > 0 && item.sessions.length <= 8 && (item.sessions.length < rows.length || rows.length === 1))
18
+ .sort((a, b) => a.sessions.length - b.sessions.length || b.word.length - a.word.length);
19
+ const selectedSessions = [...new Set(matches.flatMap(match => match.sessions))];
20
+ const explicit = selectedSessions.length && selectedSessions.length <= 8 ? selectedSessions : undefined;
21
+ const switching = /\b(?:switch|different project|another project|instead)\b/i.test(question);
22
+ const sessions = explicit || (switching ? [] : previous?.sessions || []);
23
+ const same = previous && JSON.stringify(previous.sessions) === JSON.stringify(sessions);
24
+ const recall = conversationQuestion(question);
25
+ const recent = !recall && ((0, reconcile_1.statusQuestion)(question) || /\b(?:happening|at the moment|working on|trying to achieve|have you checked|visual parity|screens match|what changed)\b/i.test(question));
26
+ // The preceding question supplies the referent for "those" / "uploading here".
27
+ // Session scope is independent of this text, so a follow-up cannot drift into
28
+ // an unrelated project merely because its wording is generic.
29
+ const explained = question.match(/\b(?:mean|meant by|explain)\s+([^?.]{3,160})/i)?.[1];
30
+ const followup = /\b(?:here|those|that|have you checked|screens match|what remains)\b/i.test(question);
31
+ const queryText = same && !explicit && followup && !explained ? `${question}\nPrevious question in this conversation: ${previous.question}` : question;
32
+ const namedTopics = explained?.split(/\s+(?:and|versus|vs\.?)\s+/i).map(value => value.trim()).filter(Boolean).slice(0, 2);
33
+ const topics = namedTopics || (same && /\b(?:here|those|that|exactly)\b/i.test(question) ? previous?.topics : undefined);
34
+ return { focus: { sessions, question: question.slice(0, 2000), topics }, query: {
35
+ question: queryText.slice(0, 2000), ...(sessions.length && !recall ? { session_ids: sessions } : {}),
36
+ kind: recall ? 'conversation' : 'sources', recent, ...(topics && !recall ? { topics } : {}),
37
+ } };
38
+ }
39
+ //# sourceMappingURL=history-focus.js.map