teamshare-bridge 0.21.67 → 0.21.70

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 (170) hide show
  1. package/dist/bridge/autostart-launcher.d.ts +96 -0
  2. package/dist/bridge/autostart-launcher.js +218 -0
  3. package/dist/bridge/autostart-launcher.js.map +1 -0
  4. package/dist/bridge/daemon-inbox.d.ts +46 -0
  5. package/dist/bridge/daemon-inbox.js +388 -0
  6. package/dist/bridge/daemon-inbox.js.map +1 -0
  7. package/dist/bridge/daemon-support.d.ts +58 -0
  8. package/dist/bridge/daemon-support.js +227 -0
  9. package/dist/bridge/daemon-support.js.map +1 -0
  10. package/dist/bridge/daemon.d.ts +1 -0
  11. package/dist/bridge/daemon.js +106 -1247
  12. package/dist/bridge/daemon.js.map +1 -1
  13. package/dist/bridge/doctor.js +24 -2
  14. package/dist/bridge/doctor.js.map +1 -1
  15. package/dist/bridge/index.js +32 -8
  16. package/dist/bridge/index.js.map +1 -1
  17. package/dist/bridge/protocol.d.ts +12 -0
  18. package/dist/bridge/protocol.js +419 -70
  19. package/dist/bridge/protocol.js.map +1 -1
  20. package/dist/bridge/service.d.ts +6 -1
  21. package/dist/bridge/service.js +55 -53
  22. package/dist/bridge/service.js.map +1 -1
  23. package/dist/bridge/session-relay.js +3 -1
  24. package/dist/bridge/session-relay.js.map +1 -1
  25. package/dist/bridge/spawn.d.ts +15 -1
  26. package/dist/bridge/spawn.js +26 -3
  27. package/dist/bridge/spawn.js.map +1 -1
  28. package/dist/bridge/wake-handler.d.ts +35 -0
  29. package/dist/bridge/wake-handler.js +682 -0
  30. package/dist/bridge/wake-handler.js.map +1 -0
  31. package/dist/bridge/wake-routing.d.ts +114 -0
  32. package/dist/bridge/wake-routing.js +120 -0
  33. package/dist/bridge/wake-routing.js.map +1 -0
  34. package/dist/cli/commands/browse.js +104 -3369
  35. package/dist/cli/commands/browse.js.map +1 -1
  36. package/dist/cli/commands/build.js +5 -1
  37. package/dist/cli/commands/build.js.map +1 -1
  38. package/dist/cli/commands/chat.js +155 -6
  39. package/dist/cli/commands/chat.js.map +1 -1
  40. package/dist/cli/commands/planner.js +45 -12
  41. package/dist/cli/commands/planner.js.map +1 -1
  42. package/dist/cli/commands/run.js +8 -3
  43. package/dist/cli/commands/run.js.map +1 -1
  44. package/dist/cli/commands/worker.js +6 -2
  45. package/dist/cli/commands/worker.js.map +1 -1
  46. package/dist/cli/index.js +1 -1
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/lib/api-agents.d.ts +156 -0
  49. package/dist/lib/api-agents.js +135 -0
  50. package/dist/lib/api-agents.js.map +1 -0
  51. package/dist/lib/api-content.d.ts +258 -0
  52. package/dist/lib/api-content.js +297 -0
  53. package/dist/lib/api-content.js.map +1 -0
  54. package/dist/lib/api-core.d.ts +28 -0
  55. package/dist/lib/api-core.js +118 -0
  56. package/dist/lib/api-core.js.map +1 -0
  57. package/dist/lib/api-tasks.d.ts +160 -0
  58. package/dist/lib/api-tasks.js +193 -0
  59. package/dist/lib/api-tasks.js.map +1 -0
  60. package/dist/lib/api-types.d.ts +330 -0
  61. package/dist/lib/api-types.js +8 -0
  62. package/dist/lib/api-types.js.map +1 -0
  63. package/dist/lib/api.d.ts +21 -903
  64. package/dist/lib/api.js +27 -693
  65. package/dist/lib/api.js.map +1 -1
  66. package/dist/lib/brief.js +19 -0
  67. package/dist/lib/brief.js.map +1 -1
  68. package/dist/lib/browser/browse-actions.d.ts +29 -0
  69. package/dist/lib/browser/browse-actions.js +610 -0
  70. package/dist/lib/browser/browse-actions.js.map +1 -0
  71. package/dist/lib/browser/browse-cdp.d.ts +52 -0
  72. package/dist/lib/browser/browse-cdp.js +289 -0
  73. package/dist/lib/browser/browse-cdp.js.map +1 -0
  74. package/dist/lib/browser/browse-editor.d.ts +76 -0
  75. package/dist/lib/browser/browse-editor.js +706 -0
  76. package/dist/lib/browser/browse-editor.js.map +1 -0
  77. package/dist/lib/browser/browse-llm.d.ts +78 -0
  78. package/dist/lib/browser/browse-llm.js +849 -0
  79. package/dist/lib/browser/browse-llm.js.map +1 -0
  80. package/dist/lib/browser/browse-safety.d.ts +43 -0
  81. package/dist/lib/browser/browse-safety.js +130 -0
  82. package/dist/lib/browser/browse-safety.js.map +1 -0
  83. package/dist/lib/browser/browse-stealth.d.ts +64 -0
  84. package/dist/lib/browser/browse-stealth.js +532 -0
  85. package/dist/lib/browser/browse-stealth.js.map +1 -0
  86. package/dist/lib/browser/browse-types.d.ts +136 -0
  87. package/dist/lib/browser/browse-types.js +275 -0
  88. package/dist/lib/browser/browse-types.js.map +1 -0
  89. package/dist/lib/chat/chat-reply.d.ts +38 -0
  90. package/dist/lib/chat/chat-reply.js +31 -3
  91. package/dist/lib/chat/chat-reply.js.map +1 -1
  92. package/dist/lib/chat/daemon-reporter.js +2 -1
  93. package/dist/lib/chat/daemon-reporter.js.map +1 -1
  94. package/dist/lib/chat/doc-reply.js +1 -1
  95. package/dist/lib/chat/doc-reply.js.map +1 -1
  96. package/dist/lib/chat/session-stream.d.ts +19 -0
  97. package/dist/lib/chat/session-stream.js +41 -4
  98. package/dist/lib/chat/session-stream.js.map +1 -1
  99. package/dist/lib/documents/job-runner.js +7 -34
  100. package/dist/lib/documents/job-runner.js.map +1 -1
  101. package/dist/lib/documents/source.d.ts +29 -0
  102. package/dist/lib/documents/source.js +50 -0
  103. package/dist/lib/documents/source.js.map +1 -0
  104. package/dist/lib/git/git-branch.d.ts +28 -0
  105. package/dist/lib/git/git-branch.js +109 -0
  106. package/dist/lib/git/git-branch.js.map +1 -0
  107. package/dist/lib/git/git-core.d.ts +17 -0
  108. package/dist/lib/git/git-core.js +44 -0
  109. package/dist/lib/git/git-core.js.map +1 -0
  110. package/dist/lib/git/git-discovery.d.ts +33 -0
  111. package/dist/lib/git/git-discovery.js +189 -0
  112. package/dist/lib/git/git-discovery.js.map +1 -0
  113. package/dist/lib/git/git-finalize.d.ts +63 -0
  114. package/dist/lib/git/git-finalize.js +436 -0
  115. package/dist/lib/git/git-finalize.js.map +1 -0
  116. package/dist/lib/git/git-pipeline.d.ts +35 -194
  117. package/dist/lib/git/git-pipeline.js +15 -958
  118. package/dist/lib/git/git-pipeline.js.map +1 -1
  119. package/dist/lib/git/git-prepare.d.ts +87 -0
  120. package/dist/lib/git/git-prepare.js +232 -0
  121. package/dist/lib/git/git-prepare.js.map +1 -0
  122. package/dist/lib/harness/agy-pty.d.ts +2 -2
  123. package/dist/lib/harness/harness-output.d.ts +15 -3
  124. package/dist/lib/harness/harness-output.js +143 -26
  125. package/dist/lib/harness/harness-output.js.map +1 -1
  126. package/dist/lib/harness/harness.js +30 -14
  127. package/dist/lib/harness/harness.js.map +1 -1
  128. package/dist/lib/harness/index.d.ts +3 -1
  129. package/dist/lib/harness/index.js +5 -1
  130. package/dist/lib/harness/index.js.map +1 -1
  131. package/dist/lib/harness/line-assembler.d.ts +28 -0
  132. package/dist/lib/harness/line-assembler.js +60 -0
  133. package/dist/lib/harness/line-assembler.js.map +1 -0
  134. package/dist/lib/harness/plan-gate.d.ts +38 -0
  135. package/dist/lib/harness/plan-gate.js +42 -0
  136. package/dist/lib/harness/plan-gate.js.map +1 -0
  137. package/dist/lib/harness/spawn.js +69 -16
  138. package/dist/lib/harness/spawn.js.map +1 -1
  139. package/dist/lib/llm/llm-chat.d.ts +37 -0
  140. package/dist/lib/llm/llm-chat.js +239 -0
  141. package/dist/lib/llm/llm-chat.js.map +1 -0
  142. package/dist/lib/llm/llm-core.d.ts +54 -0
  143. package/dist/lib/llm/llm-core.js +15 -0
  144. package/dist/lib/llm/llm-core.js.map +1 -0
  145. package/dist/lib/llm/llm-tools.d.ts +29 -0
  146. package/dist/lib/llm/llm-tools.js +472 -0
  147. package/dist/lib/llm/llm-tools.js.map +1 -0
  148. package/dist/lib/llm/llm.d.ts +6 -78
  149. package/dist/lib/llm/llm.js +25 -708
  150. package/dist/lib/llm/llm.js.map +1 -1
  151. package/dist/lib/orchestrator/client.js +5 -0
  152. package/dist/lib/orchestrator/client.js.map +1 -1
  153. package/dist/lib/orchestrator/handlers/cv-parse.d.ts +18 -0
  154. package/dist/lib/orchestrator/handlers/cv-parse.js +165 -0
  155. package/dist/lib/orchestrator/handlers/cv-parse.js.map +1 -0
  156. package/dist/lib/orchestrator/handlers/index.d.ts +1 -0
  157. package/dist/lib/orchestrator/handlers/index.js +3 -1
  158. package/dist/lib/orchestrator/handlers/index.js.map +1 -1
  159. package/dist/lib/orchestrator/handlers/planner.js +18 -0
  160. package/dist/lib/orchestrator/handlers/planner.js.map +1 -1
  161. package/dist/lib/tools/cv-parse-deterministic.d.ts +56 -0
  162. package/dist/lib/tools/cv-parse-deterministic.js +814 -0
  163. package/dist/lib/tools/cv-parse-deterministic.js.map +1 -0
  164. package/dist/lib/tools/docx-source.d.ts +36 -0
  165. package/dist/lib/tools/docx-source.js +74 -0
  166. package/dist/lib/tools/docx-source.js.map +1 -0
  167. package/dist/lib/tools/docx-to-pdf.d.ts +9 -1
  168. package/dist/lib/tools/docx-to-pdf.js +84 -11
  169. package/dist/lib/tools/docx-to-pdf.js.map +1 -1
  170. package/package.json +2 -1
