@kaitranntt/ccs 8.2.0-dev.1 → 8.2.0-dev.11

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 (231) hide show
  1. package/README.md +12 -0
  2. package/config/base-claude.settings.json +1 -5
  3. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  4. package/dist/api/services/cliproxy-profile-bridge.js +6 -0
  5. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  6. package/dist/api/services/profile-writer.d.ts.map +1 -1
  7. package/dist/api/services/profile-writer.js +18 -8
  8. package/dist/api/services/profile-writer.js.map +1 -1
  9. package/dist/auth/commands/create-command.d.ts.map +1 -1
  10. package/dist/auth/commands/create-command.js +11 -0
  11. package/dist/auth/commands/create-command.js.map +1 -1
  12. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts +41 -0
  13. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts.map +1 -0
  14. package/dist/cliproxy/accounts/account-safety-cross-lane.js +177 -0
  15. package/dist/cliproxy/accounts/account-safety-cross-lane.js.map +1 -0
  16. package/dist/cliproxy/accounts/account-safety.d.ts +29 -1
  17. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  18. package/dist/cliproxy/accounts/account-safety.js +41 -7
  19. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  20. package/dist/cliproxy/accounts/drain-order.d.ts +277 -0
  21. package/dist/cliproxy/accounts/drain-order.d.ts.map +1 -0
  22. package/dist/cliproxy/accounts/drain-order.js +575 -0
  23. package/dist/cliproxy/accounts/drain-order.js.map +1 -0
  24. package/dist/cliproxy/accounts/pool-state.d.ts +132 -0
  25. package/dist/cliproxy/accounts/pool-state.d.ts.map +1 -0
  26. package/dist/cliproxy/accounts/pool-state.js +201 -0
  27. package/dist/cliproxy/accounts/pool-state.js.map +1 -0
  28. package/dist/cliproxy/accounts/registry.d.ts +17 -1
  29. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  30. package/dist/cliproxy/accounts/registry.js +47 -1
  31. package/dist/cliproxy/accounts/registry.js.map +1 -1
  32. package/dist/cliproxy/accounts/types.d.ts +20 -0
  33. package/dist/cliproxy/accounts/types.d.ts.map +1 -1
  34. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  35. package/dist/cliproxy/auth/oauth-handler.js +29 -0
  36. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  37. package/dist/cliproxy/claude-shadow-warning.d.ts +39 -0
  38. package/dist/cliproxy/claude-shadow-warning.d.ts.map +1 -0
  39. package/dist/cliproxy/claude-shadow-warning.js +187 -0
  40. package/dist/cliproxy/claude-shadow-warning.js.map +1 -0
  41. package/dist/cliproxy/config/base-config-loader.d.ts +6 -5
  42. package/dist/cliproxy/config/base-config-loader.d.ts.map +1 -1
  43. package/dist/cliproxy/config/base-config-loader.js +19 -12
  44. package/dist/cliproxy/config/base-config-loader.js.map +1 -1
  45. package/dist/cliproxy/config/env-builder.d.ts +3 -0
  46. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  47. package/dist/cliproxy/config/env-builder.js +158 -20
  48. package/dist/cliproxy/config/env-builder.js.map +1 -1
  49. package/dist/cliproxy/config/generator.d.ts +2 -1
  50. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  51. package/dist/cliproxy/config/generator.js +66 -9
  52. package/dist/cliproxy/config/generator.js.map +1 -1
  53. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  54. package/dist/cliproxy/config/thinking-config.js +2 -0
  55. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  56. package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -1
  57. package/dist/cliproxy/executor/account-resolution.js +5 -0
  58. package/dist/cliproxy/executor/account-resolution.js.map +1 -1
  59. package/dist/cliproxy/executor/auth-coordinator.d.ts +4 -0
  60. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
  61. package/dist/cliproxy/executor/auth-coordinator.js +5 -1
  62. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
  63. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  64. package/dist/cliproxy/executor/index.js +20 -0
  65. package/dist/cliproxy/executor/index.js.map +1 -1
  66. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  67. package/dist/cliproxy/model-catalog.js +15 -0
  68. package/dist/cliproxy/model-catalog.js.map +1 -1
  69. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -1
  70. package/dist/cliproxy/proxy/upstream-response-timeout.js +8 -1
  71. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -1
  72. package/dist/cliproxy/quota/quota-manager.d.ts +7 -0
  73. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  74. package/dist/cliproxy/quota/quota-manager.js +19 -1
  75. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  76. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts +95 -0
  77. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts.map +1 -0
  78. package/dist/cliproxy/routing/pool-onboarding-hint.js +172 -0
  79. package/dist/cliproxy/routing/pool-onboarding-hint.js.map +1 -0
  80. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts +50 -0
  81. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts.map +1 -0
  82. package/dist/cliproxy/routing/pool-opt-in-prompt.js +232 -0
  83. package/dist/cliproxy/routing/pool-opt-in-prompt.js.map +1 -0
  84. package/dist/cliproxy/routing/routing-strategy.d.ts +132 -0
  85. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  86. package/dist/cliproxy/routing/routing-strategy.js +342 -5
  87. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  88. package/dist/commands/bar/help-subcommand.d.ts +2 -0
  89. package/dist/commands/bar/help-subcommand.d.ts.map +1 -0
  90. package/dist/commands/bar/help-subcommand.js +63 -0
  91. package/dist/commands/bar/help-subcommand.js.map +1 -0
  92. package/dist/commands/bar/index.d.ts +1 -1
  93. package/dist/commands/bar/index.d.ts.map +1 -1
  94. package/dist/commands/bar/index.js +11 -2
  95. package/dist/commands/bar/index.js.map +1 -1
  96. package/dist/commands/bar/install-subcommand.d.ts +54 -12
  97. package/dist/commands/bar/install-subcommand.d.ts.map +1 -1
  98. package/dist/commands/bar/install-subcommand.js +291 -69
  99. package/dist/commands/bar/install-subcommand.js.map +1 -1
  100. package/dist/commands/bar/launch-subcommand.d.ts +26 -0
  101. package/dist/commands/bar/launch-subcommand.d.ts.map +1 -1
  102. package/dist/commands/bar/launch-subcommand.js +107 -12
  103. package/dist/commands/bar/launch-subcommand.js.map +1 -1
  104. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  105. package/dist/commands/cliproxy/help-subcommand.js +20 -1
  106. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  107. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  108. package/dist/commands/cliproxy/index.js +20 -0
  109. package/dist/commands/cliproxy/index.js.map +1 -1
  110. package/dist/commands/cliproxy/order-subcommand.d.ts +16 -0
  111. package/dist/commands/cliproxy/order-subcommand.d.ts.map +1 -0
  112. package/dist/commands/cliproxy/order-subcommand.js +520 -0
  113. package/dist/commands/cliproxy/order-subcommand.js.map +1 -0
  114. package/dist/commands/cliproxy/pool-state-renderer.d.ts +40 -0
  115. package/dist/commands/cliproxy/pool-state-renderer.d.ts.map +1 -0
  116. package/dist/commands/cliproxy/pool-state-renderer.js +220 -0
  117. package/dist/commands/cliproxy/pool-state-renderer.js.map +1 -0
  118. package/dist/commands/cliproxy/pool-subcommand.d.ts +10 -0
  119. package/dist/commands/cliproxy/pool-subcommand.d.ts.map +1 -0
  120. package/dist/commands/cliproxy/pool-subcommand.js +112 -0
  121. package/dist/commands/cliproxy/pool-subcommand.js.map +1 -0
  122. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  123. package/dist/commands/cliproxy/quota-subcommand.js +7 -0
  124. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  125. package/dist/commands/cliproxy/routing-subcommand.d.ts.map +1 -1
  126. package/dist/commands/cliproxy/routing-subcommand.js +19 -0
  127. package/dist/commands/cliproxy/routing-subcommand.js.map +1 -1
  128. package/dist/commands/command-catalog.d.ts.map +1 -1
  129. package/dist/commands/command-catalog.js +1 -0
  130. package/dist/commands/command-catalog.js.map +1 -1
  131. package/dist/commands/help-command.d.ts.map +1 -1
  132. package/dist/commands/help-command.js +6 -1
  133. package/dist/commands/help-command.js.map +1 -1
  134. package/dist/config/schemas/cliproxy.d.ts +37 -0
  135. package/dist/config/schemas/cliproxy.d.ts.map +1 -1
  136. package/dist/config/unified-config-loader.d.ts.map +1 -1
  137. package/dist/config/unified-config-loader.js +3 -0
  138. package/dist/config/unified-config-loader.js.map +1 -1
  139. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
  140. package/dist/dispatcher/flows/account-flow.js +9 -0
  141. package/dist/dispatcher/flows/account-flow.js.map +1 -1
  142. package/dist/glmt/delta-accumulator.d.ts.map +1 -1
  143. package/dist/glmt/delta-accumulator.js +1 -0
  144. package/dist/glmt/delta-accumulator.js.map +1 -1
  145. package/dist/management/doctor.d.ts.map +1 -1
  146. package/dist/management/doctor.js +10 -0
  147. package/dist/management/doctor.js.map +1 -1
  148. package/dist/proxy/profile-router.d.ts +14 -0
  149. package/dist/proxy/profile-router.d.ts.map +1 -1
  150. package/dist/proxy/profile-router.js +1 -0
  151. package/dist/proxy/profile-router.js.map +1 -1
  152. package/dist/proxy/server/http-helpers.d.ts +5 -0
  153. package/dist/proxy/server/http-helpers.d.ts.map +1 -1
  154. package/dist/proxy/server/http-helpers.js +40 -1
  155. package/dist/proxy/server/http-helpers.js.map +1 -1
  156. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  157. package/dist/proxy/server/messages-route.js +173 -10
  158. package/dist/proxy/server/messages-route.js.map +1 -1
  159. package/dist/proxy/upstream-url.d.ts +42 -2
  160. package/dist/proxy/upstream-url.d.ts.map +1 -1
  161. package/dist/proxy/upstream-url.js +83 -4
  162. package/dist/proxy/upstream-url.js.map +1 -1
  163. package/dist/ui/assets/{Trans-BkttMZOY.js → Trans-RG_sMDEu.js} +1 -1
  164. package/dist/ui/assets/accounts-yTXURc-q.js +1 -0
  165. package/dist/ui/assets/{alert-dialog-Dgbg5gJ1.js → alert-dialog-DjvPgzFs.js} +1 -1
  166. package/dist/ui/assets/api-Ck1dtNEM.js +4 -0
  167. package/dist/ui/assets/{auth-section-DV1ImDLn.js → auth-section-DBnY_LPz.js} +1 -1
  168. package/dist/ui/assets/{backups-section-D7r-Huo_.js → backups-section-Ci-uL4Of.js} +1 -1
  169. package/dist/ui/assets/{channels-CKUk3W1L.js → channels-BeS9O5q0.js} +1 -1
  170. package/dist/ui/assets/{checkbox-B6j6PA4N.js → checkbox-DFeFDZBp.js} +1 -1
  171. package/dist/ui/assets/{claude-extension-B9phgEGW.js → claude-extension-DS5qN19Z.js} +1 -1
  172. package/dist/ui/assets/{cliproxy-CjZiufaQ.js → cliproxy-D7HJH4mZ.js} +1 -1
  173. package/dist/ui/assets/{cliproxy-ai-providers-J_8Tg44E.js → cliproxy-ai-providers-oJQZXrtc.js} +1 -1
  174. package/dist/ui/assets/{cliproxy-control-panel-DOxGnabX.js → cliproxy-control-panel-2mRPEcRj.js} +1 -1
  175. package/dist/ui/assets/codex-D0AUQ6jA.js +30 -0
  176. package/dist/ui/assets/{confirm-dialog-CjwyQ3AU.js → confirm-dialog-B37-CVuq.js} +1 -1
  177. package/dist/ui/assets/{copilot-Nhs4PdOq.js → copilot-KaaW-mko.js} +2 -2
  178. package/dist/ui/assets/{cursor-DqFROSqy.js → cursor-BKiTgYi5.js} +1 -1
  179. package/dist/ui/assets/{droid-CBwAiZcv.js → droid-DHdqGnFw.js} +2 -2
  180. package/dist/ui/assets/{globalenv-section-D9WhcK3S.js → globalenv-section-SfZO97nU.js} +1 -1
  181. package/dist/ui/assets/health-CSRS9O0D.js +1 -0
  182. package/dist/ui/assets/{icons-gI6odJjU.js → icons-DSLG1YsC.js} +1 -1
  183. package/dist/ui/assets/{index-DFYK4jw3.js → index-CGgavq2X.js} +37 -37
  184. package/dist/ui/assets/{index-D--xE6Kq.js → index-ChTYEBCZ.js} +1 -1
  185. package/dist/ui/assets/index-Cu_F55_O.js +1 -0
  186. package/dist/ui/assets/{index-bJvDY0e2.js → index-DJ66NrBH.js} +1 -1
  187. package/dist/ui/assets/index-DWUuSBUe.js +1 -0
  188. package/dist/ui/assets/{index-vK0cF4_0.js → index-DycwEe96.js} +1 -1
  189. package/dist/ui/assets/index-DzFlVVV3.css +1 -0
  190. package/dist/ui/assets/{index-Bssd99Pa.js → index-iQuEEGbH.js} +1 -1
  191. package/dist/ui/assets/{logs-BUA9GCN2.js → logs-tiZ_51mo.js} +1 -1
  192. package/dist/ui/assets/{masked-input-BZdCgWmH.js → masked-input-D9FVoeMA.js} +1 -1
  193. package/dist/ui/assets/proxy-status-widget-2k26d8pS.js +1 -0
  194. package/dist/ui/assets/{raw-json-settings-editor-panel-DuL_4ncA.js → raw-json-settings-editor-panel-CguBh93H.js} +1 -1
  195. package/dist/ui/assets/{searchable-select-BleLprBy.js → searchable-select-C4wShshD.js} +1 -1
  196. package/dist/ui/assets/{separator-De5-VTtx.js → separator-mvGlDdEW.js} +1 -1
  197. package/dist/ui/assets/{shared-Bu81YVUK.js → shared-Ck0yAwbs.js} +1 -1
  198. package/dist/ui/assets/{table-DsXaM2jg.js → table-DrUJOxKL.js} +1 -1
  199. package/dist/ui/assets/updates-BVHBFcq8.js +1 -0
  200. package/dist/ui/assets/{use-accounts-C2OmaTJU.js → use-accounts-DLtuaniS.js} +1 -1
  201. package/dist/ui/index.html +3 -3
  202. package/dist/utils/browser/mcp-installer.d.ts.map +1 -1
  203. package/dist/utils/browser/mcp-installer.js +5 -34
  204. package/dist/utils/browser/mcp-installer.js.map +1 -1
  205. package/dist/utils/claude-user-config-lock.d.ts +9 -0
  206. package/dist/utils/claude-user-config-lock.d.ts.map +1 -0
  207. package/dist/utils/claude-user-config-lock.js +96 -0
  208. package/dist/utils/claude-user-config-lock.js.map +1 -0
  209. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  210. package/dist/utils/image-analysis/mcp-installer.js +5 -34
  211. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  212. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  213. package/dist/utils/websearch/mcp-installer.js +112 -78
  214. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  215. package/dist/web-server/model-pricing.d.ts.map +1 -1
  216. package/dist/web-server/model-pricing.js +7 -0
  217. package/dist/web-server/model-pricing.js.map +1 -1
  218. package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -1
  219. package/dist/web-server/usage/codex-local-quota-collector.js +11 -9
  220. package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -1
  221. package/package.json +1 -1
  222. package/scripts/run-test-bucket.js +183 -17
  223. package/dist/ui/assets/accounts-CMnafyvZ.js +0 -1
  224. package/dist/ui/assets/api-VhuWZte1.js +0 -4
  225. package/dist/ui/assets/codex-BJuDLXfe.js +0 -30
  226. package/dist/ui/assets/health-CE3lFqFV.js +0 -1
  227. package/dist/ui/assets/index-C6D81JHk.js +0 -1
  228. package/dist/ui/assets/index-DGsfFqiO.js +0 -1
  229. package/dist/ui/assets/index-UEdhhar4.css +0 -1
  230. package/dist/ui/assets/proxy-status-widget-I35xB9u9.js +0 -1
  231. package/dist/ui/assets/updates-C2bOO3Fo.js +0 -1
