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.
- package/README.md +8 -4
- package/package.json +1 -1
- package/packages/client/dist/assets/{agentExampleHighlight-Du5I7v6o.js → agentExampleHighlight-B2IJxYzN.js} +1 -1
- package/packages/client/dist/assets/{commandTokenHighlight-Dfo51Aof.js → commandTokenHighlight-BdGXkDR5.js} +1 -1
- package/packages/client/dist/assets/{index-4l4YwxEs.js → index-BFWGN51V.js} +1 -1
- package/packages/client/dist/assets/index-BX7y_Qt3.css +32 -0
- package/packages/client/dist/assets/{index-CqAHxPRw.js → index-lmx-m-iP.js} +587 -499
- package/packages/client/dist/assets/{snippetTokenHighlight-26DWljQA.js → snippetTokenHighlight-B9bH9Npx.js} +1 -1
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +1 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +25 -1
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/config/index.d.ts +10 -0
- package/packages/server/dist/config/index.d.ts.map +1 -1
- package/packages/server/dist/config/index.js +10 -0
- package/packages/server/dist/config/index.js.map +1 -1
- package/packages/server/dist/controllers/accountController.d.ts +19 -0
- package/packages/server/dist/controllers/accountController.d.ts.map +1 -0
- package/packages/server/dist/controllers/accountController.js +92 -0
- package/packages/server/dist/controllers/accountController.js.map +1 -0
- package/packages/server/dist/controllers/gitController.d.ts.map +1 -1
- package/packages/server/dist/controllers/gitController.js +37 -0
- package/packages/server/dist/controllers/gitController.js.map +1 -1
- package/packages/server/dist/controllers/projectController.d.ts +1 -1
- package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
- package/packages/server/dist/controllers/projectController.js +20 -4
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +8 -1
- package/packages/server/dist/controllers/serverController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +3 -1
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +4 -0
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +146 -8
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +8 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +2 -0
- package/packages/server/dist/locales/es/server.json +2 -0
- package/packages/server/dist/locales/ja/server.json +2 -0
- package/packages/server/dist/locales/ko/server.json +2 -0
- package/packages/server/dist/locales/pt/server.json +2 -0
- package/packages/server/dist/locales/zh-CN/server.json +2 -0
- package/packages/server/dist/middleware/session.d.ts.map +1 -1
- package/packages/server/dist/middleware/session.js +7 -5
- package/packages/server/dist/middleware/session.js.map +1 -1
- package/packages/server/dist/routes/accounts.d.ts +13 -0
- package/packages/server/dist/routes/accounts.d.ts.map +1 -0
- package/packages/server/dist/routes/accounts.js +18 -0
- package/packages/server/dist/routes/accounts.js.map +1 -0
- package/packages/server/dist/routes/config.d.ts +3 -0
- package/packages/server/dist/routes/config.d.ts.map +1 -0
- package/packages/server/dist/routes/config.js +59 -0
- package/packages/server/dist/routes/config.js.map +1 -0
- package/packages/server/dist/routes/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +22 -4
- package/packages/server/dist/routes/preferences.js.map +1 -1
- package/packages/server/dist/services/accountInfoService.js +6 -6
- package/packages/server/dist/services/accountInfoService.js.map +1 -1
- package/packages/server/dist/services/accountStorageService.d.ts +119 -0
- package/packages/server/dist/services/accountStorageService.d.ts.map +1 -0
- package/packages/server/dist/services/accountStorageService.js +285 -0
- package/packages/server/dist/services/accountStorageService.js.map +1 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +4 -8
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/claudeLoginService.d.ts +124 -0
- package/packages/server/dist/services/claudeLoginService.d.ts.map +1 -0
- package/packages/server/dist/services/claudeLoginService.js +417 -0
- package/packages/server/dist/services/claudeLoginService.js.map +1 -0
- package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -1
- package/packages/server/dist/services/cliChatEngine.js +85 -33
- package/packages/server/dist/services/cliChatEngine.js.map +1 -1
- package/packages/server/dist/services/cliGridCards.d.ts +30 -10
- package/packages/server/dist/services/cliGridCards.d.ts.map +1 -1
- package/packages/server/dist/services/cliGridCards.js +80 -34
- package/packages/server/dist/services/cliGridCards.js.map +1 -1
- package/packages/server/dist/services/cliModalDetect.d.ts +15 -7
- package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -1
- package/packages/server/dist/services/cliModalDetect.js +16 -12
- package/packages/server/dist/services/cliModalDetect.js.map +1 -1
- package/packages/server/dist/services/cliScreenModel.d.ts +3 -2
- package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -1
- package/packages/server/dist/services/cliScreenModel.js +2 -0
- package/packages/server/dist/services/cliScreenModel.js.map +1 -1
- package/packages/server/dist/services/cliService.d.ts.map +1 -1
- package/packages/server/dist/services/cliService.js +2 -7
- package/packages/server/dist/services/cliService.js.map +1 -1
- package/packages/server/dist/services/cliSessionPool.d.ts +13 -1
- package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -1
- package/packages/server/dist/services/cliSessionPool.js +14 -4
- package/packages/server/dist/services/cliSessionPool.js.map +1 -1
- package/packages/server/dist/services/dashboardService.d.ts.map +1 -1
- package/packages/server/dist/services/dashboardService.js +6 -1
- package/packages/server/dist/services/dashboardService.js.map +1 -1
- package/packages/server/dist/services/gitService.d.ts +2 -0
- package/packages/server/dist/services/gitService.d.ts.map +1 -1
- package/packages/server/dist/services/gitService.js +41 -3
- package/packages/server/dist/services/gitService.js.map +1 -1
- package/packages/server/dist/services/preferencesService.d.ts +1 -0
- package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
- package/packages/server/dist/services/preferencesService.js +25 -2
- package/packages/server/dist/services/preferencesService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts +1 -0
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +14 -3
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.d.ts +7 -0
- package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.js +10 -0
- package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
- package/packages/server/dist/services/workspaceContext.d.ts +31 -4
- package/packages/server/dist/services/workspaceContext.d.ts.map +1 -1
- package/packages/server/dist/services/workspaceContext.js +110 -10
- package/packages/server/dist/services/workspaceContext.js.map +1 -1
- package/packages/server/dist/snippets/promote-to-story +86 -9
- package/packages/server/dist/utils/cliDebugLog.d.ts +6 -5
- package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -1
- package/packages/server/dist/utils/cliDebugLog.js +11 -8
- package/packages/server/dist/utils/cliDebugLog.js.map +1 -1
- package/packages/server/dist/utils/logger.d.ts +7 -0
- package/packages/server/dist/utils/logger.d.ts.map +1 -1
- package/packages/server/dist/utils/logger.js +13 -1
- package/packages/server/dist/utils/logger.js.map +1 -1
- package/packages/server/resources/bmad-method/4.44.3/LICENSE +30 -0
- package/packages/server/resources/manual/01-getting-started.md +11 -5
- package/packages/server/resources/manual/02-chat.md +2 -2
- package/packages/server/resources/manual/03-sessions.md +2 -0
- package/packages/server/resources/manual/04-slash-commands-favorites.md +1 -0
- package/packages/server/resources/manual/05-projects.md +2 -2
- package/packages/server/resources/manual/07-git.md +23 -2
- package/packages/server/resources/manual/08-terminal.md +24 -1
- package/packages/server/resources/manual/11-bmad-method-integration.md +1 -0
- package/packages/server/resources/manual/13-settings.md +52 -20
- package/packages/server/resources/manual/16-troubleshooting.md +4 -7
- package/packages/shared/dist/index.d.ts +2 -1
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +2 -0
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/accounts.d.ts +104 -0
- package/packages/shared/dist/types/accounts.d.ts.map +1 -0
- package/packages/shared/dist/types/accounts.js +14 -0
- package/packages/shared/dist/types/accounts.js.map +1 -0
- package/packages/shared/dist/types/dashboard.d.ts +1 -0
- package/packages/shared/dist/types/dashboard.d.ts.map +1 -1
- package/packages/shared/dist/types/git.d.ts +12 -0
- package/packages/shared/dist/types/git.d.ts.map +1 -1
- package/packages/shared/dist/types/git.js +10 -0
- package/packages/shared/dist/types/git.js.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +40 -0
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +5 -1
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/session.d.ts +1 -0
- package/packages/shared/dist/types/session.d.ts.map +1 -1
- package/packages/shared/dist/types/session.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +28 -1
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/client/dist/assets/index-CVy582lU.css +0 -32
- 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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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.
|
|
228
|
+
### 13.16 System Prompt
|
|
197
229
|
|
|
198
|
-
Customize Claude's behavior
|
|
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
|
-
- **
|
|
201
|
-
- **
|
|
202
|
-
- **
|
|
203
|
-
- **
|
|
204
|
-
- **Restore
|
|
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
|
-
- **
|
|
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
|
|
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.
|
|
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.
|
|
263
|
+
CLI engine settings have moved to **Advanced Settings** (see §13.18) under the "CLI engine only" group.
|
|
232
264
|
|
|
233
|
-
### 13.
|
|
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** —
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
15
|
+
If the chat displays an authentication error, Claude Code needs to be logged in. Two options:
|
|
16
16
|
|
|
17
|
-
|
|
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,
|
|
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,
|
|
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;
|
|
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
|
|
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":"
|
|
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
|