hammoc 1.7.2 → 1.8.1

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 (130) hide show
  1. package/README.md +2 -2
  2. package/package.json +4 -1
  3. package/packages/client/dist/assets/{agentExampleHighlight-De1SlBXH.js → agentExampleHighlight-B2IJxYzN.js} +1 -1
  4. package/packages/client/dist/assets/{commandTokenHighlight-COQi5YnH.js → commandTokenHighlight-BdGXkDR5.js} +1 -1
  5. package/packages/client/dist/assets/{index-D8XvfvVS.js → index-BFWGN51V.js} +1 -1
  6. package/packages/client/dist/assets/index-BX7y_Qt3.css +32 -0
  7. package/packages/client/dist/assets/{index-CQgqPGOG.js → index-lmx-m-iP.js} +552 -478
  8. package/packages/client/dist/assets/{snippetTokenHighlight-jMAHlrFd.js → snippetTokenHighlight-B9bH9Npx.js} +1 -1
  9. package/packages/client/dist/index.html +2 -2
  10. package/packages/client/dist/sw.js +1 -1
  11. package/packages/server/dist/app.d.ts.map +1 -1
  12. package/packages/server/dist/app.js +25 -1
  13. package/packages/server/dist/app.js.map +1 -1
  14. package/packages/server/dist/config/index.d.ts +10 -0
  15. package/packages/server/dist/config/index.d.ts.map +1 -1
  16. package/packages/server/dist/config/index.js +10 -0
  17. package/packages/server/dist/config/index.js.map +1 -1
  18. package/packages/server/dist/controllers/accountController.d.ts +19 -0
  19. package/packages/server/dist/controllers/accountController.d.ts.map +1 -0
  20. package/packages/server/dist/controllers/accountController.js +92 -0
  21. package/packages/server/dist/controllers/accountController.js.map +1 -0
  22. package/packages/server/dist/controllers/projectController.d.ts +1 -1
  23. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  24. package/packages/server/dist/controllers/projectController.js +19 -5
  25. package/packages/server/dist/controllers/projectController.js.map +1 -1
  26. package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
  27. package/packages/server/dist/controllers/serverController.js +8 -1
  28. package/packages/server/dist/controllers/serverController.js.map +1 -1
  29. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  30. package/packages/server/dist/handlers/websocket.js +83 -6
  31. package/packages/server/dist/handlers/websocket.js.map +1 -1
  32. package/packages/server/dist/index.js +8 -0
  33. package/packages/server/dist/index.js.map +1 -1
  34. package/packages/server/dist/middleware/session.d.ts.map +1 -1
  35. package/packages/server/dist/middleware/session.js +7 -5
  36. package/packages/server/dist/middleware/session.js.map +1 -1
  37. package/packages/server/dist/routes/accounts.d.ts +13 -0
  38. package/packages/server/dist/routes/accounts.d.ts.map +1 -0
  39. package/packages/server/dist/routes/accounts.js +18 -0
  40. package/packages/server/dist/routes/accounts.js.map +1 -0
  41. package/packages/server/dist/routes/config.d.ts +3 -0
  42. package/packages/server/dist/routes/config.d.ts.map +1 -0
  43. package/packages/server/dist/routes/config.js +59 -0
  44. package/packages/server/dist/routes/config.js.map +1 -0
  45. package/packages/server/dist/routes/preferences.d.ts.map +1 -1
  46. package/packages/server/dist/routes/preferences.js +22 -4
  47. package/packages/server/dist/routes/preferences.js.map +1 -1
  48. package/packages/server/dist/services/accountInfoService.js +6 -6
  49. package/packages/server/dist/services/accountInfoService.js.map +1 -1
  50. package/packages/server/dist/services/accountStorageService.d.ts +119 -0
  51. package/packages/server/dist/services/accountStorageService.d.ts.map +1 -0
  52. package/packages/server/dist/services/accountStorageService.js +285 -0
  53. package/packages/server/dist/services/accountStorageService.js.map +1 -0
  54. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  55. package/packages/server/dist/services/chatService.js +4 -8
  56. package/packages/server/dist/services/chatService.js.map +1 -1
  57. package/packages/server/dist/services/claudeLoginService.d.ts +124 -0
  58. package/packages/server/dist/services/claudeLoginService.d.ts.map +1 -0
  59. package/packages/server/dist/services/claudeLoginService.js +417 -0
  60. package/packages/server/dist/services/claudeLoginService.js.map +1 -0
  61. package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -1
  62. package/packages/server/dist/services/cliChatEngine.js +85 -33
  63. package/packages/server/dist/services/cliChatEngine.js.map +1 -1
  64. package/packages/server/dist/services/cliGridCards.d.ts +30 -10
  65. package/packages/server/dist/services/cliGridCards.d.ts.map +1 -1
  66. package/packages/server/dist/services/cliGridCards.js +80 -34
  67. package/packages/server/dist/services/cliGridCards.js.map +1 -1
  68. package/packages/server/dist/services/cliModalDetect.d.ts +15 -7
  69. package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -1
  70. package/packages/server/dist/services/cliModalDetect.js +16 -12
  71. package/packages/server/dist/services/cliModalDetect.js.map +1 -1
  72. package/packages/server/dist/services/cliScreenModel.d.ts +3 -2
  73. package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -1
  74. package/packages/server/dist/services/cliScreenModel.js +2 -0
  75. package/packages/server/dist/services/cliScreenModel.js.map +1 -1
  76. package/packages/server/dist/services/cliService.d.ts.map +1 -1
  77. package/packages/server/dist/services/cliService.js +2 -7
  78. package/packages/server/dist/services/cliService.js.map +1 -1
  79. package/packages/server/dist/services/cliSessionPool.d.ts +13 -1
  80. package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -1
  81. package/packages/server/dist/services/cliSessionPool.js +14 -4
  82. package/packages/server/dist/services/cliSessionPool.js.map +1 -1
  83. package/packages/server/dist/services/preferencesService.d.ts +1 -0
  84. package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
  85. package/packages/server/dist/services/preferencesService.js +25 -2
  86. package/packages/server/dist/services/preferencesService.js.map +1 -1
  87. package/packages/server/dist/services/queueService.d.ts +1 -0
  88. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  89. package/packages/server/dist/services/queueService.js +3 -0
  90. package/packages/server/dist/services/queueService.js.map +1 -1
  91. package/packages/server/dist/services/rateLimitProbeService.d.ts +7 -0
  92. package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
  93. package/packages/server/dist/services/rateLimitProbeService.js +10 -0
  94. package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
  95. package/packages/server/dist/services/workspaceContext.d.ts +29 -3
  96. package/packages/server/dist/services/workspaceContext.d.ts.map +1 -1
  97. package/packages/server/dist/services/workspaceContext.js +100 -8
  98. package/packages/server/dist/services/workspaceContext.js.map +1 -1
  99. package/packages/server/dist/snippets/promote-to-story +86 -9
  100. package/packages/server/dist/utils/cliDebugLog.d.ts +6 -5
  101. package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -1
  102. package/packages/server/dist/utils/cliDebugLog.js +11 -8
  103. package/packages/server/dist/utils/cliDebugLog.js.map +1 -1
  104. package/packages/server/dist/utils/logger.d.ts +7 -0
  105. package/packages/server/dist/utils/logger.d.ts.map +1 -1
  106. package/packages/server/dist/utils/logger.js +13 -1
  107. package/packages/server/dist/utils/logger.js.map +1 -1
  108. package/packages/server/resources/manual/01-getting-started.md +11 -5
  109. package/packages/server/resources/manual/03-sessions.md +1 -0
  110. package/packages/server/resources/manual/04-slash-commands-favorites.md +1 -0
  111. package/packages/server/resources/manual/13-settings.md +34 -10
  112. package/packages/server/resources/manual/16-troubleshooting.md +4 -7
  113. package/packages/shared/dist/index.d.ts +2 -1
  114. package/packages/shared/dist/index.d.ts.map +1 -1
  115. package/packages/shared/dist/index.js +2 -0
  116. package/packages/shared/dist/index.js.map +1 -1
  117. package/packages/shared/dist/types/accounts.d.ts +104 -0
  118. package/packages/shared/dist/types/accounts.d.ts.map +1 -0
  119. package/packages/shared/dist/types/accounts.js +14 -0
  120. package/packages/shared/dist/types/accounts.js.map +1 -0
  121. package/packages/shared/dist/types/preferences.d.ts +39 -0
  122. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  123. package/packages/shared/dist/types/preferences.js.map +1 -1
  124. package/packages/shared/dist/types/sdk.d.ts +3 -1
  125. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  126. package/packages/shared/dist/types/sdk.js.map +1 -1
  127. package/packages/shared/dist/types/websocket.d.ts +23 -1
  128. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  129. package/packages/client/dist/assets/index-BsHMOF5r.css +0 -32
  130. package/packages/server/dist/snippets/promote-issue +0 -9
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Account Storage Service (Story BS-8)
3
+ *
4
+ * Multi-account credential store at `~/.hammoc/accounts.json`. Each Claude Code login
5
+ * accumulates its `claudeAiOauth` credential block here keyed by account email (or an
6
+ * `account:<hash>` fallback when the email is unavailable — AC1a). Switching writes the
7
+ * chosen account's credential back to the single-account `~/.claude/.credentials.json`
8
+ * the CLI binary reads (it has no `--profile` flag — see Dev Notes › CLI Credential Path).
9
+ *
10
+ * Follows the `preferencesService` JSON-file pattern (`~/.hammoc/*.json`) and the
11
+ * `rateLimitProbeService` credential-read path. Token material never leaves this layer:
12
+ * the controller projects entries through {@link toSummary} before responding.
13
+ *
14
+ * Data safety (AC13): the store file is hardened after every write — `chmod 0600` on Unix,
15
+ * `icacls /inheritance:r /grant:r` on Windows. The credentials file is written atomically
16
+ * (temp file in the same dir + rename) so a concurrent CLI read never sees a partial file.
17
+ */
18
+ import fs from 'node:fs/promises';
19
+ import path from 'node:path';
20
+ import os from 'node:os';
21
+ import { createHash } from 'node:crypto';
22
+ import { spawn } from 'node:child_process';
23
+ import { createLogger } from '../utils/logger.js';
24
+ const log = createLogger('accountStorageService');
25
+ const EMPTY_STORE = { activeKey: null, accounts: {} };
26
+ class AccountStorageService {
27
+ getDataDir() {
28
+ return path.join(os.homedir(), '.hammoc');
29
+ }
30
+ getStorePath() {
31
+ return path.join(this.getDataDir(), 'accounts.json');
32
+ }
33
+ getCredentialsPath() {
34
+ return path.join(os.homedir(), '.claude', '.credentials.json');
35
+ }
36
+ /** Read the store, returning an empty store when the file is absent/unreadable. */
37
+ async readStore() {
38
+ try {
39
+ const content = await fs.readFile(this.getStorePath(), 'utf-8');
40
+ const parsed = JSON.parse(content);
41
+ // Defensive normalization: guarantee the shape downstream code relies on.
42
+ return {
43
+ activeKey: typeof parsed.activeKey === 'string' ? parsed.activeKey : null,
44
+ accounts: parsed.accounts && typeof parsed.accounts === 'object' ? parsed.accounts : {},
45
+ };
46
+ }
47
+ catch {
48
+ return { ...EMPTY_STORE, accounts: {} };
49
+ }
50
+ }
51
+ /** Write the store as pretty JSON, then harden file permissions (AC13). */
52
+ async writeStore(store) {
53
+ const dataDir = this.getDataDir();
54
+ await fs.mkdir(dataDir, { recursive: true });
55
+ const storePath = this.getStorePath();
56
+ await fs.writeFile(storePath, JSON.stringify(store, null, 2), 'utf-8');
57
+ await this.hardenFilePermissions(storePath);
58
+ }
59
+ /**
60
+ * Restrict the credential file to the owning user only.
61
+ * - Unix: `chmod 0600`.
62
+ * - Windows: POSIX modes are a no-op, so strip inherited ACEs and grant only the current
63
+ * user via `icacls`. Failure is logged and non-fatal (never blocks the write).
64
+ */
65
+ async hardenFilePermissions(filePath) {
66
+ if (process.platform === 'win32') {
67
+ await this.hardenWindowsAcl(filePath);
68
+ return;
69
+ }
70
+ try {
71
+ await fs.chmod(filePath, 0o600);
72
+ }
73
+ catch (err) {
74
+ log.warn(`chmod 0600 failed for ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
75
+ }
76
+ }
77
+ /** `icacls <file> /inheritance:r /grant:r "<USER>:F"` — best-effort, non-fatal. */
78
+ hardenWindowsAcl(filePath) {
79
+ return new Promise((resolve) => {
80
+ const user = process.env.USERNAME || process.env.USER;
81
+ if (!user) {
82
+ log.warn('icacls hardening skipped: no USERNAME/USER in environment');
83
+ resolve();
84
+ return;
85
+ }
86
+ try {
87
+ const child = spawn('icacls', [filePath, '/inheritance:r', '/grant:r', `${user}:F`], {
88
+ windowsHide: true,
89
+ });
90
+ child.on('error', (err) => {
91
+ log.warn(`icacls hardening failed for ${filePath}: ${err.message}`);
92
+ resolve();
93
+ });
94
+ child.on('exit', (code) => {
95
+ if (code !== 0)
96
+ log.warn(`icacls exited with code ${code} for ${filePath}`);
97
+ resolve();
98
+ });
99
+ }
100
+ catch (err) {
101
+ log.warn(`icacls spawn failed for ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
102
+ resolve();
103
+ }
104
+ });
105
+ }
106
+ /** Deterministic fallback key for a credential whose email is unknown (AC1a). */
107
+ fallbackKey(credential) {
108
+ const token = credential.claudeAiOauth?.accessToken ?? '';
109
+ const hash = createHash('sha256').update(token).digest('hex').slice(0, 8);
110
+ return `account:${hash}`;
111
+ }
112
+ /** Project a stored entry to its token-free public summary (AC14/AC15). */
113
+ toSummary(key, account, activeKey) {
114
+ return {
115
+ key,
116
+ email: account.email,
117
+ tier: account.tier,
118
+ active: key === activeKey,
119
+ lastUsedAt: account.lastUsedAt,
120
+ ...(account.needsEmailBackfill ? { needsEmailBackfill: true } : {}),
121
+ };
122
+ }
123
+ // ── Public API ──
124
+ /** All stored accounts as token-free summaries (active account marked). */
125
+ async listAccounts() {
126
+ const store = await this.readStore();
127
+ return Object.entries(store.accounts).map(([key, account]) => this.toSummary(key, account, store.activeKey));
128
+ }
129
+ /** The active store key (mirrors which credential is in `~/.claude/.credentials.json`). */
130
+ async getActiveKey() {
131
+ return (await this.readStore()).activeKey;
132
+ }
133
+ /** Set the active store key (no credential file write — see {@link switchAccount}). */
134
+ async setActiveKey(key) {
135
+ const store = await this.readStore();
136
+ store.activeKey = key;
137
+ await this.writeStore(store);
138
+ }
139
+ /**
140
+ * Insert or update an account entry (AC1, AC2, AC3). Keyed by email when present,
141
+ * otherwise by the `account:<hash>` fallback (AC1a). Re-upserting the same key updates
142
+ * in place — no duplicate (AC2). `Date()` is captured by the caller via `lastUsedAt`
143
+ * defaulting to now here. Returns the resolved store key.
144
+ */
145
+ async upsertAccount(credential, meta) {
146
+ const store = await this.readStore();
147
+ const key = meta.email ?? this.fallbackKey(credential);
148
+ const existing = store.accounts[key];
149
+ const account = {
150
+ email: meta.email,
151
+ tier: meta.tier,
152
+ credential,
153
+ lastUsedAt: Date.now(),
154
+ ...(meta.email ? {} : { needsEmailBackfill: true }),
155
+ };
156
+ // Preserve nothing token-wise from the old entry — the fresh credential supersedes it.
157
+ store.accounts[key] = account;
158
+ void existing; // (in-place overwrite is intentional; AC2)
159
+ await this.writeStore(store);
160
+ return { key, account };
161
+ }
162
+ /**
163
+ * Remove a stored account (AC8). Removing the currently active account is disallowed —
164
+ * returns `{ removed: false, reason: 'active' }` so the caller can surface a 409.
165
+ */
166
+ async removeAccount(key) {
167
+ const store = await this.readStore();
168
+ if (!store.accounts[key])
169
+ return { removed: false, reason: 'not-found' };
170
+ if (store.activeKey === key)
171
+ return { removed: false, reason: 'active' };
172
+ delete store.accounts[key];
173
+ await this.writeStore(store);
174
+ return { removed: true };
175
+ }
176
+ /**
177
+ * Capture the CURRENTLY ACTIVE credential file into the store (Task 3 / AC1, AC1a, AC2, AC3).
178
+ * Called right after a BS-7 login completes, when `~/.claude/.credentials.json` already holds
179
+ * the new account's credential. Reads the full `claudeAiOauth` block verbatim, takes the tier
180
+ * directly from it, and uses the email resolved by accountInfoService (or the fallback key).
181
+ * Marks the captured account active. Returns null when no credential file is present.
182
+ */
183
+ async captureActiveCredential(email) {
184
+ const credential = await this.readActiveCredential();
185
+ if (!credential) {
186
+ log.warn('captureActiveCredential: no active credential file to capture');
187
+ return null;
188
+ }
189
+ const tier = credential.claudeAiOauth?.subscriptionType ?? null;
190
+ const result = await this.upsertAccount(credential, { email, tier });
191
+ await this.setActiveKey(result.key);
192
+ log.info(`captured credential for account key=${result.key} (tier=${tier ?? 'unknown'})`);
193
+ return result;
194
+ }
195
+ /**
196
+ * Switch the active account (AC9, AC10, AC11, AC12). Writes the stored credential to
197
+ * `~/.claude/.credentials.json` atomically (temp + rename) so concurrent CLI readers never
198
+ * see a partial file, then updates the active marker and `lastUsedAt`. Running CLI sessions
199
+ * are untouched — only NEW sessions pick up the switched credential (AC11).
200
+ *
201
+ * Expiry (AC12) is detected by `expiresAt < Date.now()` — NO custom OAuth refresh call in
202
+ * Phase 1 (Dev Notes › Token Refresh). When expired, the switch still completes and
203
+ * `reauthRequired` is true so the client can offer the BS-7 re-login flow.
204
+ */
205
+ async switchAccount(key) {
206
+ const store = await this.readStore();
207
+ const account = store.accounts[key];
208
+ if (!account)
209
+ return { switched: false, reason: 'not-found' };
210
+ await this.writeCredentialFileAtomic(account.credential);
211
+ account.lastUsedAt = Date.now();
212
+ store.activeKey = key;
213
+ await this.writeStore(store);
214
+ const expiresAt = account.credential.claudeAiOauth?.expiresAt;
215
+ const reauthRequired = typeof expiresAt === 'number' && expiresAt < Date.now();
216
+ return { switched: true, reauthRequired, account };
217
+ }
218
+ /**
219
+ * Back-fill the email on the ACTIVE account when it was stored under the `account:<hash>`
220
+ * fallback (AC1a / AC3). Called after a switch once accountInfoService resolves an email for
221
+ * the now-active credential. Re-keys the entry from the fallback to the email key, clears the
222
+ * back-fill flag, and moves the active marker. No-op when the active account already has an
223
+ * email or no active account exists. Returns the (possibly new) active key.
224
+ */
225
+ async backfillActiveEmail(email) {
226
+ if (!email)
227
+ return (await this.readStore()).activeKey;
228
+ const store = await this.readStore();
229
+ const oldKey = store.activeKey;
230
+ if (!oldKey)
231
+ return null;
232
+ const account = store.accounts[oldKey];
233
+ if (!account || account.email)
234
+ return oldKey; // already has an email — nothing to back-fill
235
+ account.email = email;
236
+ delete account.needsEmailBackfill;
237
+ if (oldKey !== email) {
238
+ delete store.accounts[oldKey];
239
+ store.accounts[email] = account;
240
+ store.activeKey = email;
241
+ }
242
+ await this.writeStore(store);
243
+ log.info(`back-filled email for account: ${oldKey} → ${email}`);
244
+ return store.activeKey;
245
+ }
246
+ // ── Credential file I/O ──
247
+ /** Read & parse `~/.claude/.credentials.json` into a credential block, or null. */
248
+ async readActiveCredential() {
249
+ try {
250
+ const raw = await fs.readFile(this.getCredentialsPath(), 'utf-8');
251
+ const parsed = JSON.parse(raw);
252
+ const token = parsed?.claudeAiOauth?.accessToken;
253
+ if (typeof token === 'string' && token.length > 0)
254
+ return parsed;
255
+ return null;
256
+ }
257
+ catch {
258
+ return null;
259
+ }
260
+ }
261
+ /**
262
+ * Atomically write the credential block to `~/.claude/.credentials.json`:
263
+ * write to a temp file in the SAME directory, harden its perms, then `fs.rename`
264
+ * (atomic on the same filesystem). Readers see either the old or the new complete file.
265
+ */
266
+ async writeCredentialFileAtomic(credential) {
267
+ const target = this.getCredentialsPath();
268
+ const dir = path.dirname(target);
269
+ await fs.mkdir(dir, { recursive: true });
270
+ // Vary the temp name by pid so two concurrent switches can't collide on one temp file.
271
+ const tmp = path.join(dir, `.credentials.json.tmp-${process.pid}`);
272
+ await fs.writeFile(tmp, JSON.stringify(credential, null, 2), 'utf-8');
273
+ await this.hardenFilePermissions(tmp);
274
+ try {
275
+ await fs.rename(tmp, target);
276
+ }
277
+ catch (err) {
278
+ // Clean up the temp file if the rename failed so we don't leak it.
279
+ await fs.rm(tmp, { force: true }).catch(() => { });
280
+ throw err;
281
+ }
282
+ }
283
+ }
284
+ export const accountStorageService = new AccountStorageService();
285
+ //# sourceMappingURL=accountStorageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accountStorageService.js","sourceRoot":"","sources":["../../src/services/accountStorageService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,UAAU,EAAuB,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAChK,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAYlD;;;GAGG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,eAAe,CAAW;IAClC,6GAA6G;IAC7G,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,YAAY,CAAsB;IAC1C,gFAAgF;IAChF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAExB,MAAM,GAAE,iBAAsB;IAQ1C;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;OAEG;YACW,mBAAmB;IASjC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAItC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIzC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACI,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,UAAU,GACtB,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC;IA4LjD;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,YAAY,CAAC;IAcxB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D;;;OAGG;IACG,wBAAwB,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,UAAU;IACvB,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI;IAC5C;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;IAC1G,kGAAkG;IAClG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,EACzE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACxC,sBAAsB,CAAC,EAAE,MAAM,EAC/B,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,qBAAqB,EACtF,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,gBAAgB,EAAE,cAAc,KAAK,IAAI,GAC9E,OAAO,CAAC,YAAY,CAAC;IA+BxB;;;;;;;;;OASG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpH"}
1
+ {"version":3,"file":"chatService.d.ts","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,UAAU,EAAuB,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAChK,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EAEhB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAYlD;;;GAGG;AACH,qBAAa,WAAY,YAAW,UAAU;IAC5C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,eAAe,CAAW;IAClC,6GAA6G;IAC7G,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,YAAY,CAAsB;IAC1C,gFAAgF;IAChF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAExB,MAAM,GAAE,iBAAsB;IAQ1C;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD;;OAEG;YACW,mBAAmB;IASjC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAItC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIzC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAIzC;;OAEG;IACI,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,UAAU,GACtB,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC;IAwLjD;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,YAAY,CAAC;IAcxB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D;;;OAGG;IACG,wBAAwB,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,WAAgB,EACzB,UAAU,CAAC,EAAE,UAAU;IACvB,uEAAuE;IACvE,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI;IAC5C;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI;IAC1G,kGAAkG;IAClG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,KAAK,IAAI,EACzE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACxC,sBAAsB,CAAC,EAAE,MAAM,EAC/B,kBAAkB,CAAC,EAAE,OAAO,mCAAmC,EAAE,qBAAqB,EACtF,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,gBAAgB,EAAE,cAAc,KAAK,IAAI,GAC9E,OAAO,CAAC,YAAY,CAAC;IA+BxB;;;;;;;;;OASG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpH"}
@@ -6,7 +6,7 @@ import { InvalidPathError, parseSDKError } from '../utils/errors.js';
6
6
  import { StreamHandler } from './streamHandler.js';