@@ -3,25 +3,29 @@
3
3
  * `ccs-bar-latest` GitHub release tag and install to ~/Applications.
4
4
  *
5
5
  * Intentionally uses a FLOATING tag (not the exact CLI version) so the
6
- * Swift app can be rebuilt and published independently. After install the
7
- * handler calls GET /api/overview to verify version compatibility and warns
8
- * (but does not hard-fail) on mismatch.
6
+ * Swift app can be rebuilt and published independently. After extraction,
7
+ * the real app version is read from the bundle's Contents/Info.plist
8
+ * (CFBundleShortVersionString) and pinned to ~/.ccs/bar/.version.
9
+ *
10
+ * Post-install compat check: single GET {baseUrl}/api/bar/summary.
11
+ * 200 = server serves the bar API (compatible).
12
+ * 404 = server too old (actionable warning).
13
+ * Other / unreachable = soft-warn, never hard-fail install.
9
14
  *
10
15
  * Mirrors the download/version-pin pattern in src/cliproxy/binary-manager.ts.
11
16
  */
12
17
  export interface ReleaseAssetResult {
13
18
  downloadUrl: string;
14
- version: string;
15
19
  }
16
20
  export interface CompatResult {
17
- version: string;
18
21
  compatible: boolean;
22
+ reason: 'ok' | 'no-bar-api' | 'unreachable';
19
23
  }
