@thinkrun/cli 0.1.27

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 (183) hide show
  1. package/README.md +349 -0
  2. package/dist/bin/thinkrun.d.ts +6 -0
  3. package/dist/bin/thinkrun.d.ts.map +1 -0
  4. package/dist/bin/thinkrun.js +124 -0
  5. package/dist/bin/thinkrun.js.map +1 -0
  6. package/dist/scripts/browse.sh +1107 -0
  7. package/dist/src/adapters/cloud.d.ts +79 -0
  8. package/dist/src/adapters/cloud.d.ts.map +1 -0
  9. package/dist/src/adapters/cloud.js +637 -0
  10. package/dist/src/adapters/cloud.js.map +1 -0
  11. package/dist/src/adapters/index.d.ts +47 -0
  12. package/dist/src/adapters/index.d.ts.map +1 -0
  13. package/dist/src/adapters/index.js +211 -0
  14. package/dist/src/adapters/index.js.map +1 -0
  15. package/dist/src/adapters/local-command-retry.d.ts +12 -0
  16. package/dist/src/adapters/local-command-retry.d.ts.map +1 -0
  17. package/dist/src/adapters/local-command-retry.js +224 -0
  18. package/dist/src/adapters/local-command-retry.js.map +1 -0
  19. package/dist/src/adapters/local.d.ts +136 -0
  20. package/dist/src/adapters/local.d.ts.map +1 -0
  21. package/dist/src/adapters/local.js +1273 -0
  22. package/dist/src/adapters/local.js.map +1 -0
  23. package/dist/src/adapters/types.d.ts +45 -0
  24. package/dist/src/adapters/types.d.ts.map +1 -0
  25. package/dist/src/adapters/types.js +6 -0
  26. package/dist/src/adapters/types.js.map +1 -0
  27. package/dist/src/commands/actions.d.ts +135 -0
  28. package/dist/src/commands/actions.d.ts.map +1 -0
  29. package/dist/src/commands/actions.js +2207 -0
  30. package/dist/src/commands/actions.js.map +1 -0
  31. package/dist/src/commands/agent-init.d.ts +16 -0
  32. package/dist/src/commands/agent-init.d.ts.map +1 -0
  33. package/dist/src/commands/agent-init.js +222 -0
  34. package/dist/src/commands/agent-init.js.map +1 -0
  35. package/dist/src/commands/analyze.d.ts +11 -0
  36. package/dist/src/commands/analyze.d.ts.map +1 -0
  37. package/dist/src/commands/analyze.js +238 -0
  38. package/dist/src/commands/analyze.js.map +1 -0
  39. package/dist/src/commands/cache.d.ts +6 -0
  40. package/dist/src/commands/cache.d.ts.map +1 -0
  41. package/dist/src/commands/cache.js +147 -0
  42. package/dist/src/commands/cache.js.map +1 -0
  43. package/dist/src/commands/cloud.d.ts +6 -0
  44. package/dist/src/commands/cloud.d.ts.map +1 -0
  45. package/dist/src/commands/cloud.js +332 -0
  46. package/dist/src/commands/cloud.js.map +1 -0
  47. package/dist/src/commands/config.d.ts +7 -0
  48. package/dist/src/commands/config.d.ts.map +1 -0
  49. package/dist/src/commands/config.js +208 -0
  50. package/dist/src/commands/config.js.map +1 -0
  51. package/dist/src/commands/doctor.d.ts +127 -0
  52. package/dist/src/commands/doctor.d.ts.map +1 -0
  53. package/dist/src/commands/doctor.js +684 -0
  54. package/dist/src/commands/doctor.js.map +1 -0
  55. package/dist/src/commands/evaluate-helpers.d.ts +6 -0
  56. package/dist/src/commands/evaluate-helpers.d.ts.map +1 -0
  57. package/dist/src/commands/evaluate-helpers.js +13 -0
  58. package/dist/src/commands/evaluate-helpers.js.map +1 -0
  59. package/dist/src/commands/install.d.ts +118 -0
  60. package/dist/src/commands/install.d.ts.map +1 -0
  61. package/dist/src/commands/install.js +975 -0
  62. package/dist/src/commands/install.js.map +1 -0
  63. package/dist/src/commands/release.d.ts +7 -0
  64. package/dist/src/commands/release.d.ts.map +1 -0
  65. package/dist/src/commands/release.js +123 -0
  66. package/dist/src/commands/release.js.map +1 -0
  67. package/dist/src/commands/reset-connection.d.ts +17 -0
  68. package/dist/src/commands/reset-connection.d.ts.map +1 -0
  69. package/dist/src/commands/reset-connection.js +141 -0
  70. package/dist/src/commands/reset-connection.js.map +1 -0
  71. package/dist/src/commands/session-debug.d.ts +23 -0
  72. package/dist/src/commands/session-debug.d.ts.map +1 -0
  73. package/dist/src/commands/session-debug.js +267 -0
  74. package/dist/src/commands/session-debug.js.map +1 -0
  75. package/dist/src/commands/setup.d.ts +53 -0
  76. package/dist/src/commands/setup.d.ts.map +1 -0
  77. package/dist/src/commands/setup.js +249 -0
  78. package/dist/src/commands/setup.js.map +1 -0
  79. package/dist/src/config/store.d.ts +39 -0
  80. package/dist/src/config/store.d.ts.map +1 -0
  81. package/dist/src/config/store.js +290 -0
  82. package/dist/src/config/store.js.map +1 -0
  83. package/dist/src/daemon/access.d.ts +53 -0
  84. package/dist/src/daemon/access.d.ts.map +1 -0
  85. package/dist/src/daemon/access.js +87 -0
  86. package/dist/src/daemon/access.js.map +1 -0
  87. package/dist/src/daemon/bridge-envelope.d.ts +96 -0
  88. package/dist/src/daemon/bridge-envelope.d.ts.map +1 -0
  89. package/dist/src/daemon/bridge-envelope.js +235 -0
  90. package/dist/src/daemon/bridge-envelope.js.map +1 -0
  91. package/dist/src/daemon/utils.d.ts +43 -0
  92. package/dist/src/daemon/utils.d.ts.map +1 -0
  93. package/dist/src/daemon/utils.js +134 -0
  94. package/dist/src/daemon/utils.js.map +1 -0
  95. package/dist/src/errors.d.ts +60 -0
  96. package/dist/src/errors.d.ts.map +1 -0
  97. package/dist/src/errors.js +87 -0
  98. package/dist/src/errors.js.map +1 -0
  99. package/dist/src/local-bridge-timing.d.ts +31 -0
  100. package/dist/src/local-bridge-timing.d.ts.map +1 -0
  101. package/dist/src/local-bridge-timing.js +41 -0
  102. package/dist/src/local-bridge-timing.js.map +1 -0
  103. package/dist/src/obstacle-recovery/classify-script.d.ts +16 -0
  104. package/dist/src/obstacle-recovery/classify-script.d.ts.map +1 -0
  105. package/dist/src/obstacle-recovery/classify-script.js +53 -0
  106. package/dist/src/obstacle-recovery/classify-script.js.map +1 -0
  107. package/dist/src/obstacle-recovery/obstacle-classifier.d.ts +21 -0
  108. package/dist/src/obstacle-recovery/obstacle-classifier.d.ts.map +1 -0
  109. package/dist/src/obstacle-recovery/obstacle-classifier.js +37 -0
  110. package/dist/src/obstacle-recovery/obstacle-classifier.js.map +1 -0
  111. package/dist/src/obstacle-recovery/state-fingerprint.d.ts +26 -0
  112. package/dist/src/obstacle-recovery/state-fingerprint.d.ts.map +1 -0
  113. package/dist/src/obstacle-recovery/state-fingerprint.js +85 -0
  114. package/dist/src/obstacle-recovery/state-fingerprint.js.map +1 -0
  115. package/dist/src/obstacle-recovery/types.d.ts +44 -0
  116. package/dist/src/obstacle-recovery/types.d.ts.map +1 -0
  117. package/dist/src/obstacle-recovery/types.js +16 -0
  118. package/dist/src/obstacle-recovery/types.js.map +1 -0
  119. package/dist/src/output/formatter.d.ts +55 -0
  120. package/dist/src/output/formatter.d.ts.map +1 -0
  121. package/dist/src/output/formatter.js +55 -0
  122. package/dist/src/output/formatter.js.map +1 -0
  123. package/dist/src/output/mode.d.ts +11 -0
  124. package/dist/src/output/mode.d.ts.map +1 -0
  125. package/dist/src/output/mode.js +16 -0
  126. package/dist/src/output/mode.js.map +1 -0
  127. package/dist/src/protected-flow/detector.d.ts +26 -0
  128. package/dist/src/protected-flow/detector.d.ts.map +1 -0
  129. package/dist/src/protected-flow/detector.js +75 -0
  130. package/dist/src/protected-flow/detector.js.map +1 -0
  131. package/dist/src/protected-flow/types.d.ts +24 -0
  132. package/dist/src/protected-flow/types.d.ts.map +1 -0
  133. package/dist/src/protected-flow/types.js +28 -0
  134. package/dist/src/protected-flow/types.js.map +1 -0
  135. package/dist/src/session/agent-identity.d.ts +65 -0
  136. package/dist/src/session/agent-identity.d.ts.map +1 -0
  137. package/dist/src/session/agent-identity.js +133 -0
  138. package/dist/src/session/agent-identity.js.map +1 -0
  139. package/dist/src/session/cli-session-sync.d.ts +72 -0
  140. package/dist/src/session/cli-session-sync.d.ts.map +1 -0
  141. package/dist/src/session/cli-session-sync.js +244 -0
  142. package/dist/src/session/cli-session-sync.js.map +1 -0
  143. package/dist/src/session/context.d.ts +24 -0
  144. package/dist/src/session/context.d.ts.map +1 -0
  145. package/dist/src/session/context.js +165 -0
  146. package/dist/src/session/context.js.map +1 -0
  147. package/dist/src/session/continuity.d.ts +33 -0
  148. package/dist/src/session/continuity.d.ts.map +1 -0
  149. package/dist/src/session/continuity.js +179 -0
  150. package/dist/src/session/continuity.js.map +1 -0
  151. package/dist/src/session/errors.d.ts +9 -0
  152. package/dist/src/session/errors.d.ts.map +1 -0
  153. package/dist/src/session/errors.js +31 -0
  154. package/dist/src/session/errors.js.map +1 -0
  155. package/dist/src/session/local-continuity.d.ts +16 -0
  156. package/dist/src/session/local-continuity.d.ts.map +1 -0
  157. package/dist/src/session/local-continuity.js +146 -0
  158. package/dist/src/session/local-continuity.js.map +1 -0
  159. package/dist/src/session/signal-handler.d.ts +24 -0
  160. package/dist/src/session/signal-handler.d.ts.map +1 -0
  161. package/dist/src/session/signal-handler.js +35 -0
  162. package/dist/src/session/signal-handler.js.map +1 -0
  163. package/dist/src/shared/local-recovery-policy.d.ts +40 -0
  164. package/dist/src/shared/local-recovery-policy.d.ts.map +1 -0
  165. package/dist/src/shared/local-recovery-policy.js +59 -0
  166. package/dist/src/shared/local-recovery-policy.js.map +1 -0
  167. package/dist/src/shared/recovery-state.d.ts +3 -0
  168. package/dist/src/shared/recovery-state.d.ts.map +1 -0
  169. package/dist/src/shared/recovery-state.js +9 -0
  170. package/dist/src/shared/recovery-state.js.map +1 -0
  171. package/dist/src/types.d.ts +131 -0
  172. package/dist/src/types.d.ts.map +1 -0
  173. package/dist/src/types.js +5 -0
  174. package/dist/src/types.js.map +1 -0
  175. package/dist/src/utils.d.ts +50 -0
  176. package/dist/src/utils.d.ts.map +1 -0
  177. package/dist/src/utils.js +147 -0
  178. package/dist/src/utils.js.map +1 -0
  179. package/dist/src/working-location.d.ts +107 -0
  180. package/dist/src/working-location.d.ts.map +1 -0
  181. package/dist/src/working-location.js +651 -0
  182. package/dist/src/working-location.js.map +1 -0
  183. package/package.json +65 -0
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Authoritative session diagnostics — resolved mode, bindings, bridge, API, and command routing.
3
+ */
4
+ import { Command } from 'commander';
5
+ import chalk from 'chalk';
6
+ import { config } from '../config/store.js';
7
+ import { readBridgePort } from '../utils.js';
8
+ import { getLocalSessionContext, getSessionContext } from '../session/context.js';
9
+ import { getResolutionInfo } from '../adapters/index.js';
10
+ import { isJsonMode } from '../output/mode.js';
11
+ import { emitJson } from '../output/formatter.js';
12
+ import { getLastReclaimAudit, getWorkingLocation } from '../working-location.js';
13
+ import { assessLocalContinuity } from '../session/local-continuity.js';
14
+ export function deriveSessionDebugLocalState(persistedLocalBinding, workingLocation) {
15
+ const persisted = persistedLocalBinding ?? null;
16
+ const working = workingLocation
17
+ ? {
18
+ tabId: workingLocation.tabId,
19
+ ...(workingLocation.windowId !== undefined ? { windowId: workingLocation.windowId } : {}),
20
+ ...(workingLocation.group !== undefined ? { group: workingLocation.group } : {}),
21
+ ...(workingLocation.agentId !== undefined ? { agentId: workingLocation.agentId } : {}),
22
+ ...(workingLocation.ownerShellPid !== undefined ? { ownerShellPid: workingLocation.ownerShellPid } : {}),
23
+ }
24
+ : null;
25
+ const persistedTabId = persisted?.tabId;
26
+ const workingTabId = working ? String(working.tabId) : undefined;
27
+ const driftDetected = !!persistedTabId && !!workingTabId && persistedTabId !== workingTabId;
28
+ const effectiveLocalTabId = workingTabId ?? persistedTabId ?? null;
29
+ const driftWarning = driftDetected
30
+ ? `Persisted local binding points to tab ${persistedTabId}, but working-location points to tab ${workingTabId}. Commands may rebind to the working-location tab before execution.`
31
+ : null;
32
+ return {
33
+ persistedLocalBinding: persisted,
34
+ workingLocation: working,
35
+ effectiveLocalTabId,
36
+ driftDetected,
37
+ driftWarning,
38
+ continuity: assessLocalContinuity(persisted
39
+ ? {
40
+ mode: 'local',
41
+ tabId: persisted.tabId,
42
+ ...(persisted.agentSessionId ? { agentSessionId: persisted.agentSessionId } : {}),
43
+ ...(persisted.controlSessionId ? { controlSessionId: persisted.controlSessionId } : {}),
44
+ source: 'typed',
45
+ }
46
+ : undefined, workingLocation),
47
+ };
48
+ }
49
+ async function getBridgeHealth(port) {
50
+ try {
51
+ const res = await fetch(`http://127.0.0.1:${port}/health`, {
52
+ signal: AbortSignal.timeout(2000),
53
+ });
54
+ if (!res.ok) {
55
+ return { ok: false, message: `HTTP ${res.status}` };
56
+ }
57
+ const body = (await res.json());
58
+ const ext = body?.data?.extensionConnected;
59
+ const status = body?.data?.status;
60
+ const browserName = body?.data?.browser?.name;
61
+ const recoveryState = body?.data?.recoveryState;
62
+ const recentDisconnectCount = body?.data?.recentDisconnectCount;
63
+ const lastRecoveredAt = body?.data?.lastRecoveredAt;
64
+ const msg = status === 'ok' ? 'ok' : body?.data?.service ?? body?.service ?? 'healthy';
65
+ const browserSuffix = typeof browserName === 'string' ? `, browser=${browserName}` : '';
66
+ const recoverySuffix = typeof recoveryState === 'string' && recoveryState !== 'healthy'
67
+ ? `, recoveryState=${recoveryState}`
68
+ : '';
69
+ const churnSuffix = typeof recentDisconnectCount === 'number' && recentDisconnectCount > 0
70
+ ? `, recentDisconnects=${recentDisconnectCount}`
71
+ : '';
72
+ const recoveredSuffix = typeof lastRecoveredAt === 'string' && lastRecoveredAt.length > 0
73
+ ? `, lastRecoveredAt=${lastRecoveredAt}`
74
+ : '';
75
+ return {
76
+ ok: res.ok && (status === 'ok' || !!body?.service),
77
+ extensionConnected: typeof ext === 'boolean' ? ext : undefined,
78
+ browserName: typeof browserName === 'string' ? browserName : undefined,
79
+ recoveryState,
80
+ recentDisconnectCount,
81
+ lastRecoveredAt,
82
+ message: typeof ext === 'boolean'
83
+ ? `${msg} (extensionConnected=${ext}${browserSuffix}${recoverySuffix}${churnSuffix}${recoveredSuffix})`
84
+ : msg,
85
+ };
86
+ }
87
+ catch (e) {
88
+ return {
89
+ ok: false,
90
+ message: e instanceof Error ? e.message : 'unreachable',
91
+ };
92
+ }
93
+ }
94
+ function modeSourceLabel(source) {
95
+ const labels = {
96
+ explicit_local: '--mode local',
97
+ explicit_cloud: '--mode cloud',
98
+ context_local: 'persisted local context',
99
+ context_cloud: 'persisted cloud context',
100
+ fallback_local: 'fallback (bridge available)',
101
+ fallback_cloud: 'fallback (API key available)',
102
+ unavailable: 'unavailable (see error)',
103
+ };
104
+ return labels[source] ?? source;
105
+ }
106
+ export function createSessionDebugCommand() {
107
+ const debugCmd = new Command('debug')
108
+ .description('Show resolved mode, bindings, bridge health, and command routing target')
109
+ .action(async () => {
110
+ const apiUrl = config.get('apiUrl') || 'https://api.thinkbrowse.io';
111
+ const apiKey = config.get('apiKey');
112
+ const bridgePort = readBridgePort();
113
+ let persistedLocalBinding;
114
+ let cloudBinding;
115
+ let contextError;
116
+ const localTabId = config.get('localTabId');
117
+ const cloudSessionId = config.get('cloudSessionId');
118
+ const typedLocalContext = getLocalSessionContext();
119
+ if (localTabId) {
120
+ persistedLocalBinding = {
121
+ tabId: localTabId,
122
+ ...(typedLocalContext?.tabId === localTabId && typedLocalContext.agentSessionId
123
+ ? { agentSessionId: typedLocalContext.agentSessionId }
124
+ : config.get('localAgentSessionId')
125
+ ? { agentSessionId: config.get('localAgentSessionId') }
126
+ : {}),
127
+ ...(typedLocalContext?.tabId === localTabId && typedLocalContext.controlSessionId
128
+ ? { controlSessionId: typedLocalContext.controlSessionId }
129
+ : {}),
130
+ };
131
+ }
132
+ if (cloudSessionId) {
133
+ cloudBinding = { sessionId: cloudSessionId };
134
+ }
135
+ try {
136
+ getSessionContext();
137
+ }
138
+ catch (e) {
139
+ contextError = e instanceof Error ? e.message : String(e);
140
+ }
141
+ const resolution = await getResolutionInfo();
142
+ const bridgeHealth = await getBridgeHealth(bridgePort);
143
+ const workingLocation = getWorkingLocation();
144
+ const localState = deriveSessionDebugLocalState(persistedLocalBinding, workingLocation);
145
+ const routingTarget = resolution.resolvedMode === 'local' ? 'local (bridge)' : resolution.resolvedMode === 'cloud' ? 'cloud (API)' : 'none (command would fail)';
146
+ if (isJsonMode()) {
147
+ emitJson({
148
+ success: true,
149
+ command: 'session debug',
150
+ data: {
151
+ resolvedMode: resolution.resolvedMode,
152
+ modeSource: resolution.modeSource,
153
+ modeSourceLabel: modeSourceLabel(resolution.modeSource),
154
+ // Deprecated alias retained for backward compatibility with existing JSON consumers.
155
+ localBinding: localState.persistedLocalBinding,
156
+ persistedLocalBinding: localState.persistedLocalBinding,
157
+ workingLocation: localState.workingLocation,
158
+ effectiveLocalTabId: localState.effectiveLocalTabId,
159
+ localBindingDrift: localState.driftDetected,
160
+ localBindingDriftWarning: localState.driftWarning,
161
+ continuityState: localState.continuity.state,
162
+ continuityHint: localState.continuity.hint,
163
+ runtimeSessionPresent: localState.continuity.runtimeSessionPresent,
164
+ controlSessionPresent: localState.continuity.controlSessionPresent,
165
+ controlLeaseHeld: localState.continuity.controlLeaseHeld,
166
+ staleLock: localState.continuity.staleLock,
167
+ lockOwner: localState.continuity.lockOwner,
168
+ lastReclaimAudit: getLastReclaimAudit(),
169
+ cloudBinding: cloudBinding ?? null,
170
+ contextError: contextError ?? null,
171
+ bridgePort: resolution.bridgePort ?? bridgePort,
172
+ bridgeHealthy: bridgeHealth.ok,
173
+ extensionConnected: bridgeHealth.extensionConnected ?? null,
174
+ browser: bridgeHealth.browserName ?? null,
175
+ recoveryState: bridgeHealth.recoveryState ?? null,
176
+ recentDisconnectCount: bridgeHealth.recentDisconnectCount ?? 0,
177
+ lastRecoveredAt: bridgeHealth.lastRecoveredAt ?? null,
178
+ apiUrl,
179
+ hasApiKey: resolution.hasApiKey,
180
+ routingTarget,
181
+ error: resolution.error ?? null,
182
+ },
183
+ });
184
+ return;
185
+ }
186
+ console.log(chalk.bold('Session debug'));
187
+ console.log('');
188
+ console.log(' Resolved mode: ', chalk.cyan(resolution.resolvedMode ?? '—'), resolution.error ? chalk.red(`(${resolution.error})`) : '');
189
+ console.log(' Mode source: ', chalk.cyan(modeSourceLabel(resolution.modeSource)));
190
+ console.log(' Persisted local: ', localState.persistedLocalBinding
191
+ ? chalk.cyan(`tab ${localState.persistedLocalBinding.tabId}` +
192
+ (localState.persistedLocalBinding.agentSessionId
193
+ ? ` (agent ${localState.persistedLocalBinding.agentSessionId})`
194
+ : '') +
195
+ (localState.persistedLocalBinding.controlSessionId
196
+ ? ` [control ${localState.persistedLocalBinding.controlSessionId}]`
197
+ : ''))
198
+ : chalk.gray('(none)'));
199
+ console.log(' Working location:', localState.workingLocation
200
+ ? chalk.cyan(`tab ${localState.workingLocation.tabId}` +
201
+ (localState.workingLocation.windowId !== undefined
202
+ ? ` (window ${localState.workingLocation.windowId})`
203
+ : '') +
204
+ (localState.workingLocation.group ? ` [group ${localState.workingLocation.group}]` : ''))
205
+ : chalk.gray('(none)'));
206
+ if (localState.effectiveLocalTabId) {
207
+ console.log(' Effective local: ', chalk.cyan(`tab ${localState.effectiveLocalTabId}`));
208
+ }
209
+ console.log(' Continuity: ', chalk.cyan(localState.continuity.state));
210
+ if (localState.continuity.hint) {
211
+ console.log(' Continuity hint:', chalk.yellow(localState.continuity.hint));
212
+ }
213
+ console.log(' Control state: ', chalk.cyan(`runtimeSession=${localState.continuity.runtimeSessionPresent ? 'yes' : 'no'}, ` +
214
+ `controlSession=${localState.continuity.controlSessionPresent ? 'yes' : 'no'}, ` +
215
+ `leaseHeld=${localState.continuity.controlLeaseHeld ? 'yes' : 'no'}`));
216
+ if (localState.continuity.lockOwner) {
217
+ const owner = localState.continuity.lockOwner;
218
+ console.log(' Lock owner: ', chalk.cyan(`tab ${owner.tabId}` +
219
+ (owner.agentId ? ` (agent ${owner.agentId})` : ` (pid ${owner.ownerShellPid ?? owner.pid})`) +
220
+ (owner.controlSessionId ? ` [control ${owner.controlSessionId}]` : '') +
221
+ (localState.continuity.staleLock ? ' [stale]' : '')));
222
+ }
223
+ const reclaimAudit = getLastReclaimAudit();
224
+ if (reclaimAudit) {
225
+ console.log(' Last reclaim: ', chalk.cyan(`tab ${reclaimAudit.tabId} at ${reclaimAudit.reclaimedAt} (${reclaimAudit.reason})` +
226
+ (reclaimAudit.previousAgentId ? ` from agent ${reclaimAudit.previousAgentId}` : '')));
227
+ }
228
+ console.log(' Cloud binding: ', cloudBinding ? chalk.cyan(cloudBinding.sessionId) : chalk.gray('(none)'));
229
+ if (contextError) {
230
+ console.log(' Context error: ', chalk.red(contextError));
231
+ }
232
+ if (localState.driftWarning) {
233
+ console.log(' Drift warning: ', chalk.yellow(localState.driftWarning));
234
+ }
235
+ console.log('');
236
+ console.log(' Bridge port: ', chalk.cyan(String(resolution.bridgePort ?? bridgePort)));
237
+ console.log(' Bridge health: ', bridgeHealth.ok ? chalk.green(bridgeHealth.message) : chalk.red(bridgeHealth.message));
238
+ if (typeof bridgeHealth.extensionConnected === 'boolean') {
239
+ const label = bridgeHealth.extensionConnected && bridgeHealth.browserName
240
+ ? `connected (${bridgeHealth.browserName})`
241
+ : bridgeHealth.extensionConnected
242
+ ? 'connected'
243
+ : 'not connected';
244
+ console.log(' Extension: ', bridgeHealth.extensionConnected ? chalk.green(label) : chalk.yellow(label));
245
+ }
246
+ if (bridgeHealth.recoveryState && bridgeHealth.recoveryState !== 'healthy') {
247
+ console.log(' Recovery state: ', chalk.yellow(bridgeHealth.recoveryState));
248
+ }
249
+ if ((bridgeHealth.recentDisconnectCount ?? 0) > 0) {
250
+ console.log(' Recent disconnects:', chalk.yellow(String(bridgeHealth.recentDisconnectCount)));
251
+ }
252
+ if (bridgeHealth.lastRecoveredAt) {
253
+ console.log(' Last recovered: ', chalk.cyan(bridgeHealth.lastRecoveredAt));
254
+ }
255
+ console.log('');
256
+ console.log(' API URL: ', chalk.cyan(apiUrl));
257
+ console.log(' API key: ', resolution.hasApiKey ? chalk.green('set') : chalk.gray('not set'));
258
+ console.log('');
259
+ console.log(' Routing target: ', chalk.cyan(routingTarget));
260
+ console.log('');
261
+ });
262
+ const sessionCmd = new Command('session')
263
+ .description('Session and mode diagnostics');
264
+ sessionCmd.addCommand(debugCmd);
265
+ return sessionCmd;
266
+ }
267
+ //# sourceMappingURL=session-debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-debug.js","sourceRoot":"","sources":["../../../src/commands/session-debug.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `thinkrun setup` — one-command setup for new users.
3
+ *
4
+ * Installs the native host binary (if needed) and saves the API key.
5
+ * Replaces the manual download + chmod + --install dance.
6
+ */
7
+ import { Command } from 'commander';
8
+ import type { NativeHostCheckResult } from './install.js';
9
+ import type { ResolvedExtensionId } from './install.js';
10
+ /**
11
+ * Returns true if the native host install step must run.
12
+ *
13
+ * Install is required when:
14
+ * - binary is missing
15
+ * - version does not match expected
16
+ * - manifest file is missing on macOS/Linux (manifestExists === false)
17
+ * note: manifestExists === null means Windows (registry) — no file to check
18
+ * - --force flag is set
19
+ */
20
+ export declare function shouldInstallNativeHost(check: NativeHostCheckResult, force: boolean): boolean;
21
+ export interface SetupDeps {
22
+ checkNativeHost: () => Promise<NativeHostCheckResult>;
23
+ installNativeHost: (opts: {
24
+ force: boolean;
25
+ extensionId?: string;
26
+ resolvedExtensionId?: ResolvedExtensionId;
27
+ }) => Promise<boolean>;
28
+ getApiKey: () => string | undefined;
29
+ getExtensionId: () => string | undefined;
30
+ getRegisteredExtensionId: () => string | undefined;
31
+ preferPackagedDefaultExtensionId: () => boolean;
32
+ resolveExtensionId: (extensionId?: string) => ResolvedExtensionId;
33
+ validateExtensionId: (extensionId: string) => boolean;
34
+ validateApiKey: (key: string) => boolean;
35
+ maskApiKey: (key: string | undefined) => string;
36
+ saveExtensionId: (extensionId: string) => void;
37
+ saveRegisteredExtensionId: (extensionId: string) => void;
38
+ clearPreferPackagedDefaultExtensionId: () => void;
39
+ saveApiKey: (key: string) => void;
40
+ /** Creates a readline interface; returns a `question` function and a `close` function. */
41
+ createRl: () => {
42
+ question: (prompt: string) => Promise<string>;
43
+ close: () => void;
44
+ };
45
+ log: (...args: unknown[]) => void;
46
+ setExitCode: (code: number) => void;
47
+ }
48
+ export declare function runSetupAction(opts: {
49
+ force?: boolean;
50
+ extensionId?: string;
51
+ }, deps?: SetupDeps): Promise<void>;
52
+ export declare function createSetupCommand(): Command;
53
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOxD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAM7F;AAMD,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACtD,iBAAiB,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnI,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACzC,wBAAwB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACnD,gCAAgC,EAAE,MAAM,OAAO,CAAC;IAChD,kBAAkB,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;IAClE,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;IAChD,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,yBAAyB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,qCAAqC,EAAE,MAAM,IAAI,CAAC;IAClD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,0FAA0F;IAC1F,QAAQ,EAAE,MAAM;QAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrF,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAqDD,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,GAAE,SAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Kf;AAMD,wBAAgB,kBAAkB,IAAI,OAAO,CAM5C"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * `thinkrun setup` — one-command setup for new users.
3
+ *
4
+ * Installs the native host binary (if needed) and saves the API key.
5
+ * Replaces the manual download + chmod + --install dance.
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import { createInterface } from 'readline/promises';
10
+ import { checkNativeHost, installNativeHost, resolveExtensionId, resolveRegistrationExtensionIdFromSources, hasAmbiguousManifestExtensionIds, } from './install.js';
11
+ import { config } from '../config/store.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Pure helpers (exported for testing)
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * Returns true if the native host install step must run.
17
+ *
18
+ * Install is required when:
19
+ * - binary is missing
20
+ * - version does not match expected
21
+ * - manifest file is missing on macOS/Linux (manifestExists === false)
22
+ * note: manifestExists === null means Windows (registry) — no file to check
23
+ * - --force flag is set
24
+ */
25
+ export function shouldInstallNativeHost(check, force) {
26
+ if (force)
27
+ return true;
28
+ if (!check.binaryExists)
29
+ return true;
30
+ if (!check.versionMatch)
31
+ return true;
32
+ if (check.manifestExists === false)
33
+ return true;
34
+ return false;
35
+ }
36
+ function defaultDeps() {
37
+ return {
38
+ checkNativeHost,
39
+ installNativeHost,
40
+ getApiKey: () => config.get('apiKey'),
41
+ getExtensionId: () => config.get('extensionId'),
42
+ getRegisteredExtensionId: () => config.get('registeredExtensionId'),
43
+ preferPackagedDefaultExtensionId: () => config.get('preferPackagedDefaultExtensionId') === true,
44
+ resolveExtensionId,
45
+ validateExtensionId: (extensionId) => config.validateExtensionId(extensionId),
46
+ validateApiKey: (key) => config.validateApiKey(key),
47
+ maskApiKey: (key) => config.maskApiKey(key),
48
+ saveExtensionId: (extensionId) => config.set('extensionId', extensionId),
49
+ saveRegisteredExtensionId: (extensionId) => config.set('registeredExtensionId', extensionId),
50
+ clearPreferPackagedDefaultExtensionId: () => config.delete('preferPackagedDefaultExtensionId'),
51
+ saveApiKey: (key) => config.set('apiKey', key),
52
+ createRl: () => {
53
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
54
+ return { question: (p) => rl.question(p), close: () => rl.close() };
55
+ },
56
+ log: console.log,
57
+ setExitCode: (code) => { process.exitCode = code; },
58
+ };
59
+ }
60
+ function resolveSetupExtensionId(opts, deps, check) {
61
+ const resolvedExtensionId = deps.resolveExtensionId(opts.extensionId);
62
+ return resolveRegistrationExtensionIdFromSources({
63
+ extensionId: resolvedExtensionId.source === 'flag' ? resolvedExtensionId.extensionId : undefined,
64
+ envExtensionId: resolvedExtensionId.source === 'env' ? resolvedExtensionId.extensionId : undefined,
65
+ configuredExtensionId: resolvedExtensionId.source === 'config' ? resolvedExtensionId.extensionId : deps.getExtensionId(),
66
+ registeredExtensionId: deps.getRegisteredExtensionId(),
67
+ preferPackagedDefaultExtensionId: deps.preferPackagedDefaultExtensionId(),
68
+ manifestExtensionIds: check.manifestExtensionIds,
69
+ manifestParseStatus: check.manifestParseStatus,
70
+ manifestExists: check.manifestExists,
71
+ });
72
+ }
73
+ function shouldClearPackagedDefaultPreference(source) {
74
+ return source !== 'registered';
75
+ }
76
+ // ---------------------------------------------------------------------------
77
+ // Extracted action (exported for testing)
78
+ // ---------------------------------------------------------------------------
79
+ export async function runSetupAction(opts, deps = defaultDeps()) {
80
+ const { log, setExitCode } = deps;
81
+ log(chalk.bold('ThinkRun Setup'));
82
+ log('─'.repeat(40));
83
+ log('');
84
+ // ── Step 1: Native host ──────────────────────────────────────────────
85
+ log(chalk.bold('Step 1: Native host'));
86
+ if (opts.extensionId && !deps.validateExtensionId(opts.extensionId)) {
87
+ log(chalk.red(' Invalid extension ID format.'));
88
+ log(` Open ${chalk.cyan('chrome://extensions')}, copy the ThinkRun ID, then rerun ${chalk.cyan('thinkrun setup --extension-id <id>')}.`);
89
+ setExitCode(1);
90
+ return;
91
+ }
92
+ const initialResolvedExtensionId = deps.resolveExtensionId(opts.extensionId);
93
+ const check = await deps.checkNativeHost();
94
+ if (hasAmbiguousManifestExtensionIds({
95
+ extensionId: initialResolvedExtensionId.source === 'flag' ? initialResolvedExtensionId.extensionId : undefined,
96
+ envExtensionId: initialResolvedExtensionId.source === 'env' ? initialResolvedExtensionId.extensionId : undefined,
97
+ configuredExtensionId: initialResolvedExtensionId.source === 'config'
98
+ ? initialResolvedExtensionId.extensionId
99
+ : deps.getExtensionId(),
100
+ registeredExtensionId: deps.getRegisteredExtensionId(),
101
+ preferPackagedDefaultExtensionId: deps.preferPackagedDefaultExtensionId(),
102
+ manifestExtensionIds: check.manifestExtensionIds,
103
+ manifestParseStatus: check.manifestParseStatus,
104
+ })) {
105
+ log(chalk.red(' Detected browser manifests disagree on the ThinkRun extension ID.'));
106
+ log(` Run ${chalk.cyan('thinkrun config set-extension-id <id>')} or rerun ${chalk.cyan('thinkrun setup --extension-id <id>')}.`);
107
+ setExitCode(1);
108
+ return;
109
+ }
110
+ const registeredExtensionId = deps.getRegisteredExtensionId();
111
+ const resolvedExtensionId = resolveSetupExtensionId(opts, deps, check);
112
+ const extensionId = resolvedExtensionId.extensionId;
113
+ if (resolvedExtensionId.source === 'flag') {
114
+ log(` Using extension ID ${chalk.cyan(extensionId)} from command line.`);
115
+ }
116
+ else if (resolvedExtensionId.source === 'env') {
117
+ log(` Using extension ID ${chalk.cyan(extensionId)} from ${chalk.cyan('THINKRUN_EXTENSION_ID')} (${chalk.cyan('THINKBROWSE_EXTENSION_ID')} also supported).`);
118
+ }
119
+ else if (resolvedExtensionId.source === 'config') {
120
+ log(` Using saved extension ID ${chalk.cyan(extensionId)}.`);
121
+ }
122
+ else if (resolvedExtensionId.source === 'registered') {
123
+ log(` Using previously registered extension ID ${chalk.cyan(extensionId)}.`);
124
+ }
125
+ else {
126
+ log(` ${chalk.yellow('!')} No saved extension ID — setup will use the packaged extension ID.`);
127
+ log(` If you loaded an unpacked/dev extension, run ${chalk.cyan('thinkrun config set-extension-id <id>')} first.`);
128
+ }
129
+ const windowsRegistrationUnverifiable = check.manifestExists === null && check.manifestExtensionIds === null;
130
+ const relevantManifestEntries = check.manifestEntries?.filter((entry) => entry.relevant) ?? [];
131
+ const manifestNeedsRequestedExtensionId = !!extensionId &&
132
+ ((relevantManifestEntries.length > 0
133
+ ? relevantManifestEntries.some((entry) => !entry.manifestExists ||
134
+ entry.manifestParseStatus !== 'parsed' ||
135
+ !Array.isArray(entry.manifestExtensionIds) ||
136
+ !entry.manifestExtensionIds.includes(extensionId))
137
+ : (Array.isArray(check.manifestExtensionIds) && !check.manifestExtensionIds.includes(extensionId))) ||
138
+ (windowsRegistrationUnverifiable &&
139
+ (resolvedExtensionId.source === 'flag' ||
140
+ resolvedExtensionId.source === 'env' ||
141
+ registeredExtensionId !== extensionId)));
142
+ const mustInstallNativeHost = shouldInstallNativeHost(check, opts.force ?? false) ||
143
+ check.manifestParseStatus === 'parse_error' ||
144
+ manifestNeedsRequestedExtensionId;
145
+ if (!mustInstallNativeHost) {
146
+ deps.saveRegisteredExtensionId(extensionId);
147
+ if (shouldClearPackagedDefaultPreference(resolvedExtensionId.source)) {
148
+ deps.clearPreferPackagedDefaultExtensionId();
149
+ }
150
+ log(` ${chalk.green('✓')} Already installed at v${check.installedVersion ?? 'unknown'}`);
151
+ }
152
+ else {
153
+ log(` Downloading and installing native host...`);
154
+ const ok = await deps.installNativeHost({
155
+ force: opts.force ?? false,
156
+ extensionId: opts.extensionId,
157
+ resolvedExtensionId,
158
+ });
159
+ if (!ok) {
160
+ log('');
161
+ log(chalk.red('Setup failed at native host installation.'));
162
+ log(` Run ${chalk.cyan('thinkrun install')} for details.`);
163
+ setExitCode(1);
164
+ return;
165
+ }
166
+ deps.saveRegisteredExtensionId(extensionId);
167
+ if (shouldClearPackagedDefaultPreference(resolvedExtensionId.source)) {
168
+ deps.clearPreferPackagedDefaultExtensionId();
169
+ }
170
+ log(` ${chalk.green('✓')} Native host ${opts.force ? 'reinstalled' : 'installed'}`);
171
+ }
172
+ log('');
173
+ // ── Step 2: API key ──────────────────────────────────────────────────
174
+ log(chalk.bold('Step 2: API key'));
175
+ const existingKey = deps.getApiKey();
176
+ let apiKeySkipped = false;
177
+ if (existingKey) {
178
+ log(` ${chalk.green('✓')} Already configured (${deps.maskApiKey(existingKey)})`);
179
+ }
180
+ else {
181
+ log(` Get your API key at ${chalk.cyan('https://thinkbrowse.io/dashboard')}`);
182
+ log('');
183
+ let apiKey = '';
184
+ if (!process.stdin.isTTY) {
185
+ // Non-interactive environment (CI, Docker, pipes) — rl.question() would
186
+ // hang indefinitely waiting for input that never arrives. Skip the prompt.
187
+ apiKeySkipped = true;
188
+ }
189
+ else {
190
+ const rl = deps.createRl();
191
+ try {
192
+ apiKey = (await rl.question(' Enter your ThinkRun API key: ')).trim();
193
+ }
194
+ catch {
195
+ // stdin closed before input arrived — treat as skip
196
+ apiKey = '';
197
+ }
198
+ finally {
199
+ rl.close();
200
+ }
201
+ }
202
+ if (!apiKey) {
203
+ apiKeySkipped = true;
204
+ log('');
205
+ log(chalk.yellow(' No API key entered — skipping.'));
206
+ log(` Run ${chalk.cyan('thinkrun config set-key')} to add it later.`);
207
+ }
208
+ else if (!deps.validateApiKey(apiKey)) {
209
+ log('');
210
+ log(chalk.red(' Invalid API key format.'));
211
+ log(` Run ${chalk.cyan('thinkrun config set-key')} to try again.`);
212
+ setExitCode(1);
213
+ return;
214
+ }
215
+ else {
216
+ deps.saveApiKey(apiKey);
217
+ log(` ${chalk.green('✓')} API key saved`);
218
+ }
219
+ }
220
+ log('');
221
+ // ── Done ─────────────────────────────────────────────────────────────
222
+ if (apiKeySkipped) {
223
+ log(chalk.yellow.bold('Setup partially complete — add your API key to use cloud features.'));
224
+ log('');
225
+ log(' Next step:');
226
+ log(` ${chalk.cyan('thinkrun config set-key')} — add your API key`);
227
+ }
228
+ else {
229
+ log(chalk.green.bold('All done! ThinkRun is ready.'));
230
+ log('');
231
+ log(' Next steps:');
232
+ log(` ${chalk.cyan('thinkrun doctor')} — verify connection`);
233
+ log(` ${chalk.cyan('thinkrun tabs')} — list open tabs in your Chromium-based browser`);
234
+ log(` ${chalk.cyan('thinkrun navigate https://example.com')} — navigate a tab`);
235
+ }
236
+ log('');
237
+ log(` Docs: ${chalk.cyan('https://thinkbrowse.io/docs')}`);
238
+ }
239
+ // ---------------------------------------------------------------------------
240
+ // Command factory
241
+ // ---------------------------------------------------------------------------
242
+ export function createSetupCommand() {
243
+ return new Command('setup')
244
+ .description('Set up ThinkRun: install native host and configure API key')
245
+ .option('--force', 'force native host installation regardless of current state')
246
+ .option('--extension-id <id>', 'register the native host for a specific Chrome extension ID')
247
+ .action((opts) => runSetupAction(opts));
248
+ }
249
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"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"}