@rubytech/create-maxy-code 0.1.389 → 0.1.392

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 (62) hide show
  1. package/dist/__tests__/claude-bin.test.js +51 -0
  2. package/dist/__tests__/claude-upgrade-privilege.test.js +17 -0
  3. package/dist/__tests__/launchd-plist.test.js +36 -1
  4. package/dist/__tests__/macos-darwin-branch.test.js +18 -0
  5. package/dist/__tests__/neo4j-datadir.test.js +14 -0
  6. package/dist/claude-bin.js +78 -0
  7. package/dist/claude-upgrade-privilege.js +21 -0
  8. package/dist/index.js +241 -34
  9. package/dist/launchd-plist.js +25 -9
  10. package/dist/neo4j-datadir.js +15 -0
  11. package/package.json +1 -1
  12. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +4 -4
  13. package/payload/platform/scripts/smoke-boot-services.sh +35 -10
  14. package/payload/platform/services/claude-session-manager/dist/claude-host-creds.d.ts +11 -0
  15. package/payload/platform/services/claude-session-manager/dist/claude-host-creds.d.ts.map +1 -0
  16. package/payload/platform/services/claude-session-manager/dist/claude-host-creds.js +37 -0
  17. package/payload/platform/services/claude-session-manager/dist/claude-host-creds.js.map +1 -0
  18. package/payload/platform/services/claude-session-manager/dist/index.js +8 -8
  19. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  20. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  21. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +7 -0
  22. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  23. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts +1 -1
  24. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  25. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +5 -1
  26. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  27. package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts +28 -0
  28. package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts.map +1 -1
  29. package/payload/platform/services/claude-session-manager/dist/systemd-scope.js +54 -0
  30. package/payload/platform/services/claude-session-manager/dist/systemd-scope.js.map +1 -1
  31. package/payload/server/public/assets/{AdminLoginScreens-CerrEc_m.js → AdminLoginScreens-CL27ZV86.js} +1 -1
  32. package/payload/server/public/assets/{AdminShell-cRTvNRbo.js → AdminShell-CBcSh9Yd.js} +1 -1
  33. package/payload/server/public/assets/{Checkbox-Dh2pLMFN.js → Checkbox-DRIcYN9r.js} +1 -1
  34. package/payload/server/public/assets/{Transcript-B_GVJujB.js → Transcript-CRc72hkG.js} +1 -1
  35. package/payload/server/public/assets/{admin-BXaYelnR.js → admin-iKYYnv3w.js} +1 -1
  36. package/payload/server/public/assets/{browser-fhjGE7fH.js → browser--8gzAe-E.js} +1 -1
  37. package/payload/server/public/assets/{calendar-PnZudAtc.js → calendar-7xAT81N_.js} +1 -1
  38. package/payload/server/public/assets/chat-B8Z9W42Z.js +1 -0
  39. package/payload/server/public/assets/chevron-left-DDselYau.js +1 -0
  40. package/payload/server/public/assets/data-Ece320dZ.js +1 -0
  41. package/payload/server/public/assets/{graph-CycO3tkW.js → graph-B3haz2DN.js} +1 -1
  42. package/payload/server/public/assets/{graph-labels-DlSsSpBV.js → graph-labels-Ba_fyw6I.js} +1 -1
  43. package/payload/server/public/assets/{operator-L4kBC-zS.js → operator-BYL1IFz9.js} +1 -1
  44. package/payload/server/public/assets/page-Bj6lB07z.js +32 -0
  45. package/payload/server/public/assets/{page-D5E-Ng4D.js → page-CLKVCquw.js} +1 -1
  46. package/payload/server/public/assets/{public-BmnajF3K.js → public-BKJUKC76.js} +1 -1
  47. package/payload/server/public/assets/{rotate-ccw-W5HhvAbo.js → rotate-ccw-BypBbSI4.js} +1 -1
  48. package/payload/server/public/assets/{useSubAccountSwitcher-D1TI1xvd.css → useSubAccountSwitcher-4qilMyPX.css} +1 -1
  49. package/payload/server/public/browser.html +4 -4
  50. package/payload/server/public/calendar.html +5 -5
  51. package/payload/server/public/chat.html +8 -8
  52. package/payload/server/public/data.html +7 -7
  53. package/payload/server/public/graph.html +8 -8
  54. package/payload/server/public/index.html +10 -10
  55. package/payload/server/public/operator.html +10 -10
  56. package/payload/server/public/public.html +8 -8
  57. package/payload/server/server.js +157 -12
  58. package/payload/server/public/assets/chat-Dy_zrjKS.js +0 -1
  59. package/payload/server/public/assets/chevron-left-IB6TmMZ_.js +0 -1
  60. package/payload/server/public/assets/data-B2IcjAj6.js +0 -1
  61. package/payload/server/public/assets/page-M8sD9LOi.js +0 -32
  62. /package/payload/server/public/assets/{useSubAccountSwitcher-UqZbmzYy.js → useSubAccountSwitcher-CsRv6MEd.js} +0 -0