20
24
  export interface InstallDeps {
21
25
  /**
22
- * Resolve the asset download URL + version string from a GitHub release tag.
26
+ * Resolve the asset download URL from a GitHub release tag.
23
27
  * Production: calls GitHub API releases/tags/{tag}.
24
- * Test: mock that returns a fake URL + version.
28
+ * Test: mock that returns a fake URL.
25
29
  */
26
30
  fetchReleaseAsset: (tag: string, asset: string) => Promise<ReleaseAssetResult>;
27
31
  /**
@@ -30,15 +34,53 @@ export interface InstallDeps {
30
34
  */
31
35
  downloadAndExtract: (url: string, dest: string) => Promise<void>;
32
36
  /**
33
- * Call GET {baseUrl}/api/overview and return { version, compatible }.
34
- * compatible = server version major === installed app version major.
35
- * Returns compatible:false (never true) when versions cannot be compared.
37
+ * GET {baseUrl}/api/bar/summary capability handshake.
38
+ * 200 compatible; 404 no-bar-api; else/unreachable unreachable.
39
+ * Never hard-fails install.
40
+ */
41
+ verifyCompat: (baseUrl: string) => Promise<CompatResult>;
42
+ /**
43
+ * Read CFBundleShortVersionString from {appPath}/Contents/Info.plist.
44
+ * Returns null if the file is absent or unreadable.
36
45
  */
37
- verifyCompat: (baseUrl: string, installedVersion: string) => Promise<CompatResult>;
46
+ readAppBundleVersion: (appPath: string) => string | null;
38
47
  /** Returns path to ~/.ccs (respects CCS_HOME). */
39
48
  getCcsDir: () => string;
40
49
  /** Destination directory for the .app bundle (~/Applications by default). */
41
50
  getAppsDir: () => string;
51
+ /**
52
+ * Clear the macOS Gatekeeper quarantine attribute from the installed app.
53
+ * Run via `/usr/bin/xattr -dr com.apple.quarantine <appPath>` (execFile, not shell-string).
54
+ * Returns true on success, false if xattr is unavailable or the call fails (non-fatal).
55
+ * Injectable for tests — avoids touching the real system.
56
+ */
57
+ clearQuarantine: (appPath: string) => Promise<boolean>;
58
+ /**
59
+ * Invoke handleBarLaunch after a successful install when the user consents.
60
+ * Injectable so tests can assert invocation without starting a real server.
61
+ */
62
+ launchBar: (args: string[]) => Promise<void>;
63
+ /**
64
+ * Ask the user whether to launch CCS Bar now (stdin-TTY-only).
65
+ * Returns true on yes/default, false on no or non-TTY stdin.
66
+ * Injectable for tests.
67
+ */
68
+ promptLaunch: () => Promise<boolean>;
69
+ /**
70
+ * Detect whether CCS Bar is already running.
71
+ * Production: uses /usr/bin/pgrep -x CCSBar (exit 0 = running, exit 1 = not found).
72
+ * Returns false on any error (treat pgrep failure as not running).
73
+ * Injectable for tests — avoids touching the real process table.
74
+ */
75
+ isBarRunning: () => Promise<boolean>;
76
+ /**
77
+ * Remove an existing app bundle before extraction so a malformed archive
78
+ * cannot silently leave the old version in place.
79
+ * Production: fs.rmSync(appPath, { recursive: true, force: true }).
80
+ * Injectable for tests — avoids real filesystem side-effects.
81
+ * Throws on failure; caller catches and aborts install.
82
+ */
83
+ removeExistingApp: (appPath: string) => void;
42
84
  }
