@hienlh/ppm 0.12.12 → 0.13.2
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/CHANGELOG.md +31 -1
- package/README.md +11 -0
- package/assets/skills/ppm/SKILL.md +74 -0
- package/assets/skills/ppm/references/cli-reference.md +728 -0
- package/assets/skills/ppm/references/common-tasks.md +139 -0
- package/assets/skills/ppm/references/http-api.md +204 -0
- package/dist/web/assets/ai-settings-section-QE6nBNgN.js +1 -0
- package/dist/web/assets/{api-settings-C3T95dWg.js → api-settings-DAk7D-NP.js} +1 -1
- package/dist/web/assets/architecture-PBZL5I3N-DvZbltvY.js +1 -0
- package/dist/web/assets/{audio-preview-BkbgGtDH.js → audio-preview--hRMnXRZ.js} +1 -1
- package/dist/web/assets/chat-tab-4kL3DNxf.js +12 -0
- package/dist/web/assets/{code-editor-BtspASkW.js → code-editor-Caq5_BaF.js} +4 -4
- package/dist/web/assets/{conflict-editor-Dgsu6fmj.js → conflict-editor-Dlo25nmt.js} +1 -1
- package/dist/web/assets/{csv-preview-DcWCjQkZ.js → csv-preview-HMSavgBb.js} +1 -1
- package/dist/web/assets/{database-viewer-C85RxdMV.js → database-viewer-DcBl6OkV.js} +2 -2
- package/dist/web/assets/{diff-viewer-2pPy97Tl.js → diff-viewer-CCzPq1o-.js} +1 -1
- package/dist/web/assets/{esm-_CLpyLJ_.js → esm-K1XIK4vc.js} +1 -1
- package/dist/web/assets/{extension-store-BZDZ9QRc.js → extension-store-3yZYn07W.js} +1 -1
- package/dist/web/assets/{extension-webview-U1lMYZ0p.js → extension-webview-D7bGVSEd.js} +1 -1
- package/dist/web/assets/{file-store-4BpOJthN.js → file-store-BrbCNyLm.js} +1 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-BxhdxFgj.js +1 -0
- package/dist/web/assets/{image-preview-BcT1SbY2.js → image-preview-CfkqnhXJ.js} +1 -1
- package/dist/web/assets/index-BGFG66Gh.js +27 -0
- package/dist/web/assets/index-Bce0weeW.css +2 -0
- package/dist/web/assets/info-3K5VOQVL-BwAZ2zd8.js +1 -0
- package/dist/web/assets/{input-2eDVjcRZ.js → input-Dk49gO8E.js} +1 -1
- package/dist/web/assets/{keybindings-store-BOG1yviy.js → keybindings-store-B-zET-0o.js} +1 -1
- package/dist/web/assets/keybindings-store-DaBV6qhz.js +1 -0
- package/dist/web/assets/{markdown-renderer-Dbam_-04.js → markdown-renderer-DyAm7zuA.js} +3 -3
- package/dist/web/assets/packet-RMMSAZCW-tx2n5Qry.js +1 -0
- package/dist/web/assets/{pdf-preview-BmHVGx32.js → pdf-preview-CZPcuy5c.js} +1 -1
- package/dist/web/assets/pie-UPGHQEXC-D6S2MqVT.js +1 -0
- package/dist/web/assets/plus-51UQ45rf.js +1 -0
- package/dist/web/assets/{port-forwarding-tab-Dkq1upWC.js → port-forwarding-tab-3RNozlZ5.js} +1 -1
- package/dist/web/assets/{postgres-viewer-BgBJAJ9q.js → postgres-viewer-CXJv4TXc.js} +3 -3
- package/dist/web/assets/radar-KQ55EAFF-BviZcL-b.js +1 -0
- package/dist/web/assets/{scroll-area-CdxNNnN-.js → scroll-area-BEllam7_.js} +1 -1
- package/dist/web/assets/{settings-store-CMAssqyb.js → settings-store-BLLR7ed8.js} +2 -2
- package/dist/web/assets/settings-tab-Cnav4g2u.js +1 -0
- package/dist/web/assets/{sql-query-editor-b7zJ8XPp.js → sql-query-editor-CVAnRFbi.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-4lLAz1es.js → sqlite-viewer-C8WUEFhA.js} +1 -1
- package/dist/web/assets/{tab-store-DNBsLdPn.js → tab-store-B3M9hjho.js} +1 -1
- package/dist/web/assets/{terminal-tab-BtnqkN1H.js → terminal-tab-CaEsMxp8.js} +1 -1
- package/dist/web/assets/treemap-KZPCXAKY-CM54VdaB.js +1 -0
- package/dist/web/assets/{use-blob-url-QX-XajU8.js → use-blob-url-e9uTXjv5.js} +1 -1
- package/dist/web/assets/{use-monaco-theme-D68oX3XU.js → use-monaco-theme-BkZDwoVd.js} +1 -1
- package/dist/web/assets/{vendor-mermaid-sQS4C_iL.js → vendor-mermaid-Dx86tuVP.js} +2 -2
- package/dist/web/assets/{video-preview-CkOKvVLt.js → video-preview-Dfz71RGb.js} +1 -1
- package/dist/web/index.html +18 -18
- package/dist/web/sw.js +1 -1
- package/docs/project-changelog.md +15 -1
- package/package.json +3 -3
- package/scripts/generate-ppm-skill.ts +23 -0
- package/scripts/lib/generate-cli-reference.ts +81 -0
- package/scripts/lib/generate-common-tasks.ts +14 -0
- package/scripts/lib/generate-http-api.ts +145 -0
- package/scripts/lib/generate-skill-md.ts +28 -0
- package/scripts/lib/write-output.ts +17 -0
- package/src/cli/commands/export-cmd.ts +85 -0
- package/src/index.ts +167 -153
- package/src/server/index.ts +12 -4
- package/src/services/autostart-generator.ts +3 -1
- package/src/services/autostart-register.ts +17 -0
- package/src/services/sd-notify.ts +27 -0
- package/src/services/skill-export/backup-existing.ts +33 -0
- package/src/services/skill-export/copy-bundled-skill.ts +36 -0
- package/src/services/skill-export/generate-db-schema.ts +66 -0
- package/src/services/skill-export/index.ts +6 -0
- package/src/services/skill-export/resolve-assets-dir.ts +31 -0
- package/src/services/skill-export/resolve-target-dir.ts +17 -0
- package/src/services/supervisor.ts +31 -5
- package/src/web/components/chat/chat-history-bar.tsx +2 -9
- package/src/web/components/chat/chat-history-panel.tsx +2 -9
- package/src/web/components/chat/chat-tab.tsx +6 -1
- package/src/web/components/chat/chat-welcome.tsx +1 -18
- package/src/web/components/chat/message-list.tsx +96 -43
- package/src/web/components/layout/draggable-tab.tsx +12 -5
- package/src/web/hooks/use-chat.ts +37 -1
- package/src/web/hooks/use-notification-badge.ts +7 -7
- package/src/web/lib/favicon.ts +37 -15
- package/src/web/lib/flatten-expansions.ts +36 -0
- package/src/web/lib/format-date.ts +21 -0
- package/src/web/styles/globals.css +12 -0
- package/templates/skill/SKILL.md.tmpl +74 -0
- package/templates/skill/common-tasks.md +139 -0
- package/assets/skills/ppm-guide/SKILL.md +0 -61
- package/bun.lock +0 -2062
- package/bunfig.toml +0 -2
- package/dist/web/assets/ai-settings-section-NNWp6nw7.js +0 -1
- package/dist/web/assets/architecture-PBZL5I3N-DDuzYaUV.js +0 -1
- package/dist/web/assets/chat-tab-BZlP1qjX.js +0 -12
- package/dist/web/assets/chevron-up-BWBvMZkp.js +0 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-BURAevTc.js +0 -1
- package/dist/web/assets/index-BWSRKVZn.js +0 -23
- package/dist/web/assets/index-b6tIZImC.css +0 -2
- package/dist/web/assets/info-3K5VOQVL-tSD4Fpi3.js +0 -1
- package/dist/web/assets/keybindings-store-BvdUoEC7.js +0 -1
- package/dist/web/assets/packet-RMMSAZCW-DmDLZUrV.js +0 -1
- package/dist/web/assets/pie-UPGHQEXC-w03Pc9ZR.js +0 -1
- package/dist/web/assets/pre-compact-button-Dp7Hs49L.js +0 -1
- package/dist/web/assets/pre-compact-section-DnM5fGSR.js +0 -1
- package/dist/web/assets/radar-KQ55EAFF-C9XQvoey.js +0 -1
- package/dist/web/assets/settings-tab-zYWKTq5z.js +0 -1
- package/dist/web/assets/treemap-KZPCXAKY-lmftxSky.js +0 -1
- package/scripts/generate-ppm-guide.ts +0 -92
- package/src/web/components/chat/pre-compact-section.tsx +0 -69
- /package/dist/web/assets/{api-client-DIhJ5qVW.js → api-client-Dvzcc_EO.js} +0 -0
- /package/dist/web/assets/{csv-parser-B5QW8pZ6.js → csv-parser--2WJNgS7.js} +0 -0
- /package/dist/web/assets/{dist-GtkSekuX.js → dist-im4ynINo.js} +0 -0
- /package/dist/web/assets/{katex-C3cZrCvP.js → katex-CKoArbIw.js} +0 -0
- /package/dist/web/assets/{lib-Bu71-TFS.js → lib-DQHnkzGy.js} +0 -0
- /package/dist/web/assets/{react-DMIOAtcX.js → react-GqWghJ-L.js} +0 -0
- /package/dist/web/assets/{refresh-cw-BjrAbUJe.js → refresh-cw-LlbZDJpO.js} +0 -0
- /package/dist/web/assets/{sql-completion-provider-CULTsCqR.js → sql-completion-provider-C3cq9j99.js} +0 -0
- /package/dist/web/assets/{table-tf7pRkME.js → table-Dq575bPF.js} +0 -0
- /package/dist/web/assets/{text-wrap-BV-R4Vvy.js → text-wrap-Cn6BNQfq.js} +0 -0
- /package/dist/web/assets/{trash-2-DjQOpgUV.js → trash-2-CJYoLw7Q.js} +0 -0
- /package/dist/web/assets/{utils-CQux7CsO.js → utils-CTg5uAYR.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-K3_Xwigj.js → vendor-xterm-CU2c3f0A.js} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# PPM Common Tasks
|
|
2
|
+
|
|
3
|
+
Practical recipes for controlling PPM. Prefer these stable shell invocations over HTTP unless the user has specifically asked for HTTP.
|
|
4
|
+
|
|
5
|
+
## Task 1: Confirm PPM is running
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
ppm status --json
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Non-zero exit = server not running. Use `ppm status` (no flag) for a human-readable view.
|
|
12
|
+
|
|
13
|
+
## Task 2: Start the server
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Default port (from config, usually 8080)
|
|
17
|
+
ppm start
|
|
18
|
+
|
|
19
|
+
# Override port
|
|
20
|
+
ppm start --port 9090
|
|
21
|
+
|
|
22
|
+
# Use dev DB profile (port 8081, ~/.ppm/ppm.dev.db)
|
|
23
|
+
ppm start --profile dev
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Task 3: Register a project
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Add the current directory
|
|
30
|
+
ppm projects add "$PWD"
|
|
31
|
+
|
|
32
|
+
# List registered projects as JSON
|
|
33
|
+
ppm projects list --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Task 4: Add and test a database connection
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Interactive add
|
|
40
|
+
ppm db add
|
|
41
|
+
|
|
42
|
+
# Non-interactive (check `ppm db add --help` for full flag list)
|
|
43
|
+
ppm db add --name staging --type postgres --host db.example.com --port 5432 --user app --database myapp
|
|
44
|
+
|
|
45
|
+
# Test the connection
|
|
46
|
+
ppm db test staging
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Task 5: Query a saved DB connection
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Run a SQL query against a registered connection
|
|
53
|
+
ppm db query staging "SELECT count(*) AS total FROM users"
|
|
54
|
+
|
|
55
|
+
# Output as JSON for scripting
|
|
56
|
+
ppm db query staging "SELECT id, email FROM users LIMIT 10" --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Task 6: Read or change config
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Read a value
|
|
63
|
+
ppm config get port
|
|
64
|
+
ppm config get auth.enabled
|
|
65
|
+
|
|
66
|
+
# Set a value (takes effect on next restart)
|
|
67
|
+
ppm config set port 9090
|
|
68
|
+
ppm config set auth.enabled true
|
|
69
|
+
|
|
70
|
+
# List all keys
|
|
71
|
+
ppm config list
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Task 7: Tail the daemon log
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Last 100 lines
|
|
78
|
+
ppm logs --tail 100
|
|
79
|
+
|
|
80
|
+
# Follow live
|
|
81
|
+
ppm logs -f
|
|
82
|
+
|
|
83
|
+
# Clear the log
|
|
84
|
+
ppm logs --clear
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Task 8: Upgrade PPM
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Check for a new version without installing
|
|
91
|
+
ppm upgrade --check
|
|
92
|
+
|
|
93
|
+
# Install the latest
|
|
94
|
+
ppm upgrade
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Task 9: Manage auto-start on boot
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
ppm autostart enable # register
|
|
101
|
+
ppm autostart status --json # inspect
|
|
102
|
+
ppm autostart disable # unregister
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Task 10: Inspect installed skills
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
ppm skills list
|
|
109
|
+
ppm skills list --json
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## HTTP API Quick Calls
|
|
113
|
+
|
|
114
|
+
Assume `PPM_BASE=http://localhost:8080`. See [http-api.md](http-api.md) for full list.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# List projects over HTTP
|
|
118
|
+
curl -s $PPM_BASE/api/projects | jq
|
|
119
|
+
|
|
120
|
+
# List DB connections
|
|
121
|
+
curl -s $PPM_BASE/api/db/connections | jq
|
|
122
|
+
|
|
123
|
+
# Get server status (via CLI is easier; HTTP equivalent varies)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Troubleshooting
|
|
127
|
+
|
|
128
|
+
| Symptom | Check |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `ppm: command not found` | Ensure `npm i -g @hienlh/ppm` ran; check `$PATH` includes npm bin. |
|
|
131
|
+
| Server won't start | `ppm logs --tail 50`; check port conflict with `lsof -i :8080`. |
|
|
132
|
+
| Stale tunnel URL | `ppm restart --force`. |
|
|
133
|
+
| Auth prompts unexpected | `ppm config get auth.enabled`; toggle with `ppm config set auth.enabled false`. |
|
|
134
|
+
|
|
135
|
+
## Exit Code Convention
|
|
136
|
+
|
|
137
|
+
- `0` — success
|
|
138
|
+
- `1` — generic error (IO, validation, server not running)
|
|
139
|
+
- `2` — asset/setup missing (e.g. bundled skill assets)
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# PPM HTTP API
|
|
2
|
+
|
|
3
|
+
_Auto-generated. Do not edit._
|
|
4
|
+
|
|
5
|
+
_Base URL: `http://localhost:8080` (default; override via `ppm config set port <n>`)._
|
|
6
|
+
|
|
7
|
+
## /
|
|
8
|
+
|
|
9
|
+
- `GET *`
|
|
10
|
+
|
|
11
|
+
## /api/accounts
|
|
12
|
+
|
|
13
|
+
- `GET /api/accounts`
|
|
14
|
+
- `GET /api/accounts/active`
|
|
15
|
+
- `GET /api/accounts/settings`
|
|
16
|
+
- `PUT /api/accounts/settings`
|
|
17
|
+
- `POST /api/accounts`
|
|
18
|
+
- `GET /api/accounts/oauth/start`
|
|
19
|
+
- `GET /api/accounts/oauth/url`
|
|
20
|
+
- `POST /api/accounts/oauth/exchange`
|
|
21
|
+
- `GET /api/accounts/oauth/callback`
|
|
22
|
+
- `POST /api/accounts/oauth/refresh/:id`
|
|
23
|
+
- `POST /api/accounts/export`
|
|
24
|
+
- `POST /api/accounts/import`
|
|
25
|
+
- `GET /api/accounts/usage`
|
|
26
|
+
- `GET /api/accounts/:id/usage`
|
|
27
|
+
- `GET /api/accounts/:id/usage-history`
|
|
28
|
+
- `POST /api/accounts/:id/verify`
|
|
29
|
+
- `POST /api/accounts/test-export`
|
|
30
|
+
- `POST /api/accounts/test-raw-token`
|
|
31
|
+
- `POST /api/accounts/:id/test-token`
|
|
32
|
+
- `DELETE /api/accounts/:id`
|
|
33
|
+
- `PATCH /api/accounts/:id`
|
|
34
|
+
|
|
35
|
+
## /api/cloud
|
|
36
|
+
|
|
37
|
+
- `GET /api/cloud/status`
|
|
38
|
+
- `GET /api/cloud/cloud_url`
|
|
39
|
+
- `POST /api/cloud/login`
|
|
40
|
+
- `GET /api/cloud/cloud_url`
|
|
41
|
+
- `POST /api/cloud/logout`
|
|
42
|
+
- `POST /api/cloud/link`
|
|
43
|
+
- `POST /api/cloud/unlink`
|
|
44
|
+
- `GET /api/cloud/login-url`
|
|
45
|
+
- `GET /api/cloud/cloud_url`
|
|
46
|
+
|
|
47
|
+
## /api/db
|
|
48
|
+
|
|
49
|
+
- `GET /api/db/connections`
|
|
50
|
+
- `GET /api/db/connections/export`
|
|
51
|
+
- `POST /api/db/connections/import`
|
|
52
|
+
- `GET /api/db/connections/:id`
|
|
53
|
+
- `POST /api/db/connections`
|
|
54
|
+
- `PUT /api/db/connections/:id`
|
|
55
|
+
- `DELETE /api/db/connections/:id`
|
|
56
|
+
- `POST /api/db/test`
|
|
57
|
+
- `POST /api/db/connections/:id/test`
|
|
58
|
+
- `GET /api/db/connections/:id/tables`
|
|
59
|
+
- `GET /api/db/connections/:id/schema`
|
|
60
|
+
- `GET /api/db/connections/:id/data`
|
|
61
|
+
- `POST /api/db/connections/:id/query`
|
|
62
|
+
- `PUT /api/db/connections/:id/cell`
|
|
63
|
+
- `DELETE /api/db/connections/:id/row`
|
|
64
|
+
- `POST /api/db/connections/:id/rows/delete`
|
|
65
|
+
- `POST /api/db/connections/:id/row`
|
|
66
|
+
- `GET /api/db/connections/:id/export`
|
|
67
|
+
- `GET /api/db/search`
|
|
68
|
+
|
|
69
|
+
## /api/extensions
|
|
70
|
+
|
|
71
|
+
- `GET /api/extensions`
|
|
72
|
+
- `GET /api/extensions/contributions`
|
|
73
|
+
- `GET /api/extensions/:id{.+}`
|
|
74
|
+
- `POST /api/extensions/install`
|
|
75
|
+
- `POST /api/extensions/dev-link`
|
|
76
|
+
- `DELETE /api/extensions/:id{.+}`
|
|
77
|
+
- `PATCH /api/extensions/:id{.+}`
|
|
78
|
+
|
|
79
|
+
## /api/fs
|
|
80
|
+
|
|
81
|
+
- `GET /api/fs/browse`
|
|
82
|
+
- `GET /api/fs/list`
|
|
83
|
+
- `GET /api/fs/read`
|
|
84
|
+
- `GET /api/fs/raw`
|
|
85
|
+
- `DELETE /api/fs/rmdir`
|
|
86
|
+
- `POST /api/fs/mkdir`
|
|
87
|
+
- `PUT /api/fs/write`
|
|
88
|
+
|
|
89
|
+
## /api/postgres
|
|
90
|
+
|
|
91
|
+
- `POST /api/postgres/test`
|
|
92
|
+
- `POST /api/postgres/tables`
|
|
93
|
+
- `POST /api/postgres/schema`
|
|
94
|
+
- `POST /api/postgres/data`
|
|
95
|
+
- `POST /api/postgres/query`
|
|
96
|
+
- `POST /api/postgres/cell`
|
|
97
|
+
|
|
98
|
+
## /api/preview
|
|
99
|
+
|
|
100
|
+
- `POST /api/preview/tunnel`
|
|
101
|
+
- `DELETE /api/preview/tunnel/:port{[0-9]+}`
|
|
102
|
+
- `GET /api/preview/tunnels`
|
|
103
|
+
|
|
104
|
+
## /api/projects
|
|
105
|
+
|
|
106
|
+
- `GET /api/projects`
|
|
107
|
+
- `POST /api/projects`
|
|
108
|
+
- `GET /api/projects/suggest-dirs`
|
|
109
|
+
- `PATCH /api/projects/reorder`
|
|
110
|
+
- `GET /api/projects/projects`
|
|
111
|
+
- `PATCH /api/projects/:name/color`
|
|
112
|
+
- `GET /api/projects/projects`
|
|
113
|
+
- `GET /api/projects/:name/settings`
|
|
114
|
+
- `GET /api/projects/projects`
|
|
115
|
+
- `PATCH /api/projects/:name/settings`
|
|
116
|
+
- `GET /api/projects/projects`
|
|
117
|
+
- `PATCH /api/projects/:name`
|
|
118
|
+
- `DELETE /api/projects/:name`
|
|
119
|
+
|
|
120
|
+
## /api/push
|
|
121
|
+
|
|
122
|
+
- `GET /api/push/vapid-key`
|
|
123
|
+
- `POST /api/push/subscribe`
|
|
124
|
+
- `DELETE /api/push/subscribe`
|
|
125
|
+
|
|
126
|
+
## /api/settings
|
|
127
|
+
|
|
128
|
+
- `PUT /api/settings/device-name`
|
|
129
|
+
- `GET /api/settings/theme`
|
|
130
|
+
- `GET /api/settings/theme`
|
|
131
|
+
- `PUT /api/settings/theme`
|
|
132
|
+
- `GET /api/settings/ai`
|
|
133
|
+
- `GET /api/settings/ai`
|
|
134
|
+
- `PUT /api/settings/ai`
|
|
135
|
+
- `GET /api/settings/ai`
|
|
136
|
+
- `GET /api/settings/ai/providers/:id/models`
|
|
137
|
+
- `GET /api/settings/keybindings`
|
|
138
|
+
- `PUT /api/settings/keybindings`
|
|
139
|
+
- `GET /api/settings/telegram`
|
|
140
|
+
- `GET /api/settings/telegram`
|
|
141
|
+
- `PUT /api/settings/telegram`
|
|
142
|
+
- `GET /api/settings/telegram`
|
|
143
|
+
- `POST /api/settings/telegram/test`
|
|
144
|
+
- `GET /api/settings/telegram`
|
|
145
|
+
- `PUT /api/settings/auth/password`
|
|
146
|
+
- `GET /api/settings/auth`
|
|
147
|
+
- `GET /api/settings/port`
|
|
148
|
+
- `GET /api/settings/proxy`
|
|
149
|
+
- `PUT /api/settings/proxy`
|
|
150
|
+
- `GET /api/settings/clawbot`
|
|
151
|
+
- `GET /api/settings/clawbot`
|
|
152
|
+
- `PUT /api/settings/clawbot`
|
|
153
|
+
- `GET /api/settings/clawbot`
|
|
154
|
+
- `GET /api/settings/clawbot/paired`
|
|
155
|
+
- `POST /api/settings/clawbot/paired/approve`
|
|
156
|
+
- `DELETE /api/settings/clawbot/paired/:chatId`
|
|
157
|
+
- `GET /api/settings/clawbot/memories`
|
|
158
|
+
- `DELETE /api/settings/clawbot/memories/:id`
|
|
159
|
+
- `GET /api/settings/files`
|
|
160
|
+
- `PATCH /api/settings/files`
|
|
161
|
+
- `GET /api/settings/clawbot/tasks`
|
|
162
|
+
|
|
163
|
+
## /api/settings/mcp
|
|
164
|
+
|
|
165
|
+
- `GET /api/settings/mcp`
|
|
166
|
+
- `GET /api/settings/mcp/import/preview`
|
|
167
|
+
- `POST /api/settings/mcp/import`
|
|
168
|
+
- `GET /api/settings/mcp/:name`
|
|
169
|
+
- `POST /api/settings/mcp`
|
|
170
|
+
- `PUT /api/settings/mcp/:name`
|
|
171
|
+
- `DELETE /api/settings/mcp/:name`
|
|
172
|
+
|
|
173
|
+
## /api/teams
|
|
174
|
+
|
|
175
|
+
- `GET /api/teams`
|
|
176
|
+
- `GET /api/teams/:name`
|
|
177
|
+
- `DELETE /api/teams/:name`
|
|
178
|
+
|
|
179
|
+
## /api/tunnel
|
|
180
|
+
|
|
181
|
+
- `GET /api/tunnel`
|
|
182
|
+
- `GET /api/tunnel/port`
|
|
183
|
+
- `POST /api/tunnel/start`
|
|
184
|
+
- `GET /api/tunnel/port`
|
|
185
|
+
- `POST /api/tunnel/stop`
|
|
186
|
+
|
|
187
|
+
## /api/upgrade
|
|
188
|
+
|
|
189
|
+
- `GET /api/upgrade`
|
|
190
|
+
- `POST /api/upgrade/apply`
|
|
191
|
+
|
|
192
|
+
## /proxy
|
|
193
|
+
|
|
194
|
+
- `POST /proxy/v1/messages`
|
|
195
|
+
- `POST /proxy/v1/chat/completions`
|
|
196
|
+
- `POST /proxy/v1/messages/count_tokens`
|
|
197
|
+
|
|
198
|
+
## WebSocket
|
|
199
|
+
|
|
200
|
+
- `ws://<host>/ws/chat` — AI chat stream (Claude Agent SDK)
|
|
201
|
+
- `ws://<host>/ws/terminal` — PTY terminal multiplexer
|
|
202
|
+
- `ws://<host>/ws/extensions` — extension host channel
|
|
203
|
+
|
|
204
|
+
<!-- Generated from src/server/routes/ for PPM v0.13.2 -->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{D as r,_ as i,b as a,c as o,d as s,f as c,g as l,h as u,m as d,p as f,s as p,u as m,v as h,x as g,y as _}from"./vendor-ui-B-89Uj8i.js";import{t as v}from"./createLucideIcon-BjHrJDVb.js";import{i as y}from"./dist-D7KGU7Vl.js";import{n as b,r as x}from"./plus-51UQ45rf.js";import{t as S}from"./input-Dk49gO8E.js";import{t as C}from"./refresh-cw-LlbZDJpO.js";import{t as w}from"./trash-2-CJYoLw7Q.js";import{i as T,t as E}from"./api-client-Dvzcc_EO.js";import{n as D}from"./utils-CTg5uAYR.js";import{a as O,h as k}from"./api-settings-DAk7D-NP.js";var A=v(`bell-off`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742`,key:`178tsu`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05`,key:`1hqiys`}]]),j=v(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),M=v(`bug`,[[`path`,{d:`M12 20v-9`,key:`1qisl0`}],[`path`,{d:`M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z`,key:`uouzyp`}],[`path`,{d:`M14.12 3.88 16 2`,key:`qol33r`}],[`path`,{d:`M21 21a4 4 0 0 0-3.81-4`,key:`1b0z45`}],[`path`,{d:`M21 5a4 4 0 0 1-3.55 3.97`,key:`5cxbf6`}],[`path`,{d:`M22 13h-4`,key:`1jl80f`}],[`path`,{d:`M3 21a4 4 0 0 1 3.81-4`,key:`1fjd4g`}],[`path`,{d:`M3 5a4 4 0 0 0 3.55 3.97`,key:`1d7oge`}],[`path`,{d:`M6 13H2`,key:`82j7cp`}],[`path`,{d:`m8 2 1.88 1.88`,key:`fmnt4t`}],[`path`,{d:`M9 7.13V6a3 3 0 1 1 6 0v1.13`,key:`1vgav8`}]]),N=v(`lock`,[[`rect`,{width:`18`,height:`11`,x:`3`,y:`11`,rx:`2`,ry:`2`,key:`1w4ew1`}],[`path`,{d:`M7 11V7a5 5 0 0 1 10 0v4`,key:`fwvmzm`}]]),P=v(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),F=v(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),I=e(n(),1),L=t();function R({className:e,...t}){return(0,L.jsx)(r,{"data-slot":`label`,className:D(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}var z=I.forwardRef(({className:e,...t},n)=>(0,L.jsx)(p,{className:D(`peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input`,e),...t,ref:n,children:(0,L.jsx)(o,{className:D(`pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})}));z.displayName=p.displayName;function B({...e}){return(0,L.jsx)(l,{"data-slot":`select`,...e})}function V({...e}){return(0,L.jsx)(a,{"data-slot":`select-value`,...e})}function H({className:e,size:t=`default`,children:n,...r}){return(0,L.jsxs)(_,{"data-slot":`select-trigger`,"data-size":t,className:D(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,L.jsx)(s,{asChild:!0,children:(0,L.jsx)(x,{className:`size-4 opacity-50`})})]})}function U({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,L.jsx)(u,{children:(0,L.jsxs)(m,{"data-slot":`select-content`,className:D(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,L.jsx)(G,{}),(0,L.jsx)(g,{className:D(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,L.jsx)(K,{})]})})}function W({className:e,children:t,...n}){return(0,L.jsxs)(c,{"data-slot":`select-item`,className:D(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,L.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,L.jsx)(f,{children:(0,L.jsx)(y,{className:`size-4`})})}),(0,L.jsx)(d,{children:t})]})}function G({className:e,...t}){return(0,L.jsx)(h,{"data-slot":`select-scroll-up-button`,className:D(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,L.jsx)(b,{className:`size-4`})})}function K({className:e,...t}){return(0,L.jsx)(i,{"data-slot":`select-scroll-down-button`,className:D(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,L.jsx)(x,{className:`size-4`})})}var q={claude:`C`,cursor:`▶`,codex:`◆`,gemini:`G`};function J({value:e,onChange:t,projectName:n}){let[r,i]=(0,I.useState)([]),[a,o]=(0,I.useState)(!1),s=(0,I.useRef)(null),c=(0,I.useRef)(0);(0,I.useEffect)(()=>{n&&E.get(`${T(n)}/chat/providers`).then(i).catch(()=>{})},[n]),(0,I.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),(0,I.useEffect)(()=>{a&&(c.current=Math.max(0,r.findIndex(t=>t.id===e)))},[a,e,r]);let l=(0,I.useCallback)(e=>{if(e.key===`Escape`){o(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;c.current=(c.current+t+r.length)%r.length,(s.current?.querySelector(`[data-idx="${c.current}"]`))?.focus()}if(e.key===`Enter`){e.preventDefault();let n=r[c.current];n&&(t(n.id),o(!1))}},[t,r]);if(r.length<=1)return null;let u=r.find(t=>t.id===e),d=q[e]||`?`;return(0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o(e=>!e)},className:`inline-flex items-center gap-1 px-2 py-1 rounded-md text-[11px] text-text-subtle hover:text-text-primary hover:bg-surface-elevated transition-colors border border-transparent hover:border-border`,"aria-label":`AI Provider: ${u?.name??e}`,children:[(0,L.jsx)(`span`,{className:`inline-flex h-3.5 w-3.5 items-center justify-center rounded text-[9px] font-bold bg-surface-elevated shrink-0`,children:d}),(0,L.jsx)(`span`,{className:`max-w-[80px] truncate capitalize`,children:u?.name??e})]}),a&&(0,L.jsxs)(`div`,{ref:s,role:`listbox`,"aria-label":`AI Providers`,onKeyDown:l,onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:`absolute bottom-full left-0 mb-1 z-50 w-56 rounded-lg border border-border bg-surface shadow-lg`,children:[(0,L.jsx)(`div`,{className:`px-3 py-2 border-b border-border`,children:(0,L.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:`Provider`})}),(0,L.jsx)(`div`,{className:`py-1`,children:r.map((n,r)=>{let i=q[n.id]||`?`,a=n.id===e;return(0,L.jsxs)(`button`,{"data-idx":r,role:`option`,"aria-selected":a,tabIndex:0,onClick:()=>{t(n.id),o(!1)},className:`w-full flex items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-surface-elevated focus:bg-surface-elevated focus:outline-none ${a?`bg-surface-elevated`:``}`,children:[(0,L.jsx)(`span`,{className:`inline-flex h-5 w-5 items-center justify-center rounded text-[11px] font-bold bg-surface-elevated text-text-subtle shrink-0`,children:i}),(0,L.jsx)(`span`,{className:`flex-1 text-sm font-medium text-text-primary capitalize`,children:n.name}),a&&(0,L.jsx)(y,{className:`size-4 shrink-0 text-primary`})]},n.id)})})]})]})}function Y({providerId:e}){return(0,L.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center rounded text-[10px] font-bold bg-surface-elevated text-text-subtle shrink-0`,title:e,children:q[e]||`?`})}var X=[{value:`low`,label:`Low`},{value:`medium`,label:`Medium`},{value:`high`,label:`High`}],Z=[{value:`bypassPermissions`,label:`Bypass permissions (default)`},{value:`default`,label:`Ask before edits`},{value:`acceptEdits`,label:`Edit automatically`},{value:`plan`,label:`Plan mode`}],Q={claude:`Claude`,cursor:`Cursor`,codex:`Codex`,gemini:`Gemini`};function $({compact:e}={}){let[t,n]=(0,I.useState)(null),[r,i]=(0,I.useState)(``),[a,o]=(0,I.useState)([]),[s,c]=(0,I.useState)(!1),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),[p,m]=(0,I.useState)(0);(0,I.useEffect)(()=>{O().then(e=>{n(e),i(e.default_provider??`claude`)}).catch(e=>f(e.message))},[]),(0,I.useEffect)(()=>{r&&(c(!0),E.get(`/api/settings/ai/providers/${r}/models`).then(o).catch(()=>o([])).finally(()=>c(!1)))},[r]);let h=t?Object.keys(t.providers).filter(e=>e!==`mock`).map(e=>({id:e,name:Q[e]??e})):[],g=t?.providers[r],_=g?.type===`agent-sdk`||!g?.type&&r===`claude`,v=async(e,i)=>{if(t){u(!0),f(null);try{n(await k({providers:{[r]:{[e]:i}}})),m(e=>e+1)}catch(e){f(e.message)}finally{u(!1)}}},y=e?`text-[11px]`:`text-sm`,b=e?`text-xs`:`text-sm`,x=e?`space-y-2`:`space-y-4`,C=e?`space-y-1.5`:`space-y-3`,w=e?`space-y-1`:`space-y-1.5`;if(!t)return(0,L.jsxs)(`div`,{className:C,children:[(0,L.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),(0,L.jsx)(`p`,{className:`${y} text-text-subtle`,children:d?`Error: ${d}`:`Loading...`})]});let T=_?a:[{value:`__default__`,label:`Auto (default)`},...a];return(0,L.jsxs)(`div`,{className:x,children:[(0,L.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),h.length>1&&(0,L.jsx)(`div`,{className:`flex gap-0.5 border-b border-border/50 -mx-1 px-1`,children:h.map(e=>(0,L.jsxs)(`button`,{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-1 text-[11px] rounded-t transition-colors ${r===e.id?`text-primary border-b-2 border-primary font-medium`:`text-text-subtle hover:text-text-secondary`}`,children:[(0,L.jsx)(Y,{providerId:e.id}),(0,L.jsx)(`span`,{className:`capitalize`,children:e.name})]},e.id))}),(0,L.jsxs)(`div`,{className:C,children:[a.length>0&&(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-model`,className:e?y:void 0,children:`Model`}),(0,L.jsxs)(B,{value:_?g?.model??a[0]?.value:g?.model||`__default__`,onValueChange:e=>v(`model`,e===`__default__`?void 0:e),disabled:s,children:[(0,L.jsx)(H,{id:`ai-model`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,L.jsx)(V,{placeholder:s?`Loading models...`:`Select model`})}),(0,L.jsx)(U,{className:`max-h-[300px]`,children:T.map(e=>(0,L.jsx)(W,{value:e.value,children:e.label},e.value))})]})]}),_&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-base-url`,className:e?y:void 0,children:`Base URL`}),(0,L.jsx)(S,{id:`ai-base-url`,type:`url`,defaultValue:g?.base_url??``,placeholder:`https://api.anthropic.com (default)`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{v(`base_url`,e.target.value.trim()||void 0)}},`baseurl-${r}-${p}`)]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-api-key`,className:e?y:void 0,children:`API Key / Token`}),(0,L.jsx)(S,{id:`ai-api-key`,type:`password`,defaultValue:g?.api_key??``,placeholder:`sk-ant-... (optional, overrides accounts)`,className:e?`h-7 text-[11px] font-mono`:`font-mono`,onBlur:e=>{let t=e.target.value.trim();t.startsWith(`••••`)||v(`api_key`,t||void 0)}},`apikey-${r}-${p}`),(0,L.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Direct API key or OAuth token. Leave empty to use connected accounts.`})]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-effort`,className:e?y:void 0,children:`Effort`}),(0,L.jsxs)(B,{value:g?.effort??`high`,onValueChange:e=>v(`effort`,e),children:[(0,L.jsx)(H,{id:`ai-effort`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,L.jsx)(V,{})}),(0,L.jsx)(U,{children:X.map(e=>(0,L.jsx)(W,{value:e.value,children:e.label},e.value))})]})]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-max-turns`,className:e?y:void 0,children:`Max Turns (1-500)`}),(0,L.jsx)(S,{id:`ai-max-turns`,type:`number`,min:1,max:500,defaultValue:g?.max_turns??100,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);isNaN(t)||v(`max_turns`,t)}},`turns-${r}-${p}`)]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-budget`,className:e?y:void 0,children:`Max Budget (USD)`}),(0,L.jsx)(S,{id:`ai-budget`,type:`number`,step:.1,min:.01,max:50,defaultValue:g?.max_budget_usd??``,placeholder:`No limit`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseFloat(e.target.value);v(`max_budget_usd`,isNaN(t)?void 0:t)}},`budget-${r}-${p}`)]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-thinking`,className:e?y:void 0,children:`Thinking Budget (tokens)`}),(0,L.jsx)(S,{id:`ai-thinking`,type:`number`,min:0,defaultValue:g?.thinking_budget_tokens??``,placeholder:`Disabled`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);v(`thinking_budget_tokens`,isNaN(t)?void 0:t)}},`thinking-${r}-${p}`)]}),(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(R,{htmlFor:`ai-agent-teams`,className:e?y:void 0,children:`Agent Teams`}),(0,L.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Experimental. Enables multi-agent collaboration with shared tasks and messaging. Uses ~7x more tokens.`})]}),(0,L.jsx)(z,{id:`ai-agent-teams`,checked:g?.agent_teams??!1,onCheckedChange:e=>v(`agent_teams`,e)})]}),g?.agent_teams&&(0,L.jsx)(ee,{compact:e})]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-permission-mode`,className:e?y:void 0,children:`Default Permission Mode`}),(0,L.jsxs)(B,{value:g?.permission_mode??`bypassPermissions`,onValueChange:e=>v(`permission_mode`,e),children:[(0,L.jsx)(H,{id:`ai-permission-mode`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,L.jsx)(V,{})}),(0,L.jsx)(U,{children:Z.map(e=>(0,L.jsx)(W,{value:e.value,children:e.label},e.value))})]})]}),(0,L.jsxs)(`div`,{className:w,children:[(0,L.jsx)(R,{htmlFor:`ai-system-prompt`,className:e?y:void 0,children:`Additional Instructions`}),(0,L.jsx)(`textarea`,{id:`ai-system-prompt`,rows:e?3:4,defaultValue:g?.system_prompt??``,placeholder:`Enter additional instructions for ${r}...`,className:`w-full rounded-md border border-input bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${e?`text-[11px]`:`text-sm`}`,onBlur:e=>{v(`system_prompt`,e.target.value.trim()||void 0)}},`sysprompt-${r}-${p}`)]})]}),l&&(0,L.jsx)(`p`,{className:`text-xs text-text-subtle`,children:`Saving...`}),d&&(0,L.jsx)(`p`,{className:`text-xs text-red-500`,children:d})]})}function ee({compact:e}){let[t,n]=(0,I.useState)([]),[r,i]=(0,I.useState)(!1),[a,o]=(0,I.useState)(null),s=(0,I.useCallback)(async()=>{i(!0);try{n(await E.get(`/api/teams`)??[])}catch{}i(!1)},[]);(0,I.useEffect)(()=>{s()},[s]);let c=async e=>{try{await E.del(`/api/teams/${encodeURIComponent(e)}`),n(t=>t.filter(t=>t.name!==e)),o(null)}catch{}};return t.length===0&&!r?null:(0,L.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,L.jsxs)(R,{className:e?`text-[11px]`:void 0,children:[`Teams (`,t.length,`)`]}),(0,L.jsx)(`button`,{onClick:s,className:`text-text-subtle hover:text-foreground p-1`,"aria-label":`Refresh teams`,children:(0,L.jsx)(C,{className:`size-3 ${r?`animate-spin`:``}`})})]}),t.map(e=>(0,L.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded bg-surface-elevated text-xs`,children:[(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsx)(`div`,{className:`font-medium truncate`,children:e.name}),e.description&&(0,L.jsx)(`div`,{className:`text-text-subtle truncate`,children:e.description}),(0,L.jsxs)(`div`,{className:`text-text-subtle`,children:[e.members?.length??e.memberCount??0,` members`,e.createdAt?` · ${new Date(e.createdAt).toLocaleDateString()}`:``]})]}),a===e.name?(0,L.jsxs)(`div`,{className:`flex gap-1 shrink-0 ml-2`,children:[(0,L.jsx)(`button`,{onClick:()=>c(e.name),className:`px-2 py-1 bg-red-600 text-white rounded text-[10px]`,children:`Delete`}),(0,L.jsx)(`button`,{onClick:()=>o(null),className:`px-2 py-1 bg-zinc-600 text-white rounded text-[10px]`,children:`Cancel`})]}):(0,L.jsx)(`button`,{onClick:()=>o(e.name),className:`shrink-0 text-text-subtle hover:text-red-500 p-1 ml-2`,"aria-label":`Delete team ${e.name}`,children:(0,L.jsx)(w,{className:`size-3.5`})})]},e.name))]})}export{U as a,V as c,F as d,P as f,A as g,j as h,B as i,z as l,M as m,Y as n,W as o,N as p,J as r,H as s,$ as t,R as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-FhOqtrmT.js";import{t}from"./api-client-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-FhOqtrmT.js";import{t}from"./api-client-Dvzcc_EO.js";var n=e({addAccount:()=>a,deleteAccount:()=>o,exchangeOAuthCode:()=>d,getAISettings:()=>g,getAccountSettings:()=>c,getAccounts:()=>r,getActiveAccount:()=>i,getAllAccountUsages:()=>f,getOAuthUrl:()=>u,getProxySettings:()=>v,getUsageHistory:()=>p,importAccounts:()=>m,patchAccount:()=>s,updateAISettings:()=>_,updateAccountSettings:()=>l,updateDeviceName:()=>h,updateProxySettings:()=>y});function r(){return t.get(`/api/accounts`)}function i(){return t.get(`/api/accounts/active`)}function a(e){return t.post(`/api/accounts`,e)}function o(e){return t.del(`/api/accounts/${e}`)}function s(e,n){return t.patch(`/api/accounts/${e}`,n)}function c(){return t.get(`/api/accounts/settings`)}function l(e){return t.put(`/api/accounts/settings`,e)}function u(){return t.get(`/api/accounts/oauth/url`)}function d(e,n){return t.post(`/api/accounts/oauth/exchange`,{code:e,state:n})}function f(){return t.get(`/api/accounts/usage`)}function p(e){return t.get(`/api/accounts/${e}/usage-history`)}function m(e){return t.post(`/api/accounts/import`,e)}function h(e){return t.put(`/api/settings/device-name`,{device_name:e})}function g(){return t.get(`/api/settings/ai`)}function _(e){return t.put(`/api/settings/ai`,e)}function v(){return t.get(`/api/settings/proxy`)}function y(e){return t.put(`/api/settings/proxy`,e)}export{y as _,g as a,i as c,v as d,p as f,l as g,_ as h,d as i,f as l,s as m,n,c as o,m as p,o as r,r as s,a as t,u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{W as e}from"./vendor-mermaid-Dx86tuVP.js";export{e as createArchitectureServices};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./createLucideIcon-BjHrJDVb.js";import{t as n}from"./file-exclamation-point-BwzaQ50n.js";import"./api-client-
|
|
1
|
+
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./createLucideIcon-BjHrJDVb.js";import{t as n}from"./file-exclamation-point-BwzaQ50n.js";import"./api-client-Dvzcc_EO.js";import{t as r}from"./utils-CTg5uAYR.js";import{I as i}from"./index-BGFG66Gh.js";import{t as a}from"./use-blob-url-e9uTXjv5.js";var o=t(`music`,[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]),s=e();function c({filePath:e,projectName:t}){let{blobUrl:c,error:l}=a(e,t);return l?(0,s.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,s.jsx)(n,{className:`size-10 text-text-subtle`}),(0,s.jsx)(`p`,{className:`text-sm`,children:`Failed to load audio.`})]}):c?(0,s.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-4 p-4 bg-surface`,children:[(0,s.jsx)(o,{className:`size-16 text-text-subtle`}),(0,s.jsx)(`p`,{className:`text-sm text-text-secondary truncate max-w-xs`,children:r(e)}),(0,s.jsx)(`audio`,{src:c,controls:!0,className:`w-full max-w-md`})]}):(0,s.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,s.jsx)(i,{className:`size-5 animate-spin text-text-subtle`})})}export{c as AudioPreview};
|