@openparachute/agent 0.1.2 → 0.2.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.
Files changed (608) hide show
  1. package/.parachute/module.json +124 -8
  2. package/LICENSE +2 -16
  3. package/README.md +118 -166
  4. package/package.json +35 -42
  5. package/scripts/spawn-agent.ts +371 -0
  6. package/src/_parked/interactive-spawn.test.ts +324 -0
  7. package/src/_parked/interactive-spawn.ts +701 -0
  8. package/src/agent-defs.test.ts +1504 -0
  9. package/src/agent-defs.ts +1702 -0
  10. package/src/agent-mcp-config.test.ts +115 -0
  11. package/src/agent-mcp-config.ts +115 -0
  12. package/src/agents.test.ts +360 -0
  13. package/src/agents.ts +379 -0
  14. package/src/auth.test.ts +46 -0
  15. package/src/auth.ts +140 -0
  16. package/src/backends/attached-queue.test.ts +376 -0
  17. package/src/backends/attached-queue.ts +372 -0
  18. package/src/backends/programmatic.test.ts +1715 -0
  19. package/src/backends/programmatic.ts +927 -0
  20. package/src/backends/registry.test.ts +1494 -0
  21. package/src/backends/registry.ts +1202 -0
  22. package/src/backends/stream-json.test.ts +570 -0
  23. package/src/backends/stream-json.ts +392 -0
  24. package/src/backends/types.ts +223 -0
  25. package/src/bridge.ts +417 -0
  26. package/src/channel-backend-wiring.test.ts +237 -0
  27. package/src/credentials.test.ts +274 -0
  28. package/src/credentials.ts +380 -0
  29. package/src/cron.test.ts +342 -0
  30. package/src/cron.ts +380 -0
  31. package/src/daemon-agent-def-api.test.ts +166 -0
  32. package/src/daemon-agent-defs-api.test.ts +953 -0
  33. package/src/daemon-agent-env-api.test.ts +338 -0
  34. package/src/daemon-attached-queue-store.test.ts +65 -0
  35. package/src/daemon-config-api.test.ts +962 -0
  36. package/src/daemon-jobs-api.test.ts +271 -0
  37. package/src/daemon-vault-chat.test.ts +250 -0
  38. package/src/daemon.test.ts +746 -0
  39. package/src/daemon.ts +3314 -0
  40. package/src/def-vaults.test.ts +136 -0
  41. package/src/def-vaults.ts +165 -0
  42. package/src/delivery-state.test.ts +110 -0
  43. package/src/delivery-state.ts +154 -0
  44. package/src/effective-env.test.ts +114 -0
  45. package/src/effective-env.ts +184 -0
  46. package/src/env-compat.ts +39 -0
  47. package/src/grants.test.ts +638 -0
  48. package/src/grants.ts +675 -0
  49. package/src/hub-jwt.test.ts +161 -0
  50. package/src/hub-jwt.ts +182 -0
  51. package/src/jobs.test.ts +245 -0
  52. package/src/jobs.ts +266 -0
  53. package/src/mcp-http.test.ts +265 -0
  54. package/src/mcp-http.ts +771 -0
  55. package/src/mint-token.test.ts +152 -0
  56. package/src/mint-token.ts +139 -0
  57. package/src/module-manifest.test.ts +158 -0
  58. package/src/oauth-discovery.ts +134 -0
  59. package/src/programmatic-wiring.test.ts +838 -0
  60. package/src/registry.test.ts +227 -0
  61. package/src/registry.ts +228 -0
  62. package/src/resolve-port.test.ts +64 -0
  63. package/src/routing.test.ts +184 -0
  64. package/src/routing.ts +76 -0
  65. package/src/runner.test.ts +506 -0
  66. package/src/runner.ts +255 -0
  67. package/src/sandbox/config.test.ts +150 -0
  68. package/src/sandbox/config.ts +102 -0
  69. package/src/sandbox/egress.test.ts +113 -0
  70. package/src/sandbox/egress.ts +123 -0
  71. package/src/sandbox/index.ts +180 -0
  72. package/src/sandbox/live-seatbelt.test.ts +277 -0
  73. package/src/sandbox/mounts.test.ts +154 -0
  74. package/src/sandbox/mounts.ts +133 -0
  75. package/src/sandbox/sandbox.test.ts +168 -0
  76. package/src/sandbox/types.ts +382 -0
  77. package/src/services-manifest.test.ts +106 -0
  78. package/src/services-manifest.ts +95 -0
  79. package/src/spa-serve.test.ts +116 -0
  80. package/src/spa-serve.ts +116 -0
  81. package/src/spawn-agent-cli.test.ts +172 -0
  82. package/src/spawn-agent.test.ts +1218 -0
  83. package/src/spawn-agent.ts +569 -0
  84. package/src/spawn-deps.test.ts +54 -0
  85. package/src/spawn-deps.ts +166 -0
  86. package/src/telegram/api.ts +153 -0
  87. package/src/terminal-assets.test.ts +50 -0
  88. package/src/terminal-assets.ts +79 -0
  89. package/src/terminal-ui.ts +305 -0
  90. package/src/terminal.test.ts +530 -0
  91. package/src/terminal.ts +458 -0
  92. package/src/transport.ts +270 -0
  93. package/src/transports/http-ui.test.ts +455 -0
  94. package/src/transports/http-ui.ts +201 -0
  95. package/src/transports/telegram.test.ts +174 -0
  96. package/src/transports/telegram.ts +426 -0
  97. package/src/transports/vault.test.ts +2011 -0
  98. package/src/transports/vault.ts +1790 -0
  99. package/src/ui-kit.test.ts +178 -0
  100. package/src/ui-kit.ts +402 -0
  101. package/tsconfig.json +8 -14
  102. package/web/ui/dist/assets/index-C-iWdFFV.css +1 -0
  103. package/web/ui/dist/assets/index-VFETBk0a.js +60 -0
  104. package/web/ui/dist/index.html +15 -0
  105. package/web/ui/tsconfig.json +2 -1
  106. package/.claude/scheduled_tasks.lock +0 -1
  107. package/.claude/settings.json +0 -5
  108. package/.claude/skills/add-atomic-chat-tool/SKILL.md +0 -243
  109. package/.claude/skills/add-atomic-chat-tool/atomic-chat-mcp-stdio.ts +0 -229
  110. package/.claude/skills/add-codex/SKILL.md +0 -161
  111. package/.claude/skills/add-dashboard/SKILL.md +0 -138
  112. package/.claude/skills/add-dashboard/resources/dashboard-pusher.ts +0 -495
  113. package/.claude/skills/add-emacs/SKILL.md +0 -296
  114. package/.claude/skills/add-gcal-tool/SKILL.md +0 -210
  115. package/.claude/skills/add-gchat/REMOVE.md +0 -6
  116. package/.claude/skills/add-gchat/SKILL.md +0 -92
  117. package/.claude/skills/add-gchat/VERIFY.md +0 -3
  118. package/.claude/skills/add-github/REMOVE.md +0 -6
  119. package/.claude/skills/add-github/SKILL.md +0 -148
  120. package/.claude/skills/add-github/VERIFY.md +0 -3
  121. package/.claude/skills/add-gmail-tool/SKILL.md +0 -229
  122. package/.claude/skills/add-imessage/REMOVE.md +0 -6
  123. package/.claude/skills/add-imessage/SKILL.md +0 -113
  124. package/.claude/skills/add-imessage/VERIFY.md +0 -3
  125. package/.claude/skills/add-karpathy-llm-wiki/SKILL.md +0 -110
  126. package/.claude/skills/add-karpathy-llm-wiki/llm-wiki.md +0 -75
  127. package/.claude/skills/add-linear/REMOVE.md +0 -6
  128. package/.claude/skills/add-linear/SKILL.md +0 -168
  129. package/.claude/skills/add-linear/VERIFY.md +0 -3
  130. package/.claude/skills/add-macos-statusbar/SKILL.md +0 -133
  131. package/.claude/skills/add-macos-statusbar/add/src/statusbar.swift +0 -147
  132. package/.claude/skills/add-matrix/REMOVE.md +0 -6
  133. package/.claude/skills/add-matrix/SKILL.md +0 -148
  134. package/.claude/skills/add-matrix/VERIFY.md +0 -3
  135. package/.claude/skills/add-ollama-provider/SKILL.md +0 -179
  136. package/.claude/skills/add-ollama-tool/SKILL.md +0 -193
  137. package/.claude/skills/add-opencode/SKILL.md +0 -229
  138. package/.claude/skills/add-parallel/SKILL.md +0 -290
  139. package/.claude/skills/add-resend/REMOVE.md +0 -6
  140. package/.claude/skills/add-resend/SKILL.md +0 -93
  141. package/.claude/skills/add-resend/VERIFY.md +0 -3
  142. package/.claude/skills/add-signal/REMOVE.md +0 -13
  143. package/.claude/skills/add-signal/SKILL.md +0 -318
  144. package/.claude/skills/add-signal/VERIFY.md +0 -5
  145. package/.claude/skills/add-slack/REMOVE.md +0 -6
  146. package/.claude/skills/add-slack/SKILL.md +0 -112
  147. package/.claude/skills/add-slack/VERIFY.md +0 -3
  148. package/.claude/skills/add-teams/REMOVE.md +0 -6
  149. package/.claude/skills/add-teams/SKILL.md +0 -207
  150. package/.claude/skills/add-teams/VERIFY.md +0 -3
  151. package/.claude/skills/add-vercel/SKILL.md +0 -147
  152. package/.claude/skills/add-vercel/container-skills/vercel-cli/SKILL.md +0 -103
  153. package/.claude/skills/add-webex/REMOVE.md +0 -6
  154. package/.claude/skills/add-webex/SKILL.md +0 -88
  155. package/.claude/skills/add-webex/VERIFY.md +0 -3
  156. package/.claude/skills/add-wechat/REMOVE.md +0 -49
  157. package/.claude/skills/add-wechat/SKILL.md +0 -170
  158. package/.claude/skills/add-wechat/scripts/wire-dm.ts +0 -172
  159. package/.claude/skills/add-whatsapp/SKILL.md +0 -264
  160. package/.claude/skills/add-whatsapp-cloud/REMOVE.md +0 -6
  161. package/.claude/skills/add-whatsapp-cloud/SKILL.md +0 -95
  162. package/.claude/skills/add-whatsapp-cloud/VERIFY.md +0 -3
  163. package/.claude/skills/claw/SKILL.md +0 -131
  164. package/.claude/skills/claw/scripts/claw +0 -374
  165. package/.claude/skills/convert-to-apple-container/SKILL.md +0 -212
  166. package/.claude/skills/customize/SKILL.md +0 -110
  167. package/.claude/skills/debug/SKILL.md +0 -349
  168. package/.claude/skills/get-qodo-rules/SKILL.md +0 -122
  169. package/.claude/skills/get-qodo-rules/references/output-format.md +0 -41
  170. package/.claude/skills/get-qodo-rules/references/pagination.md +0 -33
  171. package/.claude/skills/get-qodo-rules/references/repository-scope.md +0 -26
  172. package/.claude/skills/init-first-agent/SKILL.md +0 -120
  173. package/.claude/skills/init-onecli/SKILL.md +0 -270
  174. package/.claude/skills/manage-channels/SKILL.md +0 -87
  175. package/.claude/skills/manage-mounts/SKILL.md +0 -47
  176. package/.claude/skills/migrate-from-openclaw/MIGRATE_CRONS.md +0 -100
  177. package/.claude/skills/migrate-from-openclaw/SKILL.md +0 -447
  178. package/.claude/skills/migrate-from-openclaw/scripts/discover-openclaw.ts +0 -734
  179. package/.claude/skills/migrate-from-openclaw/scripts/extract-channel-credentials.ts +0 -476
  180. package/.claude/skills/migrate-nanoclaw/SKILL.md +0 -484
  181. package/.claude/skills/migrate-nanoclaw/diagnostics.md +0 -51
  182. package/.claude/skills/qodo-pr-resolver/SKILL.md +0 -326
  183. package/.claude/skills/qodo-pr-resolver/resources/providers.md +0 -329
  184. package/.claude/skills/update-nanoclaw/SKILL.md +0 -243
  185. package/.claude/skills/update-nanoclaw/diagnostics.md +0 -48
  186. package/.claude/skills/update-skills/SKILL.md +0 -130
  187. package/.claude/skills/use-native-credential-proxy/SKILL.md +0 -167
  188. package/.claude/skills/x-integration/SKILL.md +0 -417
  189. package/.claude/skills/x-integration/agent.ts +0 -243
  190. package/.claude/skills/x-integration/host.ts +0 -155
  191. package/.claude/skills/x-integration/lib/browser.ts +0 -148
  192. package/.claude/skills/x-integration/lib/config.ts +0 -62
  193. package/.claude/skills/x-integration/scripts/like.ts +0 -56
  194. package/.claude/skills/x-integration/scripts/post.ts +0 -66
  195. package/.claude/skills/x-integration/scripts/quote.ts +0 -80
  196. package/.claude/skills/x-integration/scripts/reply.ts +0 -74
  197. package/.claude/skills/x-integration/scripts/retweet.ts +0 -62
  198. package/.claude/skills/x-integration/scripts/setup.ts +0 -87
  199. package/.github/CODEOWNERS +0 -10
  200. package/.github/PULL_REQUEST_TEMPLATE.md +0 -18
  201. package/.github/workflows/bump-version.yml +0 -35
  202. package/.github/workflows/ci.yml +0 -39
  203. package/.github/workflows/label-pr.yml +0 -40
  204. package/.github/workflows/update-tokens.yml +0 -43
  205. package/.husky/pre-commit +0 -1
  206. package/.mcp.json +0 -3
  207. package/.nvmrc +0 -1
  208. package/.prettierrc +0 -4
  209. package/CHANGELOG.md +0 -263
  210. package/CLAUDE.md +0 -307
  211. package/CODE_OF_CONDUCT.md +0 -128
  212. package/CONTRIBUTING.md +0 -159
  213. package/CONTRIBUTORS.md +0 -26
  214. package/LICENSE-NANOCLAW-MIT +0 -21
  215. package/README_ja.md +0 -194
  216. package/README_zh.md +0 -194
  217. package/assets/nanoclaw-favicon.png +0 -0
  218. package/assets/nanoclaw-icon.png +0 -0
  219. package/assets/nanoclaw-logo-dark.png +0 -0
  220. package/assets/nanoclaw-logo.png +0 -0
  221. package/assets/nanoclaw-profile.jpeg +0 -0
  222. package/assets/nanoclaw-sales.png +0 -0
  223. package/assets/social-preview.jpg +0 -0
  224. package/config-examples/mount-allowlist.json +0 -25
  225. package/container/.dockerignore +0 -2
  226. package/container/CLAUDE.md +0 -21
  227. package/container/Dockerfile +0 -121
  228. package/container/agent-runner/bun.lock +0 -243
  229. package/container/agent-runner/package.json +0 -22
  230. package/container/agent-runner/scripts/sdk-signal-probe.ts +0 -169
  231. package/container/agent-runner/src/config.ts +0 -55
  232. package/container/agent-runner/src/db/connection.ts +0 -267
  233. package/container/agent-runner/src/db/index.ts +0 -20
  234. package/container/agent-runner/src/db/messages-in.ts +0 -138
  235. package/container/agent-runner/src/db/messages-out.ts +0 -143
  236. package/container/agent-runner/src/db/session-routing.ts +0 -30
  237. package/container/agent-runner/src/db/session-state.test.ts +0 -100
  238. package/container/agent-runner/src/db/session-state.ts +0 -79
  239. package/container/agent-runner/src/destinations.ts +0 -135
  240. package/container/agent-runner/src/formatter.test.ts +0 -167
  241. package/container/agent-runner/src/formatter.ts +0 -260
  242. package/container/agent-runner/src/index.ts +0 -110
  243. package/container/agent-runner/src/integration.test.ts +0 -121
  244. package/container/agent-runner/src/mcp-tools/agents.instructions.md +0 -26
  245. package/container/agent-runner/src/mcp-tools/agents.ts +0 -66
  246. package/container/agent-runner/src/mcp-tools/core.instructions.md +0 -27
  247. package/container/agent-runner/src/mcp-tools/core.ts +0 -262
  248. package/container/agent-runner/src/mcp-tools/index.ts +0 -22
  249. package/container/agent-runner/src/mcp-tools/interactive.instructions.md +0 -22
  250. package/container/agent-runner/src/mcp-tools/interactive.ts +0 -169
  251. package/container/agent-runner/src/mcp-tools/scheduling.instructions.md +0 -40
  252. package/container/agent-runner/src/mcp-tools/scheduling.ts +0 -299
  253. package/container/agent-runner/src/mcp-tools/self-mod.instructions.md +0 -25
  254. package/container/agent-runner/src/mcp-tools/self-mod.ts +0 -120
  255. package/container/agent-runner/src/mcp-tools/server.ts +0 -54
  256. package/container/agent-runner/src/mcp-tools/types.ts +0 -6
  257. package/container/agent-runner/src/poll-loop.test.ts +0 -248
  258. package/container/agent-runner/src/poll-loop.ts +0 -437
  259. package/container/agent-runner/src/providers/claude.ts +0 -379
  260. package/container/agent-runner/src/providers/factory.test.ts +0 -19
  261. package/container/agent-runner/src/providers/factory.ts +0 -13
  262. package/container/agent-runner/src/providers/index.ts +0 -6
  263. package/container/agent-runner/src/providers/mock.ts +0 -77
  264. package/container/agent-runner/src/providers/provider-registry.ts +0 -33
  265. package/container/agent-runner/src/providers/types.ts +0 -82
  266. package/container/agent-runner/src/scheduling/task-script.ts +0 -121
  267. package/container/agent-runner/src/timezone.test.ts +0 -93
  268. package/container/agent-runner/src/timezone.ts +0 -107
  269. package/container/agent-runner/tsconfig.json +0 -14
  270. package/container/build.sh +0 -48
  271. package/container/entrypoint.sh +0 -16
  272. package/container/skills/agent-browser/SKILL.md +0 -159
  273. package/container/skills/frontend-engineer/SKILL.md +0 -157
  274. package/container/skills/self-customize/SKILL.md +0 -87
  275. package/container/skills/slack-formatting/SKILL.md +0 -94
  276. package/container/skills/vercel-cli/SKILL.md +0 -111
  277. package/container/skills/welcome/SKILL.md +0 -85
  278. package/docs/APPLE-CONTAINER-NETWORKING.md +0 -90
  279. package/docs/BRANCH-FORK-MAINTENANCE.md +0 -81
  280. package/docs/README.md +0 -25
  281. package/docs/SDK_DEEP_DIVE.md +0 -643
  282. package/docs/SECURITY.md +0 -162
  283. package/docs/agent-runner-details.md +0 -749
  284. package/docs/api-details.md +0 -365
  285. package/docs/architecture-diagram.html +0 -422
  286. package/docs/architecture-diagram.md +0 -215
  287. package/docs/architecture.md +0 -751
  288. package/docs/audit/2026-04-30-channel-endpoint-audit.md +0 -36
  289. package/docs/build-and-runtime.md +0 -80
  290. package/docs/cross-mount-stress/README.md +0 -112
  291. package/docs/cross-mount-stress/container-writer-retry.mjs +0 -55
  292. package/docs/cross-mount-stress/container-writer-slow.mjs +0 -42
  293. package/docs/cross-mount-stress/container-writer.mjs +0 -47
  294. package/docs/cross-mount-stress/host-writer-retry.mjs +0 -55
  295. package/docs/cross-mount-stress/host-writer-slow.mjs +0 -43
  296. package/docs/cross-mount-stress/host-writer.mjs +0 -47
  297. package/docs/db-central.md +0 -316
  298. package/docs/db-session.md +0 -183
  299. package/docs/db.md +0 -119
  300. package/docs/design/2026-04-29-vault-management-ui.md +0 -231
  301. package/docs/design/2026-04-30-channel-wiring-rework.md +0 -234
  302. package/docs/design/2026-05-01-channel-wiring-approvals-deep-dive.md +0 -272
  303. package/docs/design/2026-05-02-channel-policy-and-approval-routing.md +0 -250
  304. package/docs/docker-sandboxes.md +0 -359
  305. package/docs/isolation-model.md +0 -88
  306. package/docs/ollama.md +0 -79
  307. package/docs/parachute-integration.md +0 -109
  308. package/docs/post-night-rebirth-reflections.md +0 -151
  309. package/eslint.config.js +0 -32
  310. package/pnpm-workspace.yaml +0 -8
  311. package/repo-tokens/README.md +0 -113
  312. package/repo-tokens/action.yml +0 -186
  313. package/repo-tokens/badge.svg +0 -23
  314. package/repo-tokens/examples/green.svg +0 -14
  315. package/repo-tokens/examples/red.svg +0 -14
  316. package/repo-tokens/examples/yellow-green.svg +0 -14
  317. package/repo-tokens/examples/yellow.svg +0 -14
  318. package/scripts/chat.ts +0 -101
  319. package/scripts/cleanup-sessions.sh +0 -150
  320. package/scripts/init-cli-agent.ts +0 -172
  321. package/scripts/init-first-agent.ts +0 -378
  322. package/scripts/parachute.ts +0 -158
  323. package/scripts/run-migrations.ts +0 -105
  324. package/scripts/sanity-live-poll.ts +0 -95
  325. package/scripts/seed-discord.ts +0 -80
  326. package/scripts/test-v2-agent.ts +0 -106
  327. package/scripts/test-v2-channel-e2e.ts +0 -265
  328. package/scripts/test-v2-host.ts +0 -184
  329. package/src/channels/adapter.ts +0 -214
  330. package/src/channels/api-translator.test.ts +0 -306
  331. package/src/channels/api-translator.ts +0 -214
  332. package/src/channels/ask-question.ts +0 -46
  333. package/src/channels/channel-registry.test.ts +0 -421
  334. package/src/channels/channel-registry.ts +0 -313
  335. package/src/channels/chat-sdk-bridge.test.ts +0 -84
  336. package/src/channels/chat-sdk-bridge.ts +0 -652
  337. package/src/channels/cli.ts +0 -276
  338. package/src/channels/discord.ts +0 -90
  339. package/src/channels/index.ts +0 -17
  340. package/src/channels/telegram-markdown-sanitize.test.ts +0 -78
  341. package/src/channels/telegram-markdown-sanitize.ts +0 -55
  342. package/src/channels/telegram-pairing.test.ts +0 -254
  343. package/src/channels/telegram-pairing.ts +0 -339
  344. package/src/channels/telegram.ts +0 -279
  345. package/src/channels/trust-hint.test.ts +0 -48
  346. package/src/channels/trust-hint.ts +0 -75
  347. package/src/claude-md-compose.migrate.test.ts +0 -64
  348. package/src/claude-md-compose.ts +0 -205
  349. package/src/command-gate.ts +0 -63
  350. package/src/config.test.ts +0 -93
  351. package/src/config.ts +0 -128
  352. package/src/container-config.ts +0 -167
  353. package/src/container-runner.test.ts +0 -32
  354. package/src/container-runner.ts +0 -576
  355. package/src/container-runtime.test.ts +0 -269
  356. package/src/container-runtime.ts +0 -167
  357. package/src/db/_bun-sqlite-shim.ts +0 -88
  358. package/src/db/agent-activity.test.ts +0 -155
  359. package/src/db/agent-activity.ts +0 -121
  360. package/src/db/agent-groups.ts +0 -77
  361. package/src/db/connection.migrate.test.ts +0 -176
  362. package/src/db/connection.ts +0 -259
  363. package/src/db/db-v2.test.ts +0 -440
  364. package/src/db/dropped-messages.ts +0 -44
  365. package/src/db/index.ts +0 -40
  366. package/src/db/messaging-groups.ts +0 -252
  367. package/src/db/migrations/001-initial.ts +0 -112
  368. package/src/db/migrations/002-chat-sdk-state.ts +0 -36
  369. package/src/db/migrations/008-dropped-messages.ts +0 -27
  370. package/src/db/migrations/009-drop-pending-credentials.ts +0 -13
  371. package/src/db/migrations/010-engage-modes.ts +0 -103
  372. package/src/db/migrations/011-pending-sender-approvals.ts +0 -40
  373. package/src/db/migrations/012-channel-registration.ts +0 -48
  374. package/src/db/migrations/013-approval-render-metadata.ts +0 -27
  375. package/src/db/migrations/014-secrets.ts +0 -44
  376. package/src/db/migrations/015-secrets-drop-host-pattern.ts +0 -18
  377. package/src/db/migrations/016-secret-assignments.ts +0 -30
  378. package/src/db/migrations/017-agent-activity.ts +0 -40
  379. package/src/db/migrations/018-oauth-app-configs.ts +0 -34
  380. package/src/db/migrations/019-oauth-app-connections.ts +0 -48
  381. package/src/db/migrations/020-agent-app-connections.ts +0 -28
  382. package/src/db/migrations/021-pending-oauth-states.ts +0 -35
  383. package/src/db/migrations/022-app-connections-provider.ts +0 -25
  384. package/src/db/migrations/023-agent-group-secret-mode.test.ts +0 -124
  385. package/src/db/migrations/023-agent-group-secret-mode.ts +0 -65
  386. package/src/db/migrations/024-collapse-approvals.test.ts +0 -249
  387. package/src/db/migrations/024-collapse-approvals.ts +0 -182
  388. package/src/db/migrations/025-secret-mode-check.test.ts +0 -155
  389. package/src/db/migrations/025-secret-mode-check.ts +0 -49
  390. package/src/db/migrations/026-user-dms-bot-id.test.ts +0 -116
  391. package/src/db/migrations/026-user-dms-bot-id.ts +0 -54
  392. package/src/db/migrations/027-provider-credentials.ts +0 -41
  393. package/src/db/migrations/_test-helpers.ts +0 -41
  394. package/src/db/migrations/index.ts +0 -127
  395. package/src/db/migrations/module-agent-to-agent-destinations.ts +0 -84
  396. package/src/db/migrations/module-approvals-pending-approvals.ts +0 -42
  397. package/src/db/migrations/module-approvals-title-options.ts +0 -40
  398. package/src/db/schema.ts +0 -258
  399. package/src/db/session-db.test.ts +0 -93
  400. package/src/db/session-db.ts +0 -325
  401. package/src/db/sessions.ts +0 -241
  402. package/src/delivery.test.ts +0 -148
  403. package/src/delivery.ts +0 -445
  404. package/src/env.ts +0 -74
  405. package/src/group-folder.test.ts +0 -35
  406. package/src/group-folder.ts +0 -44
  407. package/src/group-init.ts +0 -92
  408. package/src/host-core.test.ts +0 -456
  409. package/src/host-sweep.test.ts +0 -146
  410. package/src/host-sweep.ts +0 -287
  411. package/src/index.ts +0 -232
  412. package/src/install-slug.ts +0 -33
  413. package/src/log.test.ts +0 -81
  414. package/src/log.ts +0 -117
  415. package/src/mcp/http.ts +0 -72
  416. package/src/mcp/server.ts +0 -92
  417. package/src/mcp/stdio.ts +0 -51
  418. package/src/mcp/tools/activity.ts +0 -88
  419. package/src/mcp/tools/agent-groups.ts +0 -183
  420. package/src/mcp/tools/approvals.ts +0 -122
  421. package/src/mcp/tools/channels.test.ts +0 -126
  422. package/src/mcp/tools/channels.ts +0 -134
  423. package/src/mcp/tools/index.ts +0 -27
  424. package/src/mcp/tools/oauth.ts +0 -48
  425. package/src/mcp/tools/secrets.ts +0 -169
  426. package/src/mcp/tools/sessions.ts +0 -135
  427. package/src/mcp/types.ts +0 -51
  428. package/src/modules/agent-to-agent/agent-route.test.ts +0 -46
  429. package/src/modules/agent-to-agent/agent-route.ts +0 -223
  430. package/src/modules/agent-to-agent/create-agent.ts +0 -127
  431. package/src/modules/agent-to-agent/db/agent-destinations.ts +0 -135
  432. package/src/modules/agent-to-agent/index.ts +0 -22
  433. package/src/modules/agent-to-agent/write-destinations.ts +0 -59
  434. package/src/modules/approvals/agent.md +0 -45
  435. package/src/modules/approvals/index.ts +0 -21
  436. package/src/modules/approvals/picks.test.ts +0 -291
  437. package/src/modules/approvals/primitive.ts +0 -279
  438. package/src/modules/approvals/project.md +0 -27
  439. package/src/modules/approvals/response-handler.ts +0 -87
  440. package/src/modules/index.ts +0 -24
  441. package/src/modules/interactive/agent.md +0 -21
  442. package/src/modules/interactive/index.ts +0 -69
  443. package/src/modules/interactive/project.md +0 -12
  444. package/src/modules/mount-security/expand-path.test.ts +0 -82
  445. package/src/modules/mount-security/index.ts +0 -459
  446. package/src/modules/mount-security/migrate.test.ts +0 -91
  447. package/src/modules/permissions/access.ts +0 -28
  448. package/src/modules/permissions/channel-approval.test.ts +0 -389
  449. package/src/modules/permissions/channel-approval.ts +0 -188
  450. package/src/modules/permissions/db/agent-group-members.ts +0 -44
  451. package/src/modules/permissions/db/pending-channel-approvals.test.ts +0 -86
  452. package/src/modules/permissions/db/pending-channel-approvals.ts +0 -66
  453. package/src/modules/permissions/db/pending-sender-approvals.ts +0 -60
  454. package/src/modules/permissions/db/user-dms.ts +0 -58
  455. package/src/modules/permissions/db/user-roles.ts +0 -85
  456. package/src/modules/permissions/db/users.ts +0 -38
  457. package/src/modules/permissions/index.ts +0 -421
  458. package/src/modules/permissions/permissions.test.ts +0 -358
  459. package/src/modules/permissions/sender-approval.test.ts +0 -641
  460. package/src/modules/permissions/sender-approval.ts +0 -165
  461. package/src/modules/permissions/user-dm.ts +0 -200
  462. package/src/modules/provider-credentials/db.ts +0 -121
  463. package/src/modules/provider-credentials/index.ts +0 -12
  464. package/src/modules/provider-credentials/spawn.test.ts +0 -206
  465. package/src/modules/provider-credentials/spawn.ts +0 -114
  466. package/src/modules/scheduling/actions.ts +0 -113
  467. package/src/modules/scheduling/db.test.ts +0 -282
  468. package/src/modules/scheduling/db.ts +0 -148
  469. package/src/modules/scheduling/index.ts +0 -34
  470. package/src/modules/scheduling/recurrence.test.ts +0 -98
  471. package/src/modules/scheduling/recurrence.ts +0 -54
  472. package/src/modules/self-mod/agent.md +0 -30
  473. package/src/modules/self-mod/apply.ts +0 -85
  474. package/src/modules/self-mod/index.ts +0 -30
  475. package/src/modules/self-mod/project.md +0 -39
  476. package/src/modules/self-mod/request.ts +0 -91
  477. package/src/modules/typing/index.ts +0 -165
  478. package/src/oauth/agent-app-connections.ts +0 -103
  479. package/src/oauth/app-configs.test.ts +0 -64
  480. package/src/oauth/app-configs.ts +0 -114
  481. package/src/oauth/app-connections.test.ts +0 -109
  482. package/src/oauth/app-connections.ts +0 -178
  483. package/src/oauth/crypto.ts +0 -56
  484. package/src/oauth/flow.ts +0 -104
  485. package/src/oauth/providers/google.test.ts +0 -38
  486. package/src/oauth/providers/google.ts +0 -46
  487. package/src/oauth/providers/index.ts +0 -48
  488. package/src/oauth/state-store.test.ts +0 -54
  489. package/src/oauth/state-store.ts +0 -93
  490. package/src/parachute/README.md +0 -27
  491. package/src/parachute/create-agent.test.ts +0 -83
  492. package/src/parachute/create-agent.ts +0 -122
  493. package/src/parachute/group-status.test.ts +0 -165
  494. package/src/parachute/group-status.ts +0 -136
  495. package/src/parachute/types.ts +0 -41
  496. package/src/parachute/vault-mcp.test.ts +0 -251
  497. package/src/parachute/vault-mcp.ts +0 -232
  498. package/src/platform-id.test.ts +0 -104
  499. package/src/platform-id.ts +0 -109
  500. package/src/providers/index.ts +0 -6
  501. package/src/providers/provider-container-registry.ts +0 -58
  502. package/src/response-registry.ts +0 -45
  503. package/src/router.ts +0 -530
  504. package/src/secrets/crypto.test.ts +0 -45
  505. package/src/secrets/crypto.ts +0 -55
  506. package/src/secrets/index.ts +0 -461
  507. package/src/secrets/master-key.ts +0 -70
  508. package/src/secrets/secrets.test.ts +0 -651
  509. package/src/session-manager.attachments.test.ts +0 -171
  510. package/src/session-manager.dup-skip.test.ts +0 -173
  511. package/src/session-manager.migrate.test.ts +0 -59
  512. package/src/session-manager.ts +0 -451
  513. package/src/startup-bootstrap.test.ts +0 -226
  514. package/src/startup-bootstrap.ts +0 -207
  515. package/src/state-sqlite.ts +0 -182
  516. package/src/timezone.test.ts +0 -64
  517. package/src/timezone.ts +0 -37
  518. package/src/types.ts +0 -233
  519. package/src/web/auth.test.ts +0 -335
  520. package/src/web/auth.ts +0 -214
  521. package/src/web/discord-validate.test.ts +0 -77
  522. package/src/web/discord-validate.ts +0 -88
  523. package/src/web/hub-discovery.test.ts +0 -98
  524. package/src/web/hub-discovery.ts +0 -69
  525. package/src/web/routes/activity.ts +0 -106
  526. package/src/web/routes/agent-provider.test.ts +0 -282
  527. package/src/web/routes/agent-provider.ts +0 -309
  528. package/src/web/routes/approvals.ts +0 -185
  529. package/src/web/routes/apps.ts +0 -434
  530. package/src/web/routes/channels-mg-detail.test.ts +0 -324
  531. package/src/web/routes/channels-mga-detail.test.ts +0 -472
  532. package/src/web/routes/channels.ts +0 -311
  533. package/src/web/routes/oauth-providers.ts +0 -42
  534. package/src/web/routes/secrets.test.ts +0 -220
  535. package/src/web/routes/secrets.ts +0 -317
  536. package/src/web/routes/sessions.ts +0 -123
  537. package/src/web/routes/settings.test.ts +0 -106
  538. package/src/web/routes/settings.ts +0 -247
  539. package/src/web/routes/setup-status.ts +0 -205
  540. package/src/web/routes/vaults.test.ts +0 -389
  541. package/src/web/routes/vaults.ts +0 -225
  542. package/src/web/server-version.test.ts +0 -16
  543. package/src/web/server.ts +0 -1024
  544. package/src/web/services-manifest.test.ts +0 -148
  545. package/src/web/services-manifest.ts +0 -66
  546. package/src/web/static-serve.test.ts +0 -255
  547. package/src/web/static-serve.ts +0 -104
  548. package/src/web/telegram-validate.test.ts +0 -116
  549. package/src/web/telegram-validate.ts +0 -107
  550. package/src/web/vault-proxy.test.ts +0 -214
  551. package/src/web/vault-proxy.ts +0 -120
  552. package/src/web/wire-channel.ts +0 -181
  553. package/src/webhook-server.ts +0 -134
  554. package/vitest.config.ts +0 -18
  555. package/web/README.md +0 -63
  556. package/web/ui/index.html +0 -13
  557. package/web/ui/package.json +0 -35
  558. package/web/ui/pnpm-lock.yaml +0 -2164
  559. package/web/ui/scripts/verify-base.mjs +0 -31
  560. package/web/ui/src/App.tsx +0 -88
  561. package/web/ui/src/components/ActivityFeed.tsx +0 -444
  562. package/web/ui/src/components/AgentGroupPicker.tsx +0 -263
  563. package/web/ui/src/components/AgentProviderCards.tsx +0 -220
  564. package/web/ui/src/components/CredentialForm.tsx +0 -214
  565. package/web/ui/src/components/ScopeGrants.tsx +0 -74
  566. package/web/ui/src/components/StatusDot.tsx +0 -43
  567. package/web/ui/src/components/VaultPicker.tsx +0 -127
  568. package/web/ui/src/components/setup/AdapterInstallStep.tsx +0 -178
  569. package/web/ui/src/components/setup/AgentGroupStep.tsx +0 -43
  570. package/web/ui/src/components/setup/ChannelPickStep.tsx +0 -74
  571. package/web/ui/src/components/setup/DoneStep.tsx +0 -49
  572. package/web/ui/src/components/setup/PrereqStep.tsx +0 -129
  573. package/web/ui/src/components/setup/TestConnectionStep.tsx +0 -108
  574. package/web/ui/src/components/setup/TestMessageStep.tsx +0 -104
  575. package/web/ui/src/components/setup/WireChannelStep.tsx +0 -166
  576. package/web/ui/src/components/setup/types.ts +0 -105
  577. package/web/ui/src/lib/api.test.ts +0 -410
  578. package/web/ui/src/lib/api.ts +0 -1248
  579. package/web/ui/src/lib/auth.test.ts +0 -352
  580. package/web/ui/src/lib/auth.ts +0 -405
  581. package/web/ui/src/lib/channel-adapters.ts +0 -136
  582. package/web/ui/src/main.tsx +0 -19
  583. package/web/ui/src/routes/ApprovalsList.tsx +0 -294
  584. package/web/ui/src/routes/Apps.tsx +0 -613
  585. package/web/ui/src/routes/ChannelWireDetail.test.tsx +0 -233
  586. package/web/ui/src/routes/ChannelWireDetail.tsx +0 -403
  587. package/web/ui/src/routes/ChannelsList.tsx +0 -158
  588. package/web/ui/src/routes/GroupDetail.test.tsx +0 -206
  589. package/web/ui/src/routes/GroupDetail.tsx +0 -880
  590. package/web/ui/src/routes/GroupList.tsx +0 -187
  591. package/web/ui/src/routes/MessagingGroupDetail.test.tsx +0 -233
  592. package/web/ui/src/routes/MessagingGroupDetail.tsx +0 -306
  593. package/web/ui/src/routes/NewGroupWizard.tsx +0 -390
  594. package/web/ui/src/routes/OAuthCallback.tsx +0 -56
  595. package/web/ui/src/routes/SecretsList.tsx +0 -942
  596. package/web/ui/src/routes/SessionsList.tsx +0 -220
  597. package/web/ui/src/routes/SettingsAgentProvider.tsx +0 -109
  598. package/web/ui/src/routes/SettingsApprovals.tsx +0 -234
  599. package/web/ui/src/routes/SetupWizard.tsx +0 -219
  600. package/web/ui/src/routes/VaultDetail.test.tsx +0 -363
  601. package/web/ui/src/routes/VaultDetail.tsx +0 -960
  602. package/web/ui/src/routes/VaultsList.tsx +0 -295
  603. package/web/ui/src/routes/WireChannelPage.tsx +0 -413
  604. package/web/ui/src/styles.css +0 -608
  605. package/web/ui/src/test/setup.ts +0 -23
  606. package/web/ui/src/vite-env.d.ts +0 -10
  607. package/web/ui/vite.config.ts +0 -34
  608. package/web/ui/vitest.config.ts +0 -25