43
85
  /**
44
86
  * Validate that a download URL is https and its hostname is in the allowlist
@@ -46,5 +88,5 @@ export interface InstallDeps {
46
88
  * Throws a descriptive Error if validation fails.
47
89
  */
48
90
  export declare function validateDownloadUrl(url: string): void;
49
- export declare function handleBarInstall(_args: string[], deps?: Partial<InstallDeps>): Promise<void>;
91
+ export declare function handleBarInstall(args: string[], deps?: Partial<InstallDeps>): Promise<void>;
50
92
  //# sourceMappingURL=install-subcommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/install-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmCH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/E;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE;;;;OAIG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACnF,kDAAkD;IAClD,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAuBrD;AAiPD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAC9B,OAAO,CAAC,IAAI,CAAC,CA+Ff"}
1
+ {"version":3,"file":"install-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/bar/install-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoCH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,IAAI,GAAG,YAAY,GAAG,aAAa,CAAC;CAC7C;AAED,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/E;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE;;;;OAIG;IACH,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACzD;;;OAGG;IACH,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACzD,kDAAkD;IAClD,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB;;;;;OAKG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C;;;;OAIG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC;;;;;OAKG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAuBrD;AA0TD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,OAAO,CAAC,WAAW,CAAM,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoOf"}
@@ -4,9 +4,14 @@
4
4
  * `ccs-bar-latest` GitHub release tag and install to ~/Applications.
5
5
  *
6
6
  * Intentionally uses a FLOATING tag (not the exact CLI version) so the
7
- * Swift app can be rebuilt and published independently. After install the
8
- * handler calls GET /api/overview to verify version compatibility and warns
9
- * (but does not hard-fail) on mismatch.
7
+ * Swift app can be rebuilt and published independently. After extraction,
8
+ * the real app version is read from the bundle's Contents/Info.plist
9
+ * (CFBundleShortVersionString) and pinned to ~/.ccs/bar/.version.
10
+ *
11
+ * Post-install compat check: single GET {baseUrl}/api/bar/summary.
12
+ * 200 = server serves the bar API (compatible).
13
+ * 404 = server too old (actionable warning).
14
+ * Other / unreachable = soft-warn, never hard-fail install.
10
15
  *