@@ -5,11 +5,11 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Browser — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/browser-fhjGE7fH.js"></script>
8
+ <script type="module" crossorigin src="/assets/browser--8gzAe-E.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
12
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
12
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
13
13
  <link rel="stylesheet" href="/brand-defaults.css">
14
14
  </head>
15
15
  <body>
@@ -5,12 +5,12 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Calendar — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/calendar-PnZudAtc.js"></script>
8
+ <script type="module" crossorigin src="/assets/calendar-7xAT81N_.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
12
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
13
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
13
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
14
14
  <link rel="stylesheet" href="/brand-defaults.css">
15
15
  </head>
16
16
  <body>
@@ -5,17 +5,17 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Chat — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/chat-Dy_zrjKS.js"></script>
8
+ <script type="module" crossorigin src="/assets/chat-B8Z9W42Z.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-hioowVct.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-C5gCWwwF.js">
14
- <link rel="modulepreload" crossorigin href="/assets/Transcript-B_GVJujB.js">
15
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-W5HhvAbo.js">
17
- <link rel="modulepreload" crossorigin href="/assets/page-M8sD9LOi.js">
18
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
14
+ <link rel="modulepreload" crossorigin href="/assets/Transcript-CRc72hkG.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BypBbSI4.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/page-Bj6lB07z.js">
18
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
19
19
  <link rel="stylesheet" href="/brand-defaults.css">
20
20
  </head>
21
21
  <body>
@@ -5,15 +5,15 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Data — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/data-B2IcjAj6.js"></script>
8
+ <script type="module" crossorigin src="/assets/data-Ece320dZ.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-DlSsSpBV.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-Ba_fyw6I.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-C5gCWwwF.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Transcript-B_GVJujB.js">
14
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/page-D5E-Ng4D.js">
16
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
13
+ <link rel="modulepreload" crossorigin href="/assets/Transcript-CRc72hkG.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/page-CLKVCquw.js">
16
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
18
18
  </head>
19
19
  <body>
@@ -5,15 +5,15 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Graph — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/graph-CycO3tkW.js"></script>
8
+ <script type="module" crossorigin src="/assets/graph-B3haz2DN.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-DlSsSpBV.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-Dh2pLMFN.js">
14
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
15
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-W5HhvAbo.js">
16
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-Ba_fyw6I.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DRIcYN9r.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BypBbSI4.js">
16
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
17
17
  <link rel="stylesheet" href="/brand-defaults.css">
18
18
  </head>
19
19
  <body>
