profclaw 2.0.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +14 -2
- package/CHANGELOG.md +37 -0
- package/CONTRIBUTING.md +20 -0
- package/Dockerfile +39 -23
- package/README.md +174 -40
- package/dist/agents/agent-summary.d.ts +44 -0
- package/dist/agents/agent-summary.js +176 -0
- package/dist/agents/auto-memory.d.ts +59 -0
- package/dist/agents/auto-memory.js +310 -0
- package/dist/agents/checkpoint-manager.d.ts +76 -0
- package/dist/agents/checkpoint-manager.js +156 -0
- package/dist/agents/circuit-breaker.d.ts +54 -0
- package/dist/agents/circuit-breaker.js +153 -0
- package/dist/agents/context-compactor.d.ts +70 -0
- package/dist/agents/context-compactor.js +361 -0
- package/dist/agents/conversation-branch.d.ts +55 -0
- package/dist/agents/conversation-branch.js +115 -0
- package/dist/agents/error-recovery.d.ts +44 -0
- package/dist/agents/error-recovery.js +197 -0
- package/dist/agents/events.d.ts +76 -0
- package/dist/agents/events.js +8 -0
- package/dist/agents/executor.d.ts +35 -1
- package/dist/agents/executor.js +573 -124
- package/dist/agents/file-snapshots.d.ts +72 -0
- package/dist/agents/file-snapshots.js +182 -0
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/orchestrator.d.ts +183 -0
- package/dist/agents/orchestrator.js +495 -0
- package/dist/agents/permissions.d.ts +63 -0
- package/dist/agents/permissions.js +138 -0
- package/dist/agents/plan-mode.d.ts +71 -0
- package/dist/agents/plan-mode.js +186 -0
- package/dist/agents/prompt-suggestions.d.ts +33 -0
- package/dist/agents/prompt-suggestions.js +208 -0
- package/dist/agents/rate-limit-monitor.d.ts +56 -0
- package/dist/agents/rate-limit-monitor.js +224 -0
- package/dist/agents/result-store.d.ts +37 -0
- package/dist/agents/result-store.js +104 -0
- package/dist/agents/session-diff.d.ts +43 -0
- package/dist/agents/session-diff.js +258 -0
- package/dist/agents/tool-loader.d.ts +65 -0
- package/dist/agents/tool-loader.js +273 -0
- package/dist/agents/transcript.d.ts +96 -0
- package/dist/agents/transcript.js +267 -0
- package/dist/agents/worktree-manager.d.ts +80 -0
- package/dist/agents/worktree-manager.js +203 -0
- package/dist/auth/middleware.js +14 -0
- package/dist/chat/agentic-executor.d.ts +7 -0
- package/dist/chat/agentic-executor.js +253 -30
- package/dist/chat/conversations.d.ts +2 -0
- package/dist/chat/conversations.js +8 -0
- package/dist/chat/execution/executor.d.ts +8 -0
- package/dist/chat/execution/executor.js +157 -103
- package/dist/chat/execution/index.js +5 -1
- package/dist/chat/execution/tool-router.js +40 -14
- package/dist/chat/execution/tools/canvas.d.ts +2 -2
- package/dist/chat/execution/tools/code-tools.d.ts +66 -0
- package/dist/chat/execution/tools/code-tools.js +353 -0
- package/dist/chat/execution/tools/complete-task.d.ts +2 -2
- package/dist/chat/execution/tools/cron-tool.d.ts +26 -10
- package/dist/chat/execution/tools/cron-tool.js +48 -3
- package/dist/chat/execution/tools/decompose-task.d.ts +58 -0
- package/dist/chat/execution/tools/decompose-task.js +166 -0
- package/dist/chat/execution/tools/exec.d.ts +5 -2
- package/dist/chat/execution/tools/exec.js +294 -155
- package/dist/chat/execution/tools/feed-tools.d.ts +77 -0
- package/dist/chat/execution/tools/feed-tools.js +142 -0
- package/dist/chat/execution/tools/file-ops.d.ts +1 -1
- package/dist/chat/execution/tools/github.d.ts +2 -2
- package/dist/chat/execution/tools/index.d.ts +14 -2
- package/dist/chat/execution/tools/index.js +86 -12
- package/dist/chat/execution/tools/integrations.d.ts +8 -8
- package/dist/chat/execution/tools/multi-patch.d.ts +53 -0
- package/dist/chat/execution/tools/multi-patch.js +373 -0
- package/dist/chat/execution/tools/openai-image-gen.d.ts +2 -2
- package/dist/chat/execution/tools/plan-tools.d.ts +80 -0
- package/dist/chat/execution/tools/plan-tools.js +134 -0
- package/dist/chat/execution/tools/profclaw-ops.d.ts +6 -6
- package/dist/chat/execution/tools/repl-tool.d.ts +46 -0
- package/dist/chat/execution/tools/repl-tool.js +207 -0
- package/dist/chat/execution/tools/sessions-send.d.ts +2 -2
- package/dist/chat/execution/tools/slack-actions.d.ts +2 -2
- package/dist/chat/execution/tools/system.d.ts +4 -4
- package/dist/chat/execution/tools/todo-tool.d.ts +72 -0
- package/dist/chat/execution/tools/todo-tool.js +152 -0
- package/dist/chat/execution/tools/tool-search.d.ts +50 -0
- package/dist/chat/execution/tools/tool-search.js +155 -0
- package/dist/chat/execution/types.d.ts +21 -14
- package/dist/chat/execution/workflows/executor.d.ts +11 -0
- package/dist/chat/execution/workflows/executor.js +99 -1
- package/dist/chat/execution/workflows/types.d.ts +35 -2
- package/dist/chat/format/index.d.ts +1 -0
- package/dist/chat/format/index.js +1 -0
- package/dist/chat/format/markdown-convert.d.ts +23 -0
- package/dist/chat/format/markdown-convert.js +149 -0
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/chat/message-handler.js +58 -6
- package/dist/chat/proactive/index.d.ts +62 -0
- package/dist/chat/proactive/index.js +147 -0
- package/dist/chat/prompt-adapter.js +2 -0
- package/dist/chat/providers/irc/index.d.ts +2 -2
- package/dist/chat/providers/telegram/index.d.ts +2 -0
- package/dist/chat/providers/telegram/index.js +21 -2
- package/dist/chat/system-prompts.d.ts +3 -3
- package/dist/chat/system-prompts.js +116 -61
- package/dist/chat/tools.d.ts +6 -6
- package/dist/cli/commands/auth.js +64 -1
- package/dist/cli/commands/chat.js +1327 -138
- package/dist/cli/commands/doctor.js +222 -16
- package/dist/cli/commands/history.d.ts +3 -0
- package/dist/cli/commands/history.js +138 -0
- package/dist/cli/commands/import.d.ts +44 -0
- package/dist/cli/commands/import.js +526 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/onboard.js +210 -30
- package/dist/cli/commands/plan.d.ts +13 -0
- package/dist/cli/commands/plan.js +184 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.js +77 -18
- package/dist/cli/commands/setup.js +84 -3
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/tools.js +13 -13
- package/dist/cli/commands/tui.js +26 -1
- package/dist/cli/index.js +19 -0
- package/dist/cli/ink/App.d.ts +13 -0
- package/dist/cli/ink/App.js +6 -0
- package/dist/cli/ink/ChatApp.d.ts +60 -0
- package/dist/cli/ink/ChatApp.js +325 -0
- package/dist/cli/ink/DashboardApp.d.ts +3 -0
- package/dist/cli/ink/DashboardApp.js +143 -0
- package/dist/cli/ink/components/AgentStatus.d.ts +17 -0
- package/dist/cli/ink/components/AgentStatus.js +33 -0
- package/dist/cli/ink/components/ChannelList.d.ts +17 -0
- package/dist/cli/ink/components/ChannelList.js +33 -0
- package/dist/cli/ink/components/ConnectionStatus.d.ts +19 -0
- package/dist/cli/ink/components/ConnectionStatus.js +50 -0
- package/dist/cli/ink/components/CostBar.d.ts +19 -0
- package/dist/cli/ink/components/CostBar.js +35 -0
- package/dist/cli/ink/components/HookStatus.d.ts +15 -0
- package/dist/cli/ink/components/HookStatus.js +7 -0
- package/dist/cli/ink/components/PermissionPrompt.d.ts +21 -0
- package/dist/cli/ink/components/PermissionPrompt.js +51 -0
- package/dist/cli/ink/components/PlanView.d.ts +23 -0
- package/dist/cli/ink/components/PlanView.js +26 -0
- package/dist/cli/ink/components/ProviderList.d.ts +16 -0
- package/dist/cli/ink/components/ProviderList.js +16 -0
- package/dist/cli/ink/components/SessionHeader.d.ts +15 -0
- package/dist/cli/ink/components/SessionHeader.js +15 -0
- package/dist/cli/ink/components/StreamingMessage.d.ts +20 -0
- package/dist/cli/ink/components/StreamingMessage.js +27 -0
- package/dist/cli/ink/components/SuggestionBar.d.ts +15 -0
- package/dist/cli/ink/components/SuggestionBar.js +28 -0
- package/dist/cli/ink/components/SystemHealth.d.ts +20 -0
- package/dist/cli/ink/components/SystemHealth.js +39 -0
- package/dist/cli/ink/components/TaskList.d.ts +17 -0
- package/dist/cli/ink/components/TaskList.js +59 -0
- package/dist/cli/ink/components/ToolCall.d.ts +17 -0
- package/dist/cli/ink/components/ToolCall.js +43 -0
- package/dist/cli/ink/index.d.ts +23 -0
- package/dist/cli/ink/index.js +15 -0
- package/dist/cli/ink/keybindings.d.ts +35 -0
- package/dist/cli/ink/keybindings.js +105 -0
- package/dist/cli/ink/markdown-renderer.d.ts +47 -0
- package/dist/cli/ink/markdown-renderer.js +380 -0
- package/dist/cli/ink/output-styles.d.ts +39 -0
- package/dist/cli/ink/output-styles.js +119 -0
- package/dist/cli/interactive/auto-serve.d.ts +38 -0
- package/dist/cli/interactive/auto-serve.js +209 -0
- package/dist/cli/interactive/index.d.ts +25 -0
- package/dist/cli/interactive/index.js +23 -0
- package/dist/cli/interactive/picker.d.ts +28 -0
- package/dist/cli/interactive/picker.js +153 -0
- package/dist/cli/interactive/renderer.d.ts +26 -0
- package/dist/cli/interactive/renderer.js +555 -0
- package/dist/cli/interactive/repl.d.ts +14 -0
- package/dist/cli/interactive/repl.js +1516 -0
- package/dist/cli/interactive/stream-client.d.ts +59 -0
- package/dist/cli/interactive/stream-client.js +506 -0
- package/dist/cli/interactive/types.d.ts +121 -0
- package/dist/cli/interactive/types.js +10 -0
- package/dist/cli/utils/api.d.ts +9 -0
- package/dist/cli/utils/api.js +58 -2
- package/dist/cron/natural-language.d.ts +54 -0
- package/dist/cron/natural-language.js +569 -0
- package/dist/cron/scheduler.d.ts +34 -4
- package/dist/cron/scheduler.js +141 -9
- package/dist/cron/templates.d.ts +1 -1
- package/dist/cron/templates.js +219 -0
- package/dist/feeds/feed-engine.d.ts +149 -0
- package/dist/feeds/feed-engine.js +600 -0
- package/dist/feeds/index.d.ts +9 -0
- package/dist/feeds/index.js +8 -0
- package/dist/gateway/router.js +6 -1
- package/dist/hooks/built-in/audit-log.d.ts +11 -0
- package/dist/hooks/built-in/audit-log.js +84 -0
- package/dist/hooks/built-in/cost-warning.d.ts +10 -0
- package/dist/hooks/built-in/cost-warning.js +59 -0
- package/dist/hooks/built-in/dangerous-tool.d.ts +32 -0
- package/dist/hooks/built-in/dangerous-tool.js +80 -0
- package/dist/hooks/built-in/index.d.ts +14 -0
- package/dist/hooks/built-in/index.js +20 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/loader.d.ts +17 -0
- package/dist/hooks/loader.js +142 -0
- package/dist/hooks/registry.d.ts +62 -0
- package/dist/hooks/registry.js +127 -0
- package/dist/integrations/web-search.js +6 -3
- package/dist/memory/index.d.ts +1 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/memory-service.js +14 -13
- package/dist/memory/observational.d.ts +62 -0
- package/dist/memory/observational.js +396 -0
- package/dist/middleware/content-filter.d.ts +22 -0
- package/dist/middleware/content-filter.js +69 -0
- package/dist/middleware/request-validator.d.ts +159 -0
- package/dist/middleware/request-validator.js +93 -0
- package/dist/plugins/sdk.d.ts +22 -0
- package/dist/plugins/sdk.js +17 -1
- package/dist/projects/types.d.ts +10 -10
- package/dist/providers/ai-sdk.d.ts +11 -0
- package/dist/providers/ai-sdk.js +78 -19
- package/dist/providers/core/models.js +67 -1
- package/dist/providers/core/types.d.ts +3 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/smart-router.d.ts +118 -0
- package/dist/providers/smart-router.js +685 -0
- package/dist/providers/types.d.ts +16 -16
- package/dist/routes/agents.js +50 -0
- package/dist/routes/auth.js +8 -1
- package/dist/routes/chat.js +259 -14
- package/dist/routes/costs.js +32 -0
- package/dist/routes/cron.js +80 -5
- package/dist/routes/feeds.d.ts +10 -0
- package/dist/routes/feeds.js +168 -0
- package/dist/routes/mcp.js +21 -0
- package/dist/routes/memory.js +130 -0
- package/dist/routes/skills.js +129 -0
- package/dist/routes/teams.d.ts +9 -0
- package/dist/routes/teams.js +210 -0
- package/dist/routes/tools.js +14 -0
- package/dist/routes/users.js +2 -0
- package/dist/server/route-loader.js +3 -1
- package/dist/server/stream-bridge.d.ts +19 -0
- package/dist/server/stream-bridge.js +38 -0
- package/dist/server.js +310 -36
- package/dist/skills/marketplace.d.ts +87 -0
- package/dist/skills/marketplace.js +268 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.js +64 -3
- package/dist/storage/schema.d.ts +4 -4
- package/dist/storage/schema.js +1 -1
- package/dist/teams/index.d.ts +110 -0
- package/dist/teams/index.js +365 -0
- package/dist/tickets/types.d.ts +39 -39
- package/dist/types/summary.d.ts +5 -5
- package/dist/utils/auto-update.d.ts +23 -0
- package/dist/utils/auto-update.js +157 -0
- package/dist/utils/offline-detect.d.ts +55 -0
- package/dist/utils/offline-detect.js +121 -0
- package/dist/utils/pid-file.d.ts +36 -0
- package/dist/utils/pid-file.js +125 -0
- package/dist/utils/prevent-sleep.d.ts +27 -0
- package/dist/utils/prevent-sleep.js +95 -0
- package/dist/utils/sanitizer.d.ts +57 -0
- package/dist/utils/sanitizer.js +174 -0
- package/docker-compose.yml +13 -137
- package/package.json +31 -6
- package/skills/deploy-cloudflare/SKILL.md +62 -0
- package/skills/deploy-vercel/SKILL.md +67 -0
- package/skills/docker-deploy/SKILL.md +158 -0
- package/skills/full-stack-builder/SKILL.md +92 -0
- package/skills/humanizer/SKILL.md +488 -0
- package/skills/profclaw-assistant/SKILL.md +85 -56
- package/ui/dist/assets/ActivityView-Da6HQ8ws.js +1 -0
- package/ui/dist/assets/AgentList-H58R0kX3.js +1 -0
- package/ui/dist/assets/AnalyticsDashboard-B28AeRsc.js +1 -0
- package/ui/dist/assets/AreaChart-DwLzeAQ8.js +1 -0
- package/ui/dist/assets/CartesianChart-piKQsTAR.js +36 -0
- package/ui/dist/assets/ChatView-Dbj8rxU5.js +10 -0
- package/ui/dist/assets/CostsDashboard-C6F5df0F.js +1 -0
- package/ui/dist/assets/EstimateSelect-wga0rUKX.js +1 -0
- package/ui/dist/assets/FeedDashboard-Ef6FEzEf.js +1 -0
- package/ui/dist/assets/FloatingChatbot-0yhkUeCq.js +2 -0
- package/ui/dist/assets/InviteCodeManagement-tUXfx4Bc.js +2 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/ui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/ui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/ui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/ui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/ui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/ui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/ui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/ui/dist/assets/MarketplacePage-DGrLtolR.js +1 -0
- package/ui/dist/assets/{ProjectDetail--gPfvATB.js → ProjectDetail-BgWvA6UP.js} +2 -2
- package/ui/dist/assets/ProjectIcon-TDuliqwg.js +1 -0
- package/ui/dist/assets/ProjectList-DXgM4187.js +1 -0
- package/ui/dist/assets/{Settings-1kaf7VHE.js → Settings-xA8Zhi3p.js} +3 -3
- package/ui/dist/assets/StatusIndicator-B8vfFAxg.js +1 -0
- package/ui/dist/assets/{SummaryDetail-DV3AmONk.js → SummaryDetail-eedRfTtF.js} +2 -2
- package/ui/dist/assets/SummaryList-CLNX2P84.js +1 -0
- package/ui/dist/assets/TaskDetail-BtWclNiR.js +1 -0
- package/ui/dist/assets/TaskList-JjODAgSc.js +1 -0
- package/ui/dist/assets/TeamsPage-CBK5iAyx.js +1 -0
- package/ui/dist/assets/TicketBoard-C9aJNNYp.js +1 -0
- package/ui/dist/assets/TicketDetail-CV5JmL31.js +1 -0
- package/ui/dist/assets/TicketList-68V4lzUz.js +1 -0
- package/ui/dist/assets/UserManagement-DKTb6UpE.js +2 -0
- package/ui/dist/assets/ViewSwitcher-BvdQht2Y.js +1 -0
- package/ui/dist/assets/alert-dialog-O6qBOv_f.js +1 -0
- package/ui/dist/assets/{archive-BsLa7brF.js → archive-CX7UvZpf.js} +1 -1
- package/ui/dist/assets/badge-BbfnwDJP.js +1 -0
- package/ui/dist/assets/{bug-CmZI7jqM.js → bug-3WX0394-.js} +1 -1
- package/ui/dist/assets/{calendar-Bf0t2B82.js → calendar-buq77TaS.js} +1 -1
- package/ui/dist/assets/{chevron-up-CoUsOvZj.js → chevron-up-4ymsBJRo.js} +1 -1
- package/ui/dist/assets/{circle-x-Dgw11LgT.js → circle-x-ByXtwR6Y.js} +1 -1
- package/ui/dist/assets/constants-CVdDh7p0.js +1 -0
- package/ui/dist/assets/{cpu-DiPMQICV.js → cpu-CiuoCeDY.js} +1 -1
- package/ui/dist/assets/{database-BwTfupDi.js → database-BWXSBg5a.js} +1 -1
- package/ui/dist/assets/dialog-lDg4NvMV.js +1 -0
- package/ui/dist/assets/dollar-sign-Dmijd6DP.js +1 -0
- package/ui/dist/assets/{ellipsis-UJx4Xnf6.js → ellipsis-vT-5SVIp.js} +1 -1
- package/ui/dist/assets/{ellipsis-vertical-DoULYEKn.js → ellipsis-vertical-B4tAX_bL.js} +1 -1
- package/ui/dist/assets/feature-markdown-DBo5Q7uq.js +289 -0
- package/ui/dist/assets/{file-code-B2UrJLwi.js → file-code-ChOWdKXf.js} +1 -1
- package/ui/dist/assets/{folder-open-BJi577JH.js → folder-open-CkOUbIiP.js} +1 -1
- package/ui/dist/assets/{funnel-PkaD_HSR.js → funnel-uZkoSPP-.js} +1 -1
- package/ui/dist/assets/{git-branch-C_K30am0.js → git-branch-CwvUxj7C.js} +1 -1
- package/ui/dist/assets/{git-commit-horizontal-IT6ecxWQ.js → git-commit-horizontal-lxPzCvhD.js} +1 -1
- package/ui/dist/assets/{globe-f-jjCa_g.js → globe-D_WpJdsj.js} +1 -1
- package/ui/dist/assets/{hash-DNEv8Elo.js → hash-CA0hJ7vh.js} +1 -1
- package/ui/dist/assets/{history-BQSBo_1Q.js → history-CEWMLELs.js} +1 -1
- package/ui/dist/assets/inbox-ehtOptTV.js +1 -0
- package/ui/dist/assets/{index-nS3EErDg.js → index-C1rhbml4.js} +3 -3
- package/ui/dist/assets/index-CR8gfCHv.js +1 -0
- package/ui/dist/assets/index-DVXMpWai.js +1 -0
- package/ui/dist/assets/index-DaDJMM2v.js +1 -0
- package/ui/dist/assets/index-Djdq_0xu.js +1 -0
- package/ui/dist/assets/index-M46Gcb8K.css +1 -0
- package/ui/dist/assets/index-sEBN7w8J.js +109 -0
- package/ui/dist/assets/layers-C6Mhf8Nk.js +1 -0
- package/ui/dist/assets/{layout-dashboard-CcKt1hXw.js → layout-dashboard-BRUM0kpT.js} +1 -1
- package/ui/dist/assets/{lightbulb-Jhp7FvbU.js → lightbulb-CN2q1O5l.js} +1 -1
- package/ui/dist/assets/{link-2-DdO7ostF.js → link-2-CC4E28yJ.js} +1 -1
- package/ui/dist/assets/markdown-renderer-C6ENbB0u.js +10 -0
- package/ui/dist/assets/markdown-renderer-CfVKi3_s.css +1 -0
- package/ui/dist/assets/{message-square-CBgH65X7.js → message-square-Bbb241am.js} +1 -1
- package/ui/dist/assets/package-CwT3IzFx.js +1 -0
- package/ui/dist/assets/{pencil-CYXCEPQh.js → pencil-CDmiHzoj.js} +1 -1
- package/ui/dist/assets/{play-d1ONaH0-.js → play-tjy5jMQX.js} +1 -1
- package/ui/dist/assets/popover-CFHZf3pE.js +1 -0
- package/ui/dist/assets/progress-BboUHuLf.js +1 -0
- package/ui/dist/assets/{rocket-DhvUetsk.js → rocket--8ZHgdXJ.js} +1 -1
- package/ui/dist/assets/select-n108rXny.js +1 -0
- package/ui/dist/assets/{send-P0r5D7td.js → send-Cu7MR2Qh.js} +1 -1
- package/ui/dist/assets/server-DmodxZp-.js +1 -0
- package/ui/dist/assets/{settings-2-ocj5uHGx.js → settings-2-CkRNqkxj.js} +1 -1
- package/ui/dist/assets/sheet-7aUJkyzU.js +1 -0
- package/ui/dist/assets/{shield-check-DfVdE34l.js → shield-check-ViI3nMKE.js} +1 -1
- package/ui/dist/assets/{shield-off-8l0J6R-8.js → shield-off-DN3tagkn.js} +1 -1
- package/ui/dist/assets/skeleton-C0E1Nfro.js +1 -0
- package/ui/dist/assets/{smartphone-77_g3SQn.js → smartphone-5FghiXpA.js} +1 -1
- package/ui/dist/assets/{square-Ckzsr3Rn.js → square-DiNSx8K7.js} +1 -1
- package/ui/dist/assets/star-DhdFVidS.js +1 -0
- package/ui/dist/assets/switch-CIgVbZqQ.js +1 -0
- package/ui/dist/assets/table-BC56FVMV.js +1 -0
- package/ui/dist/assets/{tag-C35mgoEv.js → tag-CH_vQliw.js} +1 -1
- package/ui/dist/assets/textarea-CxDiKFXZ.js +1 -0
- package/ui/dist/assets/{timer-DHJBS2w1.js → timer-CdGVTb60.js} +1 -1
- package/ui/dist/assets/tooltip-BuW9A5UO.js +1 -0
- package/ui/dist/assets/{trash-2-keO5tKPE.js → trash-2-CucZJL0N.js} +1 -1
- package/ui/dist/assets/trending-down-BCezC1z2.js +1 -0
- package/ui/dist/assets/{trending-up-BBv8KbrY.js → trending-up-C5OYX2k2.js} +1 -1
- package/ui/dist/assets/vendor-query-C0p7b53x.js +4 -0
- package/ui/dist/assets/vendor-react-Mc5_kfYG.js +12 -0
- package/ui/dist/assets/vendor-ui-CXPAUBFv.js +51 -0
- package/ui/dist/assets/{wand-sparkles-BusQ52ZK.js → wand-sparkles-BaH6pJnc.js} +1 -1
- package/ui/dist/assets/{wrench-02YaOSiK.js → wrench-CjxjP6ok.js} +1 -1
- package/ui/dist/index.html +5 -2
- package/ui/dist/assets/ActivityView-BeshZXmE.js +0 -1
- package/ui/dist/assets/AgentList-QVHeldPi.js +0 -1
- package/ui/dist/assets/AnalyticsDashboard-C9R97dXE.js +0 -1
- package/ui/dist/assets/AreaChart-B73gaiVQ.js +0 -1
- package/ui/dist/assets/CartesianChart-CXYL2R-A.js +0 -36
- package/ui/dist/assets/ChatView-qjZErlrp.js +0 -10
- package/ui/dist/assets/CostsDashboard-O4DCLy1i.js +0 -1
- package/ui/dist/assets/EstimateSelect-1hQf4Osk.js +0 -1
- package/ui/dist/assets/FloatingChatbot-BZBzrJxd.js +0 -2
- package/ui/dist/assets/InviteCodeManagement-LEoGqYeA.js +0 -2
- package/ui/dist/assets/ProjectIcon-Chd_ofsw.js +0 -1
- package/ui/dist/assets/ProjectList-BvUfVB6c.js +0 -4
- package/ui/dist/assets/StatusIndicator-pRfkNcdV.js +0 -1
- package/ui/dist/assets/SummaryList-B6kXiTxL.js +0 -1
- package/ui/dist/assets/TaskDetail-CV6CzbOS.js +0 -1
- package/ui/dist/assets/TaskList-DL7brQKd.js +0 -1
- package/ui/dist/assets/TicketBoard-CrkkFj7C.js +0 -1
- package/ui/dist/assets/TicketDetail-hnnYclpD.js +0 -1
- package/ui/dist/assets/TicketList-CsDAyQCL.js +0 -1
- package/ui/dist/assets/UserManagement-BGFQyTSr.js +0 -2
- package/ui/dist/assets/ViewSwitcher-CnL0OqA8.js +0 -1
- package/ui/dist/assets/alert-dialog-SKM6Gjz4.js +0 -7
- package/ui/dist/assets/badge-CVHH1a-v.js +0 -1
- package/ui/dist/assets/brain-6o_RHVpe.js +0 -1
- package/ui/dist/assets/constants-Q5Zivl-a.js +0 -1
- package/ui/dist/assets/dialog-BUqN9Psj.js +0 -1
- package/ui/dist/assets/index-BUmnwPQr.js +0 -1
- package/ui/dist/assets/index-BfF5G4Cw.js +0 -1
- package/ui/dist/assets/index-C8N375c2.js +0 -1
- package/ui/dist/assets/index-CuxnqVVz.css +0 -1
- package/ui/dist/assets/index-CzMM3QOk.js +0 -1
- package/ui/dist/assets/index-lJlNPFVJ.js +0 -67
- package/ui/dist/assets/layers-jFqVrWMD.js +0 -1
- package/ui/dist/assets/markdown-renderer-n1ToC4XQ.js +0 -36
- package/ui/dist/assets/popover-CrmZgoWu.js +0 -1
- package/ui/dist/assets/progress-uv4SPkL5.js +0 -1
- package/ui/dist/assets/select-CeQ8AHGy.js +0 -1
- package/ui/dist/assets/server-CVHTZB72.js +0 -1
- package/ui/dist/assets/sheet-DuQExSho.js +0 -1
- package/ui/dist/assets/skeleton-TFiFJ3nB.js +0 -1
- package/ui/dist/assets/switch-CAePkd6k.js +0 -1
- package/ui/dist/assets/table-ZjAZ7hkt.js +0 -1
- package/ui/dist/assets/textarea-DsVPnSgR.js +0 -1
- package/ui/dist/assets/tooltip-BYmQ331W.js +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-Serve
|
|
3
|
+
*
|
|
4
|
+
* Automatically starts the profClaw server if it's not running.
|
|
5
|
+
* Inspired by OpenClaw's pattern where the CLI "just works" -
|
|
6
|
+
* you type `openclaw` and it handles server lifecycle.
|
|
7
|
+
*
|
|
8
|
+
* @package profclaw-interactive (future standalone)
|
|
9
|
+
*/
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import { resolve } from 'node:path';
|
|
12
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
/**
|
|
15
|
+
* Simple .env file parser (no external dependency).
|
|
16
|
+
* Handles KEY=VALUE, KEY="VALUE", comments (#), and empty lines.
|
|
17
|
+
*/
|
|
18
|
+
function loadDotEnv(filePath) {
|
|
19
|
+
const vars = {};
|
|
20
|
+
try {
|
|
21
|
+
if (!existsSync(filePath))
|
|
22
|
+
return vars;
|
|
23
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
24
|
+
for (const line of content.split('\n')) {
|
|
25
|
+
const trimmed = line.trim();
|
|
26
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
27
|
+
continue;
|
|
28
|
+
const eqIdx = trimmed.indexOf('=');
|
|
29
|
+
if (eqIdx === -1)
|
|
30
|
+
continue;
|
|
31
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
32
|
+
let value = trimmed.slice(eqIdx + 1).trim();
|
|
33
|
+
// Strip surrounding quotes
|
|
34
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
35
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
36
|
+
value = value.slice(1, -1);
|
|
37
|
+
}
|
|
38
|
+
if (key)
|
|
39
|
+
vars[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch { /* ignore */ }
|
|
43
|
+
return vars;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if the profClaw server is reachable.
|
|
47
|
+
*/
|
|
48
|
+
export async function checkServer(baseUrl) {
|
|
49
|
+
try {
|
|
50
|
+
const controller = new AbortController();
|
|
51
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
52
|
+
const response = await fetch(`${baseUrl}/health`, {
|
|
53
|
+
signal: controller.signal,
|
|
54
|
+
headers: { 'Accept': 'application/json' },
|
|
55
|
+
});
|
|
56
|
+
clearTimeout(timeout);
|
|
57
|
+
// Verify it's actually profClaw (not some other service on the same port)
|
|
58
|
+
const text = await response.text();
|
|
59
|
+
if (text.startsWith('<!DOCTYPE') || text.startsWith('<html')) {
|
|
60
|
+
// Got HTML - some other service is on this port
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return response.ok;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Find the server entry point.
|
|
71
|
+
*/
|
|
72
|
+
function findServerEntry() {
|
|
73
|
+
// Try common locations relative to the package root
|
|
74
|
+
const candidates = [
|
|
75
|
+
resolve(process.cwd(), 'dist/server.js'),
|
|
76
|
+
resolve(process.cwd(), 'src/server.ts'),
|
|
77
|
+
];
|
|
78
|
+
for (const candidate of candidates) {
|
|
79
|
+
if (existsSync(candidate)) {
|
|
80
|
+
return candidate;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Start the profClaw server as a background child process.
|
|
87
|
+
* Returns when the server is healthy or times out.
|
|
88
|
+
*/
|
|
89
|
+
export async function autoStartServer(options) {
|
|
90
|
+
const port = options.port || 3000;
|
|
91
|
+
// First check if server is already running
|
|
92
|
+
const alreadyRunning = await checkServer(options.baseUrl);
|
|
93
|
+
if (alreadyRunning) {
|
|
94
|
+
return { success: true };
|
|
95
|
+
}
|
|
96
|
+
if (!options.silent) {
|
|
97
|
+
process.stdout.write(chalk.dim(' Starting server...'));
|
|
98
|
+
}
|
|
99
|
+
const serverEntry = findServerEntry();
|
|
100
|
+
if (!serverEntry) {
|
|
101
|
+
return {
|
|
102
|
+
success: false,
|
|
103
|
+
error: 'Cannot find server entry point. Run `pnpm build` first, or start the server manually with `pnpm dev`.',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Determine runner based on file extension
|
|
107
|
+
const isTsFile = serverEntry.endsWith('.ts');
|
|
108
|
+
const runner = isTsFile ? 'tsx' : 'node';
|
|
109
|
+
// Load .env file (no dotenv dependency - simple parser)
|
|
110
|
+
const dotenvVars = loadDotEnv(resolve(process.cwd(), '.env'));
|
|
111
|
+
const env = {
|
|
112
|
+
...process.env,
|
|
113
|
+
...dotenvVars,
|
|
114
|
+
PORT: String(port),
|
|
115
|
+
NODE_ENV: process.env.NODE_ENV || 'development',
|
|
116
|
+
};
|
|
117
|
+
// Spawn server as fully detached child (cwd = project root for data/ access)
|
|
118
|
+
// Use 'ignore' for all stdio so the child is truly independent
|
|
119
|
+
// We'll detect readiness via HTTP health checks instead of stdout parsing
|
|
120
|
+
let serverProcess;
|
|
121
|
+
try {
|
|
122
|
+
serverProcess = spawn(runner, [serverEntry], {
|
|
123
|
+
env,
|
|
124
|
+
cwd: process.cwd(),
|
|
125
|
+
stdio: 'ignore',
|
|
126
|
+
detached: true,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: `Failed to start server: ${error instanceof Error ? error.message : String(error)}`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Track if process exits early
|
|
136
|
+
let startupError = '';
|
|
137
|
+
serverProcess.on('error', (err) => {
|
|
138
|
+
startupError = err.message;
|
|
139
|
+
});
|
|
140
|
+
serverProcess.on('exit', (code) => {
|
|
141
|
+
if (code !== null && code !== 0) {
|
|
142
|
+
startupError = `Server exited with code ${code}`;
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
// Fully detach - CLI can exit and server keeps running
|
|
146
|
+
serverProcess.unref();
|
|
147
|
+
// Wait for server to become healthy
|
|
148
|
+
const maxWaitMs = 15000;
|
|
149
|
+
const pollIntervalMs = 500;
|
|
150
|
+
const startTime = Date.now();
|
|
151
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
152
|
+
// Check for early crash
|
|
153
|
+
if (startupError) {
|
|
154
|
+
if (startupError.includes('EADDRINUSE')) {
|
|
155
|
+
return {
|
|
156
|
+
success: false,
|
|
157
|
+
error: `Port ${port} is already in use. Kill the process or use: PORT=${port + 1} profclaw chat`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (startupError.includes('exited with code')) {
|
|
161
|
+
return { success: false, error: `Server crashed: ${startupError.slice(0, 300)}` };
|
|
162
|
+
}
|
|
163
|
+
// Non-fatal stderr (e.g. warnings) - continue waiting
|
|
164
|
+
}
|
|
165
|
+
const healthy = await checkServer(options.baseUrl);
|
|
166
|
+
if (healthy) {
|
|
167
|
+
if (!options.silent) {
|
|
168
|
+
console.log(chalk.green(' ready'));
|
|
169
|
+
}
|
|
170
|
+
return { success: true, pid: serverProcess.pid };
|
|
171
|
+
}
|
|
172
|
+
await new Promise((r) => setTimeout(r, pollIntervalMs));
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
error: startupError
|
|
177
|
+
? `Server failed: ${startupError.slice(0, 300)}`
|
|
178
|
+
: `Server did not respond within ${maxWaitMs / 1000}s. Try starting manually: pnpm dev`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Ensure the server is running. Auto-starts if needed.
|
|
183
|
+
* This is the main entry point for the "just works" pattern.
|
|
184
|
+
*/
|
|
185
|
+
export async function ensureServer(baseUrl, options) {
|
|
186
|
+
const isRunning = await checkServer(baseUrl);
|
|
187
|
+
if (isRunning) {
|
|
188
|
+
return { ok: true };
|
|
189
|
+
}
|
|
190
|
+
if (options?.autoStart === false) {
|
|
191
|
+
return {
|
|
192
|
+
ok: false,
|
|
193
|
+
error: `profClaw server is not running at ${baseUrl}. Start it with: pnpm dev`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// Extract port from URL
|
|
197
|
+
const portMatch = baseUrl.match(/:(\d+)/);
|
|
198
|
+
const port = portMatch ? parseInt(portMatch[1]) : 3000;
|
|
199
|
+
const result = await autoStartServer({
|
|
200
|
+
port,
|
|
201
|
+
baseUrl,
|
|
202
|
+
silent: options?.silent,
|
|
203
|
+
});
|
|
204
|
+
if (!result.success) {
|
|
205
|
+
return { ok: false, error: result.error };
|
|
206
|
+
}
|
|
207
|
+
return { ok: true };
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=auto-serve.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* profClaw Interactive CLI
|
|
3
|
+
*
|
|
4
|
+
* Claude-like interactive chat with streaming responses, tool display,
|
|
5
|
+
* markdown rendering, slash commands, and session management.
|
|
6
|
+
*
|
|
7
|
+
* Designed as a self-contained module that can be extracted to its own
|
|
8
|
+
* package in the future (e.g., @profclaw/interactive or profclaw-cli).
|
|
9
|
+
*
|
|
10
|
+
* Dependencies (all peer/optional in standalone mode):
|
|
11
|
+
* - chalk (terminal colors)
|
|
12
|
+
* - ora (spinners)
|
|
13
|
+
* - node:readline (input)
|
|
14
|
+
* - node:fs (history persistence)
|
|
15
|
+
*
|
|
16
|
+
* @package profclaw-interactive
|
|
17
|
+
*/
|
|
18
|
+
export { startInteractiveREPL } from './repl.js';
|
|
19
|
+
export { createRenderer, renderMarkdownLite, formatElapsed, formatTokens, highlightCode } from './renderer.js';
|
|
20
|
+
export { streamChat, createConversation, sendMessage } from './stream-client.js';
|
|
21
|
+
export { ensureServer, checkServer, autoStartServer } from './auto-serve.js';
|
|
22
|
+
export { showPicker } from './picker.js';
|
|
23
|
+
export type { PickerItem, PickerOptions } from './picker.js';
|
|
24
|
+
export type { InteractiveOptions, REPLState, SlashCommand, ServerConfig, Session, ChatMessage, ToolCallInfo, TokenUsage, SSEEvent, SSEEventType, Renderer, } from './types.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* profClaw Interactive CLI
|
|
3
|
+
*
|
|
4
|
+
* Claude-like interactive chat with streaming responses, tool display,
|
|
5
|
+
* markdown rendering, slash commands, and session management.
|
|
6
|
+
*
|
|
7
|
+
* Designed as a self-contained module that can be extracted to its own
|
|
8
|
+
* package in the future (e.g., @profclaw/interactive or profclaw-cli).
|
|
9
|
+
*
|
|
10
|
+
* Dependencies (all peer/optional in standalone mode):
|
|
11
|
+
* - chalk (terminal colors)
|
|
12
|
+
* - ora (spinners)
|
|
13
|
+
* - node:readline (input)
|
|
14
|
+
* - node:fs (history persistence)
|
|
15
|
+
*
|
|
16
|
+
* @package profclaw-interactive
|
|
17
|
+
*/
|
|
18
|
+
export { startInteractiveREPL } from './repl.js';
|
|
19
|
+
export { createRenderer, renderMarkdownLite, formatElapsed, formatTokens, highlightCode } from './renderer.js';
|
|
20
|
+
export { streamChat, createConversation, sendMessage } from './stream-client.js';
|
|
21
|
+
export { ensureServer, checkServer, autoStartServer } from './auto-serve.js';
|
|
22
|
+
export { showPicker } from './picker.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Picker
|
|
3
|
+
*
|
|
4
|
+
* Arrow-key navigable selection menu for the terminal.
|
|
5
|
+
* Used for session picker, model picker, provider picker, etc.
|
|
6
|
+
*
|
|
7
|
+
* @package profclaw-interactive (future standalone)
|
|
8
|
+
*/
|
|
9
|
+
export interface PickerItem {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
dimLabel?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface PickerOptions {
|
|
16
|
+
title: string;
|
|
17
|
+
items: PickerItem[];
|
|
18
|
+
/** Allow filtering by typing */
|
|
19
|
+
filterable?: boolean;
|
|
20
|
+
/** Max items to show at once (scrolls) */
|
|
21
|
+
pageSize?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Show an interactive picker menu.
|
|
25
|
+
* Returns the selected item ID, or null if cancelled (Escape/Ctrl+C).
|
|
26
|
+
*/
|
|
27
|
+
export declare function showPicker(options: PickerOptions): Promise<string | null>;
|
|
28
|
+
//# sourceMappingURL=picker.d.ts.map
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Picker
|
|
3
|
+
*
|
|
4
|
+
* Arrow-key navigable selection menu for the terminal.
|
|
5
|
+
* Used for session picker, model picker, provider picker, etc.
|
|
6
|
+
*
|
|
7
|
+
* @package profclaw-interactive (future standalone)
|
|
8
|
+
*/
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
/**
|
|
11
|
+
* Show an interactive picker menu.
|
|
12
|
+
* Returns the selected item ID, or null if cancelled (Escape/Ctrl+C).
|
|
13
|
+
*/
|
|
14
|
+
export function showPicker(options) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const { title, items, pageSize = 10 } = options;
|
|
17
|
+
const filterable = options.filterable !== false;
|
|
18
|
+
if (items.length === 0) {
|
|
19
|
+
console.log(chalk.dim(' No items to select.'));
|
|
20
|
+
resolve(null);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
let selectedIndex = 0;
|
|
24
|
+
let filter = '';
|
|
25
|
+
let filteredItems = [...items];
|
|
26
|
+
let scrollOffset = 0;
|
|
27
|
+
const gold = chalk.hex('#F6C453');
|
|
28
|
+
const dim = chalk.dim;
|
|
29
|
+
const mint = chalk.hex('#7DD3A5');
|
|
30
|
+
const border = chalk.hex('#3C414B');
|
|
31
|
+
const H = '\u2500';
|
|
32
|
+
const POINTER = '\u25b8'; // ▸
|
|
33
|
+
const w = Math.min((process.stdout.columns || 80) - 4, 68);
|
|
34
|
+
function applyFilter() {
|
|
35
|
+
if (!filter) {
|
|
36
|
+
filteredItems = [...items];
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const lower = filter.toLowerCase();
|
|
40
|
+
filteredItems = items.filter((item) => item.label.toLowerCase().includes(lower) ||
|
|
41
|
+
item.id.toLowerCase().includes(lower) ||
|
|
42
|
+
(item.description || '').toLowerCase().includes(lower));
|
|
43
|
+
}
|
|
44
|
+
selectedIndex = Math.min(selectedIndex, Math.max(0, filteredItems.length - 1));
|
|
45
|
+
scrollOffset = Math.max(0, Math.min(scrollOffset, filteredItems.length - pageSize));
|
|
46
|
+
}
|
|
47
|
+
function render() {
|
|
48
|
+
// Clear previous render
|
|
49
|
+
const totalLines = 3 + Math.min(filteredItems.length, pageSize) + (filterable ? 1 : 0) + 2;
|
|
50
|
+
process.stdout.write(`\x1b[${totalLines}A\x1b[J`);
|
|
51
|
+
// Header
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(` ${border(H.repeat(w))}`);
|
|
54
|
+
console.log(` ${gold.bold(title)}${filter ? dim(` filter: ${filter}`) : ''}`);
|
|
55
|
+
// Items
|
|
56
|
+
const visibleStart = scrollOffset;
|
|
57
|
+
const visibleEnd = Math.min(filteredItems.length, scrollOffset + pageSize);
|
|
58
|
+
if (visibleStart > 0) {
|
|
59
|
+
console.log(dim(` ${' '}... ${visibleStart} more above`));
|
|
60
|
+
}
|
|
61
|
+
for (let i = visibleStart; i < visibleEnd; i++) {
|
|
62
|
+
const item = filteredItems[i];
|
|
63
|
+
const isSelected = i === selectedIndex;
|
|
64
|
+
const pointer = isSelected ? gold(POINTER) : ' ';
|
|
65
|
+
const label = isSelected
|
|
66
|
+
? chalk.bold(item.label)
|
|
67
|
+
: item.dimLabel ? dim(item.label) : item.label;
|
|
68
|
+
const desc = item.description ? dim(` ${item.description}`) : '';
|
|
69
|
+
const id = dim(` ${item.id.slice(0, 8)}`);
|
|
70
|
+
console.log(` ${pointer} ${label}${desc}${id}`);
|
|
71
|
+
}
|
|
72
|
+
if (visibleEnd < filteredItems.length) {
|
|
73
|
+
console.log(dim(` ${' '}... ${filteredItems.length - visibleEnd} more below`));
|
|
74
|
+
}
|
|
75
|
+
// Footer
|
|
76
|
+
console.log(` ${border(H.repeat(w))}`);
|
|
77
|
+
console.log(dim(` \u2191\u2193 navigate \u00b7 enter select \u00b7 esc cancel${filterable ? ' \u00b7 type to filter' : ''}`));
|
|
78
|
+
}
|
|
79
|
+
// Print initial blank lines to give render() space to overwrite
|
|
80
|
+
const initialLines = 3 + Math.min(items.length, pageSize) + 2;
|
|
81
|
+
for (let i = 0; i < initialLines; i++)
|
|
82
|
+
console.log('');
|
|
83
|
+
render();
|
|
84
|
+
// Enter raw mode to capture keystrokes
|
|
85
|
+
if (!process.stdin.isRaw) {
|
|
86
|
+
process.stdin.setRawMode(true);
|
|
87
|
+
}
|
|
88
|
+
process.stdin.resume();
|
|
89
|
+
const onKeypress = (chunk) => {
|
|
90
|
+
const key = chunk.toString();
|
|
91
|
+
// Escape
|
|
92
|
+
if (key === '\x1b' || key === '\x03') {
|
|
93
|
+
cleanup();
|
|
94
|
+
resolve(null);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Enter
|
|
98
|
+
if (key === '\r' || key === '\n') {
|
|
99
|
+
if (filteredItems.length > 0) {
|
|
100
|
+
const selected = filteredItems[selectedIndex];
|
|
101
|
+
cleanup();
|
|
102
|
+
resolve(selected.id);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Arrow up
|
|
107
|
+
if (key === '\x1b[A') {
|
|
108
|
+
if (selectedIndex > 0) {
|
|
109
|
+
selectedIndex--;
|
|
110
|
+
if (selectedIndex < scrollOffset)
|
|
111
|
+
scrollOffset = selectedIndex;
|
|
112
|
+
}
|
|
113
|
+
render();
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Arrow down
|
|
117
|
+
if (key === '\x1b[B') {
|
|
118
|
+
if (selectedIndex < filteredItems.length - 1) {
|
|
119
|
+
selectedIndex++;
|
|
120
|
+
if (selectedIndex >= scrollOffset + pageSize)
|
|
121
|
+
scrollOffset = selectedIndex - pageSize + 1;
|
|
122
|
+
}
|
|
123
|
+
render();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Backspace
|
|
127
|
+
if (key === '\x7f' || key === '\b') {
|
|
128
|
+
if (filter.length > 0) {
|
|
129
|
+
filter = filter.slice(0, -1);
|
|
130
|
+
applyFilter();
|
|
131
|
+
render();
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// Printable character (filter)
|
|
136
|
+
if (filterable && key.length === 1 && key >= ' ' && key <= '~') {
|
|
137
|
+
filter += key;
|
|
138
|
+
applyFilter();
|
|
139
|
+
render();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
function cleanup() {
|
|
144
|
+
process.stdin.removeListener('data', onKeypress);
|
|
145
|
+
process.stdin.setRawMode(false);
|
|
146
|
+
// Clear the picker display
|
|
147
|
+
const totalLines = 3 + Math.min(filteredItems.length, pageSize) + 2;
|
|
148
|
+
process.stdout.write(`\x1b[${totalLines}A\x1b[J`);
|
|
149
|
+
}
|
|
150
|
+
process.stdin.on('data', onKeypress);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=picker.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Renderer - Polished CLI Output
|
|
3
|
+
*
|
|
4
|
+
* Design inspired by Claude Code, OpenClaw, Charm.sh, and clig.dev:
|
|
5
|
+
*
|
|
6
|
+
* - Response text indented 2 spaces for visual separation from prompt
|
|
7
|
+
* - Tool calls framed with thin Unicode box-drawing lines
|
|
8
|
+
* - Markdown rendered inline (bold, code, lists, headings, quotes)
|
|
9
|
+
* - Streaming markdown: lines formatted as they complete
|
|
10
|
+
* - Syntax highlighting for common languages in code blocks
|
|
11
|
+
* - Word-wrap respects terminal width
|
|
12
|
+
* - Color used intentionally: cyan for links, gold for code, dim for chrome
|
|
13
|
+
* - Progress within 100ms (spinner starts immediately)
|
|
14
|
+
* - Errors are actionable, not cryptic
|
|
15
|
+
* - Respects NO_COLOR env var
|
|
16
|
+
* - Cost/time shown only when meaningful
|
|
17
|
+
*
|
|
18
|
+
* @package profclaw-interactive (future standalone)
|
|
19
|
+
*/
|
|
20
|
+
import type { Renderer } from './types.js';
|
|
21
|
+
export declare function highlightCode(line: string, lang: string): string;
|
|
22
|
+
export declare function formatElapsed(ms: number): string;
|
|
23
|
+
export declare function formatTokens(count: number): string;
|
|
24
|
+
export declare function renderMarkdownLite(text: string): string;
|
|
25
|
+
export declare function createRenderer(): Renderer;
|
|
26
|
+
//# sourceMappingURL=renderer.d.ts.map
|