@@ -1,608 +0,0 @@
1
- :root {
2
- --bg: #faf8f4;
3
- --bg-soft: #f3f0ea;
4
- --fg: #2c2a26;
5
- --fg-muted: #6b6860;
6
- --fg-dim: #9a9690;
7
- --accent: #4a7c59;
8
- --accent-soft: rgba(74, 124, 89, 0.08);
9
- --accent-hover: #3d6849;
10
- --border: #e6e1d8;
11
- --error: #8c3a3a;
12
- --error-soft: rgba(140, 58, 58, 0.06);
13
- --warn: #b08023;
14
- --warn-soft: rgba(176, 128, 35, 0.08);
15
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
16
- }
17
-
18
- * { box-sizing: border-box; }
19
- html, body { margin: 0; padding: 0; background: var(--bg); color: var(--fg); }
20
- a { color: var(--accent); text-decoration: none; }
21
- a:hover { text-decoration: underline; }
22
-
23
- button {
24
- font: inherit;
25
- background: var(--accent);
26
- color: white;
27
- border: 0;
28
- border-radius: 6px;
29
- padding: 0.55rem 1.1rem;
30
- cursor: pointer;
31
- transition: background 0.15s ease;
32
- }
33
- button:hover { background: var(--accent-hover); }
34
- button:disabled { opacity: 0.5; cursor: not-allowed; }
35
- button.secondary {
36
- background: white;
37
- color: var(--fg);
38
- border: 1px solid var(--border);
39
- }
40
- button.secondary:hover { background: var(--bg-soft); }
41
- button.danger {
42
- background: var(--error);
43
- }
44
- button.danger:hover { background: #6f2d2d; }
45
-
46
- input, select, textarea {
47
- font: inherit;
48
- background: white;
49
- border: 1px solid var(--border);
50
- border-radius: 6px;
51
- padding: 0.55rem 0.75rem;
52
- color: var(--fg);
53
- }
54
- input:focus, select:focus, textarea:focus {
55
- outline: none;
56
- border-color: var(--accent);
57
- }
58
-
59
- code {
60
- font-family: "SF Mono", ui-monospace, Menlo, monospace;
61
- font-size: 0.85em;
62
- background: var(--bg-soft);
63
- padding: 0.1em 0.3em;
64
- border-radius: 3px;
65
- }
66
-
67
- .page {
68
- max-width: 880px;
69
- margin: 0 auto;
70
- padding: 1.5rem 1.5rem 6rem;
71
- }
72
-
73
- .nav {
74
- display: flex;
75
- gap: 1rem;
76
- align-items: center;
77
- padding-bottom: 1rem;
78
- border-bottom: 1px solid var(--border);
79
- margin-bottom: 2rem;
80
- }
81
- .nav .brand {
82
- font-weight: 600;
83
- font-family: serif;
84
- font-size: 1.1rem;
85
- margin-right: auto;
86
- }
87
- .nav .brand .sub {
88
- color: var(--fg-dim);
89
- font-size: 0.78rem;
90
- font-weight: 400;
91
- margin-left: 0.4rem;
92
- }
93
- .nav a { color: var(--fg-muted); font-size: 0.95rem; }
94
- .nav a:hover { text-decoration: none; color: var(--fg); }
95
-
96
- h2 {
97
- margin: 0 0 1rem;
98
- font-size: 1.4rem;
99
- font-weight: 500;
100
- }
101
-
102
- .section {
103
- background: white;
104
- border: 1px solid var(--border);
105
- border-radius: 10px;
106
- padding: 1.25rem 1.5rem;
107
- margin-bottom: 1.5rem;
108
- }
109
- .section h3 {
110
- margin: 0 0 0.75rem;
111
- font-size: 0.85rem;
112
- color: var(--fg-muted);
113
- text-transform: uppercase;
114
- letter-spacing: 0.06em;
115
- font-weight: 500;
116
- }
117
-
118
- .muted { color: var(--fg-muted); font-size: 0.92rem; }
119
- .dim { color: var(--fg-dim); font-size: 0.85rem; }
120
-
121
- .error-banner {
122
- background: var(--error-soft);
123
- border: 1px solid var(--error);
124
- color: var(--error);
125
- padding: 0.75rem 1rem;
126
- border-radius: 8px;
127
- margin-bottom: 1rem;
128
- font-size: 0.9rem;
129
- }
130
- .warn-banner {
131
- background: var(--warn-soft);
132
- border: 1px solid var(--warn);
133
- color: var(--warn);
134
- padding: 0.75rem 1rem;
135
- border-radius: 8px;
136
- margin-bottom: 1rem;
137
- font-size: 0.9rem;
138
- }
139
- .status-banner {
140
- background: var(--bg-soft);
141
- border: 1px solid var(--border);
142
- border-radius: 8px;
143
- padding: 0.75rem 1rem;
144
- margin-bottom: 1.5rem;
145
- font-size: 0.9rem;
146
- color: var(--fg-muted);
147
- }
148
-
149
- .empty {
150
- padding: 3rem 1.5rem;
151
- text-align: center;
152
- color: var(--fg-muted);
153
- background: var(--bg-soft);
154
- border-radius: 10px;
155
- }
156
-
157
- .group-row {
158
- display: block;
159
- padding: 1rem 1.25rem;
160
- border: 1px solid var(--border);
161
- border-radius: 10px;
162
- margin-bottom: 0.75rem;
163
- background: white;
164
- text-decoration: none;
165
- color: inherit;
166
- transition: border-color 0.15s ease;
167
- }
168
- .group-row:hover { border-color: var(--accent); text-decoration: none; }
169
- .group-row .name {
170
- font-size: 1.05rem;
171
- font-weight: 500;
172
- display: flex;
173
- align-items: center;
174
- gap: 0.5rem;
175
- }
176
- .group-row .meta {
177
- margin-top: 0.4rem;
178
- color: var(--fg-muted);
179
- font-size: 0.88rem;
180
- }
181
-
182
- .tag {
183
- display: inline-block;
184
- padding: 0.1em 0.55em;
185
- background: var(--accent-soft);
186
- color: var(--accent);
187
- border-radius: 4px;
188
- font-size: 0.78rem;
189
- font-weight: 500;
190
- }
191
- .tag.muted { background: var(--bg-soft); color: var(--fg-muted); }
192
- .tag.error { background: var(--error-soft); color: var(--error); }
193
- .tag.warn { background: var(--warn-soft); color: var(--warn); }
194
-
195
- form .row { margin-bottom: 1rem; }
196
- form label { display: block; font-size: 0.9rem; color: var(--fg-muted); margin-bottom: 0.3rem; font-weight: 500; }
197
- form input[type="text"], form select, form textarea { width: 100%; }
198
- form textarea { min-height: 6rem; font-family: inherit; }
199
- form .actions { display: flex; gap: 0.6rem; align-items: center; }
200
-
201
- .kv { display: grid; grid-template-columns: 8.5rem 1fr; gap: 0.5rem 1rem; font-size: 0.92rem; }
202
- .kv > div:nth-child(odd) { color: var(--fg-muted); }
203
- .kv code { word-break: break-all; }
204
-
205
- hr.sep { border: 0; border-top: 1px solid var(--border); margin: 1.5rem 0; }
206
-
207
- /* Skeleton loaders */
208
- @keyframes skeleton-shimmer {
209
- 0% { background-position: -400px 0; }
210
- 100% { background-position: 400px 0; }
211
- }
212
- .skeleton {
213
- background: linear-gradient(
214
- 90deg,
215
- var(--bg-soft) 0%,
216
- #ece8df 50%,
217
- var(--bg-soft) 100%
218
- );
219
- background-size: 800px 100%;
220
- animation: skeleton-shimmer 1.4s linear infinite;
221
- border-radius: 6px;
222
- }
223
- .skeleton-list { list-style: none; padding: 0; margin: 0; }
224
- .skeleton-row { height: 4.5rem; margin-bottom: 0.75rem; }
225
- .skeleton-heading { height: 1.6rem; width: 40%; margin-bottom: 1rem; }
226
- .skeleton-line { height: 0.9rem; margin-bottom: 0.6rem; width: 100%; }
227
-
228
- /* Richer empty state */
229
- .empty-rich { text-align: left; padding: 2rem 1.75rem; background: white; border: 1px solid var(--border); }
230
- .empty-rich .empty-headline { font-size: 1.05rem; color: var(--fg); margin: 0 0 0.5rem; font-weight: 500; }
231
- .empty-paths {
232
- list-style: none;
233
- padding: 0;
234
- margin: 1rem 0 0;
235
- display: grid;
236
- gap: 0.6rem;
237
- }
238
- .empty-paths li {
239
- background: var(--bg-soft);
240
- border: 1px solid var(--border);
241
- padding: 0.7rem 0.9rem;
242
- border-radius: 8px;
243
- font-size: 0.92rem;
244
- color: var(--fg-muted);
245
- }
246
- .empty-paths li strong { color: var(--fg); margin-right: 0.4rem; font-weight: 500; }
247
-
248
- /* Scope grants explainer */
249
- .scope-grants {
250
- margin-top: 0.75rem;
251
- padding: 0.85rem 1rem;
252
- background: var(--bg-soft);
253
- border-left: 3px solid var(--accent);
254
- border-radius: 4px;
255
- }
256
- .scope-grants-summary {
257
- margin: 0 0 0.6rem;
258
- font-size: 0.88rem;
259
- color: var(--fg);
260
- }
261
- .scope-grants-tools {
262
- display: grid;
263
- grid-template-columns: 1fr 1fr;
264
- gap: 1rem;
265
- }
266
- .scope-grants-tools > div:only-child { grid-column: 1 / -1; }
267
- .scope-grants-label {
268
- display: block;
269
- font-size: 0.75rem;
270
- text-transform: uppercase;
271
- letter-spacing: 0.06em;
272
- color: var(--fg-muted);
273
- margin-bottom: 0.25rem;
274
- font-weight: 500;
275
- }
276
- .scope-grants-tools ul {
277
- list-style: none;
278
- padding: 0;
279
- margin: 0;
280
- display: flex;
281
- flex-wrap: wrap;
282
- gap: 0.3rem;
283
- }
284
- .scope-grants-tools li code {
285
- font-size: 0.78rem;
286
- background: white;
287
- border: 1px solid var(--border);
288
- padding: 0.15em 0.45em;
289
- }
290
- .scope-grants-tools li.dim code {
291
- background: transparent;
292
- color: var(--fg-dim);
293
- text-decoration: line-through;
294
- }
295
- .scope-grants-warn {
296
- margin: 0.75rem 0 0;
297
- font-size: 0.82rem;
298
- color: var(--warn);
299
- }
300
-
301
- /* List header (with CTA on the right) */
302
- .list-header {
303
- display: flex;
304
- align-items: baseline;
305
- justify-content: space-between;
306
- gap: 1rem;
307
- margin-bottom: 1rem;
308
- }
309
- .list-header h2 { margin: 0; }
310
-
311
- /* Wizard step indicator */
312
- .wizard-steps {
313
- list-style: none;
314
- padding: 0;
315
- margin: 0 0 1.25rem;
316
- display: flex;
317
- gap: 0.4rem;
318
- font-size: 0.85rem;
319
- }
320
- .wizard-step {
321
- padding: 0.4rem 0.8rem;
322
- background: var(--bg-soft);
323
- color: var(--fg-muted);
324
- border-radius: 999px;
325
- border: 1px solid var(--border);
326
- }
327
- .wizard-step.active {
328
- background: var(--accent-soft);
329
- color: var(--accent);
330
- border-color: var(--accent);
331
- font-weight: 500;
332
- }
333
-
334
- /* Wizard form bits */
335
- .wizard-toggle {
336
- display: inline-flex !important;
337
- align-items: center;
338
- gap: 0.5rem;
339
- cursor: pointer;
340
- color: var(--fg) !important;
341
- font-size: 0.95rem !important;
342
- font-weight: 400 !important;
343
- margin: 0 !important;
344
- }
345
- .wizard-toggle input[type="checkbox"] {
346
- width: auto;
347
- margin: 0;
348
- }
349
- .wizard-folder-ok {
350
- margin: 0.4rem 0 0;
351
- font-size: 0.85rem;
352
- color: var(--accent);
353
- }
354
- .wizard-folder-error {
355
- margin: 0.4rem 0 0;
356
- font-size: 0.85rem;
357
- color: var(--error);
358
- }
359
-
360
- /* Status indicators */
361
- .status-dot {
362
- display: inline-block;
363
- width: 0.65rem;
364
- height: 0.65rem;
365
- border-radius: 50%;
366
- flex-shrink: 0;
367
- vertical-align: middle;
368
- }
369
- .status-dot-alive {
370
- background: var(--accent);
371
- box-shadow: 0 0 0 3px var(--accent-soft);
372
- }
373
- .status-dot-idle {
374
- background: var(--fg-dim);
375
- }
376
- .status-dot-unknown {
377
- background: transparent;
378
- border: 1px dashed var(--fg-dim);
379
- }
380
- .status-text.alive { color: var(--accent); font-weight: 500; }
381
- .status-text.idle { color: var(--fg-muted); }
382
-
383
- .session-list {
384
- list-style: none;
385
- padding: 0;
386
- margin: 0;
387
- display: grid;
388
- gap: 0.4rem;
389
- font-size: 0.88rem;
390
- }
391
- .session-list li {
392
- background: var(--bg-soft);
393
- border: 1px solid var(--border);
394
- padding: 0.5rem 0.7rem;
395
- border-radius: 6px;
396
- }
397
-
398
- /* Detail tabs (Overview / Activity on group detail page) */
399
- .detail-tabs {
400
- list-style: none;
401
- padding: 0;
402
- margin: 0 0 1.25rem;
403
- display: flex;
404
- gap: 0;
405
- border-bottom: 1px solid var(--border);
406
- }
407
- .detail-tab button {
408
- background: transparent;
409
- color: var(--fg-muted);
410
- border: 0;
411
- border-bottom: 2px solid transparent;
412
- padding: 0.5rem 1rem;
413
- border-radius: 0;
414
- font-size: 0.95rem;
415
- font-weight: 500;
416
- cursor: pointer;
417
- transition: color 0.15s ease, border-color 0.15s ease;
418
- }
419
- .detail-tab button:hover {
420
- background: transparent;
421
- color: var(--fg);
422
- }
423
- .detail-tab.active button {
424
- color: var(--accent);
425
- border-bottom-color: var(--accent);
426
- }
427
-
428
- /* Activity feed */
429
- .activity-feed {
430
- padding: 0;
431
- }
432
- .activity-list {
433
- list-style: none;
434
- padding: 0;
435
- margin: 0;
436
- }
437
- .activity-row {
438
- display: flex;
439
- gap: 0.85rem;
440
- padding: 0.9rem 1.5rem;
441
- border-bottom: 1px solid var(--border);
442
- }
443
- .activity-row:last-child {
444
- border-bottom: 0;
445
- }
446
- .activity-icon {
447
- flex-shrink: 0;
448
- width: 1.1rem;
449
- height: 1.1rem;
450
- margin-top: 0.15rem;
451
- color: var(--fg-muted);
452
- }
453
- .activity-icon-secret { color: var(--warn); }
454
- .activity-icon-mcp { color: var(--accent); }
455
- .activity-icon-cmd { color: var(--fg-muted); }
456
- .activity-body {
457
- flex: 1;
458
- min-width: 0;
459
- }
460
- .activity-headline {
461
- display: flex;
462
- align-items: center;
463
- gap: 0.45rem;
464
- flex-wrap: wrap;
465
- font-size: 0.95rem;
466
- }
467
- .activity-kind-label {
468
- font-size: 0.72rem;
469
- text-transform: uppercase;
470
- letter-spacing: 0.06em;
471
- color: var(--fg-dim);
472
- font-weight: 500;
473
- }
474
- .activity-cmd {
475
- /* The command can be long — let it wrap rather than scroll horizontally. */
476
- word-break: break-all;
477
- }
478
- .activity-cmd-output {
479
- margin: 0.4rem 0 0;
480
- padding: 0.55rem 0.75rem;
481
- background: var(--bg-soft);
482
- border-left: 2px solid var(--border);
483
- border-radius: 4px;
484
- font-family: "SF Mono", ui-monospace, Menlo, monospace;
485
- font-size: 0.8rem;
486
- color: var(--fg-muted);
487
- white-space: pre-wrap;
488
- word-break: break-word;
489
- max-height: 6em;
490
- overflow: hidden;
491
- }
492
- .activity-summary {
493
- margin-top: 0.25rem;
494
- font-size: 0.88rem;
495
- color: var(--fg-muted);
496
- }
497
- .activity-meta {
498
- margin-top: 0.3rem;
499
- font-size: 0.8rem;
500
- color: var(--fg-dim);
501
- }
502
- .activity-more {
503
- padding: 0.85rem 1.5rem;
504
- margin: 0;
505
- border-top: 1px solid var(--border);
506
- font-size: 0.82rem;
507
- }
508
-
509
- /* Apps page — App configs section */
510
- .app-config-list {
511
- list-style: none;
512
- padding: 0;
513
- margin: 0;
514
- display: grid;
515
- gap: 0.75rem;
516
- }
517
- .app-config-row {
518
- background: var(--bg-soft);
519
- border: 1px solid var(--border);
520
- border-radius: 8px;
521
- padding: 0.85rem 1rem;
522
- }
523
- .app-config-row-editing {
524
- background: white;
525
- border-color: var(--accent);
526
- }
527
- .app-config-head {
528
- display: flex;
529
- align-items: center;
530
- justify-content: space-between;
531
- gap: 1rem;
532
- }
533
- .app-config-blurb {
534
- margin: 0.4rem 0 0.6rem;
535
- font-size: 0.86rem;
536
- }
537
- .app-config-kv {
538
- margin-top: 0.5rem;
539
- font-size: 0.88rem;
540
- grid-template-columns: 6.5rem 1fr;
541
- }
542
- .app-config-clientid {
543
- word-break: break-all;
544
- font-size: 0.78rem;
545
- }
546
- .app-scope-tag {
547
- display: inline-block;
548
- margin: 0 0.25rem 0.25rem 0;
549
- padding: 0.05em 0.35em;
550
- background: white;
551
- border: 1px solid var(--border);
552
- font-size: 0.74rem;
553
- }
554
- .app-config-form .row { margin-bottom: 0.85rem; }
555
- .app-config-form .actions { margin-top: 1rem; }
556
-
557
- /* Apps page — Connections section */
558
- .connections-list {
559
- display: grid;
560
- gap: 1.25rem;
561
- }
562
- .connections-group-head {
563
- display: flex;
564
- align-items: center;
565
- justify-content: space-between;
566
- gap: 1rem;
567
- margin-bottom: 0.6rem;
568
- }
569
- .connections-rows {
570
- list-style: none;
571
- padding: 0;
572
- margin: 0;
573
- display: grid;
574
- gap: 0.5rem;
575
- }
576
- .connection-row {
577
- display: flex;
578
- align-items: flex-start;
579
- justify-content: space-between;
580
- gap: 1rem;
581
- padding: 0.75rem 0.95rem;
582
- background: var(--bg-soft);
583
- border: 1px solid var(--border);
584
- border-radius: 8px;
585
- transition: background 0.4s ease, border-color 0.4s ease;
586
- }
587
- .connection-row-flash {
588
- background: var(--accent-soft);
589
- border-color: var(--accent);
590
- }
591
- .connection-row-main { flex: 1; min-width: 0; }
592
- .connection-label {
593
- font-size: 0.98rem;
594
- font-weight: 500;
595
- }
596
- .connection-meta {
597
- margin-top: 0.25rem;
598
- font-size: 0.85rem;
599
- }
600
- .connection-scopes {
601
- margin-top: 0.4rem;
602
- }
603
- .connect-cta-row {
604
- display: flex;
605
- flex-wrap: wrap;
606
- gap: 0.5rem;
607
- margin-top: 1rem;
608
- }
@@ -1,23 +0,0 @@
1
- import '@testing-library/jest-dom/vitest';
2
- import { afterEach, vi } from 'vitest';
3
- import { cleanup } from '@testing-library/react';
4
-
5
- afterEach(() => {
6
- cleanup();
7
- vi.restoreAllMocks();
8
- });
9
-
10
- // jsdom doesn't implement HTMLDialogElement.showModal/close — the SecretsList
11
- // edit drawer + the new VaultDetail detach modal both use native <dialog>.
12
- // Polyfill enough for tests to render without throwing.
13
- if (!HTMLDialogElement.prototype.showModal) {
14
- HTMLDialogElement.prototype.showModal = function showModal() {
15
- this.setAttribute('open', '');
16
- };
17
- }
18
- if (!HTMLDialogElement.prototype.close) {
19
- HTMLDialogElement.prototype.close = function close() {
20
- this.removeAttribute('open');
21
- this.dispatchEvent(new Event('close'));
22
- };
23
- }
@@ -1,10 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- interface ImportMetaEnv {
4
- readonly BASE_URL: string;
5
- readonly VITE_PARACHUTE_AGENT_WEB_SERVER_URL?: string;
6
- }
7
-
8
- interface ImportMeta {
9
- readonly env: ImportMetaEnv;
10
- }
@@ -1,34 +0,0 @@
1
- import { defineConfig } from "vite";
2
- import react from "@vitejs/plugin-react";
3
-
4
- // Per parachute-patterns/patterns/mount-path-convention.md: the canonical
5
- // production deployment is under the Parachute hub at `/agent/`, so the
6
- // build default IS the canonical mount. Override with `VITE_BASE_PATH=/`
7
- // for the legacy stand-alone shape (UI served at the origin root). The
8
- // previous default of `/` silently shipped root-relative asset URLs that
9
- // 404'd under the hub mount — see #25.
10
- const basePath = normalizeBase(process.env.VITE_BASE_PATH ?? "/agent/");
11
-
12
- function normalizeBase(input: string): string {
13
- let b = input.startsWith("/") ? input : `/${input}`;
14
- if (!b.endsWith("/")) b += "/";
15
- return b;
16
- }
17
-
18
- export default defineConfig({
19
- base: basePath,
20
- plugins: [react()],
21
- server: {
22
- port: 5173,
23
- proxy: {
24
- // The dev server now serves under `/agent/` to match the production
25
- // mount; the proxy strips that prefix when forwarding to the Node
26
- // backend (which sees bare `/api/*` paths).
27
- "/agent/api": {
28
- target: process.env.PARACHUTE_AGENT_WEB_SERVER_URL ?? "http://127.0.0.1:1944",
29
- changeOrigin: true,
30
- rewrite: (p) => p.replace(/^\/agent/, ""),
31
- },
32
- },
33
- },
34
- });
@@ -1,25 +0,0 @@
1
- /**
2
- * Vitest config for the paraclaw web UI.
3
- *
4
- * Kept separate from vite.config.ts so the production bundle config (mount
5
- * path, dev proxy) doesn't co-mingle with test concerns. jsdom is the only
6
- * environment that loads the React rendering paths under @testing-library —
7
- * happy-dom skips parts of <dialog> that the vault detail page uses.
8
- *
9
- * `setupFiles` extends `expect` with @testing-library/jest-dom matchers and
10
- * resets every test's localStorage / fetch mocks so the hub-OAuth state
11
- * from one test doesn't leak into the next.
12
- */
13
- import { defineConfig } from 'vitest/config';
14
- import react from '@vitejs/plugin-react';
15
-
16
- export default defineConfig({
17
- plugins: [react()],
18
- test: {
19
- environment: 'jsdom',
20
- setupFiles: ['./src/test/setup.ts'],
21
- css: false,
22
- restoreMocks: true,
23
- clearMocks: true,
24
- },
25
- });