@@ -5,19 +5,19 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/admin-BXaYelnR.js"></script>
8
+ <script type="module" crossorigin src="/assets/admin-iKYYnv3w.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/graph-labels-DlSsSpBV.js">
12
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/graph-labels-Ba_fyw6I.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/admin-types-hioowVct.js">
14
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-Dh2pLMFN.js">
15
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CerrEc_m.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DRIcYN9r.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CL27ZV86.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-C5gCWwwF.js">
17
- <link rel="modulepreload" crossorigin href="/assets/Transcript-B_GVJujB.js">
18
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
19
- <link rel="modulepreload" crossorigin href="/assets/page-D5E-Ng4D.js">
20
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
17
+ <link rel="modulepreload" crossorigin href="/assets/Transcript-CRc72hkG.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/page-CLKVCquw.js">
20
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
21
21
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
22
22
  <link rel="stylesheet" href="/brand-defaults.css">
23
23
  </head>
@@ -5,19 +5,19 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Operator — Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/operator-L4kBC-zS.js"></script>
8
+ <script type="module" crossorigin src="/assets/operator-BYL1IFz9.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-hioowVct.js">
13
- <link rel="modulepreload" crossorigin href="/assets/Checkbox-Dh2pLMFN.js">
14
- <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CerrEc_m.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/Checkbox-DRIcYN9r.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/AdminLoginScreens-CL27ZV86.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-C5gCWwwF.js">
16
- <link rel="modulepreload" crossorigin href="/assets/Transcript-B_GVJujB.js">
17
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
18
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-W5HhvAbo.js">
19
- <link rel="modulepreload" crossorigin href="/assets/page-M8sD9LOi.js">
20
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
16
+ <link rel="modulepreload" crossorigin href="/assets/Transcript-CRc72hkG.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BypBbSI4.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/page-Bj6lB07z.js">
20
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
21
21
  <link rel="stylesheet" crossorigin href="/assets/AdminLoginScreens-CWMpccrR.css">
22
22
  <link rel="stylesheet" href="/brand-defaults.css">
23
23
  </head>
@@ -5,17 +5,17 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Maxy</title>
7
7
  <link rel="icon" href="/favicon.ico">
8
- <script type="module" crossorigin src="/assets/public-BmnajF3K.js"></script>
8
+ <script type="module" crossorigin src="/assets/public-BKJUKC76.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-CAM3fms7.js">
10
- <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-UqZbmzYy.js">
11
- <link rel="modulepreload" crossorigin href="/assets/AdminShell-cRTvNRbo.js">
10
+ <link rel="modulepreload" crossorigin href="/assets/useSubAccountSwitcher-CsRv6MEd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/AdminShell-CBcSh9Yd.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/admin-types-hioowVct.js">
13
13
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-C5gCWwwF.js">
14
- <link rel="modulepreload" crossorigin href="/assets/Transcript-B_GVJujB.js">
15
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-IB6TmMZ_.js">
16
- <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-W5HhvAbo.js">
17
- <link rel="modulepreload" crossorigin href="/assets/page-M8sD9LOi.js">
18
- <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-D1TI1xvd.css">
14
+ <link rel="modulepreload" crossorigin href="/assets/Transcript-CRc72hkG.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DDselYau.js">
16
+ <link rel="modulepreload" crossorigin href="/assets/rotate-ccw-BypBbSI4.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/page-Bj6lB07z.js">
18
+ <link rel="stylesheet" crossorigin href="/assets/useSubAccountSwitcher-4qilMyPX.css">
19
19
  <link rel="stylesheet" href="/brand-defaults.css">
20
20
  </head>
21
21
  <body class="public-surface">