7
7
  import { SessionService } from './sessionService.js';
8
8
  import { rewindSessionFiles } from './fileRewind.js';
9
- import { DEFAULT_WORKSPACE_TEMPLATE, resolveTemplateVariables } from './workspaceContext.js';
9
+ import { buildSystemPrompt, resolveTemplateVariables } from './workspaceContext.js';
10
10
  import { createLogger } from '../utils/logger.js';
11
11
  const log = createLogger('chatService');
12
12
  // Intentionally duplicated in streamHandler.ts for file independence
@@ -84,15 +84,11 @@ export class ChatService {
84
84
  async *sendMessage(content, options = {}, canUseTool) {
85
85
  const resolvedAllowed = options.allowedTools ?? this.allowedTools;
86
86
  const resolvedDisallowed = options.disallowedTools ?? this.disallowedTools;
87
- // Build systemPrompt: Claude Code preset + workspace context template.
88
- // customSystemPrompt is a full template with {variable} placeholders
89
- // (e.g. {gitBranch}, {gitStatus}) that are resolved at runtime.
90
- // If not set, DEFAULT_WORKSPACE_TEMPLATE is used.
91
87
  const systemPrompt = (() => {
92
- const template = options.customSystemPrompt || DEFAULT_WORKSPACE_TEMPLATE;
88
+ const assembled = buildSystemPrompt('sdk', options.isBmadProject ?? false, options.customSystemPrompt);
93
89
  const append = this.workingDirectory
94
- ? resolveTemplateVariables(template, this.workingDirectory, options.displayName)
95
- : template;
90
+ ? resolveTemplateVariables(assembled, this.workingDirectory, options.displayName)
91
+ : assembled;
96
92
  return {
97
93
  type: 'preset',
98
94
  preset: 'claude_code',
@@ -1 +1 @@
1
- {"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chatService.js","sourceRoot":"","sources":["../../src/services/chatService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Claude Login Service (Story BS-7)
3
+ *
4
+ * Orchestrates the interactive `claude` `/login` OAuth flow from inside Hammoc so a user —
5
+ * including on mobile, with no host terminal — can authenticate without leaving the UI.
6
+ *
7
+ * It reuses the SAME PTY lifecycle the CLI chat engine uses (`cliSessionPool.spawnClaude`)
8
+ * and the SAME headless screen model (`cliScreenModel`) for prompt detection, but it is a
9
+ * SEPARATE, disposable login session: it is spawned in `os.tmpdir()` (not a project), it
10
+ * never injects a chat prompt, and it is torn down the moment login completes or times out.
11
+ * Isolation by construction — the chat session count (websocket `activeStreams`) and the web
12
+ * terminal pool (`ptyService`) are never touched.
13
+ *
14
+ * Browser auto-open is suppressed via `extraEnv: { BROWSER: 'none' }` (Story BS-7 added the
15
+ * `extraEnv` merge to `cliSessionPool.buildEnv`), so the CLI prints the OAuth URL on screen
16
+ * instead of shelling out to a desktop browser the mobile/remote client doesn't have.
17
+ *
18
+ * ── Detection sources (empirically verified against the bundled binary, claude v2.1.181, via
19
+ * a non-destructive node-pty probe — code never submitted, so auth state was untouched) ──
20
+ * - Trust prompt / login-method menu / "Paste code" prompt: read from the SETTLED screen grid
21
+ * (the box-chrome modal text the existing CLI detectors also read).
22
+ * - OAuth URL: read from the RAW PTY stream, de-wrapped — NOT the grid. The URL is ~450 chars
23
+ * and the live grid CORRUPTS it: claude hard-wraps the URL into ~118-char lines and the
24
+ * concurrent "✶ Opening browser…" spinner repaints overwrite the box edges (verified: the
25
+ * grid showed `tps://…` with the leading `ht` clipped and ~2 chars lost per row boundary).
26
+ * The raw stream carries the URL once, intact, so we extract + de-wrap from there.
27
+ *
28
+ * Version-fragile by nature (a future TUI revision can reword the prompts / restyle the menu);
29
+ * the four detection patterns are exported named constants so the tests assert against the same
30
+ * source the runtime uses, and a failure degrades to the manual "run /login in a terminal" path
31
+ * (the onboarding fallback the story's rollback note describes).
32
+ */
33
+ import type { AccountInfo } from '@hammoc/shared';
34
+ /** Trust prompt shown for an untrusted cwd. Defensive: a fresh `os.tmpdir()` spawn did NOT show
35
+ * it in the probe (Temp was already trusted), but other environments may, so it is auto-accepted
36
+ * when present before `/login` is injected. */
37
+ export declare const LOGIN_TRUST_PROMPT_RE: RegExp;
38
+ /** The login-method selection menu anchor ("Select login method:" above the 3 numbered options). */
39
+ export declare const LOGIN_METHOD_PROMPT_RE: RegExp;
40
+ /** The OAuth authorize URL start anchor (the full URL is de-wrapped from the raw stream). */
41
+ export declare const OAUTH_URL_RE: RegExp;
42
+ /** The code-entry prompt the CLI shows once the OAuth URL is displayed. */
43
+ export declare const LOGIN_CODE_PROMPT_RE: RegExp;
44
+ /** True when the settled grid shows the untrusted-cwd trust prompt. */
45
+ export declare function detectTrustPrompt(gridText: string): boolean;
46
+ /** True when the settled grid shows the login-method selection menu (anchor + cancel footer). */
47
+ export declare function detectLoginMethodPrompt(gridText: string): boolean;
48
+ /** True when the settled grid shows the "Paste code here" prompt (anchor + cancel footer). */
49
+ export declare function detectCodePrompt(gridText: string): boolean;
50
+ /**
51
+ * Extract the full OAuth authorize URL from the RAW (ANSI-stripped) PTY stream, de-wrapping
52
+ * claude's hard line breaks. claude prints the long URL split onto ~118-char lines with NO
53
+ * indent; each break is a real `\n` whose next char is a URL char (so we skip it), and the URL
54
+ * ends at the first real whitespace or a blank/indented line (next char is `\n`/space). Returns
55
+ * the first occurrence (the clean initial paint) or null when no URL is on screen yet.
56
+ */
57
+ export declare function extractOAuthUrl(rawText: string): string | null;
58
+ /**
59
+ * Delete the OAuth credentials file (logout). Returns true when the file is gone afterward
60
+ * (deleted now or already absent). Best-effort — a delete failure is reported as false so the
61
+ * caller surfaces an error rather than a false "logged out".
62
+ */
63
+ export declare function deleteCredentials(): boolean;
64
+ /** Login-method options the menu presents (1-based, matching the CLI's numbering). */
65
+ export type LoginMethod = 1 | 2 | 3;
66
+ /** Callbacks the WebSocket handler wires to `auth:*` client emits. */
67
+ export interface ClaudeLoginCallbacks {
68
+ /** The login-method menu is on screen — the client should present the 3 options. */
69
+ onMethodPrompt: () => void;
70
+ /** The OAuth URL was captured — relay it for the user to open. */
71
+ onUrl: (url: string) => void;
72
+ /** The "Paste code here" prompt is ready — the client should show the code input. */
73
+ onCodePrompt: () => void;
74
+ /** Auth completed — credentials written; fresh account info (or null if the fetch failed). */
75
+ onComplete: (account: AccountInfo | null) => void;
76
+ /** Login failed or timed out — `message` is a short reason for the client toast. */
77
+ onError: (message: string) => void;
78
+ }
79
+ /**
80
+ * One disposable interactive login session. Created per `auth:start`, driven by the client's
81
+ * `auth:select-method` / `auth:submit-code`, and disposed on completion / timeout / disconnect.
82
+ */
83
+ export declare class ClaudeLoginSession {
84
+ private readonly cb;
85
+ private readonly screen;
86
+ private handle;
87
+ private pty;
88
+ private phase;
89
+ private rawAccum;
90
+ private bootBuffer;
91
+ private injectedLogin;
92
+ private trustAccepted;
93
+ private methodPrompted;
94
+ private urlEmitted;
95
+ private codePrompted;
96
+ private settled;
97
+ private bootSettleTimer;
98
+ private timeoutTimer;
99
+ private credPollTimer;
100
+ private credWatcher;
101
+ private readonly timeoutMs;
102
+ constructor(cb: ClaudeLoginCallbacks, timeoutMs?: number);
103
+ /** Spawn the disposable login PTY and begin the boot → /login sequence. */
104
+ start(binaryPathOverride?: string): void;
105
+ /** Inject the chosen login method (1/2/3) into the menu (digit + Enter). */
106
+ selectMethod(method: LoginMethod): void;
107
+ /** Write the user-supplied auth code to the PTY and begin watching for credentials. */
108
+ submitCode(code: string): void;
109
+ /** Tear down the login PTY + screen model + timers/watchers. Idempotent. */
110
+ dispose(): void;
111
+ private onData;
112
+ private afterBootSettle;
113
+ private consumeGrid;
114
+ /**
115
+ * Watch the credentials file for a token (fs.watch as the low-latency trigger + a poll loop as
116
+ * the deterministic fallback — the file may not exist yet, and fs.watch reliability varies by
117
+ * platform). On a token appearing, refresh account info and complete.
118
+ */
119
+ private watchCredentials;
120
+ private complete;
121
+ private fail;
122
+ private teardown;
123
+ }
124
+ //# sourceMappingURL=claudeLoginService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeLoginService.d.ts","sourceRoot":"","sources":["../../src/services/claudeLoginService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBlD;;gDAEgD;AAChD,eAAO,MAAM,qBAAqB,QAAsD,CAAC;AAEzF,oGAAoG;AACpG,eAAO,MAAM,sBAAsB,QAA0B,CAAC;AAE9D,6FAA6F;AAC7F,eAAO,MAAM,YAAY,QAAmD,CAAC;AAE7E,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,QAAiC,CAAC;AAoBnE,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,iGAAiG;AACjG,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB9D;AAcD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEpC,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kEAAkE;IAClE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,qFAAqF;IACrF,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,8FAA8F;IAC9F,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,oFAAoF;IACpF,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAkBD;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAuB;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,GAAG,CAAwC;IACnD,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,EAAE,EAAE,oBAAoB,EAAE,SAAS,GAAE,MAA2B;IAK5E,2EAA2E;IAC3E,KAAK,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI;IA+BxC,4EAA4E;IAC5E,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAcvC,uFAAuF;IACvF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAqB9B,4EAA4E;IAC5E,OAAO,IAAI,IAAI;IAiBf,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,WAAW;IA4BnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,QAAQ;CA2BjB"}