11
16
  * Mirrors the download/version-pin pattern in src/cliproxy/binary-manager.ts.
12
17
  */
@@ -39,6 +44,7 @@ const fs = __importStar(require("fs"));
39
44
  const os = __importStar(require("os"));
40
45
  const path = __importStar(require("path"));
41
46
  const config_loader_facade_1 = require("../../config/config-loader-facade");
47
+ const arg_extractor_1 = require("../arg-extractor");
42
48
  // ---------------------------------------------------------------------------
43
49
  // Constants
44
50
  // ---------------------------------------------------------------------------
@@ -105,15 +111,12 @@ async function defaultFetchReleaseAsset(tag, asset) {
105
111
  }
106
112
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
113
  const release = (await body.json());
108
- const tagName = release.tag_name ?? tag;
109
- // Strip leading 'v' for the version pin file.
110
- const version = tagName.replace(/^v/, '');
111
114
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
112
115
  const found = release.assets.find((a) => a.name === asset);
113
116
  if (!found) {
114
117
  throw new Error(`Asset "${asset}" not found in release ${tag}`);
115
118
  }
116
- return { downloadUrl: found.browser_download_url, version };
119
+ return { downloadUrl: found.browser_download_url };
117
120
  }
118
121
  /**
119
122
  * Download a zip from `url` (following up to 5 GitHub 302 redirects, re-validating
@@ -225,46 +228,58 @@ async function defaultDownloadAndExtract(url, dest) {
225
228
  }
226
229
  }
227
230
  /**
228
- * Call GET {baseUrl}/api/overview and compare server version against the
229
- * installed bar version. Returns compat=false whenever the comparison cannot
230
- * be made (server unreachable, version strings unparseable, etc.).
231
+ * Single-request capability handshake: GET {baseUrl}/api/bar/summary.
232
+ * 200 server serves the bar API (compatible).
233
+ * 404 server is too old and does not serve the bar API.
234
+ * Any other status or network error → soft-warn (unreachable).
231
235
  *
232
- * Fix for Finding #10: replaces the phantom check that always returned true.
233
- * Compatible is defined as same semver major (0 vs 0, 1 vs 1, etc.).
236
+ * The route is loopback-gated server-side; install-time baseUrl is always
237
+ * loopback (bar.json baseUrl or http://127.0.0.1:3000), so the gate passes.
234
238
  */