@@ -0,0 +1,96 @@
1
+ /** Stable state dir - survives npm upgrades, reinstalls and dist cleans. */
2
+ export declare const TEAMSHARE_STATE_DIR: string;
3
+ /** Registration marker written by `autostart on` / removed by `autostart off`. */
4
+ export declare const AUTOSTART_MARKER_PATH: string;
5
+ /** Watchdog script referenced by the TeamShareBridge scheduled task. */
6
+ export declare const SUPERVISOR_VBS_PATH: string;
7
+ /** Protocol-handler script referenced by HKCU\Software\Classes\teamshare. */
8
+ export declare const SERVE_VBS_PATH: string;
9
+ /** Logon-only fallback when the per-user scheduled task can't be created. */
10
+ export declare const STARTUP_VBS_PATH: string;
11
+ /**
12
+ * The launcher entry point (`dist/bridge/index.js`). Lives in THIS module's
13
+ * `__dirname`, which is the same directory the old package-dir copies were
14
+ * written to - also where `legacyLauncherPath()` looks.
15
+ */
16
+ export declare function currentEntryPath(): string;
17
+ /** Old package-dir copy (<=0.21.x) of a generated launcher. */
18
+ export declare function legacyLauncherPath(kind: 'supervisor' | 'serve'): string;
19
+ /** Quotes one token of a Windows command line (paths routinely contain spaces). */
20
+ export declare function cmdQuote(value: string): string;
21
+ /** Renders a plain string as a VBScript string literal (`"` -> `""`). */
22
+ export declare function vbsLiteral(value: string): string;
23
+ /**
24
+ * Builds a hidden Windows Script Host launcher for `cmdline`.
25
+ *
26
+ * Two rules, both here because they were once broken:
27
+ * - the executable MUST be quoted. `process.execPath` is normally
28
+ * `C:\Program Files\nodejs\node.exe`, and an UNQUOTED path with a space
29
+ * makes `WScript.Shell.Run` fail with 0x80070002 ("The system cannot find
30
+ * the file specified") - the modal Windows Script Host dialog that popped
31
+ * up at every logon while the watchdog never actually started.
32
+ * - failures never surface as a WSH popup. They are appended to daemon.log
33
+ * and reported through a NON-ZERO exit code so Task Scheduler's
34
+ * RestartCount/RestartInterval retries every minute instead of leaving a
35
+ * dialog on the user's desktop.
36
+ *
37
+ * `wait: true` blocks until the child exits and forwards its exit code
38
+ * (that is what makes the scheduled task a restart-on-failure watchdog).
39
+ */
40
+ export declare function buildWindowsLauncherVbs(cmdline: string, opts: {
41
+ wait: boolean;
42
+ logPath: string;
43
+ }): string;
44
+ /**
45
+ * Builds the hidden `teamshare://` protocol launcher: wscript.exe is a
46
+ * GUI-subsystem binary, so no console window is ever created (zero flash on
47
+ * deep link). The URL arrives as the first argument.
48
+ */
49
+ export declare function buildServeVbs(nodeBin: string, entry: string): string;
50
+ /** Writes `content` to `path`, creating the parent directory when missing. */
51
+ export declare function writeLauncherFile(path: string, content: string): void;
52
+ /** Reads a UTF-8 text file, or null when it is missing/unreadable. */
53
+ export declare function readTextFile(path: string): string | null;
54
+ /** Best-effort delete of a generated launcher (missing file is fine). */
55
+ export declare function removeLauncherFile(path: string): void;
56
+ export interface AutostartMarker {
57
+ /** Which mechanism `autostart on` actually registered. */
58
+ mode: 'task' | 'startup';
59
+ /** Absolute path of the launcher the mechanism references. */
60
+ vbs: string;
61
+ /** Install entry point the launcher was built for (detects reinstalls). */
62
+ entry: string;
63
+ /** node binary the launcher was built for. */
64
+ execPath: string;
65
+ /** ISO timestamp of the registration. */
66
+ at: string;
67
+ }
68
+ export declare function readAutostartMarker(path?: string): AutostartMarker | null;
69
+ export declare function writeAutostartMarker(marker: Omit<AutostartMarker, 'at'> & {
70
+ at?: string;
71
+ }, path?: string): void;
72
+ export declare function removeAutostartMarker(path?: string): void;
73
+ export interface LauncherHealth {
74
+ ok: boolean;
75
+ /** Human-readable failure cause ("" when ok). */
76
+ reason: string;
77
+ }
78
+ /**
79
+ * Pure health check for a registered launcher: the marker must match the
80
+ * CURRENT install (entry + node path) and the launcher file must exist and
81
+ * have been built for that same install. Any mismatch means an upgrade or
82
+ * reinstall moved the goalposts and the registration must be redone.
83
+ */
84
+ export declare function launcherHealth(input: {
85
+ marker: AutostartMarker | null;
86
+ content: string | null;
87
+ entry: string;
88
+ execPath: string;
89
+ }): LauncherHealth;
90
+ /** True when `vbsPath` exists and was built for the current entry + node. */
91
+ export declare function launcherFileHealthy(vbsPath: string, entry?: string, execPath?: string): boolean;
92
+ /**
93
+ * Health of the registered autostart launcher (whatever mechanism the last
94
+ * `autostart on` recorded). Read-only - never registers anything itself.
95
+ */
96
+ export declare function supervisorLauncherHealth(): LauncherHealth;
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.STARTUP_VBS_PATH = exports.SERVE_VBS_PATH = exports.SUPERVISOR_VBS_PATH = exports.AUTOSTART_MARKER_PATH = exports.TEAMSHARE_STATE_DIR = void 0;
4
+ exports.currentEntryPath = currentEntryPath;
5
+ exports.legacyLauncherPath = legacyLauncherPath;
6
+ exports.cmdQuote = cmdQuote;
7
+ exports.vbsLiteral = vbsLiteral;
8
+ exports.buildWindowsLauncherVbs = buildWindowsLauncherVbs;
9
+ exports.buildServeVbs = buildServeVbs;
10
+ exports.writeLauncherFile = writeLauncherFile;
11
+ exports.readTextFile = readTextFile;
12
+ exports.removeLauncherFile = removeLauncherFile;
13
+ exports.readAutostartMarker = readAutostartMarker;
14
+ exports.writeAutostartMarker = writeAutostartMarker;
15
+ exports.removeAutostartMarker = removeAutostartMarker;
16
+ exports.launcherHealth = launcherHealth;
17
+ exports.launcherFileHealthy = launcherFileHealthy;
18
+ exports.supervisorLauncherHealth = supervisorLauncherHealth;
19
+ /**
20
+ * Windows launcher helpers for the two VBS scripts Windows references from
21
+ * OUTSIDE the package:
22
+ * - supervisor.vbs -> scheduled task `TeamShareBridge` (logon watchdog)
23
+ * - serve.vbs -> HKCU `teamshare://` protocol handler
24
+ *
25
+ * Both scripts used to be written INSIDE the installed package dir
26
+ * (`.../node_modules/teamshare-bridge/dist/bridge/`) and were destroyed by
27
+ * every `npm i -g` upgrade (the file is generated at runtime, never shipped
28
+ * in the tarball) while the task/registry references survived - producing
29
+ * the "Can not find script file ...\supervisor.vbs" Windows Script Host
30
+ * dialog at every logon. They now live under ~/.teamshare (survives
31
+ * upgrades, reinstalls and `rm -rf dist`), and every registration records a
32
+ * marker so `ensureAutostartDefault` can detect a missing/stale launcher and
33
+ * re-register instead of returning early just because "the task exists".
34
+ *
35
+ * Everything here is pure/read-only except the explicit write/remove
36
+ * helpers, which all take an optional path so tests never touch the real
37
+ * ~/.teamshare.
38
+ */
39
+ const node_fs_1 = require("node:fs");
40
+ const node_os_1 = require("node:os");
41
+ const node_path_1 = require("node:path");
42
+ /** Stable state dir - survives npm upgrades, reinstalls and dist cleans. */
43
+ exports.TEAMSHARE_STATE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.teamshare');
44
+ /** Registration marker written by `autostart on` / removed by `autostart off`. */
45
+ exports.AUTOSTART_MARKER_PATH = (0, node_path_1.join)(exports.TEAMSHARE_STATE_DIR, 'autostart.json');
46
+ /** Watchdog script referenced by the TeamShareBridge scheduled task. */
47
+ exports.SUPERVISOR_VBS_PATH = (0, node_path_1.join)(exports.TEAMSHARE_STATE_DIR, 'supervisor.vbs');
48
+ /** Protocol-handler script referenced by HKCU\Software\Classes\teamshare. */
49
+ exports.SERVE_VBS_PATH = (0, node_path_1.join)(exports.TEAMSHARE_STATE_DIR, 'serve.vbs');
50
+ /** Logon-only fallback when the per-user scheduled task can't be created. */
51
+ exports.STARTUP_VBS_PATH = (0, node_path_1.join)((0, node_os_1.homedir)(), 'AppData', 'Roaming', 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup', 'teamshare-bridge.vbs');
52
+ /**
53
+ * The launcher entry point (`dist/bridge/index.js`). Lives in THIS module's
54
+ * `__dirname`, which is the same directory the old package-dir copies were
55
+ * written to - also where `legacyLauncherPath()` looks.
56
+ */
57
+ function currentEntryPath() {
58
+ return (0, node_path_1.join)(__dirname, 'index.js');
59
+ }
60
+ /** Old package-dir copy (<=0.21.x) of a generated launcher. */
61
+ function legacyLauncherPath(kind) {
62
+ return (0, node_path_1.join)(__dirname, `${kind}.vbs`);
63
+ }
64
+ // ---------------------------------------------------------------- VBS builds
65
+ /** Quotes one token of a Windows command line (paths routinely contain spaces). */
66
+ function cmdQuote(value) {
67
+ return `"${value}"`;
68
+ }
69
+ /** Renders a plain string as a VBScript string literal (`"` -> `""`). */
70
+ function vbsLiteral(value) {
71
+ return `"${value.replace(/"/g, '""')}"`;
72
+ }
73
+ /**
74
+ * Builds a hidden Windows Script Host launcher for `cmdline`.
75
+ *
76
+ * Two rules, both here because they were once broken:
77
+ * - the executable MUST be quoted. `process.execPath` is normally
78
+ * `C:\Program Files\nodejs\node.exe`, and an UNQUOTED path with a space
79
+ * makes `WScript.Shell.Run` fail with 0x80070002 ("The system cannot find
80
+ * the file specified") - the modal Windows Script Host dialog that popped
81
+ * up at every logon while the watchdog never actually started.
82
+ * - failures never surface as a WSH popup. They are appended to daemon.log
83
+ * and reported through a NON-ZERO exit code so Task Scheduler's
84
+ * RestartCount/RestartInterval retries every minute instead of leaving a
85
+ * dialog on the user's desktop.
86
+ *
87
+ * `wait: true` blocks until the child exits and forwards its exit code
88
+ * (that is what makes the scheduled task a restart-on-failure watchdog).
89
+ */
90
+ function buildWindowsLauncherVbs(cmdline, opts) {
91
+ const lines = [
92
+ 'On Error Resume Next',
93
+ 'Set sh = CreateObject("WScript.Shell")',
94
+ 'Set fso = CreateObject("Scripting.FileSystemObject")',
95
+ `cmd = ${vbsLiteral(cmdline)}`,
96
+ `rc = ${opts.wait ? 1 : 0}`,
97
+ opts.wait ? 'rc = sh.Run(cmd, 0, True)' : 'sh.Run cmd, 0, False',
98
+ 'If Err.Number <> 0 Then',
99
+ ' n = Err.Number',
100
+ ' d = Err.Description',
101
+ ' Err.Clear',
102
+ ` Set ts = fso.OpenTextFile(${vbsLiteral(opts.logPath)}, 8, True)`,
103
+ ' If Not ts Is Nothing Then',
104
+ ' ts.WriteLine "[" & Now & "] [autostart.vbs] launch failed (" & n & " " & d & "): " & cmd',
105
+ ' ts.Close',
106
+ ' End If',
107
+ ' WScript.Quit 1',
108
+ 'End If',
109
+ opts.wait ? 'WScript.Quit rc' : "' fire-and-forget: nothing to forward",
110
+ '',
111
+ ];
112
+ return lines.join('\r\n');
113
+ }
114
+ /**
115
+ * Builds the hidden `teamshare://` protocol launcher: wscript.exe is a
116
+ * GUI-subsystem binary, so no console window is ever created (zero flash on
117
+ * deep link). The URL arrives as the first argument.
118
+ */
119
+ function buildServeVbs(nodeBin, entry) {
120
+ const escapedNode = nodeBin.replace(/"/g, '""');
121
+ const escapedScript = entry.replace(/"/g, '""');
122
+ return [
123
+ 'Set sh = CreateObject("WScript.Shell")',
124
+ 'Dim url',
125
+ 'If WScript.Arguments.Count > 0 Then',
126
+ ' url = WScript.Arguments(0)',
127
+ 'Else',
128
+ ' url = ""',
129
+ 'End If',
130
+ `sh.Run """${escapedNode}"" ""${escapedScript}"" serve """ & url & """ --hidden", 0, False`,
131
+ ].join('\r\n');
132
+ }
133
+ // ---------------------------------------------------------------- file io
134
+ /** Writes `content` to `path`, creating the parent directory when missing. */
135
+ function writeLauncherFile(path, content) {
136
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
137
+ (0, node_fs_1.writeFileSync)(path, content, 'utf8');
138
+ }
139
+ /** Reads a UTF-8 text file, or null when it is missing/unreadable. */
140
+ function readTextFile(path) {
141
+ try {
142
+ return (0, node_fs_1.readFileSync)(path, 'utf8');
143
+ }
144
+ catch {
145
+ return null;
146
+ }
147
+ }
148
+ /** Best-effort delete of a generated launcher (missing file is fine). */
149
+ function removeLauncherFile(path) {
150
+ try {
151
+ (0, node_fs_1.rmSync)(path, { force: true });
152
+ }
153
+ catch {
154
+ /* best-effort */
155
+ }
156
+ }
157
+ function readAutostartMarker(path = exports.AUTOSTART_MARKER_PATH) {
158
+ try {
159
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
160
+ if (parsed === null || typeof parsed !== 'object')
161
+ return null;
162
+ const m = parsed;
163
+ if (m.mode !== 'task' && m.mode !== 'startup')
164
+ return null;
165
+ if (typeof m.vbs === 'string' && typeof m.entry === 'string' && typeof m.execPath === 'string') {
166
+ return m;
167
+ }
168
+ return null;
169
+ }
170
+ catch {
171
+ return null;
172
+ }
173
+ }
174
+ function writeAutostartMarker(marker, path = exports.AUTOSTART_MARKER_PATH) {
175
+ writeLauncherFile(path, JSON.stringify({ ...marker, at: marker.at ?? new Date().toISOString() }, null, 2));
176
+ }
177
+ function removeAutostartMarker(path = exports.AUTOSTART_MARKER_PATH) {
178
+ removeLauncherFile(path);
179
+ }
180
+ /**
181
+ * Pure health check for a registered launcher: the marker must match the
182
+ * CURRENT install (entry + node path) and the launcher file must exist and
183
+ * have been built for that same install. Any mismatch means an upgrade or
184
+ * reinstall moved the goalposts and the registration must be redone.
185
+ */
186
+ function launcherHealth(input) {
187
+ const { marker, content, entry, execPath } = input;
188
+ if (!marker)
189
+ return { ok: false, reason: 'no registration marker' };
190
+ if (marker.entry !== entry || marker.execPath !== execPath) {
191
+ return { ok: false, reason: 'stale install paths' };
192
+ }
193
+ if (content === null)
194
+ return { ok: false, reason: 'launcher file missing' };
195
+ if (!content.includes(entry) || !content.includes(execPath)) {
196
+ return { ok: false, reason: 'launcher content stale' };
197
+ }
198
+ return { ok: true, reason: '' };
199
+ }
200
+ /** True when `vbsPath` exists and was built for the current entry + node. */
201
+ function launcherFileHealthy(vbsPath, entry = currentEntryPath(), execPath = process.execPath) {
202
+ const content = readTextFile(vbsPath);
203
+ return content !== null && content.includes(entry) && content.includes(execPath);
204
+ }
205
+ /**
206
+ * Health of the registered autostart launcher (whatever mechanism the last
207
+ * `autostart on` recorded). Read-only - never registers anything itself.
208
+ */
209
+ function supervisorLauncherHealth() {
210
+ const marker = readAutostartMarker();
211
+ return launcherHealth({
212
+ marker,
213
+ content: marker ? readTextFile(marker.vbs) : null,
214
+ entry: currentEntryPath(),
215
+ execPath: process.execPath,
216
+ });
217
+ }
218
+ //# sourceMappingURL=autostart-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart-launcher.js","sourceRoot":"","sources":["../../src/bridge/autostart-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Daemon inbox pumps: the periodic mention + stranded-assignment poll and
3
+ * the reconnect re-sync drain. Both used to be inline in startAgentLoop and
4
+ * dominated daemon.ts; they only need a small deps bag (API client, config
5
+ * getter, wake queue, settings cache). Split out of daemon.ts (line budget).
6
+ */
7
+ import { TeamshareApi } from '../lib/api';
8
+ import { loadConfig } from '../lib/config';
9
+ import { type WakeEvent } from './wake-routing';
10
+ import type { SessionSettings } from './spawn';
11
+ /** Cadence of the periodic mention + stranded-assignment poll. */
12
+ export declare const MENTION_POLL_MS: number;
13
+ /** Everything the two inbox pumps need from the daemon/agent loop. */
14
+ export interface InboxDeps {
15
+ /** Authenticated API client for this agent (inbox fetches). */
16
+ api: TeamshareApi;
17
+ /** Base URL so a fresh client can be built with `TeamshareApi.forAgent`. */
18
+ apiBase: string;
19
+ agent: {
20
+ agentId: string;
21
+ apiKey: string;
22
+ };
23
+ /** Fresh config getter - project links / wake rules apply live. */
24
+ config: () => ReturnType<typeof loadConfig>;
25
+ wakeQueue: Map<string, WakeEvent[]>;
26
+ recentSpawns: Map<string, number>;
27
+ gateWarned: Set<string>;
28
+ settingsByAgent: Map<string, SessionSettings | null>;
29
+ }
30
+ /**
31
+ * Periodic mention poll (catches wakes lost while connected - WS emits are
32
+ * best-effort, so a silent hiccup loses the wake until the next reconnect)
33
+ * plus stranded-assignment recovery: open assigned tasks no session has
34
+ * claimed yet. Queued/deferred/blocked outcomes stay unmarked so the next
35
+ * cycle retries them.
36
+ */
37
+ export declare function pollInboxMentions(deps: InboxDeps): Promise<void>;
38
+ /**
39
+ * Re-sync (IMP-562): a wake emitted while the socket was down is LOST
40
+ * (nothing queues it server-side). On every (re)connect, drain the agent
41
+ * inbox and re-wake for assigned tasks still open - the server-side claim
42
+ * guard makes concurrent spawns safe. Also replays inbox.mentions (task +
43
+ * document comment mentions) which used to be consumed and dropped.
44
+ * A drain loop handles >50 item backlogs (server caps each bucket at 50).
45
+ */
46
+ export declare function resyncInbox(deps: InboxDeps): void;