@@ -1623,8 +1623,9 @@ function startAuthHealthHeartbeat(intervalMs = 5 * 60 * 1e3) {
1623
1623
  try {
1624
1624
  const h = computeAuthHealth();
1625
1625
  const expiresIn = h.expiresAt != null ? Math.round((h.expiresAt - Date.now()) / 1e3) : null;
1626
+ const store2 = process.platform === "darwin" ? "host-creds-file" : "file";
1626
1627
  console.log(
1627
- `[auth-health] brand=${BRAND_NAME} status=${h.status} expiresIn=${expiresIn != null ? expiresIn + "s" : "n/a"}`
1628
+ `[auth-health] brand=${BRAND_NAME} store=${store2} status=${h.status} expiresIn=${expiresIn != null ? expiresIn + "s" : "n/a"}`
1628
1629
  );
1629
1630
  if (h.status === "dead") {
1630
1631
  console.log(`[auth-health] op=reauth-required status=dead`);
@@ -10443,10 +10444,111 @@ app8.get("/callback", async (c) => {
10443
10444
  var quickbooks_default = app8;
10444
10445
 
10445
10446
  // server/routes/onboarding.ts
10446
- import { spawn, spawnSync as spawnSync2, execFileSync as execFileSync2 } from "child_process";
10447
- import { openSync as openSync3, closeSync as closeSync3, writeFileSync as writeFileSync10, writeSync, existsSync as existsSync15, readFileSync as readFileSync24, unlinkSync as unlinkSync2 } from "fs";
10447
+ import { spawn, spawnSync as spawnSync2, execFileSync as execFileSync3 } from "child_process";
10448
+ import { openSync as openSync3, closeSync as closeSync3, writeFileSync as writeFileSync10, writeSync, existsSync as existsSync15, readFileSync as readFileSync24, unlinkSync as unlinkSync2, renameSync as renameSync6 } from "fs";
10448
10449
  import { createHash as createHash3, randomUUID as randomUUID7 } from "crypto";
10449
10450
 
10451
+ // app/lib/claude-spawn-env.ts
10452
+ var HOST_AUTH_REFRESH_TIMEOUT_MS = "30000";
10453
+ function hostCredsEnv(platform, credsFile) {
10454
+ if (platform === "darwin" && credsFile) {
10455
+ return {
10456
+ CLAUDE_CODE_HOST_CREDS_FILE: credsFile,
10457
+ CLAUDE_CODE_HOST_AUTH_REFRESH_TIMEOUT_MS: HOST_AUTH_REFRESH_TIMEOUT_MS
10458
+ };
10459
+ }
10460
+ return {};
10461
+ }
10462
+ function claudeBin() {
10463
+ return process.env.CLAUDE_BIN ?? "claude";
10464
+ }
10465
+
10466
+ // app/lib/claude-keychain.ts
10467
+ import { execFileSync as execFileSync2 } from "child_process";
10468
+ var CREDS_SERVICE_PREFIX = "Claude Code-credentials";
10469
+ function parseKeychainMdats(dumpOutput) {
10470
+ const out = {};
10471
+ let pendingMdat = null;
10472
+ for (const line of dumpOutput.split("\n")) {
10473
+ const mdatMatch = line.match(/"mdat"<timedate>=0x[0-9A-Fa-f]*\s+"([0-9]{14}Z)\\000"/);
10474
+ if (mdatMatch) {
10475
+ pendingMdat = mdatMatch[1];
10476
+ continue;
10477
+ }
10478
+ const svceMatch = line.match(/"svce"<blob>="(.+)"$/);
10479
+ if (svceMatch) {
10480
+ const svce = svceMatch[1];
10481
+ if (svce.startsWith(CREDS_SERVICE_PREFIX) && pendingMdat) out[svce] = pendingMdat;
10482
+ pendingMdat = null;
10483
+ }
10484
+ }
10485
+ return out;
10486
+ }
10487
+ function selectWrittenItem(before, after) {
10488
+ const changed = Object.keys(after).filter(
10489
+ (svce) => before[svce] === void 0 || after[svce] > before[svce]
10490
+ );
10491
+ return changed.length === 1 ? changed[0] : null;
10492
+ }
10493
+ function bridgeKeychainToFile(deps) {
10494
+ if (deps.platform !== "darwin") {
10495
+ return { wrote: false, reason: "not-darwin", bytes: 0, service: null };
10496
+ }
10497
+ const after = deps.listMdats();
10498
+ const service = selectWrittenItem(deps.before, after);
10499
+ if (!service) {
10500
+ const changedCount = Object.keys(after).filter(
10501
+ (s) => deps.before[s] === void 0 || after[s] > deps.before[s]
10502
+ ).length;
10503
+ const reason = changedCount > 1 ? "ambiguous" : "zero-changed";
10504
+ deps.log(`[onboarding] op=login-writeback result=${reason} changed=${changedCount}`);
10505
+ return { wrote: false, reason, bytes: 0, service: null };
10506
+ }
10507
+ const blob = deps.readBlob(service);
10508
+ if (blob === null) {
10509
+ deps.log(`[onboarding] op=login-writeback result=read-failed service=${JSON.stringify(service)}`);
10510
+ return { wrote: false, reason: "read-failed", bytes: 0, service };
10511
+ }
10512
+ let parsed;
10513
+ try {
10514
+ parsed = JSON.parse(blob);
10515
+ } catch {
10516
+ deps.log(`[onboarding] op=login-writeback result=unparseable service=${JSON.stringify(service)}`);
10517
+ return { wrote: false, reason: "unparseable", bytes: 0, service };
10518
+ }
10519
+ if (!parsed || typeof parsed.claudeAiOauth !== "object" || parsed.claudeAiOauth === null) {
10520
+ deps.log(`[onboarding] op=login-writeback result=no-claudeAiOauth service=${JSON.stringify(service)}`);
10521
+ return { wrote: false, reason: "no-claudeAiOauth", bytes: 0, service };
10522
+ }
10523
+ try {
10524
+ deps.writeFile(blob);
10525
+ } catch (err) {
10526
+ deps.log(`[onboarding] op=login-writeback result=write-failed service=${JSON.stringify(service)} err=${err instanceof Error ? err.message : String(err)}`);
10527
+ return { wrote: false, reason: "write-failed", bytes: 0, service };
10528
+ }
10529
+ deps.log(`[onboarding] op=login-writeback src=keychain dst=host-creds-file bytes=${blob.length}`);
10530
+ return { wrote: true, reason: "ok", bytes: blob.length, service };
10531
+ }
10532
+ function listHostCredsMdats() {
10533
+ try {
10534
+ const out = execFileSync2("security", ["dump-keychain"], { encoding: "utf-8", timeout: 1e4 });
10535
+ return parseKeychainMdats(out);
10536
+ } catch {
10537
+ return {};
10538
+ }
10539
+ }
10540
+ function readHostCredsBlob(service) {
10541
+ try {
10542
+ const blob = execFileSync2("security", ["find-generic-password", "-w", "-s", service], {
10543
+ encoding: "utf-8",
10544
+ timeout: 1e4
10545
+ }).trim();
10546
+ return blob.length > 0 ? blob : null;
10547
+ } catch {
10548
+ return null;
10549
+ }
10550
+ }
10551
+
10450
10552
  // ../lib/admins-write/src/index.ts
10451
10553
  import { existsSync as existsSync14, readFileSync as readFileSync23, writeFileSync as writeFileSync9, renameSync as renameSync5, mkdirSync as mkdirSync5, readdirSync as readdirSync13, statSync as statSync8, appendFileSync as appendFileSync2 } from "fs";
10452
10554
  import { dirname as dirname7, join as join22 } from "path";
@@ -10632,6 +10734,8 @@ function readUsersFile2() {
10632
10734
  if (!raw) return [];
10633
10735
  return JSON.parse(raw);
10634
10736
  }
10737
+ var darwinAuthChild = null;
10738
+ var darwinCredsBefore = {};
10635
10739
  async function checkAuthStatus() {
10636
10740
  let status;
10637
10741
  try {
@@ -10677,7 +10781,11 @@ app9.post("/claude-auth", async (c) => {
10677
10781
  const start = Date.now();
10678
10782
  let logoutError = null;
10679
10783
  try {
10680
- execFileSync2("claude", ["auth", "logout"], { encoding: "utf-8", timeout: 8e3 });
10784
+ execFileSync3(claudeBin(), ["auth", "logout"], {
10785
+ env: { ...process.env, ...hostCredsEnv(process.platform, CLAUDE_CREDENTIALS_FILE) },
10786
+ encoding: "utf-8",
10787
+ timeout: 8e3
10788
+ });
10681
10789
  } catch (err) {
10682
10790
  logoutError = err instanceof Error ? err.message : String(err);
10683
10791
  }
@@ -10690,6 +10798,22 @@ app9.post("/claude-auth", async (c) => {
10690
10798
  const authenticated = await checkAuthStatus();
10691
10799
  return c.json({ completed: authenticated, authenticated });
10692
10800
  }
10801
+ if (body.action === "paste-code") {
10802
+ const code = typeof body.code === "string" ? body.code : "";
10803
+ const child = darwinAuthChild;
10804
+ if (!child || !child.stdin || child.stdin.destroyed) {
10805
+ console.log("[onboarding] op=claude-paste-code accepted=false reason=no-active-login");
10806
+ return c.json({ accepted: false, error: "No active login to paste into. Start sign-in first." }, 400);
10807
+ }
10808
+ try {
10809
+ child.stdin.write(code.trim() + "\n");
10810
+ } catch (err) {
10811
+ console.log(`[onboarding] op=claude-paste-code accepted=false reason=write-failed err=${err instanceof Error ? err.message : String(err)}`);
10812
+ return c.json({ accepted: false, error: "Sign-in already finished or closed. Try again." }, 409);
10813
+ }
10814
+ console.log(`[onboarding] op=claude-paste-code accepted=true bytes=${code.trim().length}`);
10815
+ return c.json({ accepted: true });
10816
+ }
10693
10817
  if (body.action === "launch-browser") {
10694
10818
  if (transport === "vnc") {
10695
10819
  const vncReady = await ensureVnc();
@@ -10704,13 +10828,33 @@ app9.post("/claude-auth", async (c) => {
10704
10828
  const onClaudeOutput = (chunk) => writeSync(claudeAuthLogFd, chunk);
10705
10829
  if (process.platform === "darwin") {
10706
10830
  vncLog("claude-auth", { action: "start", transport: "native", platform: "darwin" });
10707
- const claudeProc2 = spawn("claude", ["auth", "login"], {
10708
- stdio: ["ignore", "pipe", "pipe"]
10831
+ darwinCredsBefore = listHostCredsMdats();
10832
+ const claudeProc2 = spawn(claudeBin(), ["auth", "login"], {
10833
+ env: { ...process.env, ...hostCredsEnv(process.platform, CLAUDE_CREDENTIALS_FILE) },
10834
+ stdio: ["pipe", "pipe", "pipe"]
10709
10835
  });
10710
10836
  claudeProc2.unref();
10837
+ darwinAuthChild = claudeProc2;
10838
+ claudeProc2.stdin?.on("error", () => {
10839
+ });
10711
10840
  claudeProc2.stdout?.on("data", onClaudeOutput);
10712
10841
  claudeProc2.stderr?.on("data", onClaudeOutput);
10713
- claudeProc2.once("close", () => closeSync3(claudeAuthLogFd));
10842
+ claudeProc2.once("close", () => {
10843
+ closeSync3(claudeAuthLogFd);
10844
+ bridgeKeychainToFile({
10845
+ platform: process.platform,
10846
+ before: darwinCredsBefore,
10847
+ listMdats: listHostCredsMdats,
10848
+ readBlob: readHostCredsBlob,
10849
+ writeFile: (blob) => {
10850
+ const tmp = `${CLAUDE_CREDENTIALS_FILE}.${process.pid}.tmp`;
10851
+ writeFileSync10(tmp, blob, { mode: 384 });
10852
+ renameSync6(tmp, CLAUDE_CREDENTIALS_FILE);
10853
+ },
10854
+ log: (line) => console.log(line)
10855
+ });
10856
+ if (darwinAuthChild === claudeProc2) darwinAuthChild = null;
10857
+ });
10714
10858
  return c.json({ started: true, transport: "native" });
10715
10859
  }
10716
10860
  if (transport === "vnc") {
@@ -10971,7 +11115,7 @@ ${body.newPin}
10971
11115
  var onboarding_default = app9;
10972
11116
 
10973
11117
  // server/routes/client-error.ts
10974
- import { appendFileSync as appendFileSync3, existsSync as existsSync16, renameSync as renameSync6, statSync as statSync9 } from "fs";
11118
+ import { appendFileSync as appendFileSync3, existsSync as existsSync16, renameSync as renameSync7, statSync as statSync9 } from "fs";
10975
11119
  import { join as join23 } from "path";
10976
11120
  var CLIENT_ERRORS_LOG = join23(LOG_DIR, "client-errors.log");
10977
11121
  var MAX_LOG_SIZE = 10 * 1024 * 1024;
@@ -11024,7 +11168,7 @@ function rotateIfNeeded() {
11024
11168
  if (!existsSync16(CLIENT_ERRORS_LOG)) return;
11025
11169
  const stats = statSync9(CLIENT_ERRORS_LOG);
11026
11170
  if (stats.size < MAX_LOG_SIZE) return;
11027
- renameSync6(CLIENT_ERRORS_LOG, CLIENT_ERRORS_LOG + ".1");
11171
+ renameSync7(CLIENT_ERRORS_LOG, CLIENT_ERRORS_LOG + ".1");
11028
11172
  } catch (err) {
11029
11173
  console.error(`[client-error] log rotation failed: ${err instanceof Error ? err.message : String(err)}`);
11030
11174
  }
@@ -11494,18 +11638,19 @@ app13.get("/", async (c) => {
11494
11638
  var logs_default = app13;
11495
11639
 
11496
11640
  // server/routes/admin/claude-info.ts
11497
- import { execFileSync as execFileSync3 } from "child_process";
11641
+ import { execFileSync as execFileSync4 } from "child_process";
11498
11642
  var app14 = new Hono();
11499
11643
  app14.get("/", (c) => {
11644
+ const claudeEnv = { ...process.env, ...hostCredsEnv(process.platform, CLAUDE_CREDENTIALS_FILE) };
11500
11645
  let version = "unknown";
11501
11646
  try {
11502
- const raw = execFileSync3("claude", ["--version"], { encoding: "utf-8", timeout: 5e3 });
11647
+ const raw = execFileSync4(claudeBin(), ["--version"], { env: claudeEnv, encoding: "utf-8", timeout: 5e3 });
11503
11648
  version = raw.trim().replace(" (Claude Code)", "");
11504
11649
  } catch {
11505
11650
  }
11506
11651
  let account = {};
11507
11652
  try {
11508
- const raw = execFileSync3("claude", ["auth", "status"], { encoding: "utf-8", timeout: 5e3 });
11653
+ const raw = execFileSync4(claudeBin(), ["auth", "status"], { env: claudeEnv, encoding: "utf-8", timeout: 5e3 });
11509
11654
  account = JSON.parse(raw);
11510
11655
  } catch {
11511
11656
  }
@@ -1 +0,0 @@
1
- import{F as e,M as t}from"./useSubAccountSwitcher-UqZbmzYy.js";import"./admin-types-hioowVct.js";import"./AdminShell-cRTvNRbo.js";import{n}from"./page-M8sD9LOi.js";import"./Transcript-B_GVJujB.js";var r=e(),i=t();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));
@@ -1 +0,0 @@
1
- import{D as e}from"./useSubAccountSwitcher-UqZbmzYy.js";var t=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]);export{t};
@@ -1 +0,0 @@
1
- import{F as e,M as t}from"./useSubAccountSwitcher-UqZbmzYy.js";import{t as n}from"./page-D5E-Ng4D.js";import"./Transcript-B_GVJujB.js";import"./graph-labels-DlSsSpBV.js";var r=e(),i=t();(0,r.createRoot)(document.getElementById(`root`)).render((0,i.jsx)(n,{}));