235
- async function defaultVerifyCompat(baseUrl, installedVersion) {
239
+ async function defaultVerifyCompat(baseUrl) {
236
240
  try {
237
241
  const { request } = await Promise.resolve().then(() => __importStar(require('undici')));
238
- const { statusCode, body } = await request(`${baseUrl}/api/overview`, {
242
+ const { statusCode, body } = await request(`${baseUrl}/api/bar/summary`, {
239
243
  headers: { 'User-Agent': 'ccs-cli' },
240
244
  });
241
- if (statusCode !== 200) {
242
- console.log(`[!] Version compatibility check failed: /api/overview returned HTTP ${statusCode}.`);
243
- return { version: 'unknown', compatible: false };
245
+ // Drain the body regardless of status to free the socket.
246
+ try {
247
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
248
+ await body.dump?.();
244
249
  }
245
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
246
- const data = (await body.json());
247
- const serverVersion = data.version ?? 'unknown';
248
- if (serverVersion === 'unknown') {
249
- console.log('[!] Version compatibility: server did not report a version.');
250
- return { version: serverVersion, compatible: false };
250
+ catch {
251
+ /* ignore drain errors */
252
+ }
253
+ if (statusCode === 200) {
254
+ return { compatible: true, reason: 'ok' };
251
255
  }
252
- // Parse installed version major from the pinned version string.
253
- const installedMajorRaw = installedVersion.split('.')[0];
254
- const serverMajorRaw = serverVersion.split('.')[0];
255
- const installedMajor = parseInt(installedMajorRaw ?? '', 10);
256
- const serverMajor = parseInt(serverMajorRaw ?? '', 10);
257
- if (isNaN(installedMajor) || isNaN(serverMajor)) {
258
- console.log(`[!] Version compatibility: cannot parse major versions ` +
259
- `(installed="${installedVersion}", server="${serverVersion}").`);
260
- return { version: serverVersion, compatible: false };
256
+ if (statusCode === 404) {
257
+ return { compatible: false, reason: 'no-bar-api' };
261
258
  }
262
- const compatible = installedMajor === serverMajor;
263
- return { version: serverVersion, compatible };
259
+ return { compatible: false, reason: 'unreachable' };
264
260
  }
265
261
  catch {
266
- // Server unreachable warn but do not claim compatible.
267
- return { version: 'unknown', compatible: false };
262
+ // Network error or server not running.
263
+ return { compatible: false, reason: 'unreachable' };
264
+ }
265
+ }
266
+ /**
267
+ * Read CFBundleShortVersionString from {appPath}/Contents/Info.plist.
268
+ * The plist is XML text post-codesign (verified on the installed app).
269
+ * Returns null on any error (missing file, binary plist, parse failure).
270
+ */
271
+ function defaultReadAppBundleVersion(appPath) {
272
+ try {
273
+ const plistPath = path.join(appPath, 'Contents', 'Info.plist');
274
+ const contents = fs.readFileSync(plistPath, 'utf8');
275
+ const match = /<key>CFBundleShortVersionString<\/key>\s*<string>([^<]+)<\/string>/.exec(contents);
276
+ if (!match || !match[1])
277
+ return null;
278
+ const v = match[1].trim();
279
+ return v || null;
280
+ }
281
+ catch {
282
+ return null;
268
283
  }
269
284
  }
270
285
  function defaultGetCcsDir() {
@@ -273,6 +288,76 @@ function defaultGetCcsDir() {
273
288
  function defaultGetAppsDir() {
274
289
  return path.join(os.homedir(), 'Applications');
275
290
  }
291
+ /**
292
+ * Clear the macOS Gatekeeper quarantine attribute from the installed app.
293
+ * Uses absolute path `/usr/bin/xattr` to avoid PATH hijacking.
294
+ * Runs `/usr/bin/xattr -dr com.apple.quarantine <appPath>` via execFile (not shell-string)
295
+ * so the path is passed as an argument, not interpolated into a shell command.
296
+ * Returns true on success, false on any error (non-fatal — install already succeeded).
297
+ */
298
+ async function defaultClearQuarantine(appPath) {
299
+ try {
300
+ const { execFile } = await Promise.resolve().then(() => __importStar(require('child_process')));
301
+ const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
302
+ const execFileAsync = promisify(execFile);
303
+ await execFileAsync('/usr/bin/xattr', ['-dr', 'com.apple.quarantine', appPath]);
304
+ return true;
305
+ }
306
+ catch {
307
+ return false;
308
+ }
309
+ }
310
+ function defaultRemoveExistingApp(appPath) {
311
+ fs.rmSync(appPath, { recursive: true, force: true });
312
+ }
313
+ async function defaultLaunchBar(args) {
314
+ const { handleBarLaunch } = await Promise.resolve().then(() => __importStar(require('./launch-subcommand')));
315
+ await handleBarLaunch(args);
316
+ }
317
+ /**
318
+ * Detect whether CCS Bar is already running using `/usr/bin/pgrep -x CCSBar`.
319
+ * pgrep exits 0 when a match is found (running), 1 when no match (not running).
320
+ * execFile surfaces exit code 1 as an error, so we catch and return false.
321
+ * Any other error (pgrep unavailable, permission denied) is also treated as not running.
322
+ */
323
+ async function defaultIsBarRunning() {
324
+ try {
325
+ const { execFile } = await Promise.resolve().then(() => __importStar(require('child_process')));
326
+ const { promisify } = await Promise.resolve().then(() => __importStar(require('util')));
327
+ const execFileAsync = promisify(execFile);
328
+ await execFileAsync('/usr/bin/pgrep', ['-x', 'CCSBar']);
329
+ return true;
330
+ }
331
+ catch {
332
+ // pgrep exits 1 when no match found; execFile throws for non-zero exit codes.
333
+ return false;
334
+ }
335
+ }
336
+ /**
337
+ * Ask the user whether to launch CCS Bar now.
338
+ * Only prompts when stdin is a TTY — stdin is what the prompt actually reads.
339
+ * Non-TTY stdin: return false (caller prints guidance).
340
+ * Default answer is yes (Enter = launch).
341
+ */
342
+ async function defaultPromptLaunch() {
343
+ if (!process.stdin.isTTY) {
344
+ return false;
345
+ }
346
+ const readline = await Promise.resolve().then(() => __importStar(require('readline')));
347
+ const rl = readline.createInterface({
348
+ input: process.stdin,
349
+ output: process.stdout,
350
+ terminal: true,
351
+ });
352
+ return new Promise((resolve) => {
353
+ rl.question('Launch CCS Bar now? [Y/n] ', (answer) => {
354
+ rl.close();
355
+ const normalized = answer.trim().toLowerCase();
356
+ // Empty (Enter) or 'y'/'yes' → launch
357
+ resolve(normalized === '' || normalized === 'y' || normalized === 'yes');
358
+ });
359
+ });
360
+ }
276
361
  // ---------------------------------------------------------------------------
277
362
  // Version pin helpers
278
363
  // ---------------------------------------------------------------------------
@@ -287,14 +372,36 @@ function pinBarVersion(ccsDir, version) {
287
372
  // ---------------------------------------------------------------------------
288
373
  // Implementation
289
374
  // ---------------------------------------------------------------------------
290
- async function handleBarInstall(_args, deps = {}) {
375
+ async function handleBarInstall(args, deps = {}) {
376
+ // Parse --launch / --no-launch flags before delegating to deps.
377
+ const forceLaunch = (0, arg_extractor_1.hasAnyFlag)(args, ['--launch']);
378
+ const noLaunch = (0, arg_extractor_1.hasAnyFlag)(args, ['--no-launch']);
291
379
  const fetchReleaseAsset = deps.fetchReleaseAsset ?? defaultFetchReleaseAsset;
292
380
  const downloadAndExtract = deps.downloadAndExtract ?? defaultDownloadAndExtract;
293
381
  const verifyCompat = deps.verifyCompat ?? defaultVerifyCompat;
382
+ const readAppBundleVersion = deps.readAppBundleVersion ?? defaultReadAppBundleVersion;
383
+ const clearQuarantine = deps.clearQuarantine ?? defaultClearQuarantine;
384
+ const launchBar = deps.launchBar ?? defaultLaunchBar;
385
+ const promptLaunch = deps.promptLaunch ?? defaultPromptLaunch;
386
+ const isBarRunning = deps.isBarRunning ?? defaultIsBarRunning;
387
+ const removeExistingApp = deps.removeExistingApp ?? defaultRemoveExistingApp;
294
388
  const ccsDir = (deps.getCcsDir ?? defaultGetCcsDir)();
295
389
  const appsDir = (deps.getAppsDir ?? defaultGetAppsDir)();
296
- console.log('[i] Fetching CCS Bar release info...');
297
- // 1. Resolve the floating tag → download URL + version.
390
+ // 0. Already-installed detection: show the current version before proceeding.
391
+ const appPath = path.join(appsDir, BAR_APP_NAME);
392
+ if (fs.existsSync(appPath)) {
393
+ const existingVersion = readAppBundleVersion(appPath);
394
+ if (existingVersion !== null) {
395
+ console.log(`[i] CCS Bar v${existingVersion} is already installed. Reinstalling...`);
396
+ }
397
+ else {
398
+ console.log('[i] CCS Bar is already installed. Reinstalling...');
399
+ }
400
+ }
401
+ else {
402
+ console.log('[i] Fetching CCS Bar release info...');
403
+ }
404
+ // 1. Resolve the floating tag → download URL.
298
405
  let releaseInfo;
299
406
  try {
300
407
  releaseInfo = await fetchReleaseAsset(BAR_RELEASE_TAG, BAR_ASSET_NAME);
@@ -305,45 +412,115 @@ async function handleBarInstall(_args, deps = {}) {
305
412
  console.error('[i] Check your network connection and try again.');
306
413
  return;
307
414
  }
308
- const { downloadUrl, version } = releaseInfo;
309
- console.log(`[i] Installing CCS Bar v${version} from ${BAR_RELEASE_TAG}...`);
310
- // 2. Download and extract into ~/Applications.
415
+ const { downloadUrl } = releaseInfo;
416
+ console.log(`[i] Installing CCS Bar from ${BAR_RELEASE_TAG}...`);
417
+ // 1b. Stage-then-swap: extract into a hidden staging dir on the same filesystem
418
+ // so the rename to appPath is atomic-ish. The old bundle is only removed
419
+ // AFTER the new one is verified in staging — a transient download/extraction
420
+ // failure during reinstall therefore leaves the previous working install intact.
421
+ fs.mkdirSync(appsDir, { recursive: true });
422
+ let stagingDir;
311
423
  try {
312
- await downloadAndExtract(downloadUrl, appsDir);
424
+ stagingDir = fs.mkdtempSync(path.join(appsDir, '.ccs-bar-staging-'));
425
+ }
426
+ catch (err) {
427
+ const msg = err instanceof Error ? err.message : String(err);
428
+ console.error(`[X] Could not create staging directory in ${appsDir}: ${msg}`);
429
+ return;
430
+ }
431
+ // Helper: remove staging dir, ignoring errors (best-effort cleanup).
432
+ function cleanupStaging() {
433
+ try {
434
+ fs.rmSync(stagingDir, { recursive: true, force: true });
435
+ }
436
+ catch {
437
+ /* ignore */
438
+ }
439
+ }
440
+ // 2. Download and extract into staging, NOT appsDir.
441
+ try {
442
+ await downloadAndExtract(downloadUrl, stagingDir);
313
443
  }
314
444
  catch (err) {
315
445
  const msg = err instanceof Error ? err.message : String(err);
316
446
  console.error(`[X] Download or extraction failed: ${msg}`);
447
+ cleanupStaging();
317
448
  return;
318
449
  }
319
450
  // 3. Finding #12: assert that the expected .app bundle was actually extracted
320
- // before reporting success.
321
- const appPath = path.join(appsDir, BAR_APP_NAME);
322
- if (!fs.existsSync(appPath)) {
451
+ // into the staging dir before touching the old install.
452
+ const stagedApp = path.join(stagingDir, BAR_APP_NAME);
453
+ if (!fs.existsSync(stagedApp)) {
323
454
  // Report what was actually extracted to help diagnose archive issues.
324
455
  let extracted = [];
325
456
  try {
326
- extracted = fs.readdirSync(appsDir);
457
+ extracted = fs.readdirSync(stagingDir);
327
458
  }
328
459
  catch {
329
460
  /* ignore */
330
461
  }
331
462
  const found = extracted.length > 0 ? extracted.join(', ') : '(none)';
332
- console.error(`[X] Extraction succeeded but "${BAR_APP_NAME}" was not found in ${appsDir}.`);
333
- console.error(`[i] Files found in ${appsDir}: ${found}`);
463
+ console.error(`[X] Extraction succeeded but "${BAR_APP_NAME}" was not found in staging.`);
464
+ console.error(`[i] Files found in staging: ${found}`);
465
+ cleanupStaging();
334
466
  return;
335
467
  }
336
- // 4. Pin the installed version to ~/.ccs/bar/.version.
468
+ // 3b. New bundle verified in staging — now safe to remove the old install.
469
+ if (fs.existsSync(appPath)) {
470
+ try {
471
+ removeExistingApp(appPath);
472
+ }
473
+ catch (err) {
474
+ const msg = err instanceof Error ? err.message : String(err);
475
+ console.error(`[X] Could not remove the existing CCS Bar.app: ${msg}`);
476
+ console.error('[i] Close any running instance and try again.');
477
+ cleanupStaging();
478
+ return;
479
+ }
480
+ }
481
+ // 3c. Atomic-ish rename: move staged bundle into the final location.
337
482
  try {
338
- pinBarVersion(ccsDir, version);
483
+ fs.renameSync(stagedApp, appPath);
339
484
  }
340
485
  catch (err) {
341
486
  const msg = err instanceof Error ? err.message : String(err);
342
- console.error(`[!] Could not write version pin: ${msg}`);
343
- // Non-fatal — continue.
487
+ console.error(`[X] Could not move staged app into place: ${msg}`);
488
+ cleanupStaging();
489
+ return;
344
490
  }
345
- console.log(`[OK] CCS Bar v${version} installed to ${appsDir}/${BAR_APP_NAME}`);
346
- // 5. Version-compat handshake via /api/overview.
491
+ // Staging dir is now empty (bundle was moved out); remove it.
492
+ cleanupStaging();
493
+ // 4. Read the real version from the extracted bundle's Info.plist.
494
+ const installedVersion = readAppBundleVersion(appPath);
495
+ if (installedVersion !== null) {
496
+ // Pin the real version string.
497
+ try {
498
+ pinBarVersion(ccsDir, installedVersion);
499
+ }
500
+ catch (err) {
501
+ const msg = err instanceof Error ? err.message : String(err);
502
+ console.error(`[!] Could not write version pin: ${msg}`);
503
+ // Non-fatal — continue.
504
+ }
505
+ console.log(`[OK] CCS Bar v${installedVersion} installed to ${appsDir}/${BAR_APP_NAME}`);
506
+ }
507
+ else {
508
+ // Info.plist unreadable — best-effort remove any stale version pin from a previous install,
509
+ // so `ccs bar version` does not show an outdated version string.
510
+ try {
511
+ fs.rmSync(path.join(ccsDir, 'bar', '.version'), { force: true });
512
+ }
513
+ catch {
514
+ /* non-fatal — ignore */
515
+ }
516
+ // No pin written; ASCII notice; no crash.
517
+ console.log(`[OK] CCS Bar installed to ${appsDir}/${BAR_APP_NAME}`);
518
+ console.log('[!] Could not read app version from Info.plist.');
519
+ }
520
+ // 5. Capability handshake via GET /api/bar/summary.
521
+ // Runs BEFORE the quarantine-clear + launch handoff because it is a server-side
522
+ // check unrelated to Gatekeeper. A failed quarantine clear must not prevent the
523
+ // compat result from being shown to the user.
347
524
  // Read bar.json for baseUrl if present; otherwise fall back to localhost:3000.
348
525
  const barJsonPath = path.join(ccsDir, 'bar.json');
349
526
  let baseUrl = 'http://127.0.0.1:3000';
@@ -357,27 +534,72 @@ async function handleBarInstall(_args, deps = {}) {
357
534
  /* bar.json absent — use fallback */
358
535
  }
359
536
  try {
360
- // Pass the pinned version so verifyCompat can do a real major-version comparison.
361
- const compat = await verifyCompat(baseUrl, version);
362
- if (!compat.compatible) {
363
- console.log(`[!] Version mismatch: CCS server reports v${compat.version}, ` +
364
- `app is v${version}. Some features may not work until you restart ` +
365
- '`ccs bar` or update CCS.');
537
+ const compat = await verifyCompat(baseUrl);
538
+ if (compat.reason === 'ok') {
539
+ console.log('[OK] Server bar API reachable.');
540
+ }
541
+ else if (compat.reason === 'no-bar-api') {
542
+ console.log('[!] CCS server does not serve the bar API (/api/bar/summary returned 404).' +
543
+ ' Update CCS, then restart `ccs bar`.');
366
544
  }
367
545
  else {
368
- console.log(`[OK] Version compatibility confirmed (server: v${compat.version}).`);
546
+ // unreachable soft-warn
547
+ console.log('[!] Could not verify server compatibility (server may not be running).');
548
+ console.log('[i] Run `ccs bar` to start the server and recheck.');
369
549
  }
370
550
  }
371
551
  catch {
372
- console.log('[!] Could not verify version compatibility (server may not be running).');
552
+ console.log('[!] Could not verify server compatibility (server may not be running).');
373
553
  console.log('[i] Run `ccs bar` to start the server and recheck.');
374
554
  }
375
- // 6. Print Gatekeeper guidance for ad-hoc/unsigned builds.
376
- console.log('');
377
- console.log('[i] Gatekeeper note (ad-hoc build):');
378
- console.log(' If macOS says the app is "damaged" or "unverified", run:');
379
- console.log(` xattr -dr com.apple.quarantine "${path.join(appsDir, BAR_APP_NAME)}"`);
380
- console.log(' Or right-click the app and select Open.');
555
+ // 6. Quarantine handling: run `xattr -dr com.apple.quarantine` automatically.
556
+ // This clears the Gatekeeper quarantine flag that ad-hoc builds receive on download.
557
+ // On success: print [OK] confirmation. On failure: fall back to printed guidance and
558
+ // SKIP the launch handoff entirely launching a still-quarantined app hits the
559
+ // Gatekeeper block, so the user must clear quarantine manually first.
560
+ const quarantineCleared = await clearQuarantine(appPath);
561
+ if (quarantineCleared) {
562
+ console.log('[OK] Cleared Gatekeeper quarantine.');
563
+ }
564
+ else {
565
+ console.log('[i] Gatekeeper note (ad-hoc build):');
566
+ console.log(' If macOS says the app is "damaged" or "unverified", run:');
567
+ console.log(` xattr -dr com.apple.quarantine "${appPath}"`);
568
+ console.log(' Or right-click the app and select Open.');
569
+ console.log('[i] After clearing quarantine, run `ccs bar` to launch.');
570
+ return;
571
+ }
572
+ // 7. Launch handoff.
573
+ // Already-running check: if CCS Bar is running after a (re)install, skip the
574
+ // prompt entirely and print a restart hint (the user needs to quit and reopen
575
+ // to pick up the new version). --launch with the app already running still
576
+ // proceeds — the launch flow opens/activates the app, which is harmless.
577
+ //
578
+ // --launch: skip prompt and launch immediately.
579
+ // --no-launch: skip prompt, print guidance.
580
+ // stdin-TTY: ask interactively (default yes).
581
+ // Non-TTY stdin: print guidance, no prompt.
582
+ const barIsRunning = await isBarRunning();
583
+ if (barIsRunning && !forceLaunch) {
584
+ console.log('[!] CCS Bar is currently running an older build. Quit it from the menu bar, then run `ccs bar` to relaunch the updated app.');
585
+ }
586
+ else if (forceLaunch) {
587
+ await launchBar([]);
588
+ }
589
+ else if (noLaunch) {
590
+ console.log('[i] Run `ccs bar` to launch.');
591
+ }
592
+ else {
593
+ const shouldLaunch = await promptLaunch();
594
+ if (shouldLaunch) {
595
+ await launchBar([]);
596
+ }
597
+ else {
598
+ // User declined or non-TTY stdin — always print guidance so the user
599
+ // knows how to start the app after install.
600
+ console.log('[i] Run `ccs bar` to launch later.');
601
+ }
602
+ }
381
603
  }
382
604
  exports.handleBarInstall = handleBarInstall;
383
605
  //# sourceMappingURL=install-subcommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/install-subcommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-subcommand.js","sourceRoot":"","sources":["../../../src/commands/bar/install-subcommand.ts"],"names":[],"mappings":"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"}