hammoc 1.7.1 → 1.8.0

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 (165) hide show
  1. package/README.md +8 -4
  2. package/package.json +1 -1
  3. package/packages/client/dist/assets/{agentExampleHighlight-Du5I7v6o.js → agentExampleHighlight-B2IJxYzN.js} +1 -1
  4. package/packages/client/dist/assets/{commandTokenHighlight-Dfo51Aof.js → commandTokenHighlight-BdGXkDR5.js} +1 -1
  5. package/packages/client/dist/assets/{index-4l4YwxEs.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-CqAHxPRw.js → index-lmx-m-iP.js} +587 -499
  8. package/packages/client/dist/assets/{snippetTokenHighlight-26DWljQA.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/gitController.d.ts.map +1 -1
  23. package/packages/server/dist/controllers/gitController.js +37 -0
  24. package/packages/server/dist/controllers/gitController.js.map +1 -1
  25. package/packages/server/dist/controllers/projectController.d.ts +1 -1
  26. package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
  27. package/packages/server/dist/controllers/projectController.js +20 -4
  28. package/packages/server/dist/controllers/projectController.js.map +1 -1
  29. package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
  30. package/packages/server/dist/controllers/serverController.js +8 -1
  31. package/packages/server/dist/controllers/serverController.js.map +1 -1
  32. package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
  33. package/packages/server/dist/controllers/sessionController.js +3 -1
  34. package/packages/server/dist/controllers/sessionController.js.map +1 -1
  35. package/packages/server/dist/handlers/websocket.d.ts +4 -0
  36. package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
  37. package/packages/server/dist/handlers/websocket.js +146 -8
  38. package/packages/server/dist/handlers/websocket.js.map +1 -1
  39. package/packages/server/dist/index.js +8 -0
  40. package/packages/server/dist/index.js.map +1 -1
  41. package/packages/server/dist/locales/en/server.json +2 -0
  42. package/packages/server/dist/locales/es/server.json +2 -0
  43. package/packages/server/dist/locales/ja/server.json +2 -0
  44. package/packages/server/dist/locales/ko/server.json +2 -0
  45. package/packages/server/dist/locales/pt/server.json +2 -0
  46. package/packages/server/dist/locales/zh-CN/server.json +2 -0
  47. package/packages/server/dist/middleware/session.d.ts.map +1 -1
  48. package/packages/server/dist/middleware/session.js +7 -5
  49. package/packages/server/dist/middleware/session.js.map +1 -1
  50. package/packages/server/dist/routes/accounts.d.ts +13 -0
  51. package/packages/server/dist/routes/accounts.d.ts.map +1 -0
  52. package/packages/server/dist/routes/accounts.js +18 -0
  53. package/packages/server/dist/routes/accounts.js.map +1 -0
  54. package/packages/server/dist/routes/config.d.ts +3 -0
  55. package/packages/server/dist/routes/config.d.ts.map +1 -0
  56. package/packages/server/dist/routes/config.js +59 -0
  57. package/packages/server/dist/routes/config.js.map +1 -0
  58. package/packages/server/dist/routes/preferences.d.ts.map +1 -1
  59. package/packages/server/dist/routes/preferences.js +22 -4
  60. package/packages/server/dist/routes/preferences.js.map +1 -1
  61. package/packages/server/dist/services/accountInfoService.js +6 -6
  62. package/packages/server/dist/services/accountInfoService.js.map +1 -1
  63. package/packages/server/dist/services/accountStorageService.d.ts +119 -0
  64. package/packages/server/dist/services/accountStorageService.d.ts.map +1 -0
  65. package/packages/server/dist/services/accountStorageService.js +285 -0
  66. package/packages/server/dist/services/accountStorageService.js.map +1 -0
  67. package/packages/server/dist/services/chatService.d.ts.map +1 -1
  68. package/packages/server/dist/services/chatService.js +4 -8
  69. package/packages/server/dist/services/chatService.js.map +1 -1
  70. package/packages/server/dist/services/claudeLoginService.d.ts +124 -0
  71. package/packages/server/dist/services/claudeLoginService.d.ts.map +1 -0
  72. package/packages/server/dist/services/claudeLoginService.js +417 -0
  73. package/packages/server/dist/services/claudeLoginService.js.map +1 -0
  74. package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -1
  75. package/packages/server/dist/services/cliChatEngine.js +85 -33
  76. package/packages/server/dist/services/cliChatEngine.js.map +1 -1
  77. package/packages/server/dist/services/cliGridCards.d.ts +30 -10
  78. package/packages/server/dist/services/cliGridCards.d.ts.map +1 -1
  79. package/packages/server/dist/services/cliGridCards.js +80 -34
  80. package/packages/server/dist/services/cliGridCards.js.map +1 -1
  81. package/packages/server/dist/services/cliModalDetect.d.ts +15 -7
  82. package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -1
  83. package/packages/server/dist/services/cliModalDetect.js +16 -12
  84. package/packages/server/dist/services/cliModalDetect.js.map +1 -1
  85. package/packages/server/dist/services/cliScreenModel.d.ts +3 -2
  86. package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -1
  87. package/packages/server/dist/services/cliScreenModel.js +2 -0
  88. package/packages/server/dist/services/cliScreenModel.js.map +1 -1
  89. package/packages/server/dist/services/cliService.d.ts.map +1 -1
  90. package/packages/server/dist/services/cliService.js +2 -7
  91. package/packages/server/dist/services/cliService.js.map +1 -1
  92. package/packages/server/dist/services/cliSessionPool.d.ts +13 -1
  93. package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -1
  94. package/packages/server/dist/services/cliSessionPool.js +14 -4
  95. package/packages/server/dist/services/cliSessionPool.js.map +1 -1
  96. package/packages/server/dist/services/dashboardService.d.ts.map +1 -1
  97. package/packages/server/dist/services/dashboardService.js +6 -1
  98. package/packages/server/dist/services/dashboardService.js.map +1 -1
  99. package/packages/server/dist/services/gitService.d.ts +2 -0
  100. package/packages/server/dist/services/gitService.d.ts.map +1 -1
  101. package/packages/server/dist/services/gitService.js +41 -3
  102. package/packages/server/dist/services/gitService.js.map +1 -1
  103. package/packages/server/dist/services/preferencesService.d.ts +1 -0
  104. package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
  105. package/packages/server/dist/services/preferencesService.js +25 -2
  106. package/packages/server/dist/services/preferencesService.js.map +1 -1
  107. package/packages/server/dist/services/queueService.d.ts +1 -0
  108. package/packages/server/dist/services/queueService.d.ts.map +1 -1
  109. package/packages/server/dist/services/queueService.js +14 -3
  110. package/packages/server/dist/services/queueService.js.map +1 -1
  111. package/packages/server/dist/services/rateLimitProbeService.d.ts +7 -0
  112. package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
  113. package/packages/server/dist/services/rateLimitProbeService.js +10 -0
  114. package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
  115. package/packages/server/dist/services/workspaceContext.d.ts +31 -4
  116. package/packages/server/dist/services/workspaceContext.d.ts.map +1 -1
  117. package/packages/server/dist/services/workspaceContext.js +110 -10
  118. package/packages/server/dist/services/workspaceContext.js.map +1 -1
  119. package/packages/server/dist/snippets/promote-to-story +86 -9
  120. package/packages/server/dist/utils/cliDebugLog.d.ts +6 -5
  121. package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -1
  122. package/packages/server/dist/utils/cliDebugLog.js +11 -8
  123. package/packages/server/dist/utils/cliDebugLog.js.map +1 -1
  124. package/packages/server/dist/utils/logger.d.ts +7 -0
  125. package/packages/server/dist/utils/logger.d.ts.map +1 -1
  126. package/packages/server/dist/utils/logger.js +13 -1
  127. package/packages/server/dist/utils/logger.js.map +1 -1
  128. package/packages/server/resources/bmad-method/4.44.3/LICENSE +30 -0
  129. package/packages/server/resources/manual/01-getting-started.md +11 -5
  130. package/packages/server/resources/manual/02-chat.md +2 -2
  131. package/packages/server/resources/manual/03-sessions.md +2 -0
  132. package/packages/server/resources/manual/04-slash-commands-favorites.md +1 -0
  133. package/packages/server/resources/manual/05-projects.md +2 -2
  134. package/packages/server/resources/manual/07-git.md +23 -2
  135. package/packages/server/resources/manual/08-terminal.md +24 -1
  136. package/packages/server/resources/manual/11-bmad-method-integration.md +1 -0
  137. package/packages/server/resources/manual/13-settings.md +52 -20
  138. package/packages/server/resources/manual/16-troubleshooting.md +4 -7
  139. package/packages/shared/dist/index.d.ts +2 -1
  140. package/packages/shared/dist/index.d.ts.map +1 -1
  141. package/packages/shared/dist/index.js +2 -0
  142. package/packages/shared/dist/index.js.map +1 -1
  143. package/packages/shared/dist/types/accounts.d.ts +104 -0
  144. package/packages/shared/dist/types/accounts.d.ts.map +1 -0
  145. package/packages/shared/dist/types/accounts.js +14 -0
  146. package/packages/shared/dist/types/accounts.js.map +1 -0
  147. package/packages/shared/dist/types/dashboard.d.ts +1 -0
  148. package/packages/shared/dist/types/dashboard.d.ts.map +1 -1
  149. package/packages/shared/dist/types/git.d.ts +12 -0
  150. package/packages/shared/dist/types/git.d.ts.map +1 -1
  151. package/packages/shared/dist/types/git.js +10 -0
  152. package/packages/shared/dist/types/git.js.map +1 -1
  153. package/packages/shared/dist/types/preferences.d.ts +40 -0
  154. package/packages/shared/dist/types/preferences.d.ts.map +1 -1
  155. package/packages/shared/dist/types/preferences.js.map +1 -1
  156. package/packages/shared/dist/types/sdk.d.ts +5 -1
  157. package/packages/shared/dist/types/sdk.d.ts.map +1 -1
  158. package/packages/shared/dist/types/sdk.js.map +1 -1
  159. package/packages/shared/dist/types/session.d.ts +1 -0
  160. package/packages/shared/dist/types/session.d.ts.map +1 -1
  161. package/packages/shared/dist/types/session.js.map +1 -1
  162. package/packages/shared/dist/types/websocket.d.ts +28 -1
  163. package/packages/shared/dist/types/websocket.d.ts.map +1 -1
  164. package/packages/client/dist/assets/index-CVy582lU.css +0 -32
  165. package/packages/server/dist/snippets/promote-issue +0 -9
@@ -11,7 +11,7 @@ Each project card displays:
11
11
  - **Session count** — Number of chat sessions
12
12
  - **Last modified** — When the project was last active
13
13
  - **BMad badge** — Indicates BMAD-METHOD enabled projects
14
- - **Status indicators** — Active sessions (green dot), queue status badge, terminal count (updates in real-time)
14
+ - **Status indicators** — Active sessions (green dot), pending question count (cyan dot), queue status badge, terminal count (updates in real-time)
15
15
 
16
16
  Each card has a **kebab menu** (⋮) with:
17
17
 
@@ -55,7 +55,7 @@ The Settings tab has a two-pane layout:
55
55
 
56
56
  - **Default model** — Override the global model selection
57
57
  - **Permission mode** — Override the global permission mode (Plan, Ask before edits, Edit automatically). Note: Bypass permissions is not available at project level
58
- - **Conversation engine** — Override which engine this project runs on: **Use Global default**, **SDK**, or **CLI** (see §13.16). When set to anything other than Global default, a "Project override" badge appears next to the field. The effective engine is resolved as project override → global setting → SDK
58
+ - **Conversation engine** — Override which engine this project runs on: **Use Global default**, **SDK**, or **CLI** (see §13.17). When set to anything other than Global default, a "Project override" badge appears next to the field. The effective engine is resolved as project override → global setting → SDK
59
59
  - **Hidden toggle** — Hide the project from the project list
60
60
  - **Reset to Global Defaults** — Remove all overrides at once
61
61
 
@@ -59,6 +59,7 @@ Lightweight Git access from the quick panel side bar:
59
59
 
60
60
  - **Branch name** with changed file count badge (e.g., "3 changes")
61
61
  - **Commit input** — Textarea for commit message
62
+ - **AI split commit button** — A purple dashed button labeled "Split changes into logical commits / Claude handles it in a new session" appears when uncommitted changes exist. Clicking it creates a fresh session, sends the `%split-commit` snippet, and navigates you into that session. Hidden on a clean working tree. See §7.10 for details
62
63
  - **"Stage All & Commit"** — Single green button that automatically stages all unstaged/untracked files and commits in one action
63
64
  - **Success message** — Displayed briefly after a successful commit
64
65
  - **Recent commits** — Shows only the 3 most recent commits (hash, timestamp, message)
@@ -82,7 +83,12 @@ If the project directory is not a Git repository:
82
83
 
83
84
  ### 7.10 AI-Assisted Split Commit
84
85
 
85
- A purple dashed chip — **"Split changes into logical commits / Claude handles it in a new session"** — appears in the Git tab below the file list whenever there are uncommitted changes (staged, unstaged, or untracked). The chip is hidden on a clean working tree.
86
+ A purple dashed chip — **"Split changes into logical commits / Claude handles it in a new session"** — appears whenever there are uncommitted changes (staged, unstaged, or untracked). The chip is hidden on a clean working tree.
87
+
88
+ It appears in two places:
89
+
90
+ - **Git tab** — Below the file list, as a dashed chip
91
+ - **Quick Git panel** — Between the branch status and the commit textarea, as a purple button with a sparkles icon
86
92
 
87
93
  Clicking it:
88
94
 
@@ -90,5 +96,20 @@ Clicking it:
90
96
  2. Auto-sends the bundled `%split-commit` snippet, which asks Claude to inspect the working tree (`git status` / `git diff`), group changes into coherent units, and produce one conventional-style commit per group
91
97
  3. Navigates you into that session so you can watch the work and approve each commit
92
98
 
93
- The chip lives only on the full Git tab — the Quick Git panel keeps its single "Stage All & Commit" action for fast manual commits.
99
+ ### 7.11 Git Not-Installed & Auth-Failed Detection
100
+
101
+ Hammoc detects common Git environment problems and shows actionable guidance instead of cryptic errors:
102
+
103
+ **Git not installed:**
104
+ - The Quick Git panel shows a friendly message explaining that Git is not installed
105
+ - A **"Download Git"** button links directly to the official Git download page
106
+ - No Git functionality is available until Git is installed
107
+
108
+ **Authentication failed:**
109
+ - When push or pull fails due to missing credentials, an amber credential setup guide banner appears in the Git tab
110
+ - The banner shows two common credential setup methods:
111
+ - **SSH** — `ssh-keygen -t ed25519` command in a copyable monospace box
112
+ - **HTTPS** — `git config --global credential.helper store` command in a copyable monospace box
113
+ - A link to the GitHub authentication documentation is provided
114
+ - The banner remains visible until manually dismissed
94
115
 
@@ -2,11 +2,14 @@
2
2
 
3
3
  ### 8.1 Web Terminal
4
4
 
5
- Full terminal access in your browser:
5
+ Full terminal access in your browser, designed for both desktop and touch devices:
6
6
 
7
7
  - **Shell emulation** — Real terminal connection to your system shell
8
8
  - **Working directory** — Opens in your project directory
9
9
  - Supports all shell commands, interactive programs, and TUI apps
10
+ - **Read-only viewport + input bar** — The terminal display is read-only; all typing goes through a dedicated input bar at the bottom. Printable characters and special keys (Enter, Tab, Escape, Ctrl combos) are relayed to the shell immediately, so the input bar stays empty most of the time. During CJK/IME composition, the composed text appears temporarily in the input bar until committed
11
+ - **Quick-key buttons** — A toolbar above the input bar provides one-tap access to keys that are hard to reach on touch keyboards: arrow keys (Up/Down/Left/Right), Tab, Esc, Backspace, Ctrl+C, Ctrl+D, Ctrl+Z, and a Copy button
12
+ - **Shift toggle** — A dedicated Shift button in the quick-key bar. While active (highlighted), the next arrow key press sends a Shift+Arrow sequence to the shell (for text selection). The toggle deactivates automatically after one use
10
13
  - **Theme** — Automatically matches app theme (dark/light)
11
14
  - **Font** — Monospace font (JetBrains Mono, Fira Code, Cascadia Code)
12
15
 
@@ -57,3 +60,23 @@ Lightweight terminal access from the quick panel side bar:
57
60
  - **Tab keyboard navigation** — ArrowLeft/Right to switch, Delete to close
58
61
  - **Security warning** — Same access denied warning when terminal access is restricted
59
62
 
63
+ ### 8.7 Touch Selection & Clipboard
64
+
65
+ Mobile-optimized text selection for the terminal viewport:
66
+
67
+ - **Long-press to select** — Press and hold (~400 ms) on terminal content to select the word at that position. Drag while holding to extend the selection
68
+ - **Selection handles** — Two draggable blue handles appear at the start and end of the selection. Drag either handle to adjust the selection boundary
69
+ - **CJK word selection** — Chinese, Japanese, and Korean wide characters are treated as word characters, so double-tap or long-press selects the full CJK word
70
+ - **Floating copy button** — A "Copy" popup appears above the selection. Tap to copy and dismiss
71
+ - **Custom right-click menu** — Right-clicking with a selection shows a custom context menu with a "Copy" option. With no selection, the browser's default context menu appears
72
+ - **Clipboard fallback** — When the Clipboard API is unavailable (e.g., HTTP over LAN without HTTPS), a `document.execCommand('copy')` fallback is used
73
+ - **Copy toolbar button** — The quick-key bar includes a Copy button that copies the current selection, or the entire terminal buffer if nothing is selected
74
+
75
+ ### 8.8 CJK / IME Input
76
+
77
+ For users of Korean, Japanese, Chinese, and other languages that require an Input Method Editor:
78
+
79
+ - **Composition preview** — While composing (e.g., assembling Korean jamo), the in-progress text appears in the input bar without being sent to the shell
80
+ - **Commit on completion** — When the composition is finalized (pressing space, selecting a candidate, etc.), the composed text is sent to the shell and the input bar clears
81
+ - **Consecutive compositions** — Starting a new composition immediately after completing one preserves the initial characters of the new composition (no flash or loss)
82
+
@@ -71,6 +71,7 @@ For BMad projects, the overview page displays additional sections above the stan
71
71
  - Detects the current **workflow phase** (Pre-PRD, Pre-Architecture, Implementation, Completed)
72
72
  - Shows context-aware **action buttons** (primary/secondary) that navigate to the right agent + task command
73
73
  - Quick links: New Session, Queue Runner, File Explorer
74
+ - **Disabled during refresh** — While the background status revalidation is running, all recommendation buttons are disabled (dimmed) and a spinner with "Updating project status..." appears, preventing launches based on stale cached state
74
75
  - See §11.5 for phase details
75
76
 
76
77
  **Document Status Card:**
@@ -129,7 +129,15 @@ Set the default thinking effort for new sessions:
129
129
  - **Right** — Always opens on the right (default)
130
130
  - **Last Used** — Remembers the last side you used and restores it
131
131
 
132
- ### 13.12 Notifications
132
+ ### 13.12 Display Name
133
+
134
+ Set a preferred name for the agent to use when addressing you:
135
+
136
+ - **Text input** — Enter any name (e.g., "Alex", "Jordan"). Leave empty for no specific form of address
137
+ - The name is injected into the system prompt, so Claude consistently addresses you by this name throughout conversations
138
+ - Prevents the agent from guessing your name from email addresses, account names, or other system context
139
+
140
+ ### 13.13 Notifications
133
141
 
134
142
  The Notifications tab contains two sections: Web Push and Telegram.
135
143
 
@@ -177,37 +185,61 @@ Get notified on your phone when Claude needs attention:
177
185
 
178
186
  **Environment Variables:** Bot Token and Chat ID can be set via environment variables, which take priority over saved values (shown with an amber "Env" indicator).
179
187
 
180
- ### 13.13 Claude Account
188
+ ### 13.14 Claude Account
181
189
 
182
- Shows the Claude Code account that Hammoc is using, plus live subscription usage:
190
+ Shows the Claude Code account that Hammoc is using, plus live subscription usage. Also provides in-app sign-in and multi-account management.
191
+
192
+ **Active account info:**
183
193
 
184
194
  - **Account info** — Email, Subscription plan, Provider (e.g., Claude API / Claude.ai), Organization (if applicable), and the timestamp of the last fetch
185
195
  - **Usage bars** — Two progress bars showing consumption of the **5-hour window** and **7-day window** quotas, with color thresholds (green / yellow / red at 50% / 80%) and reset times
186
196
  - **Refresh** — Manually fetch the latest account info and usage from the API (spinner shown while refreshing). Toast confirms success or failure
197
+ - **Sign out** — Log out of the active Claude account
187
198
  - If no data has been fetched yet, a helper line explains that account info fills in automatically after the first chat or after clicking Refresh
188
199
 
189
- ### 13.14 Hammoc User
200
+ **In-app sign-in:**
201
+
202
+ Sign in to Claude directly from Hammoc — no terminal needed:
203
+
204
+ 1. Click **"Sign in to Claude"** (shown when no account is linked, or when adding an account)
205
+ 2. Click **"Open authorization page"** to open the OAuth page in a new browser tab (or use **"Copy link"** to copy the URL)
206
+ 3. Approve access on the Claude website, then paste the authorization code into the input field
207
+ 4. Click **"Submit code"** to complete sign-in
208
+
209
+ If an error occurs, a **"Try again"** button restarts the flow. The same sign-in flow is also available during onboarding (see §1.3).
210
+
211
+ **Multi-account management:**
212
+
213
+ Store and switch between multiple Claude accounts without re-authenticating each time:
214
+
215
+ - **Accounts list** — All stored accounts are shown below the active account info. The active account is highlighted with a green border and checkmark
216
+ - **Switch** — Click the **Switch** button on any inactive account to make it the active account. If the session has expired, Hammoc prompts a re-login
217
+ - **Remove** — Click the trash icon on an inactive account to permanently delete its stored credential (with confirmation dialog). The active account cannot be removed — switch to another account first
218
+ - **Add account** — Click **"+ Add account"** at the bottom of the list to sign in to another Claude account using the same OAuth flow. Click **Cancel** to close without adding
219
+ - Account changes sync across all open browser tabs in real-time
220
+
221
+ ### 13.15 Hammoc User
190
222
 
191
223
  Local Hammoc authentication (independent of your Claude Code account):
192
224
 
193
225
  - **Change password** — Enter your current password, new password, and confirm. Minimum 4 characters. After changing, you'll be signed out and redirected to the login page.
194
226
  - **Logout** — Sign out immediately.
195
227
 
196
- ### 13.15 System Prompt
228
+ ### 13.16 System Prompt
197
229
 
198
- Customize Claude's behavior with a fully editable system prompt template:
230
+ Customize Claude's behavior by adding your own instructions on top of Hammoc's maintained base prompt. The editor is split into a read-only **system-managed** area and an editable **additions** area, so you layer your customizations on top instead of replacing the entire prompt:
199
231
 
200
- - **Warning banner** — Displayed at the top, cautioning about the impact of modifications
201
- - **Editable textarea** — Edit the system prompt with **auto-save**
202
- - **Character count** — Shown below the editor
203
- - **"Customized" indicator** — Blue banner when a custom prompt is active
204
- - **Restore to Default** button — Appears when the prompt has been modified
232
+ - **System-managed sections (read-only)** — A collapsible accordion showing the base prompt Hammoc assembles automatically: a common section (Hammoc identity, code-reference conventions, feature pointers), an engine-specific section (SDK or CLI), and a BMad section when the project is a BMad project. Labeled "Auto-assembled — not editable"; expand it to see exactly what is being sent
233
+ - **Your additions** — An editable textarea (with **auto-save**) where you append your own instructions. These are added to the base prompt rather than overwriting it. A **"Custom additions in use"** badge appears when the area is non-empty
234
+ - **Migration banner** — If you previously customized the prompt in the old single-textarea editor, a one-time notice explains that the prompt was restructured; review your additions, remove anything that now duplicates the managed sections, and dismiss it
235
+ - **Character count** — Total characters shown below the editor; hover to see the **system + you** breakdown
236
+ - **Restore Default** button — Appears once you have additions; clears your additions back to empty (the managed sections are always present and cannot be removed)
205
237
  - **Template variables** — Listed below the editor with descriptions (e.g., `{gitBranch}`, `{gitMainBranch}`, `{gitStatus}`); variables are resolved at runtime
206
- - **Resolved preview** — Toggle to see the fully rendered prompt with variables replaced for the current project
238
+ - **Preview Full Prompt** — Toggle to see the fully assembled prompt (managed sections plus your additions) with variables resolved for the current project
207
239
 
208
- The system prompt applies to both conversation engines (SDK and CLI). The default template focuses Claude on Hammoc-specific features (snippets, queue runner, board, BMAD, permission modes, sessions) and points at the manual + internals docs that Hammoc syncs to `~/.hammoc/docs/` on every server boot, so agents always have current docs even when run from a fresh install.
240
+ The system prompt applies to both conversation engines (SDK and CLI). The managed base focuses Claude on Hammoc-specific features (snippets, queue runner, board, BMAD, permission modes, sessions) and points at the manual + internals docs that Hammoc syncs to `~/.hammoc/docs/` on every server boot, so agents always have current docs even when run from a fresh install.
209
241
 
210
- ### 13.16 Conversation Engine
242
+ ### 13.17 Conversation Engine
211
243
 
212
244
  Hammoc can run conversations through one of two engines. The engine picker in Settings shows them as **side-by-side comparison cards** with a Recommended / Beta badge:
213
245
 
@@ -228,14 +260,14 @@ Everything interactive works the same in CLI mode as in SDK mode: live tool-call
228
260
 
229
261
  **Live permission mode switch** — During a CLI chat, clicking the permission mode button (or pressing `Shift+Tab`) changes the mode immediately, not just for the next session.
230
262
 
231
- CLI engine settings have moved to **Advanced Settings** (see §13.17) under the "CLI engine only" group.
263
+ CLI engine settings have moved to **Advanced Settings** (see §13.18) under the "CLI engine only" group.
232
264
 
233
- ### 13.17 Advanced Settings
265
+ ### 13.18 Advanced Settings
234
266
 
235
267
  Settings in the Advanced tab are organized into three groups: Common (both engines), SDK engine only, and CLI engine only.
236
268
 
237
269
  **Common (both engines):**
238
- - **System prompt** — Customizable prompt template that applies to both engines (see §13.15)
270
+ - **System prompt** — Add your own instructions on top of the managed base prompt; applies to both engines (see §13.16)
239
271
  - **Server management** — Development mode: "Server Rebuild" button. Production mode: version display, update check, and install
240
272
  - **File checkpointing** — Chat sessions (default on, required for code rewind §2.20) and queue runner (default off)
241
273
  - **Card entrance animation** — Streaming cards fade/slide in one at a time (default on, both engines)
@@ -250,7 +282,7 @@ Settings in the Advanced tab are organized into three groups: Common (both engin
250
282
 
251
283
  **CLI engine settings:**
252
284
 
253
- These settings apply only while the CLI engine is active (see §13.16):
285
+ These settings apply only while the CLI engine is active (see §13.17):
254
286
 
255
287
  - **Show thinking summaries** — Surface Claude's thinking summaries while generating a response (default on). Whether summaries actually appear can also depend on your Claude version.
256
288
  - **Show generation progress** — Toggle the live "↓ N tokens · Ns" indicator shown during generation (default on).
@@ -260,7 +292,7 @@ These settings apply only while the CLI engine is active (see §13.16):
260
292
  - **Claude screen mirror** — Show a read-only terminal mirroring Claude's raw output during CLI-mode chats; on by default. Useful when a card is slow to arrive or the progress counter freezes. The panel is draggable and resizable, with a copy button for the full buffer. Turn it off if you find it distracting.
261
293
  - **Claude binary path** — Manually point Hammoc at a specific `claude` executable. Leave empty to auto-detect. If the path is invalid, Hammoc falls back to auto-detect.
262
294
 
263
- ### 13.18 Help
295
+ ### 13.19 Help
264
296
 
265
297
  In-app usage guide within the Settings page:
266
298
 
@@ -270,7 +302,7 @@ In-app usage guide within the Settings page:
270
302
  - **BMad Method** — Quick guide to the BMad workflow
271
303
  - **Keyboard shortcuts** — Key bindings table (Enter, Shift+Enter, Escape, Ctrl+C, F7/Shift+F7, /)
272
304
 
273
- ### 13.19 About
305
+ ### 13.20 About
274
306
 
275
307
  Displays app information:
276
308
 
@@ -8,17 +8,14 @@ Claude Code CLI must be installed and in your PATH:
8
8
  claude --version
9
9
  ```
10
10
 
11
- If not installed, follow the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code). The Onboarding page shows CLI installation, authentication, and API key status at a glance.
11
+ If not installed, follow the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code). The onboarding wizard checks CLI status automatically on first launch (see §1.3).
12
12
 
13
13
  ### 16.2 "Authentication required" / `claude login`
14
14
 
15
- If the chat displays an authentication error, Claude Code CLI needs to be logged in:
15
+ If the chat displays an authentication error, Claude Code needs to be logged in. Two options:
16
16
 
17
- ```bash
18
- claude login
19
- ```
20
-
21
- The Onboarding page (shown when CLI is not authenticated) displays the current auth status and provides setup commands.
17
+ - **In-app** — Go to **Settings > Claude Account** and click **"Sign in to Claude"** to complete the OAuth flow without leaving Hammoc (see §13.14)
18
+ - **Terminal** — Run `claude login` in a terminal session
22
19
 
23
20
  ### 16.3 API rate limit exceeded
24
21
 
@@ -12,7 +12,7 @@ export { AUTH_ERROR_MESSAGES } from './types/auth.js';
12
12
  export type { ChangePasswordRequest, ChangePasswordResponse } from './types/auth.js';
13
13
  export { ProjectInfo, ProjectListResponse, PROJECT_ERRORS, CreateProjectRequest, CreateProjectResponse, DeleteProjectResponse, ValidatePathRequest, ValidatePathResponse, BmadVersionsResponse, ProjectSettings, UpdateProjectSettingsRequest, ProjectSettingsApiResponse, SetupBmadRequest, SetupBmadResponse, } from './types/project.js';
14
14
  export { SlashCommand, StarCommand, CommandsResponse, SnippetItem } from './types/command.js';
15
- export { CommandFavoriteEntry, UserPreferences, PromptHistoryData, DEFAULT_PREFERENCES, PreferencesApiResponse, TelegramSettings, TelegramSettingsApiResponse, UpdateTelegramSettingsRequest, WebPushSettings, WebPushSettingsApiResponse, WebPushSubscribeRequest, SupportedLanguage, SUPPORTED_LANGUAGES, PermissionSyncPolicy, } from './types/preferences.js';
15
+ export { CommandFavoriteEntry, UserPreferences, PromptHistoryData, DEFAULT_PREFERENCES, PreferencesApiResponse, TelegramSettings, TelegramSettingsApiResponse, UpdateTelegramSettingsRequest, WebPushSettings, WebPushSettingsApiResponse, WebPushSubscribeRequest, SupportedLanguage, SUPPORTED_LANGUAGES, PermissionSyncPolicy, SystemPromptSectionsResponse, ProjectSystemPromptResponse, } from './types/preferences.js';
16
16
  export { RawJSONLMessage, HistoryMessage, PaginationInfo, HistoryMessagesResponse, PaginationOptions, ContentBlock, TextContentBlock, ThinkingContentBlock, ToolUseContentBlock, ToolResultContentBlock, ImageContentBlock, } from './types/history.js';
17
17
  export * from './types/fileSystem.js';
18
18
  export * from './types/systemBrowse.js';
@@ -34,4 +34,5 @@ export * from './types/harnessBundle.js';
34
34
  export * from './types/bmadCoreConfig.js';
35
35
  export * from './types/contextBuilder.js';
36
36
  export * from './types/marketplace.js';
37
+ export * from './types/accounts.js';
37
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAIrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIrF,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG/F,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG5D,cAAc,oBAAoB,CAAC;AAGnC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG3F,cAAc,0BAA0B,CAAC;AAGzC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,2BAA2B,CAAC;AAG1C,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAC;AAG/B,cAAc,sBAAsB,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAIrC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EACL,UAAU,EACV,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAIrF,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,6BAA6B,EAC7B,eAAe,EACf,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG/F,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG5D,cAAc,oBAAoB,CAAC;AAGnC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG3F,cAAc,0BAA0B,CAAC;AAGzC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,2BAA2B,CAAC;AAG1C,cAAc,wBAAwB,CAAC;AAGvC,cAAc,qBAAqB,CAAC"}
@@ -65,4 +65,6 @@ export * from './types/bmadCoreConfig.js';
65
65
  export * from './types/contextBuilder.js';
66
66
  // Story 31.4: Plugin marketplace catalog DTOs (Epic 31)
67
67
  export * from './types/marketplace.js';
68
+ // Story BS-8: Multi-account management DTOs (credential store + switch)
69
+ export * from './types/accounts.js';
68
70
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,gBAAgB,CAAC;AAE/B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AAErC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,4DAA4D;AAC5D,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAErC,kDAAkD;AAClD,2FAA2F;AAC3F,cAAc,oBAAoB,CAAC;AAEnC,iDAAiD;AACjD,cAAc,gBAAgB,CAAC;AAE/B,mDAAmD;AACnD,OAAO,EAGL,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EAKL,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,0CAA0C;AAC1C,OAAO,EAGL,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AAEzB,iCAAiC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAKtD,gDAAgD;AAChD,kDAAkD;AAClD,OAAO,EAGL,cAAc,GAYf,MAAM,oBAAoB,CAAC;AAM5B,gDAAgD;AAChD,OAAO,EAIL,mBAAmB,EASnB,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC;AAiBhC,qEAAqE;AACrE,cAAc,uBAAuB,CAAC;AAEtC,iFAAiF;AACjF,cAAc,yBAAyB,CAAC;AAExC,uDAAuD;AACvD,cAAc,uBAAuB,CAAC;AAEtC,iCAAiC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE/E,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,kCAAkC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,oCAAoC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D,sEAAsE;AACtE,cAAc,oBAAoB,CAAC;AAEnC,yEAAyE;AACzE,cAAc,0BAA0B,CAAC;AAEzC,2EAA2E;AAC3E,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC;AAErC,8EAA8E;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,kFAAkF;AAClF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE3F,gDAAgD;AAChD,cAAc,0BAA0B,CAAC;AAEzC,0DAA0D;AAC1D,cAAc,2BAA2B,CAAC;AAE1C,0DAA0D;AAC1D,cAAc,2BAA2B,CAAC;AAE1C,wDAAwD;AACxD,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,gBAAgB,CAAC;AAE/B,+CAA+C;AAC/C,cAAc,sBAAsB,CAAC;AAErC,2CAA2C;AAC3C,cAAc,sBAAsB,CAAC;AAErC,4DAA4D;AAC5D,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAErC,kDAAkD;AAClD,2FAA2F;AAC3F,cAAc,oBAAoB,CAAC;AAEnC,iDAAiD;AACjD,cAAc,gBAAgB,CAAC;AAE/B,mDAAmD;AACnD,OAAO,EAGL,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EAKL,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,0CAA0C;AAC1C,OAAO,EAGL,gBAAgB,GAGjB,MAAM,iBAAiB,CAAC;AAEzB,iCAAiC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAKtD,gDAAgD;AAChD,kDAAkD;AAClD,OAAO,EAGL,cAAc,GAYf,MAAM,oBAAoB,CAAC;AAM5B,gDAAgD;AAChD,OAAO,EAIL,mBAAmB,EASnB,mBAAmB,GAIpB,MAAM,wBAAwB,CAAC;AAiBhC,qEAAqE;AACrE,cAAc,uBAAuB,CAAC;AAEtC,iFAAiF;AACjF,cAAc,yBAAyB,CAAC;AAExC,uDAAuD;AACvD,cAAc,uBAAuB,CAAC;AAEtC,iCAAiC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,kCAAkC;AAClC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE/E,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE/F,kCAAkC;AAClC,cAAc,gBAAgB,CAAC;AAE/B,2CAA2C;AAC3C,cAAc,qBAAqB,CAAC;AAEpC,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,oCAAoC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,kDAAkD;AAClD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D,sEAAsE;AACtE,cAAc,oBAAoB,CAAC;AAEnC,yEAAyE;AACzE,cAAc,0BAA0B,CAAC;AAEzC,2EAA2E;AAC3E,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC;AAErC,8EAA8E;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,kFAAkF;AAClF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAE3F,gDAAgD;AAChD,cAAc,0BAA0B,CAAC;AAEzC,0DAA0D;AAC1D,cAAc,2BAA2B,CAAC;AAE1C,0DAA0D;AAC1D,cAAc,2BAA2B,CAAC;AAE1C,wDAAwD;AACxD,cAAc,wBAAwB,CAAC;AAEvC,wEAAwE;AACxE,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Multi-Account Management types (Story BS-8)
3
+ *
4
+ * Hammoc stores the OAuth credentials produced by each Claude Code login in
5
+ * `~/.hammoc/accounts.json` so a user can keep several Claude accounts and switch
6
+ * between them. Switching overwrites the single-account `~/.claude/.credentials.json`
7
+ * the CLI binary reads (it has no `--profile` flag — see Story BS-8 Dev Notes).
8
+ *
9
+ * The credential token material (`accessToken` / `refreshToken`) lives ONLY in the
10
+ * server-side {@link StoredAccount.credential} block. It is never serialized into an
11
+ * API response or a WebSocket payload — those carry the token-free {@link AccountSummary}.
12
+ */
13
+ /**
14
+ * The `claudeAiOauth` block from `~/.claude/.credentials.json`, captured verbatim.
15
+ * Shape verified against the live file (BS-8 Dev Notes › Credential File Structure):
16
+ * `expiresAt` is epoch milliseconds (a number, not an ISO string / JWT), and
17
+ * `subscriptionType` (the account tier) lives inside this block. `email` does NOT —
18
+ * it only comes from accountInfoService, hence the fallback key (AC1a).
19
+ */
20
+ export interface ClaudeOAuthCredential {
21
+ claudeAiOauth: {
22
+ accessToken: string;
23
+ refreshToken?: string;
24
+ /** Epoch milliseconds. Expiry check = `expiresAt < Date.now()`. */
25
+ expiresAt?: number;
26
+ scopes?: string[];
27
+ /** Account tier, e.g. "max" / "pro" / "team". Read directly here (no SDK needed). */
28
+ subscriptionType?: string;
29
+ rateLimitTier?: string;
30
+ [key: string]: unknown;
31
+ };
32
+ }
33
+ /**
34
+ * A stored account entry in `~/.hammoc/accounts.json`.
35
+ * The {@link credential} field is server-side only — see the file header.
36
+ */
37
+ export interface StoredAccount {
38
+ /** Account email, or null when accountInfoService could not supply one (AC1a). */
39
+ email: string | null;
40
+ /** Subscription tier read from `credential.claudeAiOauth.subscriptionType`. */
41
+ tier: string | null;
42
+ /** The captured `claudeAiOauth` block (tokens — never sent to clients). */
43
+ credential: ClaudeOAuthCredential;
44
+ /** Epoch ms of the last capture / activation of this account. */
45
+ lastUsedAt: number;
46
+ /** True when keyed by the `account:<hash>` fallback and the email needs back-fill (AC1a). */
47
+ needsEmailBackfill?: boolean;
48
+ }
49
+ /**
50
+ * On-disk shape of `~/.hammoc/accounts.json`.
51
+ * `activeKey` mirrors which credential is currently written to `~/.claude/.credentials.json`.
52
+ */
53
+ export interface AccountsStore {
54
+ /** Store key (email or `account:<hash>` fallback) of the active account, or null. */
55
+ activeKey: string | null;
56
+ /** Stored accounts keyed by email or the `account:<hash>` fallback. */
57
+ accounts: Record<string, StoredAccount>;
58
+ }
59
+ /**
60
+ * Token-free public view of a stored account for API + WebSocket payloads (AC14, AC15).
61
+ * Exposes only the store key, email, tier, and bookkeeping flags — never tokens.
62
+ */
63
+ export interface AccountSummary {
64
+ /** Store key: the account email, or the `account:<hash>` fallback (AC1a). */
65
+ key: string;
66
+ email: string | null;
67
+ tier: string | null;
68
+ /** True when this is the currently active account. */
69
+ active: boolean;
70
+ lastUsedAt: number;
71
+ needsEmailBackfill?: boolean;
72
+ }
73
+ /** GET /api/accounts response — token-free account list + active marker. */
74
+ export interface AccountListResponse {
75
+ accounts: AccountSummary[];
76
+ activeKey: string | null;
77
+ }
78
+ /** POST /api/accounts/switch request — `key` is the store key (email or fallback). */
79
+ export interface AccountSwitchRequest {
80
+ key: string;
81
+ }
82
+ /** POST /api/accounts/switch response. */
83
+ export interface AccountSwitchResponse {
84
+ success: boolean;
85
+ activeKey: string | null;
86
+ /**
87
+ * True when the switched-to credential is already past `expiresAt` (AC12). The switch
88
+ * still completes; the client should offer the BS-7 re-login flow for this account.
89
+ * Phase 1 performs NO custom OAuth refresh call (BS-8 Dev Notes › Token Refresh).
90
+ */
91
+ reauthRequired: boolean;
92
+ accounts: AccountSummary[];
93
+ }
94
+ /** WebSocket `account:switched` payload — token-free (AC15). */
95
+ export interface AccountSwitchedEvent {
96
+ key: string;
97
+ email: string | null;
98
+ tier: string | null;
99
+ }
100
+ /** WebSocket `account:removed` payload — token-free. */
101
+ export interface AccountRemovedEvent {
102
+ key: string;
103
+ }
104
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,mEAAmE;QACnE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,qFAAqF;QACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,2EAA2E;IAC3E,UAAU,EAAE,qBAAqB,CAAC;IAClC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,sDAAsD;IACtD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Multi-Account Management types (Story BS-8)
3
+ *
4
+ * Hammoc stores the OAuth credentials produced by each Claude Code login in
5
+ * `~/.hammoc/accounts.json` so a user can keep several Claude accounts and switch
6
+ * between them. Switching overwrites the single-account `~/.claude/.credentials.json`
7
+ * the CLI binary reads (it has no `--profile` flag — see Story BS-8 Dev Notes).
8
+ *
9
+ * The credential token material (`accessToken` / `refreshToken`) lives ONLY in the
10
+ * server-side {@link StoredAccount.credential} block. It is never serialized into an
11
+ * API response or a WebSocket payload — those carry the token-free {@link AccountSummary}.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -4,6 +4,7 @@ export interface DashboardProjectStatus {
4
4
  totalSessionCount: number;
5
5
  queueStatus: 'idle' | 'running' | 'paused' | 'error';
6
6
  terminalCount: number;
7
+ pendingQuestionCount?: number;
7
8
  }
8
9
  export interface DashboardStatusResponse {
9
10
  projects: DashboardProjectStatus[];
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/types/dashboard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/types/dashboard.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC"}
@@ -8,6 +8,8 @@ export interface GitFileStatus {
8
8
  /** Git status response */
9
9
  export interface GitStatusResponse {
10
10
  initialized: boolean;
11
+ /** False when the git binary is not found on the system. */
12
+ gitInstalled?: boolean;
11
13
  branch?: string;
12
14
  ahead?: number;
13
15
  behind?: number;
@@ -57,11 +59,21 @@ export interface GitOperationResponse {
57
59
  * without using this constant, so the change has zero impact on read endpoints.
58
60
  */
59
61
  export declare const GIT_ERRORS: {
62
+ readonly GIT_NOT_INSTALLED: {
63
+ readonly code: "GIT_NOT_INSTALLED";
64
+ readonly httpStatus: 503;
65
+ readonly message: "Git is not installed on the system";
66
+ };
60
67
  readonly GIT_NOT_INITIALIZED: {
61
68
  readonly code: "GIT_NOT_INITIALIZED";
62
69
  readonly httpStatus: 400;
63
70
  readonly message: "Project is not a Git repository";
64
71
  };
72
+ readonly GIT_AUTH_FAILED: {
73
+ readonly code: "GIT_AUTH_FAILED";
74
+ readonly httpStatus: 401;
75
+ readonly message: "Git authentication failed";
76
+ };
65
77
  readonly GIT_ERROR: {
66
78
  readonly code: "GIT_ERROR";
67
79
  readonly httpStatus: 500;
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/types/git.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4BAA4B;AAC5B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,uHAAuH;IACvH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kHAAkH;IAClH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Bb,CAAC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/types/git.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,uBAAuB;AACvB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,4BAA4B;AAC5B,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAwB;AACxB,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,uHAAuH;IACvH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kHAAkH;IAClH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCb,CAAC"}
@@ -5,11 +5,21 @@
5
5
  * without using this constant, so the change has zero impact on read endpoints.
6
6
  */
7
7
  export const GIT_ERRORS = {
8
+ GIT_NOT_INSTALLED: {
9
+ code: 'GIT_NOT_INSTALLED',
10
+ httpStatus: 503,
11
+ message: 'Git is not installed on the system',
12
+ },
8
13
  GIT_NOT_INITIALIZED: {
9
14
  code: 'GIT_NOT_INITIALIZED',
10
15
  httpStatus: 400,
11
16
  message: 'Project is not a Git repository',
12
17
  },
18
+ GIT_AUTH_FAILED: {
19
+ code: 'GIT_AUTH_FAILED',
20
+ httpStatus: 401,
21
+ message: 'Git authentication failed',
22
+ },
13
23
  GIT_ERROR: {
14
24
  code: 'GIT_ERROR',
15
25
  httpStatus: 500,
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/types/git.ts"],"names":[],"mappings":"AA2DA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,mBAAmB,EAAE;QACnB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,iCAAiC;KAC3C;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,sBAAsB;KAChC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,wEAAwE;KAClF;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,mBAAmB;KAC7B;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,uBAAuB;KACjC;CACO,CAAC"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/types/git.ts"],"names":[],"mappings":"AA6DA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,iBAAiB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,oCAAoC;KAC9C;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,iCAAiC;KAC3C;IACD,eAAe,EAAE;QACf,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,2BAA2B;KACrC;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,sBAAsB;KAChC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,wEAAwE;KAClF;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,uBAAuB;QAC7B,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,mBAAmB;KAC7B;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,uBAAuB;KACjC;CACO,CAAC"}
@@ -23,6 +23,8 @@ export interface UserPreferences {
23
23
  theme?: 'light' | 'dark' | 'system';
24
24
  layoutMode?: 'narrow' | 'wide';
25
25
  diffLayout?: 'side-by-side' | 'inline';
26
+ displayName?: string;
27
+ onboardingComplete?: boolean;
26
28
  permissionMode?: PermissionMode | 'latest';
27
29
  /** Stores the actual last-used mode when permissionMode is 'latest' */
28
30
  lastPermissionMode?: PermissionMode;
@@ -44,6 +46,8 @@ export interface UserPreferences {
44
46
  telegram?: TelegramSettings;
45
47
  webPush?: WebPushSettings;
46
48
  customSystemPrompt?: string;
49
+ _systemPromptMigrated?: boolean;
50
+ _systemPromptMigrationDone?: boolean;
47
51
  maxThinkingTokens?: number;
48
52
  maxTurns?: number;
49
53
  maxBudgetUsd?: number;
@@ -62,6 +66,12 @@ export interface UserPreferences {
62
66
  enableQueueCheckpointing?: boolean;
63
67
  harnessLintRules?: Partial<Record<LintRuleId, boolean>>;
64
68
  observabilityTokenizer?: ObservabilityTokenizer;
69
+ debugCliTrace?: boolean;
70
+ debugPtyDump?: boolean;
71
+ debugToolTrace?: boolean;
72
+ debugServerLogLevel?: 'ERROR' | 'WARN' | 'INFO' | 'DEBUG' | 'VERBOSE';
73
+ debugClientLogLevel?: 'ERROR' | 'WARN' | 'INFO' | 'DEBUG' | 'VERBOSE';
74
+ debugTestEndpoints?: boolean;
65
75
  }
66
76
  /** Controls when permission mode changes are broadcast to other browsers viewing the same session */
67
77
  export type PermissionSyncPolicy = 'streaming' | 'always';
@@ -148,4 +158,34 @@ export interface WebPushSubscribeRequest {
148
158
  export interface PromptHistoryData {
149
159
  history: string[];
150
160
  }
161
+ /** Response from GET /api/preferences/system-prompt */
162
+ export interface SystemPromptSectionsResponse {
163
+ sections: {
164
+ common: string;
165
+ sdk: string;
166
+ cli: string;
167
+ bmad: string;
168
+ };
169
+ userArea?: string;
170
+ variables: readonly {
171
+ name: string;
172
+ description: string;
173
+ }[];
174
+ }
175
+ /** Response from GET /api/projects/:slug/system-prompt */
176
+ export interface ProjectSystemPromptResponse {
177
+ sections: {
178
+ common: string;
179
+ engineSpecific: string;
180
+ bmad?: string;
181
+ };
182
+ engineType: 'sdk' | 'cli';
183
+ isBmadProject: boolean;
184
+ assembled: string;
185
+ resolved: string;
186
+ variables: readonly {
187
+ name: string;
188
+ description: string;
189
+ }[];
190
+ }
151
191
  //# sourceMappingURL=preferences.d.ts.map