agim-cli 1.4.9 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +437 -402
- package/README.md +43 -7
- package/README.zh-CN.md +42 -7
- package/bin/agim_rpc.py +12 -12
- package/dist/cli-ui/cmd-handlers.d.ts +25 -4
- package/dist/cli-ui/cmd-handlers.d.ts.map +1 -1
- package/dist/cli-ui/cmd-handlers.js +315 -59
- package/dist/cli-ui/cmd-handlers.js.map +1 -1
- package/dist/cli-ui/config-wizard.d.ts +13 -1
- package/dist/cli-ui/config-wizard.d.ts.map +1 -1
- package/dist/cli-ui/config-wizard.js +120 -48
- package/dist/cli-ui/config-wizard.js.map +1 -1
- package/dist/cli-ui/doctor.d.ts +15 -0
- package/dist/cli-ui/doctor.d.ts.map +1 -0
- package/dist/cli-ui/doctor.js +151 -0
- package/dist/cli-ui/doctor.js.map +1 -0
- package/dist/cli-ui/entry-menu.d.ts +6 -0
- package/dist/cli-ui/entry-menu.d.ts.map +1 -1
- package/dist/cli-ui/entry-menu.js +67 -30
- package/dist/cli-ui/entry-menu.js.map +1 -1
- package/dist/cli-ui/env-file.d.ts +4 -4
- package/dist/cli-ui/env-file.js +13 -13
- package/dist/cli-ui/env-file.js.map +1 -1
- package/dist/cli-ui/i18n.d.ts +17 -8
- package/dist/cli-ui/i18n.d.ts.map +1 -1
- package/dist/cli-ui/i18n.js +39 -21
- package/dist/cli-ui/i18n.js.map +1 -1
- package/dist/cli-ui/lang-picker.js +1 -1
- package/dist/cli-ui/lang-picker.js.map +1 -1
- package/dist/cli-ui/paths.d.ts.map +1 -1
- package/dist/cli-ui/paths.js +2 -4
- package/dist/cli-ui/paths.js.map +1 -1
- package/dist/cli-ui/quickstart.d.ts +3 -0
- package/dist/cli-ui/quickstart.d.ts.map +1 -0
- package/dist/cli-ui/quickstart.js +108 -0
- package/dist/cli-ui/quickstart.js.map +1 -0
- package/dist/cli-ui/readiness.d.ts +10 -0
- package/dist/cli-ui/readiness.d.ts.map +1 -0
- package/dist/cli-ui/readiness.js +75 -0
- package/dist/cli-ui/readiness.js.map +1 -0
- package/dist/cli-ui/service.d.ts +30 -7
- package/dist/cli-ui/service.d.ts.map +1 -1
- package/dist/cli-ui/service.js +171 -77
- package/dist/cli-ui/service.js.map +1 -1
- package/dist/cli-ui/tui/app.js +2 -2
- package/dist/cli-ui/tui/app.js.map +1 -1
- package/dist/cli-ui/tui/index.js +6 -6
- package/dist/cli-ui/tui/index.js.map +1 -1
- package/dist/cli-ui/tui/mouse-stdin.js +1 -1
- package/dist/cli-ui/tui/mouse-stdin.js.map +1 -1
- package/dist/cli-ui/tui/stream-reveal.d.ts +2 -2
- package/dist/cli-ui/tui/stream-reveal.d.ts.map +1 -1
- package/dist/cli-ui/tui/stream-reveal.js +4 -4
- package/dist/cli-ui/tui/stream-reveal.js.map +1 -1
- package/dist/cli.js +118 -436
- package/dist/cli.js.map +1 -1
- package/dist/core/a2a-notify.js +5 -5
- package/dist/core/a2a-notify.js.map +1 -1
- package/dist/core/a2a.d.ts +2 -2
- package/dist/core/a2a.d.ts.map +1 -1
- package/dist/core/a2a.js +12 -12
- package/dist/core/a2a.js.map +1 -1
- package/dist/core/access-token.d.ts +1 -1
- package/dist/core/access-token.js +7 -7
- package/dist/core/access-token.js.map +1 -1
- package/dist/core/acp-server.d.ts.map +1 -1
- package/dist/core/acp-server.js +21 -7
- package/dist/core/acp-server.js.map +1 -1
- package/dist/core/admin-allowlist.js +5 -5
- package/dist/core/admin-allowlist.js.map +1 -1
- package/dist/core/agent-base.d.ts +1 -1
- package/dist/core/agent-base.js +3 -3
- package/dist/core/agent-base.js.map +1 -1
- package/dist/core/agent-cwd.d.ts +13 -6
- package/dist/core/agent-cwd.d.ts.map +1 -1
- package/dist/core/agent-cwd.js +72 -23
- package/dist/core/agent-cwd.js.map +1 -1
- package/dist/core/agim-paths.d.ts +1 -4
- package/dist/core/agim-paths.d.ts.map +1 -1
- package/dist/core/agim-paths.js +18 -35
- package/dist/core/agim-paths.js.map +1 -1
- package/dist/core/approval-bus.d.ts +4 -4
- package/dist/core/approval-bus.d.ts.map +1 -1
- package/dist/core/approval-bus.js +14 -14
- package/dist/core/approval-bus.js.map +1 -1
- package/dist/core/approval-router.js +2 -2
- package/dist/core/artifacts.js +3 -3
- package/dist/core/artifacts.js.map +1 -1
- package/dist/core/ask-user-rpc.js +1 -1
- package/dist/core/ask-user-rpc.js.map +1 -1
- package/dist/core/audit-log.js +2 -2
- package/dist/core/audit-log.js.map +1 -1
- package/dist/core/bgjob-reader.d.ts +1 -1
- package/dist/core/bgjob-reader.js +4 -4
- package/dist/core/bgjob-reader.js.map +1 -1
- package/dist/core/commands/approval.js +2 -2
- package/dist/core/commands/approval.js.map +1 -1
- package/dist/core/commands/builtin.d.ts.map +1 -1
- package/dist/core/commands/builtin.js +12 -2
- package/dist/core/commands/builtin.js.map +1 -1
- package/dist/core/commands/heartbeat.js +2 -2
- package/dist/core/commands/heartbeat.js.map +1 -1
- package/dist/core/commands/memo.js +1 -1
- package/dist/core/commands/memo.js.map +1 -1
- package/dist/core/commands/model.d.ts.map +1 -1
- package/dist/core/commands/model.js +32 -3
- package/dist/core/commands/model.js.map +1 -1
- package/dist/core/commands/plan.js +3 -3
- package/dist/core/commands/plan.js.map +1 -1
- package/dist/core/commands/router-compare.js +3 -3
- package/dist/core/commands/router-compare.js.map +1 -1
- package/dist/core/commands/service.d.ts.map +1 -1
- package/dist/core/commands/service.js +1 -3
- package/dist/core/commands/service.js.map +1 -1
- package/dist/core/commands/sessions.js +4 -4
- package/dist/core/commands/sessions.js.map +1 -1
- package/dist/core/commands/skill.js +1 -1
- package/dist/core/commands/skill.js.map +1 -1
- package/dist/core/commands/stats.js +1 -1
- package/dist/core/commands/stats.js.map +1 -1
- package/dist/core/commands/web.js +5 -5
- package/dist/core/commands/web.js.map +1 -1
- package/dist/core/config-schema.js +1 -1
- package/dist/core/coord-systems.d.ts +1 -1
- package/dist/core/coord-systems.js +4 -4
- package/dist/core/coord-systems.js.map +1 -1
- package/dist/core/event-bus.d.ts +5 -5
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +3 -3
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/feature-flags.d.ts +2 -2
- package/dist/core/feature-flags.js +4 -4
- package/dist/core/feature-flags.js.map +1 -1
- package/dist/core/goal-rpc.js +2 -2
- package/dist/core/goal-rpc.js.map +1 -1
- package/dist/core/goals.d.ts +1 -1
- package/dist/core/goals.js +3 -3
- package/dist/core/goals.js.map +1 -1
- package/dist/core/heartbeat-store.d.ts +1 -1
- package/dist/core/heartbeat-store.d.ts.map +1 -1
- package/dist/core/heartbeat-store.js +3 -3
- package/dist/core/heartbeat-store.js.map +1 -1
- package/dist/core/heartbeat.js +4 -4
- package/dist/core/heartbeat.js.map +1 -1
- package/dist/core/intent-llm.d.ts +2 -2
- package/dist/core/intent-llm.js +5 -5
- package/dist/core/intent-llm.js.map +1 -1
- package/dist/core/job-board.d.ts +5 -5
- package/dist/core/job-board.d.ts.map +1 -1
- package/dist/core/job-board.js +17 -17
- package/dist/core/job-board.js.map +1 -1
- package/dist/core/llm/agent-loop.d.ts +3 -3
- package/dist/core/llm/agent-loop.js +14 -14
- package/dist/core/llm/agent-loop.js.map +1 -1
- package/dist/core/llm/{imhub-dispatcher.d.ts → agim-dispatcher.d.ts} +4 -4
- package/dist/core/llm/agim-dispatcher.d.ts.map +1 -0
- package/dist/core/llm/{imhub-dispatcher.js → agim-dispatcher.js} +43 -43
- package/dist/core/llm/agim-dispatcher.js.map +1 -0
- package/dist/core/llm/agim-rpc-server.js +17 -17
- package/dist/core/llm/agim-rpc-server.js.map +1 -1
- package/dist/core/llm/anthropic-provider.js +2 -1
- package/dist/core/llm/anthropic-provider.js.map +1 -1
- package/dist/core/llm/auto-compact.d.ts +3 -3
- package/dist/core/llm/auto-compact.d.ts.map +1 -1
- package/dist/core/llm/auto-compact.js +5 -5
- package/dist/core/llm/auto-compact.js.map +1 -1
- package/dist/core/llm/builtin-dispatcher.js +3 -3
- package/dist/core/llm/builtin-dispatcher.js.map +1 -1
- package/dist/core/llm/exec-dispatcher.d.ts +2 -2
- package/dist/core/llm/exec-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/exec-dispatcher.js +20 -22
- package/dist/core/llm/exec-dispatcher.js.map +1 -1
- package/dist/core/llm/fs-dispatcher.js +8 -8
- package/dist/core/llm/fs-dispatcher.js.map +1 -1
- package/dist/core/llm/goal-critic.js +4 -4
- package/dist/core/llm/goal-critic.js.map +1 -1
- package/dist/core/llm/hallucination-detector.js +2 -2
- package/dist/core/llm/hallucination-detector.js.map +1 -1
- package/dist/core/llm/mcp-client.d.ts +1 -1
- package/dist/core/llm/mcp-client.js +3 -3
- package/dist/core/llm/mcp-client.js.map +1 -1
- package/dist/core/llm/mcp-registry.js +3 -3
- package/dist/core/llm/mcp-registry.js.map +1 -1
- package/dist/core/llm/openai-compat-provider.d.ts +1 -1
- package/dist/core/llm/openai-compat-provider.js +5 -4
- package/dist/core/llm/openai-compat-provider.js.map +1 -1
- package/dist/core/llm/provider-base.d.ts +5 -5
- package/dist/core/llm/provider-base.d.ts.map +1 -1
- package/dist/core/llm/provider-base.js +1 -1
- package/dist/core/llm/provider-base.js.map +1 -1
- package/dist/core/llm/secrets.d.ts +2 -2
- package/dist/core/llm/secrets.d.ts.map +1 -1
- package/dist/core/llm/tool-dispatcher.d.ts +1 -1
- package/dist/core/llm/web-dispatcher.d.ts +1 -1
- package/dist/core/llm/web-dispatcher.js +15 -15
- package/dist/core/llm/web-dispatcher.js.map +1 -1
- package/dist/core/logger.d.ts +1 -1
- package/dist/core/logger.js +3 -3
- package/dist/core/logger.js.map +1 -1
- package/dist/core/memo-rpc.js +3 -3
- package/dist/core/memo-rpc.js.map +1 -1
- package/dist/core/memory-consolidate.js +4 -4
- package/dist/core/memory-consolidate.js.map +1 -1
- package/dist/core/memory-distill.js +4 -4
- package/dist/core/memory-distill.js.map +1 -1
- package/dist/core/memory-distiller.js +9 -9
- package/dist/core/memory-distiller.js.map +1 -1
- package/dist/core/memory-vector.js +9 -9
- package/dist/core/memory-vector.js.map +1 -1
- package/dist/core/memory.js +2 -2
- package/dist/core/memory.js.map +1 -1
- package/dist/core/memos.js +6 -6
- package/dist/core/memos.js.map +1 -1
- package/dist/core/message-sink.js +13 -13
- package/dist/core/message-sink.js.map +1 -1
- package/dist/core/notification-evaluator.d.ts +2 -2
- package/dist/core/notification-evaluator.js +4 -4
- package/dist/core/notification-evaluator.js.map +1 -1
- package/dist/core/onboarding.js +3 -3
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/outbox.js +2 -2
- package/dist/core/outbox.js.map +1 -1
- package/dist/core/persona.d.ts +1 -1
- package/dist/core/persona.d.ts.map +1 -1
- package/dist/core/persona.js +2 -2
- package/dist/core/persona.js.map +1 -1
- package/dist/core/plan-history.js +1 -1
- package/dist/core/plan-history.js.map +1 -1
- package/dist/core/plan-intent.js +5 -5
- package/dist/core/plan-intent.js.map +1 -1
- package/dist/core/plan-mode-state.d.ts +1 -1
- package/dist/core/plan-mode-state.js +4 -4
- package/dist/core/plan-mode-state.js.map +1 -1
- package/dist/core/push-rpc.d.ts +1 -1
- package/dist/core/push-rpc.js +6 -6
- package/dist/core/push-rpc.js.map +1 -1
- package/dist/core/registry.d.ts +4 -4
- package/dist/core/registry.js +10 -10
- package/dist/core/registry.js.map +1 -1
- package/dist/core/reminders.js +1 -1
- package/dist/core/reminders.js.map +1 -1
- package/dist/core/restart-flow.d.ts.map +1 -1
- package/dist/core/restart-flow.js +5 -7
- package/dist/core/restart-flow.js.map +1 -1
- package/dist/core/router.d.ts +1 -1
- package/dist/core/router.js +5 -5
- package/dist/core/router.js.map +1 -1
- package/dist/core/schedule.d.ts +2 -2
- package/dist/core/schedule.js +4 -4
- package/dist/core/schedule.js.map +1 -1
- package/dist/core/self-protect.js +3 -3
- package/dist/core/self-protect.js.map +1 -1
- package/dist/core/sender-allowlist.js +7 -7
- package/dist/core/sender-allowlist.js.map +1 -1
- package/dist/core/sensitive-paths.d.ts.map +1 -1
- package/dist/core/sensitive-paths.js +1 -2
- package/dist/core/sensitive-paths.js.map +1 -1
- package/dist/core/session.js +2 -2
- package/dist/core/session.js.map +1 -1
- package/dist/core/skills/builtin/ECC_NOTICE.md +1 -1
- package/dist/core/skills/builtin/agim-memory/SKILL.md +1 -1
- package/dist/core/skills/builtin/agim-reminders/SKILL.md +2 -2
- package/dist/core/skills/builtin/agim-self/SKILL.md +9 -9
- package/dist/core/skills/builtin/agim-skill-discovery/SKILL.md +5 -5
- package/dist/core/skills/builtin/image-generation/SKILL.md +2 -2
- package/dist/core/skills/builtin/long-goal/SKILL.md +7 -7
- package/dist/core/skills/builtin/my/SKILL.md +2 -2
- package/dist/core/skills/builtin/skill-creator/SKILL.md +2 -2
- package/dist/core/skills/loader.d.ts +4 -4
- package/dist/core/skills/loader.js +22 -22
- package/dist/core/skills/loader.js.map +1 -1
- package/dist/core/skills-rpc.js +1 -1
- package/dist/core/skills-rpc.js.map +1 -1
- package/dist/core/transcribe.js +13 -13
- package/dist/core/transcribe.js.map +1 -1
- package/dist/core/tunnel.js +1 -1
- package/dist/core/tunnel.js.map +1 -1
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/user-coord-prefs.js +1 -1
- package/dist/core/user-coord-prefs.js.map +1 -1
- package/dist/core/viewer-config.d.ts +8 -8
- package/dist/core/viewer-config.js +17 -17
- package/dist/core/viewer-config.js.map +1 -1
- package/dist/core/viewer-local.js +4 -4
- package/dist/core/viewer-local.js.map +1 -1
- package/dist/core/viewer-remote.js +1 -1
- package/dist/core/viewer-remote.js.map +1 -1
- package/dist/plugins/agents/acp/url-guard.d.ts +1 -1
- package/dist/plugins/agents/acp/url-guard.js +2 -2
- package/dist/plugins/agents/acp/url-guard.js.map +1 -1
- package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts +6 -6
- package/dist/plugins/agents/antigravity/ensure-mcp-config.d.ts.map +1 -1
- package/dist/plugins/agents/antigravity/ensure-mcp-config.js +12 -12
- package/dist/plugins/agents/antigravity/ensure-mcp-config.js.map +1 -1
- package/dist/plugins/agents/antigravity/index.js +10 -10
- package/dist/plugins/agents/antigravity/index.js.map +1 -1
- package/dist/plugins/agents/claude-code/index.d.ts +2 -2
- package/dist/plugins/agents/claude-code/index.js +16 -16
- package/dist/plugins/agents/claude-code/index.js.map +1 -1
- package/dist/plugins/agents/claude-code/mcp-approval-server.js +13 -13
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
- package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts +4 -4
- package/dist/plugins/agents/codex/build-mcp-cli-args.js +14 -14
- package/dist/plugins/agents/codex/build-mcp-cli-args.js.map +1 -1
- package/dist/plugins/agents/codex/index.d.ts +3 -3
- package/dist/plugins/agents/codex/index.js +14 -14
- package/dist/plugins/agents/codex/index.js.map +1 -1
- package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts +5 -5
- package/dist/plugins/agents/cursor/ensure-mcp-config.d.ts.map +1 -1
- package/dist/plugins/agents/cursor/ensure-mcp-config.js +11 -11
- package/dist/plugins/agents/cursor/ensure-mcp-config.js.map +1 -1
- package/dist/plugins/agents/cursor/index.d.ts +1 -1
- package/dist/plugins/agents/cursor/index.js +12 -12
- package/dist/plugins/agents/cursor/index.js.map +1 -1
- package/dist/plugins/agents/native/index.d.ts +1 -0
- package/dist/plugins/agents/native/index.d.ts.map +1 -1
- package/dist/plugins/agents/native/index.js +28 -14
- package/dist/plugins/agents/native/index.js.map +1 -1
- package/dist/plugins/agents/native/tool-registry.d.ts +3 -3
- package/dist/plugins/agents/native/tool-registry.d.ts.map +1 -1
- package/dist/plugins/agents/native/tool-registry.js +5 -5
- package/dist/plugins/agents/native/tool-registry.js.map +1 -1
- package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts +1 -1
- package/dist/plugins/agents/opencode/ensure-mcp-config.js +9 -9
- package/dist/plugins/agents/opencode/ensure-mcp-config.js.map +1 -1
- package/dist/plugins/agents/opencode/index.js +3 -3
- package/dist/plugins/agents/opencode/index.js.map +1 -1
- package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +4 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -1
- package/dist/plugins/agents/opencode/opencode-http-adapter.js +16 -12
- package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -1
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +2 -2
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +7 -5
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
- package/dist/plugins/agents/opencode/serve-manager.d.ts +1 -1
- package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -1
- package/dist/plugins/agents/opencode/serve-manager.js +10 -10
- package/dist/plugins/agents/opencode/serve-manager.js.map +1 -1
- package/dist/plugins/agents/pi-native/factory.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/factory.js +29 -13
- package/dist/plugins/agents/pi-native/factory.js.map +1 -1
- package/dist/plugins/agents/pi-native/index.d.ts +14 -3
- package/dist/plugins/agents/pi-native/index.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/index.js +58 -4
- package/dist/plugins/agents/pi-native/index.js.map +1 -1
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts +2 -0
- package/dist/plugins/agents/pi-native/provider-resolver.d.ts.map +1 -1
- package/dist/plugins/agents/pi-native/provider-resolver.js +9 -1
- package/dist/plugins/agents/pi-native/provider-resolver.js.map +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js +1 -1
- package/dist/plugins/agents/pi-native/tool-bridge.js.map +1 -1
- package/dist/plugins/agents/pi-native/tools.js +4 -4
- package/dist/plugins/agents/pi-native/tools.js.map +1 -1
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +1 -1
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +2 -2
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -1
- package/dist/plugins/messengers/email/email-adapter.js +15 -15
- package/dist/plugins/messengers/email/email-adapter.js.map +1 -1
- package/dist/plugins/messengers/telegram/media-download.d.ts +1 -1
- package/dist/plugins/messengers/telegram/media-download.js +4 -4
- package/dist/plugins/messengers/telegram/media-download.js.map +1 -1
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +1 -1
- package/dist/plugins/messengers/telegram/telegram-adapter.js +3 -3
- package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -1
- package/dist/plugins/messengers/wechat/context-store.js +1 -1
- package/dist/plugins/messengers/wechat/context-store.js.map +1 -1
- package/dist/plugins/messengers/wechat/ilink-adapter.js +1 -1
- package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
- package/dist/plugins/messengers/wechat/ilink-client.js +1 -1
- package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -1
- package/dist/plugins/messengers/wechat/media-download.js +1 -1
- package/dist/plugins/messengers/wechat/media-download.js.map +1 -1
- package/dist/scripts/migrate-gcj02-to-wgs84.js +1 -1
- package/dist/scripts/migrate-gcj02-to-wgs84.js.map +1 -1
- package/dist/web/public/assets/a2a-CTsDMefo.js +7 -0
- package/dist/web/public/assets/a2a-CTsDMefo.js.map +1 -0
- package/dist/web/public/assets/{activity-BnlFGipw.js → activity-ul8Os7Pz.js} +2 -2
- package/dist/web/public/assets/{activity-BnlFGipw.js.map → activity-ul8Os7Pz.js.map} +1 -1
- package/dist/web/public/assets/{admins-CH84Rw1d.js → admins-ByMAuquy.js} +3 -3
- package/dist/web/public/assets/{admins-CH84Rw1d.js.map → admins-ByMAuquy.js.map} +1 -1
- package/dist/web/public/assets/agents-Ds1zyxBj.js +2 -0
- package/dist/web/public/assets/agents-Ds1zyxBj.js.map +1 -0
- package/dist/web/public/assets/{approvals-DnzjbDR6.js → approvals-DOWlWI7Z.js} +3 -3
- package/dist/web/public/assets/{approvals-DnzjbDR6.js.map → approvals-DOWlWI7Z.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-DxlRHrs8.js → arrow-down-7i0xwCI2.js} +2 -2
- package/dist/web/public/assets/{arrow-down-DxlRHrs8.js.map → arrow-down-7i0xwCI2.js.map} +1 -1
- package/dist/web/public/assets/arrow-right-A889Wof8.js +7 -0
- package/dist/web/public/assets/arrow-right-A889Wof8.js.map +1 -0
- package/dist/web/public/assets/{arrow-up-CAiQ2jy-.js → arrow-up-Dm0U4-6U.js} +2 -2
- package/dist/web/public/assets/{arrow-up-CAiQ2jy-.js.map → arrow-up-Dm0U4-6U.js.map} +1 -1
- package/dist/web/public/assets/{asks-DyUQopay.js → asks-DGuBsrJ7.js} +3 -3
- package/dist/web/public/assets/{asks-DyUQopay.js.map → asks-DGuBsrJ7.js.map} +1 -1
- package/dist/web/public/assets/{audit-BVHTMS82.js → audit-BRXsplJ2.js} +2 -2
- package/dist/web/public/assets/{audit-BVHTMS82.js.map → audit-BRXsplJ2.js.map} +1 -1
- package/dist/web/public/assets/{bell-D7iS7ctN.js → bell-B-UdeJsp.js} +2 -2
- package/dist/web/public/assets/{bell-D7iS7ctN.js.map → bell-B-UdeJsp.js.map} +1 -1
- package/dist/web/public/assets/bgjobs-CcRiffyJ.js +2 -0
- package/dist/web/public/assets/bgjobs-CcRiffyJ.js.map +1 -0
- package/dist/web/public/assets/book-open-CSCq5cjL.js +7 -0
- package/dist/web/public/assets/book-open-CSCq5cjL.js.map +1 -0
- package/dist/web/public/assets/{brain-CCF25Egu.js → brain-Dl4DF5kX.js} +2 -2
- package/dist/web/public/assets/{brain-CCF25Egu.js.map → brain-Dl4DF5kX.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-BMLMD8nM.js → briefcase-CeKUkFSq.js} +2 -2
- package/dist/web/public/assets/{briefcase-BMLMD8nM.js.map → briefcase-CeKUkFSq.js.map} +1 -1
- package/dist/web/public/assets/chat-rLJMdJBk.js +12 -0
- package/dist/web/public/assets/chat-rLJMdJBk.js.map +1 -0
- package/dist/web/public/assets/{chevron-left-BDO3vw8G.js → chevron-left-01fAFVpo.js} +2 -2
- package/dist/web/public/assets/{chevron-left-BDO3vw8G.js.map → chevron-left-01fAFVpo.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-5ZUC2opg.js → chevron-right-CFRb-SM_.js} +3 -3
- package/dist/web/public/assets/{chevron-right-5ZUC2opg.js.map → chevron-right-CFRb-SM_.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-DHAHqUlS.js → circle-check-big-DBg2BD6o.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-DHAHqUlS.js.map → circle-check-big-DBg2BD6o.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-7VaoZ7dY.js → circle-x-CqFMzO-x.js} +2 -2
- package/dist/web/public/assets/{circle-x-7VaoZ7dY.js.map → circle-x-CqFMzO-x.js.map} +1 -1
- package/dist/web/public/assets/clipboard-list-lnqdk2_J.js +7 -0
- package/dist/web/public/assets/clipboard-list-lnqdk2_J.js.map +1 -0
- package/dist/web/public/assets/{clock-ZPVXnd6V.js → clock-4hd1joQe.js} +3 -3
- package/dist/web/public/assets/{clock-ZPVXnd6V.js.map → clock-4hd1joQe.js.map} +1 -1
- package/dist/web/public/assets/confirm-dialog-BDb0NLny.js +2 -0
- package/dist/web/public/assets/{confirm-dialog-CgpJL9oN.js.map → confirm-dialog-BDb0NLny.js.map} +1 -1
- package/dist/web/public/assets/{copy-BaZl52tH.js → copy-CD4A7VD8.js} +3 -3
- package/dist/web/public/assets/{copy-BaZl52tH.js.map → copy-CD4A7VD8.js.map} +1 -1
- package/dist/web/public/assets/dashboard-CG3WiG7h.js +2 -0
- package/dist/web/public/assets/dashboard-CG3WiG7h.js.map +1 -0
- package/dist/web/public/assets/{data-table-BLYG79TX.js → data-table-BkUshOZz.js} +2 -2
- package/dist/web/public/assets/{data-table-BLYG79TX.js.map → data-table-BkUshOZz.js.map} +1 -1
- package/dist/web/public/assets/database-lQzk64rV.js +7 -0
- package/dist/web/public/assets/database-lQzk64rV.js.map +1 -0
- package/dist/web/public/assets/distill-CPurVW3v.js +7 -0
- package/dist/web/public/assets/distill-CPurVW3v.js.map +1 -0
- package/dist/web/public/assets/{download-bzCepctg.js → download-CVZnHcwj.js} +2 -2
- package/dist/web/public/assets/{download-bzCepctg.js.map → download-CVZnHcwj.js.map} +1 -1
- package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js +7 -0
- package/dist/web/public/assets/dropdown-menu-BNH5SrVb.js.map +1 -0
- package/dist/web/public/assets/email-YlI4MWLp.js +7 -0
- package/dist/web/public/assets/email-YlI4MWLp.js.map +1 -0
- package/dist/web/public/assets/{empty-state-96qpPTNg.js → empty-state-CuiqdZiB.js} +2 -2
- package/dist/web/public/assets/{empty-state-96qpPTNg.js.map → empty-state-CuiqdZiB.js.map} +1 -1
- package/dist/web/public/assets/{external-link-J4nIlCem.js → external-link-1WPpVvdu.js} +2 -2
- package/dist/web/public/assets/{external-link-J4nIlCem.js.map → external-link-1WPpVvdu.js.map} +1 -1
- package/dist/web/public/assets/{eye-BvsBLK42.js → eye-BfPyNFzk.js} +2 -2
- package/dist/web/public/assets/{eye-BvsBLK42.js.map → eye-BfPyNFzk.js.map} +1 -1
- package/dist/web/public/assets/{facts-DMucDXYd.js → facts-xT_24pH8.js} +2 -2
- package/dist/web/public/assets/{facts-DMucDXYd.js.map → facts-xT_24pH8.js.map} +1 -1
- package/dist/web/public/assets/file-text-BxfdLM0-.js +7 -0
- package/dist/web/public/assets/file-text-BxfdLM0-.js.map +1 -0
- package/dist/web/public/assets/{goals-B9ETHgL0.js → goals-C8ZQfbhj.js} +3 -3
- package/dist/web/public/assets/{goals-B9ETHgL0.js.map → goals-C8ZQfbhj.js.map} +1 -1
- package/dist/web/public/assets/health-A2StNEfn.js +2 -0
- package/dist/web/public/assets/{health-DLzZ7KHc.js.map → health-A2StNEfn.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-CVEeD2sz.js → heart-pulse-DXlE9oic.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-CVEeD2sz.js.map → heart-pulse-DXlE9oic.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-B1BEBHge.js → heartbeat-ClO5gJrj.js} +3 -3
- package/dist/web/public/assets/{heartbeat-B1BEBHge.js.map → heartbeat-ClO5gJrj.js.map} +1 -1
- package/dist/web/public/assets/hot-bfTA-V_z.js +7 -0
- package/dist/web/public/assets/{hot-Yc7iad0D.js.map → hot-bfTA-V_z.js.map} +1 -1
- package/dist/web/public/assets/index-Bi2qWb-u.css +1 -0
- package/dist/web/public/assets/index-DCfdN5R7.js +244 -0
- package/dist/web/public/assets/index-DCfdN5R7.js.map +1 -0
- package/dist/web/public/assets/{injection-Ca-9gbo0.js → injection-omvCR6-p.js} +2 -2
- package/dist/web/public/assets/{injection-Ca-9gbo0.js.map → injection-omvCR6-p.js.map} +1 -1
- package/dist/web/public/assets/{installed-Zz34apdi.js → installed-DL6r3ktm.js} +4 -9
- package/dist/web/public/assets/installed-DL6r3ktm.js.map +1 -0
- package/dist/web/public/assets/jobs-Biy5lYd4.js +2 -0
- package/dist/web/public/assets/jobs-Biy5lYd4.js.map +1 -0
- package/dist/web/public/assets/layout-BLm6NJ3V.js +2 -0
- package/dist/web/public/assets/layout-BLm6NJ3V.js.map +1 -0
- package/dist/web/public/assets/layout-BTKafRVZ.js +2 -0
- package/dist/web/public/assets/layout-BTKafRVZ.js.map +1 -0
- package/dist/web/public/assets/layout-Bm-2s2fp.js +2 -0
- package/dist/web/public/assets/layout-Bm-2s2fp.js.map +1 -0
- package/dist/web/public/assets/layout-DsZ8eR4i.js +2 -0
- package/dist/web/public/assets/layout-DsZ8eR4i.js.map +1 -0
- package/dist/web/public/assets/{layout-CtDc2i7w.js → layout-sxvovjEH.js} +2 -2
- package/dist/web/public/assets/{layout-CtDc2i7w.js.map → layout-sxvovjEH.js.map} +1 -1
- package/dist/web/public/assets/llm-JjZDbBvJ.js +37 -0
- package/dist/web/public/assets/llm-JjZDbBvJ.js.map +1 -0
- package/dist/web/public/assets/loader-circle-DDdmcH0k.js +7 -0
- package/dist/web/public/assets/{loader-circle-D8L1w9c1.js.map → loader-circle-DDdmcH0k.js.map} +1 -1
- package/dist/web/public/assets/{map-pin--GMunU9n.js → map-pin-C_jAxukI.js} +2 -2
- package/dist/web/public/assets/{map-pin--GMunU9n.js.map → map-pin-C_jAxukI.js.map} +1 -1
- package/dist/web/public/assets/{mcp-DhnXhO9B.js → mcp-vKajK1F8.js} +3 -3
- package/dist/web/public/assets/{mcp-DhnXhO9B.js.map → mcp-vKajK1F8.js.map} +1 -1
- package/dist/web/public/assets/memos-DAt4k3DO.js +7 -0
- package/dist/web/public/assets/memos-DAt4k3DO.js.map +1 -0
- package/dist/web/public/assets/messengers-GYVTFlAj.js +2 -0
- package/dist/web/public/assets/messengers-GYVTFlAj.js.map +1 -0
- package/dist/web/public/assets/{mobile-CUZ359rQ.js → mobile-VUyTo40E.js} +3 -3
- package/dist/web/public/assets/{mobile-CUZ359rQ.js.map → mobile-VUyTo40E.js.map} +1 -1
- package/dist/web/public/assets/{network-BBdRdrH_.js → network-BUeWK3bs.js} +2 -2
- package/dist/web/public/assets/{network-BBdRdrH_.js.map → network-BUeWK3bs.js.map} +1 -1
- package/dist/web/public/assets/outbox-CEE0rwN3.js +2 -0
- package/dist/web/public/assets/outbox-CEE0rwN3.js.map +1 -0
- package/dist/web/public/assets/overview-BSOZ5gTD.js +12 -0
- package/dist/web/public/assets/overview-BSOZ5gTD.js.map +1 -0
- package/dist/web/public/assets/overview-COop5K2Y.js +12 -0
- package/dist/web/public/assets/overview-COop5K2Y.js.map +1 -0
- package/dist/web/public/assets/overview-DeH5ud6d.js +2 -0
- package/dist/web/public/assets/overview-DeH5ud6d.js.map +1 -0
- package/dist/web/public/assets/{pagination-DcsgDXXM.js → pagination-BBicLzXP.js} +3 -3
- package/dist/web/public/assets/{pagination-DcsgDXXM.js.map → pagination-BBicLzXP.js.map} +1 -1
- package/dist/web/public/assets/persona-CElXQZ4p.js +2 -0
- package/dist/web/public/assets/{persona-ig2ac4mY.js.map → persona-CElXQZ4p.js.map} +1 -1
- package/dist/web/public/assets/{plans-Bzbk8eUr.js → plans-Bo5LlLeH.js} +3 -8
- package/dist/web/public/assets/plans-Bo5LlLeH.js.map +1 -0
- package/dist/web/public/assets/{play-Di1jqulh.js → play-DX5wp4WH.js} +2 -2
- package/dist/web/public/assets/{play-Di1jqulh.js.map → play-DX5wp4WH.js.map} +1 -1
- package/dist/web/public/assets/{plus-C2zyJ1mF.js → plus-DH4J_YhN.js} +2 -2
- package/dist/web/public/assets/{plus-C2zyJ1mF.js.map → plus-DH4J_YhN.js.map} +1 -1
- package/dist/web/public/assets/policy-BrgOuDt_.js +2 -0
- package/dist/web/public/assets/policy-BrgOuDt_.js.map +1 -0
- package/dist/web/public/assets/{qr-code-C-ACsKv_.js → qr-code-YrEuhMPC.js} +2 -2
- package/dist/web/public/assets/{qr-code-C-ACsKv_.js.map → qr-code-YrEuhMPC.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-7HdadG5V.js → refresh-ccw-DlAd-eTQ.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-7HdadG5V.js.map → refresh-ccw-DlAd-eTQ.js.map} +1 -1
- package/dist/web/public/assets/{reminders-BDeiVYTC.js → reminders-DBEE0zXG.js} +3 -3
- package/dist/web/public/assets/{reminders-BDeiVYTC.js.map → reminders-DBEE0zXG.js.map} +1 -1
- package/dist/web/public/assets/{save-BYFmz9gD.js → save-BDOtZrfp.js} +2 -2
- package/dist/web/public/assets/{save-BYFmz9gD.js.map → save-BDOtZrfp.js.map} +1 -1
- package/dist/web/public/assets/schedules-DAyhVI8-.js +2 -0
- package/dist/web/public/assets/schedules-DAyhVI8-.js.map +1 -0
- package/dist/web/public/assets/search-55mtgHrB.js +17 -0
- package/dist/web/public/assets/search-55mtgHrB.js.map +1 -0
- package/dist/web/public/assets/{search-DxkvV-8p.js → search-CAICU3aU.js} +2 -2
- package/dist/web/public/assets/{search-DxkvV-8p.js.map → search-CAICU3aU.js.map} +1 -1
- package/dist/web/public/assets/security-CbP4QgVp.js +2 -0
- package/dist/web/public/assets/security-CbP4QgVp.js.map +1 -0
- package/dist/web/public/assets/server-Dg4e8pvm.js +7 -0
- package/dist/web/public/assets/server-Dg4e8pvm.js.map +1 -0
- package/dist/web/public/assets/service-gWZa3sup.js +7 -0
- package/dist/web/public/assets/service-gWZa3sup.js.map +1 -0
- package/dist/web/public/assets/{shield-alert-DXGk9Rak.js → shield-alert-DOKK9EnJ.js} +2 -2
- package/dist/web/public/assets/{shield-alert-DXGk9Rak.js.map → shield-alert-DOKK9EnJ.js.map} +1 -1
- package/dist/web/public/assets/sparkles-G0QIs9nP.js +7 -0
- package/dist/web/public/assets/sparkles-G0QIs9nP.js.map +1 -0
- package/dist/web/public/assets/start-D-abhl3q.js +2 -0
- package/dist/web/public/assets/start-D-abhl3q.js.map +1 -0
- package/dist/web/public/assets/{status-badge-D0nbFSom.js → status-badge-CyLdpsXq.js} +2 -2
- package/dist/web/public/assets/{status-badge-D0nbFSom.js.map → status-badge-CyLdpsXq.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-DFiAXvDp.js → subtasks-BnEjSGUR.js} +3 -3
- package/dist/web/public/assets/{subtasks-DFiAXvDp.js.map → subtasks-BnEjSGUR.js.map} +1 -1
- package/dist/web/public/assets/{table-_WsrnZ_T.js → table-sCMZBe_Z.js} +2 -2
- package/dist/web/public/assets/{table-_WsrnZ_T.js.map → table-sCMZBe_Z.js.map} +1 -1
- package/dist/web/public/assets/terminal-_pXeEjXG.js +7 -0
- package/dist/web/public/assets/terminal-_pXeEjXG.js.map +1 -0
- package/dist/web/public/assets/{topn-C2PHE4tX.js → topn-D1B-gS1M.js} +3 -3
- package/dist/web/public/assets/{topn-C2PHE4tX.js.map → topn-D1B-gS1M.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-1Km439fW.js → trash-2-D2x2UPuZ.js} +2 -2
- package/dist/web/public/assets/{trash-2-1Km439fW.js.map → trash-2-D2x2UPuZ.js.map} +1 -1
- package/dist/web/public/assets/use-a2a-C98e2Via.js +2 -0
- package/dist/web/public/assets/use-a2a-C98e2Via.js.map +1 -0
- package/dist/web/public/assets/{use-agim-skills-COSqZrdH.js → use-agim-skills-BbuJP3NT.js} +2 -2
- package/dist/web/public/assets/{use-agim-skills-COSqZrdH.js.map → use-agim-skills-BbuJP3NT.js.map} +1 -1
- package/dist/web/public/assets/use-background-tasks-CwFmOokw.js +2 -0
- package/dist/web/public/assets/{use-background-tasks-wCL7jn68.js.map → use-background-tasks-CwFmOokw.js.map} +1 -1
- package/dist/web/public/assets/use-jobs-BJjeJ5lh.js +2 -0
- package/dist/web/public/assets/use-jobs-BJjeJ5lh.js.map +1 -0
- package/dist/web/public/assets/use-memory-CXDwKCco.js +2 -0
- package/dist/web/public/assets/{use-memory-B9oRyQC8.js.map → use-memory-CXDwKCco.js.map} +1 -1
- package/dist/web/public/assets/use-observability-CY5ZUPrC.js +2 -0
- package/dist/web/public/assets/{use-observability-DGkN80qa.js.map → use-observability-CY5ZUPrC.js.map} +1 -1
- package/dist/web/public/assets/use-outbox-DT_XWB_7.js +7 -0
- package/dist/web/public/assets/use-outbox-DT_XWB_7.js.map +1 -0
- package/dist/web/public/assets/use-schedules-D4W8fMwo.js +7 -0
- package/dist/web/public/assets/use-schedules-D4W8fMwo.js.map +1 -0
- package/dist/web/public/assets/use-settings-DGIjmUX0.js +2 -0
- package/dist/web/public/assets/use-settings-DGIjmUX0.js.map +1 -0
- package/dist/web/public/assets/use-skills-D2bMM580.js +7 -0
- package/dist/web/public/assets/use-skills-D2bMM580.js.map +1 -0
- package/dist/web/public/assets/use-vector-BYOFwjU0.js +2 -0
- package/dist/web/public/assets/use-vector-BYOFwjU0.js.map +1 -0
- package/dist/web/public/assets/use-workspace-CuytyHwb.js +2 -0
- package/dist/web/public/assets/{use-workspace-BDXP5XO1.js.map → use-workspace-CuytyHwb.js.map} +1 -1
- package/dist/web/public/assets/vector-CL8ezpSR.js +2 -0
- package/dist/web/public/assets/vector-CL8ezpSR.js.map +1 -0
- package/dist/web/public/assets/viewer-CD0iEfPU.js +7 -0
- package/dist/web/public/assets/viewer-CD0iEfPU.js.map +1 -0
- package/dist/web/public/assets/workspace-BA1_hso3.js +17 -0
- package/dist/web/public/assets/workspace-BA1_hso3.js.map +1 -0
- package/dist/web/public/assets/workspaces-DyGLJUgB.js +7 -0
- package/dist/web/public/assets/workspaces-DyGLJUgB.js.map +1 -0
- package/dist/web/public/index.html +2 -2
- package/dist/web/public/loc.html +1 -1
- package/dist/web/public/login.html +2 -2
- package/dist/web/server.d.ts +2 -5
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +256 -122
- package/dist/web/server.js.map +1 -1
- package/package.json +2 -3
- package/dist/core/llm/imhub-dispatcher.d.ts.map +0 -1
- package/dist/core/llm/imhub-dispatcher.js.map +0 -1
- package/dist/web/public/assets/a2a-CZxwvgvh.js +0 -7
- package/dist/web/public/assets/a2a-CZxwvgvh.js.map +0 -1
- package/dist/web/public/assets/agents-CFB4Uj6b.js +0 -7
- package/dist/web/public/assets/agents-CFB4Uj6b.js.map +0 -1
- package/dist/web/public/assets/bgjobs-BYCQhd_1.js +0 -7
- package/dist/web/public/assets/bgjobs-BYCQhd_1.js.map +0 -1
- package/dist/web/public/assets/chat-DPkKy5y_.js +0 -17
- package/dist/web/public/assets/chat-DPkKy5y_.js.map +0 -1
- package/dist/web/public/assets/circle-check-COhM5JsK.js +0 -7
- package/dist/web/public/assets/circle-check-COhM5JsK.js.map +0 -1
- package/dist/web/public/assets/confirm-dialog-CgpJL9oN.js +0 -2
- package/dist/web/public/assets/distill-D9p8O8Jf.js +0 -7
- package/dist/web/public/assets/distill-D9p8O8Jf.js.map +0 -1
- package/dist/web/public/assets/email-Douv-rZ5.js +0 -7
- package/dist/web/public/assets/email-Douv-rZ5.js.map +0 -1
- package/dist/web/public/assets/health-DLzZ7KHc.js +0 -2
- package/dist/web/public/assets/hot-Yc7iad0D.js +0 -12
- package/dist/web/public/assets/index-DY2Zglku.js +0 -209
- package/dist/web/public/assets/index-DY2Zglku.js.map +0 -1
- package/dist/web/public/assets/index-DknVjPYB.css +0 -1
- package/dist/web/public/assets/installed-Zz34apdi.js.map +0 -1
- package/dist/web/public/assets/jobs-CtVRpl0r.js +0 -2
- package/dist/web/public/assets/jobs-CtVRpl0r.js.map +0 -1
- package/dist/web/public/assets/layout-BTCLgkgN.js +0 -2
- package/dist/web/public/assets/layout-BTCLgkgN.js.map +0 -1
- package/dist/web/public/assets/layout-Cxch59sI.js +0 -2
- package/dist/web/public/assets/layout-Cxch59sI.js.map +0 -1
- package/dist/web/public/assets/layout-DnANw2Q2.js +0 -2
- package/dist/web/public/assets/layout-DnANw2Q2.js.map +0 -1
- package/dist/web/public/assets/layout-yIZG87fq.js +0 -2
- package/dist/web/public/assets/layout-yIZG87fq.js.map +0 -1
- package/dist/web/public/assets/llm-CMMa85Ig.js +0 -27
- package/dist/web/public/assets/llm-CMMa85Ig.js.map +0 -1
- package/dist/web/public/assets/loader-circle-D8L1w9c1.js +0 -7
- package/dist/web/public/assets/memos-DQZc7llR.js +0 -12
- package/dist/web/public/assets/memos-DQZc7llR.js.map +0 -1
- package/dist/web/public/assets/messengers-DwSmauLs.js +0 -2
- package/dist/web/public/assets/messengers-DwSmauLs.js.map +0 -1
- package/dist/web/public/assets/outbox-CmN0U35l.js +0 -7
- package/dist/web/public/assets/outbox-CmN0U35l.js.map +0 -1
- package/dist/web/public/assets/persona-ig2ac4mY.js +0 -2
- package/dist/web/public/assets/plans-Bzbk8eUr.js.map +0 -1
- package/dist/web/public/assets/policy-yD1c2Pcn.js +0 -2
- package/dist/web/public/assets/policy-yD1c2Pcn.js.map +0 -1
- package/dist/web/public/assets/schedules-BddzBrxI.js +0 -7
- package/dist/web/public/assets/schedules-BddzBrxI.js.map +0 -1
- package/dist/web/public/assets/search-B8PlbtLg.js +0 -17
- package/dist/web/public/assets/search-B8PlbtLg.js.map +0 -1
- package/dist/web/public/assets/security-DpOGp3nS.js +0 -2
- package/dist/web/public/assets/security-DpOGp3nS.js.map +0 -1
- package/dist/web/public/assets/service-BsY8CaNG.js +0 -7
- package/dist/web/public/assets/service-BsY8CaNG.js.map +0 -1
- package/dist/web/public/assets/use-background-tasks-wCL7jn68.js +0 -2
- package/dist/web/public/assets/use-memory-B9oRyQC8.js +0 -2
- package/dist/web/public/assets/use-observability-DGkN80qa.js +0 -2
- package/dist/web/public/assets/use-settings-Co-iafXD.js +0 -2
- package/dist/web/public/assets/use-settings-Co-iafXD.js.map +0 -1
- package/dist/web/public/assets/use-workspace-BDXP5XO1.js +0 -2
- package/dist/web/public/assets/vector-BfIEx8xX.js +0 -2
- package/dist/web/public/assets/vector-BfIEx8xX.js.map +0 -1
- package/dist/web/public/assets/viewer-BPMZkT05.js +0 -12
- package/dist/web/public/assets/viewer-BPMZkT05.js.map +0 -1
- package/dist/web/public/assets/workspace-BbCchiHE.js +0 -17
- package/dist/web/public/assets/workspace-BbCchiHE.js.map +0 -1
- package/dist/web/public/assets/workspaces-5HE7pjdA.js +0 -7
- package/dist/web/public/assets/workspaces-5HE7pjdA.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agim-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Agim (阿吉姆) — universal messenger-to-agent bridge. Connect WeChat / Feishu / DingTalk / Email to Claude Code / Codex / OpenCode, or any custom agent via ACP. Installs the `agim` command.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"agim": "
|
|
8
|
-
"im-hub-pro": "./dist/cli.js"
|
|
7
|
+
"agim": "dist/cli.js"
|
|
9
8
|
},
|
|
10
9
|
"main": "./dist/index.js",
|
|
11
10
|
"types": "./dist/index.d.ts",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imhub-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,sBAAsB,CAAA;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AA8BjD;;iBAEiB;AACjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAA;IACnB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,UAAU,CAAA;IAC1B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;6EAGyE;IACzE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;gCAI4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;mDAKmD;AACnD,wBAAgB,wBAAwB,IAAI,MAAM,CAMjD;AAED;;;wDAGwD;AACxD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAG7D;AASD;;;qCAGqC;AACrC,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,MAAM,CAmCR;AA4BD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,EAAE,CA2PzC;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,GAAG,cAAc,CA8X5E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imhub-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/imhub-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{o as p,a as f,b as o,d as m,u as g,j as t,c as x,B as j}from"./index-DY2Zglku.js";import{r as N}from"./react-DlP5eolq.js";import{D as y}from"./data-table-BLYG79TX.js";import{E as b}from"./empty-state-96qpPTNg.js";import{S as w}from"./status-badge-D0nbFSom.js";import{u as v}from"./use-event-stream-I1lMFEfh.js";import{L as A}from"./loader-circle-D8L1w9c1.js";import{R as S}from"./refresh-ccw-7HdadG5V.js";import"./table-_WsrnZ_T.js";import"./arrow-up-CAiQ2jy-.js";import"./arrow-down-DxlRHrs8.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const C=p("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),l={all:["a2a"],stats:["a2a","stats"],recent:e=>["a2a","recent",e]};function T(){return o({queryKey:l.stats,queryFn:()=>m.getA2AStats()})}function q(e){return o({queryKey:l.recent(e),queryFn:()=>m.getA2ARecent(e)})}function E(){const e=f();return()=>e.invalidateQueries({queryKey:l.all})}const L={connected:"text-success",connecting:"text-text-dim",reconnecting:"text-warning",closed:"text-text-muted"};function U(){const{t:e}=g(["tasks","common"]),s=E(),n=T(),r=q({limit:50}),u=r.data?.rows??[],i=n.data,d=v({job:()=>s()}),h=N.useMemo(()=>[{id:"id",header:e("a2a.col.id"),cell:a=>t.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",a.id]}),headClassName:"w-16"},{id:"agent",header:e("a2a.col.agent"),cell:a=>t.jsx("span",{className:"font-medium",children:a.agent}),headClassName:"w-32"},{id:"parent",header:e("a2a.col.parent"),cell:a=>a.parent_id!=null?t.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",a.parent_id]}):t.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-20"},{id:"depth",header:e("a2a.col.depth"),cell:a=>t.jsx("span",{className:"tabular-nums text-text-dim",children:a.call_depth}),headClassName:"w-16",hideOnMobile:!0},{id:"status",header:e("a2a.col.status"),cell:a=>t.jsx(w,{status:a.status,children:a.status}),headClassName:"w-28"},{id:"prompt",header:e("a2a.col.prompt"),cell:a=>t.jsx("span",{className:"line-clamp-2 text-text-dim",children:a.prompt??"—"}),asCardTitle:!0},{id:"createdAt",header:e("a2a.col.createdAt"),cell:a=>t.jsx("span",{className:"text-text-dim",children:R(a.created_at)}),headClassName:"w-40",hideOnMobile:!0}],[e]);return t.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col gap-4",children:[t.jsxs("header",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsx("h1",{className:"text-xl font-semibold",children:e("a2a.title")}),t.jsx("span",{className:x("text-xs font-medium tabular-nums",L[d]),children:e(`jobs.live.${d}`)}),t.jsxs(j,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{r.refetch(),n.refetch()},disabled:r.isFetching||n.isFetching,"aria-label":e("actions.refresh",{ns:"common"}),children:[r.isFetching?t.jsx(A,{className:"h-4 w-4 animate-spin"}):t.jsx(S,{className:"h-4 w-4"}),t.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),t.jsx("p",{className:"text-sm text-text-dim",children:e("a2a.subtitle")})]}),i&&t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[t.jsx(c,{label:e("a2a.stats.total"),value:i.total,tone:"info"}),t.jsx(c,{label:e("a2a.stats.recent24h"),value:i.recent24h,tone:"success"}),t.jsx(c,{label:e("a2a.stats.maxDepth"),value:i.maxDepth,tone:"warning"})]}),t.jsx(y,{columns:h,rows:u,getRowId:a=>String(a.id),loading:r.isLoading,emptyState:t.jsx(b,{icon:t.jsx(C,{}),title:e("a2a.empty.title"),description:e("a2a.empty.description")})})]})}const k={info:"border-info/30 text-info",success:"border-success/30 text-success",warning:"border-warning/30 text-warning",danger:"border-danger/30 text-danger"};function c({label:e,value:s,tone:n}){return t.jsxs("div",{className:x("rounded-md border bg-surface px-3 py-2",k[n]),children:[t.jsx("div",{className:"text-xs uppercase tracking-wide text-text-dim",children:e}),t.jsx("div",{className:"text-2xl font-semibold tabular-nums",children:s})]})}function R(e){try{const s=new Date(e);return Number.isNaN(s.getTime())?e:s.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return e}}export{U as default};
|
|
7
|
-
//# sourceMappingURL=a2a-CZxwvgvh.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-CZxwvgvh.js","sources":["../../node_modules/lucide-react/dist/esm/icons/git-branch.js","../../src/hooks/use-a2a.ts","../../src/routes/tasks/a2a.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst GitBranch = createLucideIcon(\"GitBranch\", [\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n]);\n\nexport { GitBranch as default };\n//# sourceMappingURL=git-branch.js.map\n","/**\n * useA2A* — react-query wrappers for the Agent-to-Agent inline-job\n * view. Read-only; data lives in jobs.db and is exposed via:\n *\n * GET /api/a2a/stats → totals, recent24h, maxDepth, byStatus/byAgent\n * GET /api/a2a/recent → recent rows (truncated prompt + result)\n *\n * SSE: subscribes to the `job` event so a freshly-completed inline\n * sub-invocation shows up without manual refresh.\n */\n\nimport { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type { A2AStats, ListA2ARecentQuery, ListA2ARecentResponse } from '@/types/api'\n\nexport const a2aKeys = {\n all: ['a2a'] as const,\n stats: ['a2a', 'stats'] as const,\n recent: (q: ListA2ARecentQuery) => ['a2a', 'recent', q] as const,\n}\n\nexport function useA2AStats() {\n return useQuery<A2AStats>({\n queryKey: a2aKeys.stats,\n queryFn: () => api.getA2AStats(),\n })\n}\n\nexport function useA2ARecent(query: ListA2ARecentQuery) {\n return useQuery<ListA2ARecentResponse>({\n queryKey: a2aKeys.recent(query),\n queryFn: () => api.getA2ARecent(query),\n })\n}\n\nexport function useInvalidateA2A() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: a2aKeys.all })\n}\n","/**\n * /tasks/a2a — Agent ↔ Agent inline-call history.\n *\n * Splits into stats KPI cards (total / recent24h / maxDepth) +\n * recent-rows table. Subscribes to the SSE `job` event so a fresh\n * agent-to-agent call appears live.\n */\n\nimport { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { GitBranch, Loader2, RefreshCcw } from 'lucide-react'\n\nimport { DataTable, type DataTableColumn } from '@/components/common/data-table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { StatusBadge } from '@/components/common/status-badge'\nimport { Button } from '@/components/ui/button'\nimport { useA2ARecent, useA2AStats, useInvalidateA2A } from '@/hooks/use-a2a'\nimport { useEventStream, type SseStatus } from '@/hooks/use-event-stream'\nimport type { A2ARow } from '@/types/api'\nimport { cn } from '@/lib/utils'\n\nconst LIVE_STATUS_CLASS: Record<SseStatus, string> = {\n connected: 'text-success',\n connecting: 'text-text-dim',\n reconnecting: 'text-warning',\n closed: 'text-text-muted',\n}\n\nexport default function A2ARoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const invalidate = useInvalidateA2A()\n\n const statsQuery = useA2AStats()\n const recentQuery = useA2ARecent({ limit: 50 })\n const rows = recentQuery.data?.rows ?? []\n const stats = statsQuery.data\n\n const live = useEventStream({\n job: () => invalidate(),\n })\n\n const columns: DataTableColumn<A2ARow>[] = useMemo(\n () => [\n {\n id: 'id',\n header: t('a2a.col.id'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">#{r.id}</span>,\n headClassName: 'w-16',\n },\n {\n id: 'agent',\n header: t('a2a.col.agent'),\n cell: (r) => <span className=\"font-medium\">{r.agent}</span>,\n headClassName: 'w-32',\n },\n {\n id: 'parent',\n header: t('a2a.col.parent'),\n cell: (r) =>\n r.parent_id != null ? (\n <span className=\"tabular-nums text-text-dim\">#{r.parent_id}</span>\n ) : (\n <span className=\"text-text-muted\">—</span>\n ),\n headClassName: 'w-20',\n },\n {\n id: 'depth',\n header: t('a2a.col.depth'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">{r.call_depth}</span>,\n headClassName: 'w-16',\n hideOnMobile: true,\n },\n {\n id: 'status',\n header: t('a2a.col.status'),\n cell: (r) => <StatusBadge status={r.status}>{r.status}</StatusBadge>,\n headClassName: 'w-28',\n },\n {\n id: 'prompt',\n header: t('a2a.col.prompt'),\n cell: (r) => (\n <span className=\"line-clamp-2 text-text-dim\">{r.prompt ?? '—'}</span>\n ),\n asCardTitle: true,\n },\n {\n id: 'createdAt',\n header: t('a2a.col.createdAt'),\n cell: (r) => <span className=\"text-text-dim\">{formatTime(r.created_at)}</span>,\n headClassName: 'w-40',\n hideOnMobile: true,\n },\n ],\n [t],\n )\n\n return (\n <div className=\"mx-auto flex max-w-7xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('a2a.title')}</h1>\n <span className={cn('text-xs font-medium tabular-nums', LIVE_STATUS_CLASS[live])}>\n {t(`jobs.live.${live}`)}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => {\n void recentQuery.refetch()\n void statsQuery.refetch()\n }}\n disabled={recentQuery.isFetching || statsQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {recentQuery.isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('a2a.subtitle')}</p>\n </header>\n\n {stats && (\n <div className=\"grid grid-cols-3 gap-2\">\n <StatCard label={t('a2a.stats.total')} value={stats.total} tone=\"info\" />\n <StatCard label={t('a2a.stats.recent24h')} value={stats.recent24h} tone=\"success\" />\n <StatCard label={t('a2a.stats.maxDepth')} value={stats.maxDepth} tone=\"warning\" />\n </div>\n )}\n\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(r) => String(r.id)}\n loading={recentQuery.isLoading}\n emptyState={\n <EmptyState\n icon={<GitBranch />}\n title={t('a2a.empty.title')}\n description={t('a2a.empty.description')}\n />\n }\n />\n </div>\n )\n}\n\ninterface StatCardProps {\n label: string\n value: number\n tone: 'info' | 'success' | 'warning' | 'danger'\n}\n\nconst TONE_STYLES: Record<StatCardProps['tone'], string> = {\n info: 'border-info/30 text-info',\n success: 'border-success/30 text-success',\n warning: 'border-warning/30 text-warning',\n danger: 'border-danger/30 text-danger',\n}\n\nfunction StatCard({ label, value, tone }: StatCardProps): JSX.Element {\n return (\n <div\n className={cn(\n 'rounded-md border bg-surface px-3 py-2',\n TONE_STYLES[tone],\n )}\n >\n <div className=\"text-xs uppercase tracking-wide text-text-dim\">{label}</div>\n <div className=\"text-2xl font-semibold tabular-nums\">{value}</div>\n </div>\n )\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return iso\n return d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n"],"names":["GitBranch","createLucideIcon","a2aKeys","q","useA2AStats","useQuery","api","useA2ARecent","query","useInvalidateA2A","qc","useQueryClient","LIVE_STATUS_CLASS","A2ARoute","t","useTranslation","invalidate","statsQuery","recentQuery","rows","stats","live","useEventStream","columns","useMemo","r","jsxs","jsx","StatusBadge","formatTime","cn","Button","Loader2","RefreshCcw","StatCard","DataTable","EmptyState","TONE_STYLES","label","value","tone","iso","d"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{o as re,u as U,j as e,B as v,a8 as G,L as $,S as Z,g as X,h as Y,i as J,k as V,l as B,X as oe,m as f,n as I,c as K,I as P}from"./index-DY2Zglku.js";import{r as g}from"./react-DlP5eolq.js";import{E as de}from"./empty-state-96qpPTNg.js";import{u as me}from"./use-workspace-BDXP5XO1.js";import{a as xe,c as ue,h as pe,i as ge}from"./use-settings-Co-iafXD.js";import{L as R}from"./loader-circle-D8L1w9c1.js";import{R as he}from"./refresh-ccw-7HdadG5V.js";import{S as fe}from"./save-BYFmz9gD.js";import{N as Q}from"./network-BBdRdrH_.js";import{S as F}from"./search-DxkvV-8p.js";import{P as je}from"./plus-C2zyJ1mF.js";import{T as be}from"./trash-2-1Km439fW.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ne=re("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),L={"claude-code":{aliases:["cc","claude"],pkg:"@anthropic-ai/claude-code",kind:"cli",scope:"bridged"},codex:{aliases:["cx"],pkg:"@openai/codex",kind:"cli",scope:"bridged"},opencode:{aliases:["oc"],pkg:"opencode-ai",kind:"cli",scope:"bridged"},cursor:{aliases:["cs","cur"],pkg:"cursor-agent (curl https://cursor.com/install)",kind:"cli",scope:"bridged"},native:{aliases:["agim","na","llm","native-llm"],pkg:"in-process",kind:"in-process",scope:"agim"}},W=Object.keys(L),ve=W.filter(s=>L[s]?.scope==="bridged");function Ue(){const{t:s}=U(["settings","common"]),r=xe(),t=me(),c=ue(),n=r.data,d=t.data??{},[p,o]=g.useState(null),[m,x]=g.useState(null),[S,j]=g.useState(null);g.useEffect(()=>{n&&p==null&&o(n.agents??[]),n&&m==null&&x(n.defaultAgent??""),n&&S==null&&j(n.acpAgents??[])},[n,p,m,S]);const h=p??n?.agents??[],b=m??n?.defaultAgent??"",w=S??n?.acpAgents??[],O=g.useMemo(()=>{if(!n)return!1;const i=h.length===(n.agents?.length??0)&&h.every(y=>n.agents?.includes(y)),N=b===(n.defaultAgent??""),k=Ae(w,n.acpAgents??[]);return!i||!N||!k},[n,h,b,w]),C=g.useMemo(()=>W.filter(i=>(L[i].kind==="in-process"?!0:h.includes(i))&&d[i]),[h,d]);function _(i,N){const k=N?Array.from(new Set([...h,i])):h.filter(y=>y!==i);o(k),!N&&i===b&&x("")}async function M(){if(n)try{await c.mutateAsync({...n,agents:h,defaultAgent:b||n.defaultAgent,acpAgents:w}),f.success(s("agents.toast.saved")),o(null),x(null),j(null)}catch(i){f.error(I(i,s).message)}}function T(){o(null),x(null),j(null)}function z(i){j(i)}return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("agents.title")}),e.jsxs(v,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>{r.refetch(),t.refetch()},disabled:r.isFetching||t.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[r.isFetching||t.isFetching?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(he,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("agents.subtitle")})]}),r.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"flex flex-col divide-y divide-border rounded-md border border-border bg-surface",children:ve.map(i=>{const N=L[i],k=!!d[i],y=h.includes(i);return e.jsx(ke,{displayName:G(i),aliases:N.aliases,pkg:N.pkg,kind:N.kind,installed:k,enabled:y,onToggle:H=>_(i,H)},i)})}),e.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsx("h3",{className:"text-sm font-semibold",children:s("agents.agimAgentCardTitle")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("agents.agimAgentCardDesc")}),e.jsx(v,{className:"mt-3",variant:"secondary",size:"sm",onClick:()=>{window.location.assign("/settings/llm")},children:s("agents.agimAgentCardAction")})]}),e.jsxs("section",{className:"rounded-md border border-border bg-surface p-4",children:[e.jsx($,{htmlFor:"default-agent",className:"text-sm font-medium",children:s("agents.defaultAgent")}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("agents.defaultAgentHint")}),e.jsxs(Z,{value:b||"__none__",onValueChange:i=>x(i==="__none__"?"":i),disabled:C.length===0,children:[e.jsx(X,{id:"default-agent",className:"mt-2 w-64",children:e.jsx(Y,{placeholder:s("agents.noEligible")})}),e.jsx(J,{children:C.length===0?e.jsx(V,{value:"__none__",disabled:!0,children:s("agents.noEligible")}):C.map(i=>e.jsx(V,{value:i,children:G(i)},i))})]})]}),n?.features?.remoteAgent?e.jsx(Se,{agents:w,onChange:z}):null,O&&e.jsxs("div",{className:"sticky bottom-0 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 shadow-md",children:[e.jsx(B,{variant:"info",children:s("agents.dirtyHint")}),e.jsxs(v,{variant:"secondary",size:"sm",onClick:T,disabled:c.isPending,children:[e.jsx(oe,{className:"h-4 w-4"}),s("agents.discard")]}),e.jsxs(v,{size:"sm",onClick:()=>void M(),disabled:c.isPending,children:[c.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(fe,{className:"h-4 w-4"}),c.isPending?s("agents.saving"):s("agents.saveBtn")]})]})]})]})}function ke({displayName:s,aliases:r,pkg:t,kind:c,installed:n,enabled:d,onToggle:p}){const{t:o}=U("settings"),m=c==="in-process";return e.jsxs("div",{className:"flex items-start gap-3 px-3 py-3",children:[e.jsx("div",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim",children:e.jsx(Ne,{className:"h-4 w-4"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s}),e.jsxs(B,{variant:n?"success":"outline",className:"text-[10px]",children:[e.jsx("span",{className:K("inline-block h-1.5 w-1.5 rounded-full",n?"bg-success":"bg-text-muted")}),o(n?"agents.online":"agents.offline")]}),m&&e.jsx(B,{variant:"outline",className:"text-[10px]",title:o("agents.inProcessHint"),children:o("agents.inProcessBadge")})]}),e.jsxs("p",{className:"mt-0.5 text-xs text-text-dim",children:[e.jsxs("span",{className:"text-text-muted",children:[o("agents.aliasesLabel"),": "]}),e.jsx("span",{className:"font-mono",children:r.map(x=>`/${x}`).join(", ")})]}),!n&&e.jsx("p",{className:"mt-1 text-xs text-warning",children:m?o("agents.nativeInstallHint"):o("agents.installHint",{pkg:t})})]}),e.jsx("input",{type:"checkbox",checked:d,onChange:x=>p(x.target.checked),className:"h-4 w-4 mt-2 accent-accent cursor-pointer"})]})}const ye=["none","apikey","bearer"],we=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;function Ae(s,r){if(s.length!==r.length)return!1;for(let t=0;t<s.length;t++){const c=s[t],n=r[t];if(c.name!==n.name||c.endpoint!==n.endpoint||(c.enabled??!0)!==(n.enabled??!0))return!1;const d=(c.aliases??[]).join(","),p=(n.aliases??[]).join(",");if(d!==p)return!1;const o=c.auth?.type??"none",m=n.auth?.type??"none";if(o!==m||(c.auth?.token??"")!==(n.auth?.token??""))return!1}return!0}function Se({agents:s,onChange:r}){const{t}=U(["settings","common"]),c=pe(),n=ge(),[d,p]=g.useState(""),[o,m]=g.useState(""),[x,S]=g.useState(""),[j,h]=g.useState("none"),[b,w]=g.useState(""),[O,C]=g.useState(!1),[_,M]=g.useState(""),T=d.trim(),z=T.length>0&&we.test(T),i=s.some(a=>a.name===T),k=!(j!=="none")||b.trim().length>0,y=z&&x.trim().length>0&&k&&!i,H=x.trim().length>0&&k;function ee(){p(""),m(""),S(""),h("none"),w("")}function se(a){return a.split(",").map(l=>l.trim()).filter(Boolean)}function q(a,l){if(a==="none")return{type:"none"};const u=l.trim();return u?{type:a,token:u}:{type:a}}async function te(){if(!y)return;const a={name:T,endpoint:x.trim(),aliases:se(o),auth:q(j,b),enabled:!0};r([...s,a]),ee(),f.success(t("agents.acp.toast.staged"))}async function ae(){if(H)try{const a=await c.mutateAsync({endpoint:x.trim(),auth:q(j,b)});f.success(t("agents.acp.toast.testOk",{name:a.name}))}catch(a){f.error(I(a,t).message)}}async function ne(a){const l=s[a];if(l){if(l.auth?.type!=="none"&&l.auth?.token&&Te(l.auth.token)){f.error(t("agents.acp.toast.testMasked"));return}try{const u=await c.mutateAsync({endpoint:l.endpoint,auth:l.auth});f.success(t("agents.acp.toast.testOk",{name:u.name}))}catch(u){f.error(I(u,t).message)}}}function ie(a,l){const u=s.map((E,A)=>A===a?{...E,enabled:l}:E);r(u)}function ce(a){r(s.filter((l,u)=>u!==a))}async function le(){const a=_.trim();if(a)try{const l=await n.mutateAsync({baseUrl:a,register:!1}),u=new Set(s.map(A=>A.name)),E=l.agents.filter(A=>!u.has(A.name));if(E.length===0){f.info(t("agents.acp.toast.discoverEmpty"));return}r([...s,...E.map(A=>({...A,enabled:!0}))]),f.success(t("agents.acp.toast.discoverAdded",{count:E.length})),M(""),C(!1)}catch(l){f.error(I(l,t).message)}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(Q,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:t("agents.acp.title")}),e.jsx(B,{variant:"outline",className:"text-[10px]",children:s.length}),e.jsxs(v,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>C(a=>!a),children:[e.jsx(F,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("agents.acp.discoverBtn")})]})]}),e.jsx("p",{className:"px-4 pt-2 text-xs text-text-dim",children:t("agents.acp.subtitle")}),O&&e.jsxs("div",{className:"border-t border-border bg-surface-2 px-4 py-3",children:[e.jsx($,{htmlFor:"acp-baseurl",className:"text-xs font-medium",children:t("agents.acp.baseUrl")}),e.jsx("p",{className:"mt-1 text-[11px] text-text-dim",children:t("agents.acp.baseUrlHint")}),e.jsxs("div",{className:"mt-2 flex flex-wrap gap-2",children:[e.jsx(P,{id:"acp-baseurl",value:_,onChange:a=>M(a.target.value),placeholder:"https://agents.example.com",className:"flex-1 min-w-[200px] font-mono text-xs"}),e.jsxs(v,{variant:"secondary",size:"sm",onClick:()=>void le(),disabled:!_.trim()||n.isPending,children:[n.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"}),t("agents.acp.runDiscover")]})]})]}),s.length===0?e.jsx("div",{className:"px-4 py-6",children:e.jsx(de,{icon:e.jsx(Q,{}),title:t("agents.acp.empty.title"),description:t("agents.acp.empty.description")})}):e.jsx("ul",{className:"divide-y divide-border",children:s.map((a,l)=>e.jsx(Ce,{agent:a,onToggle:u=>ie(l,u),onTest:()=>void ne(l),onRemove:()=>ce(l),testing:c.isPending},a.name))}),e.jsxs("div",{className:"border-t border-border px-4 py-3",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-text-dim",children:t("agents.acp.addTitle")}),e.jsxs("div",{className:"mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2",children:[e.jsx(D,{label:t("agents.acp.name"),hint:t("agents.acp.nameHint"),children:e.jsx(P,{value:d,onChange:a=>p(a.target.value),placeholder:"my-agent","aria-invalid":d.length>0&&!z})}),e.jsx(D,{label:t("agents.acp.aliases"),hint:t("agents.acp.aliasesHint"),children:e.jsx(P,{value:o,onChange:a=>m(a.target.value),placeholder:"ma, agent1"})}),e.jsx(D,{label:t("agents.acp.endpoint"),hint:t("agents.acp.endpointHint"),children:e.jsx(P,{value:x,onChange:a=>S(a.target.value),placeholder:"https://example.com/agents/weather",className:"font-mono text-xs"})}),e.jsx(D,{label:t("agents.acp.authType"),children:e.jsxs(Z,{value:j,onValueChange:a=>h(a),children:[e.jsx(X,{children:e.jsx(Y,{})}),e.jsx(J,{children:ye.map(a=>e.jsx(V,{value:a,children:t(`agents.acp.auth.${a}`)},a))})]})}),j!=="none"&&e.jsx(D,{label:t("agents.acp.token"),className:"sm:col-span-2",children:e.jsx(P,{type:"password",value:b,onChange:a=>w(a.target.value),placeholder:t("agents.acp.tokenPlaceholder"),autoComplete:"new-password"})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs(v,{variant:"secondary",size:"sm",onClick:()=>void ae(),disabled:!H||c.isPending,children:[c.isPending?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"}),t("agents.acp.testBtn")]}),e.jsxs(v,{size:"sm",onClick:()=>void te(),disabled:!y,children:[e.jsx(je,{className:"h-4 w-4"}),t("agents.acp.addBtn")]}),i&&e.jsx("span",{className:"self-center text-xs text-warning",children:t("agents.acp.dupName")})]})]})]})}function Ce({agent:s,onToggle:r,onTest:t,onRemove:c,testing:n}){const{t:d}=U("settings"),p=s.enabled!==!1,o=s.auth?.type??"none";return e.jsxs("li",{className:"flex flex-wrap items-center gap-3 px-4 py-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-medium text-text",children:s.name}),e.jsx(B,{variant:"outline",className:"text-[10px] uppercase",children:d(`agents.acp.auth.${o}`)}),s.aliases&&s.aliases.length>0&&e.jsx("span",{className:"text-xs text-text-muted font-mono",children:s.aliases.map(m=>`/${m}`).join(", ")})]}),e.jsx("p",{className:"mt-0.5 truncate font-mono text-xs text-text-dim",title:s.endpoint,children:s.endpoint})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-text-dim",children:[e.jsx("input",{type:"checkbox",checked:p,onChange:m=>r(m.target.checked),className:"h-4 w-4 accent-accent cursor-pointer"}),d(p?"agents.acp.on":"agents.acp.off")]}),e.jsx(v,{variant:"ghost",size:"sm",onClick:t,disabled:n,"aria-label":d("agents.acp.testBtn"),children:n?e.jsx(R,{className:"h-4 w-4 animate-spin"}):e.jsx(F,{className:"h-4 w-4"})}),e.jsx(v,{variant:"ghost",size:"sm",onClick:c,"aria-label":d("agents.acp.removeBtn"),className:"text-danger hover:text-danger",children:e.jsx(be,{className:"h-4 w-4"})})]})}function D({label:s,hint:r,className:t,children:c}){return e.jsxs("div",{className:K("flex flex-col gap-1",t),children:[e.jsx($,{className:"text-xs font-medium",children:s}),c,r&&e.jsx("p",{className:"text-[11px] text-text-dim",children:r})]})}function Te(s){return/\*{3,}/.test(s)}export{Ue as default};
|
|
7
|
-
//# sourceMappingURL=agents-CFB4Uj6b.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agents-CFB4Uj6b.js","sources":["../../node_modules/lucide-react/dist/esm/icons/bot.js","../../src/routes/settings/agents.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Bot = createLucideIcon(\"Bot\", [\n [\"path\", { d: \"M12 8V4H8\", key: \"hb8ula\" }],\n [\"rect\", { width: \"16\", height: \"12\", x: \"4\", y: \"8\", rx: \"2\", key: \"enze0r\" }],\n [\"path\", { d: \"M2 14h2\", key: \"vft8re\" }],\n [\"path\", { d: \"M20 14h2\", key: \"4cs60a\" }],\n [\"path\", { d: \"M15 13v2\", key: \"1xurst\" }],\n [\"path\", { d: \"M9 13v2\", key: \"rq6x2g\" }]\n]);\n\nexport { Bot as default };\n//# sourceMappingURL=bot.js.map\n","/**\n * /settings/agents — built-in adapters + remote (ACP) agents.\n *\n * Two cards on one page:\n * 1. Built-in adapters (claude-code / codex / opencode):\n * enable/disable + default-agent picker. Mirrors v1's \"Agents\".\n * 2. Remote (ACP) agents: name/endpoint/auth-type table + manual\n * add form. Mirrors v1's \"Remote Agents (ACP)\" card. Discover\n * via `<baseUrl>/.well-known/acp` is available as a secondary\n * bulk-import form.\n *\n * Both cards share one save bar — PUT /api/config writes `agents[]`,\n * `defaultAgent`, and `acpAgents[]` atomically so the default never\n * goes out of sync with the enabled list, and partial ACP edits\n * don't ship without the user's intent.\n *\n * Masked tokens: GET returns `ab****yz` for ACP auth.token; PUT\n * detects this pattern and preserves the on-disk value so we never\n * overwrite a real token with its mask. New tokens (typed into the\n * add form or \"edit\" inline) flow through verbatim.\n */\n\nimport { useEffect, useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport {\n Bot, Loader2, Network, Plus, RefreshCcw, Save, Search, Trash2, X,\n} from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { useAgentsStatus } from '@/hooks/use-workspace'\nimport {\n useConfig,\n useDiscoverAcp,\n useTestAcp,\n useUpdateConfig,\n} from '@/hooks/use-settings'\nimport { describeError } from '@/lib/api/errors'\nimport { agentDisplayName } from '@/lib/agent-label'\nimport { cn } from '@/lib/utils'\nimport type { ACPAgentConfig, ACPAuthConfig, ACPAuthType } from '@/types/api'\n\n/** Mirror of v1 settings.html:BUILTIN_AGENTS. Hardcoded because\n * backend doesn't expose this metadata yet; the table changes\n * rarely enough that copying it here is fine.\n *\n * `kind` distinguishes spawn flavor:\n * - 'cli' → external CLI subprocess, needs `npm install -g <pkg>`\n * - 'in-process' → runs inside agim, no install needed; `pkg` carries\n * a one-liner hint instead of an install command. The\n * runtime always exposes it via `isAgentEnabled`\n * regardless of config.agents, so default-picker\n * eligibility ignores the enabled-list constraint. */\nconst BUILTIN_AGENTS: Record<string, {\n aliases: string[]\n pkg: string\n kind: 'cli' | 'in-process'\n scope: 'bridged' | 'agim'\n}> = {\n 'claude-code': { aliases: ['cc', 'claude'], pkg: '@anthropic-ai/claude-code', kind: 'cli', scope: 'bridged' },\n 'codex': { aliases: ['cx'], pkg: '@openai/codex', kind: 'cli', scope: 'bridged' },\n 'opencode': { aliases: ['oc'], pkg: 'opencode-ai', kind: 'cli', scope: 'bridged' },\n 'cursor': { aliases: ['cs', 'cur'], pkg: 'cursor-agent (curl https://cursor.com/install)', kind: 'cli', scope: 'bridged' },\n // v1.2.140 — surface the in-process `native` agent in the admin list.\n // Previously the agent was registered + always-enabled at runtime but\n // hidden from this page, so operators could only reach it via the CLI.\n 'native': { aliases: ['agim', 'na', 'llm', 'native-llm'], pkg: 'in-process', kind: 'in-process', scope: 'agim' },\n}\n\nconst AGENT_NAMES = Object.keys(BUILTIN_AGENTS)\nconst BRIDGED_AGENT_NAMES = AGENT_NAMES.filter((name) => BUILTIN_AGENTS[name]?.scope === 'bridged')\n\nexport default function SettingsAgentsRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const cfgQuery = useConfig()\n const statusQuery = useAgentsStatus()\n const updateCfg = useUpdateConfig()\n\n const cfg = cfgQuery.data\n const status = statusQuery.data ?? {}\n\n /** Local draft so toggles + default-picker + ACP edits can stage\n * changes before a single Save. `null` means \"sync from cfg on\n * next paint\". */\n const [draftEnabled, setDraftEnabled] = useState<string[] | null>(null)\n const [draftDefault, setDraftDefault] = useState<string | null>(null)\n const [draftAcp, setDraftAcp] = useState<ACPAgentConfig[] | null>(null)\n\n useEffect(() => {\n if (cfg && draftEnabled == null) setDraftEnabled(cfg.agents ?? [])\n if (cfg && draftDefault == null) setDraftDefault(cfg.defaultAgent ?? '')\n if (cfg && draftAcp == null) setDraftAcp(cfg.acpAgents ?? [])\n }, [cfg, draftEnabled, draftDefault, draftAcp])\n\n const enabled = draftEnabled ?? cfg?.agents ?? []\n const defaultAgent = draftDefault ?? cfg?.defaultAgent ?? ''\n const acpAgents = draftAcp ?? cfg?.acpAgents ?? []\n\n const isDirty = useMemo(() => {\n if (!cfg) return false\n const enabledSame =\n enabled.length === (cfg.agents?.length ?? 0)\n && enabled.every((a) => cfg.agents?.includes(a))\n const defaultSame = defaultAgent === (cfg.defaultAgent ?? '')\n const acpSame = acpEqual(acpAgents, cfg.acpAgents ?? [])\n return !enabledSame || !defaultSame || !acpSame\n }, [cfg, enabled, defaultAgent, acpAgents])\n\n /** Eligible defaults = installed + enabled. Picker disables when\n * empty (no agent is both).\n *\n * v1.2.140 — in-process agents (e.g. `native`) are exempt from the\n * enabled-list check. Runtime `isAgentEnabled('native')` always\n * returns true regardless of config.agents (see live-config.ts), so\n * the picker should mirror that and not require the user to flip the\n * toggle on first. */\n const eligibleDefaults = useMemo(\n () => AGENT_NAMES.filter((a) => {\n const info = BUILTIN_AGENTS[a]!\n const enabledOrInProcess = info.kind === 'in-process' ? true : enabled.includes(a)\n return enabledOrInProcess && status[a]\n }),\n [enabled, status],\n )\n\n function toggleAgent(name: string, on: boolean): void {\n const next = on\n ? Array.from(new Set([...enabled, name]))\n : enabled.filter((a) => a !== name)\n setDraftEnabled(next)\n // If the default just got disabled, clear it so save doesn't\n // ship an inconsistent pair.\n if (!on && name === defaultAgent) setDraftDefault('')\n }\n\n async function onSave(): Promise<void> {\n if (!cfg) return\n try {\n await updateCfg.mutateAsync({\n ...cfg,\n agents: enabled,\n defaultAgent: defaultAgent || cfg.defaultAgent,\n acpAgents,\n })\n toast.success(t('agents.toast.saved'))\n // Reset drafts so the next paint reads from refreshed cfg.\n setDraftEnabled(null)\n setDraftDefault(null)\n setDraftAcp(null)\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onDiscard(): void {\n setDraftEnabled(null)\n setDraftDefault(null)\n setDraftAcp(null)\n }\n\n function updateAcp(next: ACPAgentConfig[]): void {\n setDraftAcp(next)\n }\n\n return (\n <div className=\"mx-auto flex max-w-4xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('agents.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => {\n void cfgQuery.refetch()\n void statusQuery.refetch()\n }}\n disabled={cfgQuery.isFetching || statusQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {(cfgQuery.isFetching || statusQuery.isFetching)\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('agents.subtitle')}</p>\n </header>\n\n {cfgQuery.isLoading ? (\n <div className=\"h-64 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n {/* Agent rows */}\n <div className=\"flex flex-col divide-y divide-border rounded-md border border-border bg-surface\">\n {BRIDGED_AGENT_NAMES.map((name) => {\n const info = BUILTIN_AGENTS[name]!\n const installed = !!status[name]\n const isEnabled = enabled.includes(name)\n return (\n <AgentRow\n key={name}\n displayName={agentDisplayName(name)}\n aliases={info.aliases}\n pkg={info.pkg}\n kind={info.kind}\n installed={installed}\n enabled={isEnabled}\n onToggle={(on) => toggleAgent(name, on)}\n />\n )\n })}\n </div>\n\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <h3 className=\"text-sm font-semibold\">{t('agents.agimAgentCardTitle')}</h3>\n <p className=\"mt-1 text-xs text-text-dim\">{t('agents.agimAgentCardDesc')}</p>\n <Button\n className=\"mt-3\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => { window.location.assign('/settings/llm') }}\n >\n {t('agents.agimAgentCardAction')}\n </Button>\n </section>\n\n {/* Default agent picker */}\n <section className=\"rounded-md border border-border bg-surface p-4\">\n <Label htmlFor=\"default-agent\" className=\"text-sm font-medium\">\n {t('agents.defaultAgent')}\n </Label>\n <p className=\"mt-1 text-xs text-text-dim\">{t('agents.defaultAgentHint')}</p>\n <Select\n value={defaultAgent || '__none__'}\n onValueChange={(v) => setDraftDefault(v === '__none__' ? '' : v)}\n disabled={eligibleDefaults.length === 0}\n >\n <SelectTrigger id=\"default-agent\" className=\"mt-2 w-64\">\n <SelectValue placeholder={t('agents.noEligible')} />\n </SelectTrigger>\n <SelectContent>\n {eligibleDefaults.length === 0 ? (\n <SelectItem value=\"__none__\" disabled>{t('agents.noEligible')}</SelectItem>\n ) : (\n eligibleDefaults.map((a) => (\n <SelectItem key={a} value={a}>{agentDisplayName(a)}</SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </section>\n\n {/* Remote (ACP) agents — gated by features.remoteAgent\n (IMHUB_ENABLE_REMOTE_AGENT on server). Card is omitted\n entirely; no breadcrumb hint shown. */}\n {cfg?.features?.remoteAgent ? (\n <AcpCard\n agents={acpAgents}\n onChange={updateAcp}\n />\n ) : null}\n\n {/* Save bar */}\n {isDirty && (\n <div className=\"sticky bottom-0 flex items-center gap-2 rounded-md border border-border bg-surface px-4 py-2 shadow-md\">\n <Badge variant=\"info\">{t('agents.dirtyHint')}</Badge>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={onDiscard}\n disabled={updateCfg.isPending}\n >\n <X className=\"h-4 w-4\" />\n {t('agents.discard')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onSave()}\n disabled={updateCfg.isPending}\n >\n {updateCfg.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Save className=\"h-4 w-4\" />}\n {updateCfg.isPending ? t('agents.saving') : t('agents.saveBtn')}\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Row ─────────────── */\n\ninterface AgentRowProps {\n displayName: string\n aliases: string[]\n pkg: string\n /** v1.2.140 — 'in-process' agents show a different \"not installed\"\n * hint (point at LLM-backend config rather than `npm install -g`)\n * and surface a small \"内置\" badge so operators understand they\n * don't need to install anything. */\n kind: 'cli' | 'in-process'\n installed: boolean\n enabled: boolean\n onToggle: (on: boolean) => void\n}\n\nfunction AgentRow({\n displayName, aliases, pkg, kind, installed, enabled, onToggle,\n}: AgentRowProps): JSX.Element {\n const { t } = useTranslation('settings')\n const inProcess = kind === 'in-process'\n return (\n <div className=\"flex items-start gap-3 px-3 py-3\">\n <div className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-surface-2 text-text-dim\">\n <Bot className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-text\">{displayName}</span>\n <Badge variant={installed ? 'success' : 'outline'} className=\"text-[10px]\">\n <span className={cn(\n 'inline-block h-1.5 w-1.5 rounded-full',\n installed ? 'bg-success' : 'bg-text-muted',\n )} />\n {installed ? t('agents.online') : t('agents.offline')}\n </Badge>\n {inProcess && (\n <Badge variant=\"outline\" className=\"text-[10px]\" title={t('agents.inProcessHint')}>\n {t('agents.inProcessBadge')}\n </Badge>\n )}\n </div>\n <p className=\"mt-0.5 text-xs text-text-dim\">\n <span className=\"text-text-muted\">{t('agents.aliasesLabel')}: </span>\n <span className=\"font-mono\">{aliases.map((a) => `/${a}`).join(', ')}</span>\n </p>\n {!installed && (\n <p className=\"mt-1 text-xs text-warning\">\n {inProcess\n ? t('agents.nativeInstallHint')\n : t('agents.installHint', { pkg })}\n </p>\n )}\n </div>\n <input\n type=\"checkbox\"\n checked={enabled}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 mt-2 accent-accent cursor-pointer\"\n />\n </div>\n )\n}\n\n/* ─────────────── Remote (ACP) ─────────────── */\n\nconst AUTH_TYPES: ACPAuthType[] = ['none', 'apikey', 'bearer']\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/\n\n/** Compare two ACP lists by value. Order matters because the backend\n * preserves index identity (`existing.acpAgents[i]`) when merging\n * masked tokens — reordering = mask drift risk. */\nfunction acpEqual(a: ACPAgentConfig[], b: ACPAgentConfig[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n const x = a[i]!\n const y = b[i]!\n if (x.name !== y.name) return false\n if (x.endpoint !== y.endpoint) return false\n if ((x.enabled ?? true) !== (y.enabled ?? true)) return false\n const xa = (x.aliases ?? []).join(',')\n const ya = (y.aliases ?? []).join(',')\n if (xa !== ya) return false\n const xat = x.auth?.type ?? 'none'\n const yat = y.auth?.type ?? 'none'\n if (xat !== yat) return false\n if ((x.auth?.token ?? '') !== (y.auth?.token ?? '')) return false\n }\n return true\n}\n\ninterface AcpCardProps {\n agents: ACPAgentConfig[]\n onChange: (next: ACPAgentConfig[]) => void\n}\n\nfunction AcpCard({ agents, onChange }: AcpCardProps): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const testMut = useTestAcp()\n const discoverMut = useDiscoverAcp()\n\n // Add-form state. We keep the typed token in plain state so the\n // user can paste before save; the masked round-trip from backend\n // only matters for existing rows.\n const [name, setName] = useState('')\n const [aliasesText, setAliasesText] = useState('')\n const [endpoint, setEndpoint] = useState('')\n const [authType, setAuthType] = useState<ACPAuthType>('none')\n const [token, setToken] = useState('')\n\n // Bulk-discover sub-form state. Hidden behind a toggle so the\n // primary path (manual add) stays uncluttered.\n const [showDiscover, setShowDiscover] = useState(false)\n const [baseUrl, setBaseUrl] = useState('')\n\n const trimmedName = name.trim()\n const nameValid = trimmedName.length > 0 && NAME_RE.test(trimmedName)\n const dup = agents.some((a) => a.name === trimmedName)\n const tokenRequired = authType !== 'none'\n const tokenOk = !tokenRequired || token.trim().length > 0\n const canAdd = nameValid && endpoint.trim().length > 0 && tokenOk && !dup\n const canTestNew = endpoint.trim().length > 0 && tokenOk\n\n function clearForm(): void {\n setName('')\n setAliasesText('')\n setEndpoint('')\n setAuthType('none')\n setToken('')\n }\n\n function parseAliases(text: string): string[] {\n return text.split(',').map((s) => s.trim()).filter(Boolean)\n }\n\n function buildAuth(type: ACPAuthType, tok: string): ACPAuthConfig | undefined {\n if (type === 'none') return { type: 'none' }\n const trimmed = tok.trim()\n if (!trimmed) return { type } // no token yet; save will reject\n return { type, token: trimmed }\n }\n\n async function onAdd(): Promise<void> {\n if (!canAdd) return\n const next: ACPAgentConfig = {\n name: trimmedName,\n endpoint: endpoint.trim(),\n aliases: parseAliases(aliasesText),\n auth: buildAuth(authType, token),\n enabled: true,\n }\n onChange([...agents, next])\n clearForm()\n toast.success(t('agents.acp.toast.staged'))\n }\n\n async function onTestNew(): Promise<void> {\n if (!canTestNew) return\n try {\n const res = await testMut.mutateAsync({\n endpoint: endpoint.trim(),\n auth: buildAuth(authType, token),\n })\n toast.success(t('agents.acp.toast.testOk', { name: res.name }))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n async function onTestRow(idx: number): Promise<void> {\n const a = agents[idx]\n if (!a) return\n // Masked tokens stay masked on the wire — backend's PUT mask-detect\n // is symmetric, but the test endpoint reads what we send. We can't\n // unmask client-side; warn the operator.\n if (a.auth?.type !== 'none' && a.auth?.token && isMaskedToken(a.auth.token)) {\n toast.error(t('agents.acp.toast.testMasked'))\n return\n }\n try {\n const res = await testMut.mutateAsync({\n endpoint: a.endpoint,\n auth: a.auth,\n })\n toast.success(t('agents.acp.toast.testOk', { name: res.name }))\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n function onToggleRow(idx: number, on: boolean): void {\n const next = agents.map((a, i) => (i === idx ? { ...a, enabled: on } : a))\n onChange(next)\n }\n\n function onRemoveRow(idx: number): void {\n onChange(agents.filter((_, i) => i !== idx))\n }\n\n async function onDiscoverRun(): Promise<void> {\n const url = baseUrl.trim()\n if (!url) return\n try {\n const res = await discoverMut.mutateAsync({ baseUrl: url, register: false })\n // Stage new agents that aren't already in the list (by name).\n const existing = new Set(agents.map((a) => a.name))\n const incoming = res.agents.filter((a) => !existing.has(a.name))\n if (incoming.length === 0) {\n toast.info(t('agents.acp.toast.discoverEmpty'))\n return\n }\n onChange([...agents, ...incoming.map((a) => ({ ...a, enabled: true }))])\n toast.success(t('agents.acp.toast.discoverAdded', { count: incoming.length }))\n setBaseUrl('')\n setShowDiscover(false)\n } catch (err) {\n toast.error(describeError(err, t).message)\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <Network className=\"h-4 w-4 text-text-dim\" />\n <h2 className=\"text-sm font-semibold\">{t('agents.acp.title')}</h2>\n <Badge variant=\"outline\" className=\"text-[10px]\">{agents.length}</Badge>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => setShowDiscover((v) => !v)}\n >\n <Search className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('agents.acp.discoverBtn')}</span>\n </Button>\n </header>\n <p className=\"px-4 pt-2 text-xs text-text-dim\">{t('agents.acp.subtitle')}</p>\n\n {/* Discover form (collapsed by default) */}\n {showDiscover && (\n <div className=\"border-t border-border bg-surface-2 px-4 py-3\">\n <Label htmlFor=\"acp-baseurl\" className=\"text-xs font-medium\">\n {t('agents.acp.baseUrl')}\n </Label>\n <p className=\"mt-1 text-[11px] text-text-dim\">{t('agents.acp.baseUrlHint')}</p>\n <div className=\"mt-2 flex flex-wrap gap-2\">\n <Input\n id=\"acp-baseurl\"\n value={baseUrl}\n onChange={(e) => setBaseUrl(e.target.value)}\n placeholder=\"https://agents.example.com\"\n className=\"flex-1 min-w-[200px] font-mono text-xs\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => void onDiscoverRun()}\n disabled={!baseUrl.trim() || discoverMut.isPending}\n >\n {discoverMut.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Search className=\"h-4 w-4\" />}\n {t('agents.acp.runDiscover')}\n </Button>\n </div>\n </div>\n )}\n\n {/* Registered ACP agents */}\n {agents.length === 0 ? (\n <div className=\"px-4 py-6\">\n <EmptyState\n icon={<Network />}\n title={t('agents.acp.empty.title')}\n description={t('agents.acp.empty.description')}\n />\n </div>\n ) : (\n <ul className=\"divide-y divide-border\">\n {agents.map((a, i) => (\n <AcpRow\n key={a.name}\n agent={a}\n onToggle={(on) => onToggleRow(i, on)}\n onTest={() => void onTestRow(i)}\n onRemove={() => onRemoveRow(i)}\n testing={testMut.isPending}\n />\n ))}\n </ul>\n )}\n\n {/* Add-agent form */}\n <div className=\"border-t border-border px-4 py-3\">\n <h3 className=\"text-xs font-semibold uppercase tracking-wide text-text-dim\">\n {t('agents.acp.addTitle')}\n </h3>\n <div className=\"mt-2 grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <Field label={t('agents.acp.name')} hint={t('agents.acp.nameHint')}>\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"my-agent\"\n aria-invalid={name.length > 0 && !nameValid}\n />\n </Field>\n <Field label={t('agents.acp.aliases')} hint={t('agents.acp.aliasesHint')}>\n <Input\n value={aliasesText}\n onChange={(e) => setAliasesText(e.target.value)}\n placeholder=\"ma, agent1\"\n />\n </Field>\n <Field label={t('agents.acp.endpoint')} hint={t('agents.acp.endpointHint')}>\n <Input\n value={endpoint}\n onChange={(e) => setEndpoint(e.target.value)}\n placeholder=\"https://example.com/agents/weather\"\n className=\"font-mono text-xs\"\n />\n </Field>\n <Field label={t('agents.acp.authType')}>\n <Select value={authType} onValueChange={(v) => setAuthType(v as ACPAuthType)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {AUTH_TYPES.map((a) => (\n <SelectItem key={a} value={a}>{t(`agents.acp.auth.${a}`)}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n {authType !== 'none' && (\n <Field label={t('agents.acp.token')} className=\"sm:col-span-2\">\n <Input\n type=\"password\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n placeholder={t('agents.acp.tokenPlaceholder')}\n autoComplete=\"new-password\"\n />\n </Field>\n )}\n </div>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => void onTestNew()}\n disabled={!canTestNew || testMut.isPending}\n >\n {testMut.isPending\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <Search className=\"h-4 w-4\" />}\n {t('agents.acp.testBtn')}\n </Button>\n <Button\n size=\"sm\"\n onClick={() => void onAdd()}\n disabled={!canAdd}\n >\n <Plus className=\"h-4 w-4\" />\n {t('agents.acp.addBtn')}\n </Button>\n {dup && (\n <span className=\"self-center text-xs text-warning\">\n {t('agents.acp.dupName')}\n </span>\n )}\n </div>\n </div>\n </section>\n )\n}\n\ninterface AcpRowProps {\n agent: ACPAgentConfig\n onToggle: (on: boolean) => void\n onTest: () => void\n onRemove: () => void\n testing: boolean\n}\n\nfunction AcpRow({ agent, onToggle, onTest, onRemove, testing }: AcpRowProps): JSX.Element {\n const { t } = useTranslation('settings')\n const isOn = agent.enabled !== false\n const authType = agent.auth?.type ?? 'none'\n return (\n <li className=\"flex flex-wrap items-center gap-3 px-4 py-3\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium text-text\">{agent.name}</span>\n <Badge variant=\"outline\" className=\"text-[10px] uppercase\">\n {t(`agents.acp.auth.${authType}`)}\n </Badge>\n {agent.aliases && agent.aliases.length > 0 && (\n <span className=\"text-xs text-text-muted font-mono\">\n {agent.aliases.map((a) => `/${a}`).join(', ')}\n </span>\n )}\n </div>\n <p className=\"mt-0.5 truncate font-mono text-xs text-text-dim\" title={agent.endpoint}>\n {agent.endpoint}\n </p>\n </div>\n <label className=\"flex items-center gap-1.5 text-xs text-text-dim\">\n <input\n type=\"checkbox\"\n checked={isOn}\n onChange={(e) => onToggle(e.target.checked)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n {isOn ? t('agents.acp.on') : t('agents.acp.off')}\n </label>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onTest}\n disabled={testing}\n aria-label={t('agents.acp.testBtn')}\n >\n {testing ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Search className=\"h-4 w-4\" />}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onRemove}\n aria-label={t('agents.acp.removeBtn')}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </li>\n )\n}\n\ninterface FieldProps {\n label: string\n hint?: string\n className?: string\n children: React.ReactNode\n}\n\nfunction Field({ label, hint, className, children }: FieldProps): JSX.Element {\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <Label className=\"text-xs font-medium\">{label}</Label>\n {children}\n {hint && <p className=\"text-[11px] text-text-dim\">{hint}</p>}\n </div>\n )\n}\n\n/** Tokens look like `ab****yz` from the masked GET response. We\n * shouldn't send them back unchanged for test (the backend would\n * fail auth), and we shouldn't include them in the test mutation\n * body either. Treat any string with 3+ consecutive `*` as masked. */\nfunction isMaskedToken(s: string): boolean {\n return /\\*{3,}/.test(s)\n}\n"],"names":["Bot","createLucideIcon","BUILTIN_AGENTS","AGENT_NAMES","BRIDGED_AGENT_NAMES","name","SettingsAgentsRoute","t","useTranslation","cfgQuery","useConfig","statusQuery","useAgentsStatus","updateCfg","useUpdateConfig","cfg","status","draftEnabled","setDraftEnabled","useState","draftDefault","setDraftDefault","draftAcp","setDraftAcp","useEffect","enabled","defaultAgent","acpAgents","isDirty","useMemo","enabledSame","a","defaultSame","acpSame","acpEqual","eligibleDefaults","toggleAgent","on","next","onSave","toast","err","describeError","onDiscard","updateAcp","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","info","installed","isEnabled","AgentRow","agentDisplayName","Label","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","AcpCard","Badge","X","Save","displayName","aliases","pkg","kind","onToggle","inProcess","cn","e","AUTH_TYPES","NAME_RE","b","i","x","y","xa","ya","xat","yat","agents","onChange","testMut","useTestAcp","discoverMut","useDiscoverAcp","setName","aliasesText","setAliasesText","endpoint","setEndpoint","authType","setAuthType","token","setToken","showDiscover","setShowDiscover","baseUrl","setBaseUrl","trimmedName","nameValid","dup","tokenOk","canAdd","canTestNew","clearForm","parseAliases","text","s","buildAuth","type","tok","trimmed","onAdd","onTestNew","res","onTestRow","idx","isMaskedToken","onToggleRow","onRemoveRow","_","onDiscoverRun","url","existing","incoming","Network","Search","Input","EmptyState","AcpRow","Field","Plus","agent","onTest","onRemove","testing","isOn","Trash2","label","hint","className","children"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{o as f,b as N,d as y,u as w,f as _,j as t,B as S,S as C,g as v,h as I,i as T,k as d}from"./index-DY2Zglku.js";import{r as m}from"./react-DlP5eolq.js";import{D as k}from"./data-table-BLYG79TX.js";import{E as D}from"./empty-state-96qpPTNg.js";import{S as R}from"./status-badge-D0nbFSom.js";import{L as B}from"./loader-circle-D8L1w9c1.js";import{R as L}from"./refresh-ccw-7HdadG5V.js";import"./table-_WsrnZ_T.js";import"./arrow-up-CAiQ2jy-.js";import"./arrow-down-DxlRHrs8.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const M=f("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]),A={all:["bgjobs"],list:s=>["bgjobs","list",s]};function q(s){return N({queryKey:A.list(s),queryFn:()=>y.listBgJobs(s),refetchInterval:5e3,refetchIntervalInBackground:!1})}function U(){const{t:s}=w(["tasks","common"]),[a,i]=_(),r=a.get("root")??null,{data:o,isLoading:x,isFetching:c,refetch:h}=q(r?{root:r}:{}),n=o?.roots??[],b=m.useMemo(()=>o?o.jobs?o.jobs:o.groups?o.groups.flatMap(e=>e.jobs):[]:[],[o]);function j(e){const l=new URLSearchParams(a);e?l.set("root",e):l.delete("root"),i(l,{replace:!0})}const g=m.useMemo(()=>[{id:"name",header:s("bgjobs.col.name"),cell:e=>t.jsx("span",{className:"font-medium",children:e.name}),asCardTitle:!0},{id:"status",header:s("bgjobs.col.status"),cell:e=>t.jsx(R,{status:e.status,children:e.status}),headClassName:"w-28"},{id:"root",header:s("bgjobs.col.root"),cell:e=>{const l=n.find(p=>p.id===e.rootId);return t.jsx("span",{className:"text-text-dim",title:l?.path??e.rootId,children:l?.label??e.rootId})},headClassName:"w-32"},{id:"pid",header:s("bgjobs.col.pid"),cell:e=>t.jsx("span",{className:"tabular-nums text-text-dim",children:e.pid??"—"}),headClassName:"w-20",hideOnMobile:!0},{id:"startedAt",header:s("bgjobs.col.startedAt"),cell:e=>t.jsx("span",{className:"text-text-dim",children:u(e.started_at)}),headClassName:"w-40",hideOnMobile:!0},{id:"endedAt",header:s("bgjobs.col.endedAt"),cell:e=>t.jsx("span",{className:"text-text-dim",children:u(e.ended_at)}),headClassName:"w-40",hideOnMobile:!0},{id:"exit",header:s("bgjobs.col.exit"),cell:e=>e.ended_at==null?t.jsx("span",{className:"text-text-muted",children:s("bgjobs.stillRunning")}):e.exit_code===0?t.jsx("span",{className:"text-success",children:s("bgjobs.exitOk")}):e.exit_code!=null?t.jsx("span",{className:"text-danger tabular-nums",children:e.exit_code}):t.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-20"}],[s,n]);return t.jsxs("div",{className:"mx-auto flex max-w-7xl flex-col gap-4",children:[t.jsxs("header",{className:"flex flex-col gap-1",children:[t.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[t.jsx("h1",{className:"text-xl font-semibold",children:s("bgjobs.title")}),t.jsxs(S,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>h(),disabled:c,"aria-label":s("actions.refresh",{ns:"common"}),children:[c?t.jsx(B,{className:"h-4 w-4 animate-spin"}):t.jsx(L,{className:"h-4 w-4"}),t.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),t.jsx("p",{className:"text-sm text-text-dim",children:s("bgjobs.subtitle")})]}),t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[t.jsx("label",{className:"text-sm text-text-dim",htmlFor:"root-filter",children:s("bgjobs.filter.root")}),t.jsxs(C,{value:r??"__any__",onValueChange:e=>j(e==="__any__"?null:e),children:[t.jsx(v,{id:"root-filter",className:"w-[180px]",children:t.jsx(I,{})}),t.jsxs(T,{children:[t.jsx(d,{value:"__any__",children:s("bgjobs.filter.rootAny")}),n.map(e=>t.jsx(d,{value:e.id,children:e.label},e.id))]})]})]}),t.jsx(k,{columns:g,rows:b,getRowId:e=>`${e.rootId}:${e.id}`,loading:x,emptyState:t.jsx(D,{icon:t.jsx(M,{}),title:s("bgjobs.empty.title"),description:s("bgjobs.empty.description")})})]})}function u(s){if(s==null)return"—";try{const a=new Date(s);if(Number.isNaN(a.getTime()))return s;const i=new Date;return a.toDateString()===i.toDateString()?a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:"2-digit"}):a.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}export{U as default};
|
|
7
|
-
//# sourceMappingURL=bgjobs-BYCQhd_1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bgjobs-BYCQhd_1.js","sources":["../../node_modules/lucide-react/dist/esm/icons/terminal.js","../../src/hooks/use-bgjobs.ts","../../src/routes/tasks/bgjobs.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Terminal = createLucideIcon(\"Terminal\", [\n [\"polyline\", { points: \"4 17 10 11 4 5\", key: \"akl6gq\" }],\n [\"line\", { x1: \"12\", x2: \"20\", y1: \"19\", y2: \"19\", key: \"q2wloq\" }]\n]);\n\nexport { Terminal as default };\n//# sourceMappingURL=terminal.js.map\n","/**\n * useBgjobs — react-query wrapper for /api/bgjobs.\n *\n * Bgjobs are a read-only window into the wrapper-managed bgjob\n * directories (Claude Code's ~/.claude/bgjobs/, opencode's\n * ~/.config/opencode/bgjobs/, codex's ~/.codex/bgjobs/, plus any\n * IMHUB_BGJOB_ROOTS custom paths). No SSE channel for bgjob events;\n * the page polls or refresh-on-demand.\n *\n * Response shape varies based on whether `root` is set — when no\n * root filter is applied the backend returns groups keyed by rootId.\n * The hook leaves that shape intact; flattening logic lives in the\n * route's `useMemo` so a future \"show per-root\" view can pivot\n * cheaply.\n */\n\nimport { useQueryClient, useQuery } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type { ListBgjobsQuery, ListBgjobsResponse } from '@/types/api'\n\nexport const bgjobsKeys = {\n all: ['bgjobs'] as const,\n list: (q: ListBgjobsQuery) => ['bgjobs', 'list', q] as const,\n}\n\nexport function useBgjobs(query: ListBgjobsQuery) {\n return useQuery<ListBgjobsResponse>({\n queryKey: bgjobsKeys.list(query),\n queryFn: () => api.listBgJobs(query),\n // Bgjobs file scans are cheap (FS reads) but we don't want to\n // hammer when the user idles on the tab. Auto-refetch every 5s\n // while the tab is focused matches the v1 admin's behavior.\n refetchInterval: 5000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useInvalidateBgjobs() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: bgjobsKeys.all })\n}\n","/**\n * /tasks/bgjobs — long-running scripts launched by agent wrappers\n * via their bgjob facility. Read-only; the wrapper is the source of\n * truth for writes (kill / restart).\n *\n * Response shape: when no `?root=` filter, backend returns\n * `{ roots, groups: [{ rootId, jobs }] }`; with a root filter,\n * `{ roots: [oneRoot], jobs }`. We flatten via useMemo so the\n * DataTable consumes one flat list regardless of mode.\n *\n * No SSE: bgjob events aren't on the event-bus. We rely on the 5s\n * react-query poll set in use-bgjobs.ts.\n */\n\nimport { useMemo } from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Loader2, RefreshCcw, Terminal } from 'lucide-react'\n\nimport { DataTable, type DataTableColumn } from '@/components/common/data-table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { StatusBadge } from '@/components/common/status-badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport { useBgjobs } from '@/hooks/use-bgjobs'\nimport type { BgjobSummary } from '@/types/api'\n\nexport default function BgjobsRoute(): JSX.Element {\n const { t } = useTranslation(['tasks', 'common'])\n const [params, setParams] = useSearchParams()\n const rootFilter = params.get('root') ?? null\n\n const { data, isLoading, isFetching, refetch } = useBgjobs(\n rootFilter ? { root: rootFilter } : {},\n )\n\n const roots = data?.roots ?? []\n const rows: BgjobSummary[] = useMemo(() => {\n if (!data) return []\n if (data.jobs) return data.jobs\n if (data.groups) return data.groups.flatMap((g) => g.jobs)\n return []\n }, [data])\n\n function setRoot(next: string | null): void {\n const p = new URLSearchParams(params)\n if (!next) p.delete('root')\n else p.set('root', next)\n setParams(p, { replace: true })\n }\n\n const columns: DataTableColumn<BgjobSummary>[] = useMemo(\n () => [\n {\n id: 'name',\n header: t('bgjobs.col.name'),\n cell: (r) => <span className=\"font-medium\">{r.name}</span>,\n asCardTitle: true,\n },\n {\n id: 'status',\n header: t('bgjobs.col.status'),\n cell: (r) => <StatusBadge status={r.status}>{r.status}</StatusBadge>,\n headClassName: 'w-28',\n },\n {\n id: 'root',\n header: t('bgjobs.col.root'),\n cell: (r) => {\n const root = roots.find((rt) => rt.id === r.rootId)\n return (\n <span className=\"text-text-dim\" title={root?.path ?? r.rootId}>\n {root?.label ?? r.rootId}\n </span>\n )\n },\n headClassName: 'w-32',\n },\n {\n id: 'pid',\n header: t('bgjobs.col.pid'),\n cell: (r) => (\n <span className=\"tabular-nums text-text-dim\">{r.pid ?? '—'}</span>\n ),\n headClassName: 'w-20',\n hideOnMobile: true,\n },\n {\n id: 'startedAt',\n header: t('bgjobs.col.startedAt'),\n cell: (r) => <span className=\"text-text-dim\">{formatTime(r.started_at)}</span>,\n headClassName: 'w-40',\n hideOnMobile: true,\n },\n {\n id: 'endedAt',\n header: t('bgjobs.col.endedAt'),\n cell: (r) => <span className=\"text-text-dim\">{formatTime(r.ended_at)}</span>,\n headClassName: 'w-40',\n hideOnMobile: true,\n },\n {\n id: 'exit',\n header: t('bgjobs.col.exit'),\n cell: (r) => {\n if (r.ended_at == null) return <span className=\"text-text-muted\">{t('bgjobs.stillRunning')}</span>\n if (r.exit_code === 0) return <span className=\"text-success\">{t('bgjobs.exitOk')}</span>\n if (r.exit_code != null) return <span className=\"text-danger tabular-nums\">{r.exit_code}</span>\n return <span className=\"text-text-muted\">—</span>\n },\n headClassName: 'w-20',\n },\n ],\n [t, roots],\n )\n\n return (\n <div className=\"mx-auto flex max-w-7xl flex-col gap-4\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('bgjobs.title')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => refetch()}\n disabled={isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('bgjobs.subtitle')}</p>\n </header>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"text-sm text-text-dim\" htmlFor=\"root-filter\">\n {t('bgjobs.filter.root')}\n </label>\n <Select\n value={rootFilter ?? '__any__'}\n onValueChange={(v) => setRoot(v === '__any__' ? null : v)}\n >\n <SelectTrigger id=\"root-filter\" className=\"w-[180px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__any__\">{t('bgjobs.filter.rootAny')}</SelectItem>\n {roots.map((r) => (\n <SelectItem key={r.id} value={r.id}>\n {r.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <DataTable\n columns={columns}\n rows={rows}\n getRowId={(r) => `${r.rootId}:${r.id}`}\n loading={isLoading}\n emptyState={\n <EmptyState\n icon={<Terminal />}\n title={t('bgjobs.empty.title')}\n description={t('bgjobs.empty.description')}\n />\n }\n />\n </div>\n )\n}\n\nfunction formatTime(iso: string | null): string {\n if (iso == null) return '—'\n try {\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return iso\n const now = new Date()\n const sameDay = d.toDateString() === now.toDateString()\n if (sameDay) {\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit' })\n }\n return d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n"],"names":["Terminal","createLucideIcon","bgjobsKeys","q","useBgjobs","query","useQuery","api","BgjobsRoute","t","useTranslation","params","setParams","useSearchParams","rootFilter","data","isLoading","isFetching","refetch","roots","rows","useMemo","g","setRoot","next","p","columns","r","jsx","StatusBadge","root","rt","formatTime","jsxs","Button","Loader2","RefreshCcw","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","DataTable","EmptyState","iso","d","now"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{o as w,u as G,aj as J,ak as Q,m as j,j as e,al as W,B as f,c as g,a8 as N,am as X,an as Z,ab as ee,l as R,ao as te}from"./index-DY2Zglku.js";import{r as n}from"./react-DlP5eolq.js";import{C as se}from"./chevron-left-BDO3vw8G.js";import{A as ae}from"./arrow-down-DxlRHrs8.js";import{L as M}from"./loader-circle-D8L1w9c1.js";import{A as ne}from"./activity-BnlFGipw.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const re=w("Clock3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const le=w("EllipsisVertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]);/**
|
|
12
|
-
* @license lucide-react v0.469.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const oe=w("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]),ce={open:"bg-success",connecting:"bg-warning animate-pulse",closed:"bg-text-muted",error:"bg-danger"};function k(s){return Number.isFinite(s)?s:Date.now()}function ie(s){const l=new Date(k(s)),a=String(l.getMonth()+1).padStart(2,"0"),u=String(l.getDate()).padStart(2,"0");return`${l.getFullYear()}-${a}-${u}`}function de(s,l){return new Intl.DateTimeFormat(l,{month:"short",day:"numeric",weekday:"short"}).format(new Date(k(s)))}function D(s,l){return new Intl.DateTimeFormat(l,{hour:"2-digit",minute:"2-digit"}).format(new Date(k(s)))}function T(s){return!s||s<=0?"0ms":s<1e3?`${s}ms`:`${(s/1e3).toFixed(s>=1e4?0:1)}s`}function ue(s,l){const a=[];let u="";for(const i of s){const m=ie(i.timestamp);m!==u&&(a.push({type:"divider",key:`d-${m}`,label:de(i.timestamp,l)}),u=m),a.push({type:"message",key:i.id,msg:i})}return a}function me(s){switch(s){case"running":return"bg-info-bg text-info";case"success":return"bg-success-bg text-success";case"error":return"bg-danger-bg text-danger"}}function ve(){const{t:s,i18n:l}=G(["chat","common"]),{state:a,send:u,switchAgent:i,approvalClick:m,newConversation:I,clearError:S}=J(),[p,b]=n.useState(""),[v,o]=n.useState("none"),[E,L]=n.useState(!1),[B,C]=n.useState(!1),[F,q]=n.useState(""),h=n.useRef(null),x=n.useRef(null),H=s(`chat.status.${a.status}`,{defaultValue:a.status}),$=n.useMemo(()=>[s("chat.quickPrompt.plan"),s("chat.quickPrompt.risks"),s("chat.quickPrompt.summary")],[s]),d=n.useMemo(()=>a.messages.filter(t=>!t.approval),[a.messages]),z=n.useMemo(()=>ue(d,l.language),[d,l.language]),P=n.useMemo(()=>{const t=d.find(c=>c.role==="user"&&c.content.trim());if(!t)return s("chat.mobileTitle",{defaultValue:"agim chat"});const r=t.content.replace(/\s+/g," ").trim();return r.length>24?`${r.slice(0,24)}…`:r},[d,s]),V=n.useMemo(()=>a.runActivities.slice(0,12),[a.runActivities]),y=n.useMemo(()=>a.runActivities.find(t=>t.runId===a.activeRunId),[a.activeRunId,a.runActivities]);n.useEffect(()=>{const t=h.current;!t||t.scrollHeight-t.scrollTop-t.clientHeight>200&&a.currentReplyId==null||requestAnimationFrame(()=>{t.scrollTop=t.scrollHeight})},[a.messages,a.currentReplyId]),n.useEffect(()=>{const t=h.current;if(!t)return;const r=()=>{const c=t.scrollHeight-t.scrollTop-t.clientHeight;L(c>200)};return t.addEventListener("scroll",r,{passive:!0}),r(),()=>t.removeEventListener("scroll",r)},[]),n.useEffect(()=>{a.error&&(Q(a.error)?(q(a.error),C(!0)):j.error(a.error),S())},[a.error,S]),n.useEffect(()=>{const t=x.current;t&&(t.style.height="auto",t.style.height=`${Math.min(t.scrollHeight,24*6+16)}px`)},[p]);function O(t){t?.preventDefault();const r=p.trim();if(r){if(a.status!=="open"){j.error(s("chat.notConnected",{defaultValue:"Not connected. Reconnecting…"}));return}a.currentReplyId||(u(r),b(""),requestAnimationFrame(()=>x.current?.focus()))}}function U(t){t.nativeEvent.isComposing||t.keyCode}function K(){const t=h.current;t&&t.scrollTo({top:t.scrollHeight,behavior:"smooth"})}function Y(){fetch("/api/auth/logout",{method:"POST"}).finally(()=>{try{localStorage.removeItem("agim_token")}catch{}window.location.replace("/login")})}function A(){I(),j.success(s("chat.newConvToast",{defaultValue:"Started a new conversation"})),o("none"),requestAnimationFrame(()=>x.current?.focus())}return e.jsxs("div",{className:"relative flex h-dvh flex-col bg-bg",children:[e.jsx(W,{open:B,reason:F,onOpenChange:C,onConfigured:()=>i("agim")}),e.jsxs("header",{className:"flex items-center gap-2 border-b border-border bg-surface px-3 py-2",style:{paddingTop:"calc(env(safe-area-inset-top) + 0.5rem)"},children:[e.jsx(f,{variant:"ghost",size:"sm","aria-label":s("chat.back",{defaultValue:"Back"}),onClick:()=>window.history.length>1?window.history.back():window.location.assign("/"),className:"h-9 w-9 p-0",children:e.jsx(se,{className:"h-5 w-5"})}),e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col items-center",children:[e.jsx("span",{className:"truncate text-sm font-semibold",children:P}),e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] text-text-dim",children:[e.jsx("span",{className:g("inline-block h-1.5 w-1.5 rounded-full",ce[a.status])}),e.jsx("span",{children:a.agent?N(a.agent):"—"}),e.jsx("span",{children:"·"}),e.jsx("span",{children:a.activeRunId?s("chat.running",{defaultValue:"Running"}):H})]})]}),e.jsx(f,{variant:"ghost",size:"sm","aria-label":s("chat.menu",{defaultValue:"Menu"}),onClick:()=>o("menu"),className:"h-9 w-9 p-0",children:e.jsx(le,{className:"h-5 w-5"})})]}),e.jsx("div",{ref:h,className:"flex-1 overflow-y-auto",children:e.jsxs("div",{className:"mx-auto flex w-full max-w-3xl flex-col gap-3 px-3 py-4",children:[d.length===0&&a.status==="open"&&e.jsxs("div",{className:"flex flex-col items-center gap-2 py-14 text-center",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-surface-2 text-2xl",children:"💬"}),e.jsx("h2",{className:"text-base font-semibold",children:s("chat.welcomeTitle",{defaultValue:"Start a conversation"})}),e.jsx("p",{className:"max-w-xs text-sm text-text-dim",children:s("chat.welcomeBodyMobile",{defaultValue:"Type a message below. Switch agent or start over from the menu."})})]}),d.length===0&&a.status!=="open"&&e.jsx("div",{className:"grid place-items-center py-16 text-center",children:e.jsx("p",{className:"text-sm text-text-dim",children:a.status==="connecting"?s("chat.connecting",{defaultValue:"Connecting to agim…"}):s("chat.disconnected",{defaultValue:"Disconnected. Reconnecting automatically."})})}),z.map(t=>t.type==="divider"?e.jsx("div",{className:"py-1 text-center text-[11px] text-text-muted",children:t.label},t.key):e.jsxs("div",{className:"space-y-1",children:[e.jsx(X,{msg:t.msg,onApprove:(r,c,_)=>m(r,c,_)}),e.jsx("div",{className:g("px-1 text-[11px] text-text-muted",t.msg.role==="user"?"text-right":"text-left"),children:D(t.msg.timestamp,l.language)})]},t.key))]})}),E&&e.jsx("button",{type:"button",onClick:K,className:"absolute bottom-28 left-1/2 z-20 -translate-x-1/2 rounded-full border border-border bg-surface p-2 shadow-md","aria-label":s("chat.scrollDown",{defaultValue:"Scroll to bottom"}),children:e.jsx(ae,{className:"h-4 w-4"})}),e.jsx(Z,{approvals:a.pendingApprovals,onApprove:(t,r,c)=>m(t,r,c)}),e.jsxs("form",{onSubmit:O,className:"sticky bottom-0 border-t border-border bg-surface px-3 py-2",style:{paddingBottom:"calc(env(safe-area-inset-bottom) + 0.5rem)"},children:[d.length===0&&a.status==="open"&&e.jsx("div",{className:"mb-2 flex gap-2 overflow-x-auto pb-1",children:$.map(t=>e.jsx("button",{type:"button",onClick:()=>{b(t),requestAnimationFrame(()=>x.current?.focus())},className:"shrink-0 rounded-full border border-border bg-surface-2 px-3 py-1.5 text-xs text-text-dim hover:bg-surface-hover",children:t},t))}),y&&e.jsxs("div",{className:"mb-2 flex items-center justify-between rounded-xl border border-info/30 bg-info-bg/50 px-3 py-1.5",children:[e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-info",children:[e.jsx(M,{className:"h-3.5 w-3.5 animate-spin"}),s("chat.running",{defaultValue:"Running"})]}),e.jsxs("span",{className:"truncate text-xs text-text-dim",children:[N(y.agent)," · ",T(y.durationMs)]})]}),e.jsxs("div",{className:"flex items-end gap-2",children:[e.jsx(f,{type:"button",variant:"ghost",onClick:A,disabled:a.status!=="open"||!!a.currentReplyId,"aria-label":s("chat.newConv",{defaultValue:"New conversation"}),className:"h-11 w-11 shrink-0 rounded-full p-0",children:e.jsx(oe,{className:"h-4 w-4"})}),e.jsx("textarea",{ref:x,value:p,onChange:t=>b(t.target.value),onKeyDown:U,placeholder:s("chat.inputPlaceholderMobile",{defaultValue:"Message…"}),rows:1,className:g("flex-1 resize-none rounded-3xl border border-border bg-bg","px-3 py-2 text-[15px] leading-6","focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-1 focus:ring-offset-bg")}),e.jsx(f,{type:"submit",disabled:!p.trim()||a.status!=="open"||!!a.currentReplyId,"aria-label":s("chat.send",{defaultValue:"Send"}),className:"h-11 w-11 shrink-0 rounded-full p-0",children:a.currentReplyId?e.jsx(M,{className:"h-4 w-4 animate-spin"}):e.jsx(ee,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[a.currentReplyId&&e.jsx(R,{variant:"info",children:s("chat.streaming",{defaultValue:"… streaming"})}),!a.currentReplyId&&e.jsx("span",{className:"text-[11px] text-text-muted",children:s("chat.mobileHint")})]}),e.jsxs("button",{type:"button",onClick:()=>o("activity"),className:"inline-flex items-center gap-1 rounded px-1.5 py-1 text-xs text-text-dim hover:bg-surface-hover hover:text-text",children:[e.jsx(ne,{className:"h-3.5 w-3.5"}),s("chat.activity",{defaultValue:"Activity"})]})]})]}),v!=="none"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button","aria-label":s("actions.close",{ns:"common",defaultValue:"Close"}),className:"fixed inset-0 z-30 bg-black/35",onClick:()=>o("none")}),e.jsxs("div",{className:"fixed inset-x-0 bottom-0 z-40 rounded-t-2xl border border-border bg-surface px-4 pb-safe pt-3 shadow-lg",children:[e.jsx("div",{className:"mx-auto mb-3 h-1.5 w-12 rounded-full bg-border"}),v==="menu"&&e.jsxs("div",{className:"space-y-3 pb-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"mb-1 text-[11px] uppercase text-text-dim",children:s("chat.agent",{defaultValue:"Agent"})}),e.jsx(te,{agents:a.agents,value:a.agent,onChange:t=>{i(t),o("none")}})]}),e.jsx("button",{type:"button",className:"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover disabled:opacity-50",disabled:a.status!=="open"||!!a.currentReplyId,onClick:A,children:s("chat.newConv",{defaultValue:"New conversation"})}),e.jsx("button",{type:"button",className:"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover",onClick:()=>o("activity"),children:s("chat.activity",{defaultValue:"Activity"})}),e.jsx("button",{type:"button",className:"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover",onClick:()=>{o("none"),window.location.assign("/settings/llm")},children:s("chat.llmSettings",{defaultValue:"LLM settings"})}),e.jsx("button",{type:"button",className:"block w-full rounded-md border border-danger/30 px-3 py-2 text-left text-sm text-danger hover:bg-danger/10",onClick:Y,children:s("chat.logout",{defaultValue:"Log out"})})]}),v==="activity"&&e.jsxs("div",{className:"space-y-3 pb-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("div",{className:"text-sm font-semibold",children:s("chat.activityTitle",{defaultValue:"Run activity"})}),e.jsx("button",{type:"button",className:"text-xs text-text-dim hover:text-text",onClick:()=>o("menu"),children:s("actions.back",{ns:"common",defaultValue:"Back"})})]}),e.jsxs("div",{className:"rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-dim",children:[s("chat.pendingApprovals",{defaultValue:"Pending approvals"}),": ",a.pendingApprovals.length]}),e.jsxs("div",{className:"max-h-72 space-y-2 overflow-y-auto pr-1",children:[V.length===0&&e.jsx("div",{className:"rounded-md border border-border px-3 py-5 text-center text-xs text-text-dim",children:s("chat.activityEmpty",{defaultValue:"No recent runs yet."})}),V.map(t=>e.jsxs("div",{className:"rounded-md border border-border px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(R,{className:g("border-0",me(t.status)),children:t.status}),e.jsx("span",{className:"truncate text-xs font-medium",children:N(t.agent)}),e.jsx("span",{className:"ml-auto text-[11px] text-text-muted",children:T(t.durationMs)})]}),e.jsxs("div",{className:"mt-1 flex items-center gap-1 text-[11px] text-text-muted",children:[e.jsx(re,{className:"h-3 w-3"}),D(t.startedAt,l.language),t.outputChars!=null&&e.jsxs("span",{children:["· ",t.outputChars," chars"]})]}),t.error&&e.jsx("p",{className:"mt-1 text-[11px] text-danger",children:t.error})]},t.runId))]})]})]})]})]})}export{ve as default};
|
|
17
|
-
//# sourceMappingURL=chat-DPkKy5y_.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chat-DPkKy5y_.js","sources":["../../node_modules/lucide-react/dist/esm/icons/clock-3.js","../../node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.js","../../node_modules/lucide-react/dist/esm/icons/sparkles.js","../../src/routes/m/chat.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock3 = createLucideIcon(\"Clock3\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16.5 12\", key: \"1aq6pp\" }]\n]);\n\nexport { Clock3 as default };\n//# sourceMappingURL=clock-3.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst EllipsisVertical = createLucideIcon(\"EllipsisVertical\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"12\", cy: \"5\", r: \"1\", key: \"gxeob9\" }],\n [\"circle\", { cx: \"12\", cy: \"19\", r: \"1\", key: \"lyex9k\" }]\n]);\n\nexport { EllipsisVertical as default };\n//# sourceMappingURL=ellipsis-vertical.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Sparkles = createLucideIcon(\"Sparkles\", [\n [\n \"path\",\n {\n d: \"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z\",\n key: \"4pj2yx\"\n }\n ],\n [\"path\", { d: \"M20 3v4\", key: \"1olli1\" }],\n [\"path\", { d: \"M22 5h-4\", key: \"1gvqau\" }],\n [\"path\", { d: \"M4 17v2\", key: \"vumght\" }],\n [\"path\", { d: \"M5 18H3\", key: \"zchphs\" }]\n]);\n\nexport { Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * /m/chat — mobile-first chat surface (production-oriented UX pass).\n *\n * Upgrades over v1:\n * - richer hierarchy (thread title + status + execution rail)\n * - date separators + per-message timestamps\n * - quick prompts + larger mobile composer controls\n * - bottom-sheet menu and activity panel for recent runs\n *\n * Keeps compatibility with the existing useChat() transport:\n * same message flow / approvals / reconnect behavior.\n */\n\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport {\n Activity,\n ArrowDown,\n ChevronLeft,\n Clock3,\n Loader2,\n MoreVertical,\n Sparkles,\n Send,\n} from 'lucide-react'\nimport { toast } from 'sonner'\n\nimport { useChat, type ChatMessage, type RunActivity } from '@/hooks/use-chat'\nimport { Button } from '@/components/ui/button'\nimport { Badge } from '@/components/ui/badge'\nimport { MessageBubble } from '@/components/chat/message-bubble'\nimport { ApprovalDock } from '@/components/chat/approval-dock'\nimport { AgentPicker } from '@/components/chat/agent-picker'\nimport { isNativeSetupError } from '@/components/chat/error-hints'\nimport { NativeSetupDialog } from '@/components/chat/native-setup-dialog'\nimport { agentDisplayName } from '@/lib/agent-label'\nimport { cn } from '@/lib/utils'\n\nconst STATUS_STYLES: Record<string, string> = {\n open: 'bg-success',\n connecting: 'bg-warning animate-pulse',\n closed: 'bg-text-muted',\n error: 'bg-danger',\n}\n\ntype SheetMode = 'none' | 'menu' | 'activity'\ntype MessageRow =\n | { type: 'divider'; key: string; label: string }\n | { type: 'message'; key: string; msg: ChatMessage }\n\nfunction safeTs(ts: number): number {\n return Number.isFinite(ts) ? ts : Date.now()\n}\n\nfunction dayKey(ts: number): string {\n const d = new Date(safeTs(ts))\n const m = String(d.getMonth() + 1).padStart(2, '0')\n const day = String(d.getDate()).padStart(2, '0')\n return `${d.getFullYear()}-${m}-${day}`\n}\n\nfunction formatDay(ts: number, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n month: 'short',\n day: 'numeric',\n weekday: 'short',\n }).format(new Date(safeTs(ts)))\n}\n\nfunction formatClock(ts: number, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n }).format(new Date(safeTs(ts)))\n}\n\nfunction formatDurationMs(ms?: number): string {\n if (!ms || ms <= 0) return '0ms'\n if (ms < 1000) return `${ms}ms`\n return `${(ms / 1000).toFixed(ms >= 10_000 ? 0 : 1)}s`\n}\n\nfunction buildRows(messages: ChatMessage[], locale: string): MessageRow[] {\n const rows: MessageRow[] = []\n let prevDay = ''\n for (const msg of messages) {\n const k = dayKey(msg.timestamp)\n if (k !== prevDay) {\n rows.push({ type: 'divider', key: `d-${k}`, label: formatDay(msg.timestamp, locale) })\n prevDay = k\n }\n rows.push({ type: 'message', key: msg.id, msg })\n }\n return rows\n}\n\nfunction runStatusBadgeClass(status: RunActivity['status']): string {\n switch (status) {\n case 'running': return 'bg-info-bg text-info'\n case 'success': return 'bg-success-bg text-success'\n case 'error': return 'bg-danger-bg text-danger'\n }\n}\n\nexport default function MobileChatRoute(): JSX.Element {\n const { t, i18n } = useTranslation(['chat', 'common'])\n const {\n state, send, switchAgent, approvalClick, newConversation, clearError,\n } = useChat()\n const [input, setInput] = useState('')\n const [sheet, setSheet] = useState<SheetMode>('none')\n const [showScrollDown, setShowScrollDown] = useState(false)\n const [nativeSetupDialogOpen, setNativeSetupDialogOpen] = useState(false)\n const [nativeSetupReason, setNativeSetupReason] = useState('')\n const listRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLTextAreaElement>(null)\n const statusLabel = t(`chat.status.${state.status}`, { defaultValue: state.status })\n\n const quickPrompts = useMemo(\n () => [\n t('chat.quickPrompt.plan'),\n t('chat.quickPrompt.risks'),\n t('chat.quickPrompt.summary'),\n ],\n [t],\n )\n\n const chatMessages = useMemo(\n () => state.messages.filter((m) => !m.approval),\n [state.messages],\n )\n const rows = useMemo(\n () => buildRows(chatMessages, i18n.language),\n [chatMessages, i18n.language],\n )\n\n const latestUserTitle = useMemo(() => {\n const firstUser = chatMessages.find((m) => m.role === 'user' && m.content.trim())\n if (!firstUser) return t('chat.mobileTitle', { defaultValue: 'agim chat' })\n const compact = firstUser.content.replace(/\\s+/g, ' ').trim()\n return compact.length > 24 ? `${compact.slice(0, 24)}…` : compact\n }, [chatMessages, t])\n\n const latestRuns = useMemo(() => state.runActivities.slice(0, 12), [state.runActivities])\n const activeRun = useMemo(\n () => state.runActivities.find((r) => r.runId === state.activeRunId),\n [state.activeRunId, state.runActivities],\n )\n\n // Auto-scroll to bottom on new messages OR streaming chunk. Same\n // pinch-tolerance as desktop: hold position when user is reading up.\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const distFromBottom = el.scrollHeight - el.scrollTop - el.clientHeight\n if (distFromBottom > 200 && state.currentReplyId == null) return\n requestAnimationFrame(() => { el.scrollTop = el.scrollHeight })\n }, [state.messages, state.currentReplyId])\n\n // Floating \"scroll to bottom\" pill.\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const onScroll = (): void => {\n const dist = el.scrollHeight - el.scrollTop - el.clientHeight\n setShowScrollDown(dist > 200)\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n onScroll()\n return () => el.removeEventListener('scroll', onScroll)\n }, [])\n\n // Surface WS errors as toast and clear.\n useEffect(() => {\n if (!state.error) return\n if (isNativeSetupError(state.error)) {\n setNativeSetupReason(state.error)\n setNativeSetupDialogOpen(true)\n } else {\n toast.error(state.error)\n }\n clearError()\n }, [state.error, clearError])\n\n // Auto-grow textarea up to 6 lines.\n useEffect(() => {\n const ta = inputRef.current\n if (!ta) return\n ta.style.height = 'auto'\n ta.style.height = `${Math.min(ta.scrollHeight, 24 * 6 + 16)}px`\n }, [input])\n\n function onSubmit(e?: React.FormEvent): void {\n e?.preventDefault()\n const v = input.trim()\n if (!v) return\n if (state.status !== 'open') {\n toast.error(t('chat.notConnected', { defaultValue: 'Not connected. Reconnecting…' }))\n return\n }\n if (state.currentReplyId) return\n send(v)\n setInput('')\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n\n function onKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>): void {\n // IME-safe: never submit while composition is active.\n const ne = e.nativeEvent as KeyboardEvent & { isComposing?: boolean }\n if (ne.isComposing || e.keyCode === 229) return\n // Mobile keeps Enter for newline; explicit Send button submits.\n }\n\n function onScrollToBottom(): void {\n const el = listRef.current\n if (!el) return\n el.scrollTo({ top: el.scrollHeight, behavior: 'smooth' })\n }\n\n function onLogout(): void {\n void fetch('/api/auth/logout', { method: 'POST' }).finally(() => {\n try { localStorage.removeItem('agim_token') } catch { /* noop */ }\n window.location.replace('/login')\n })\n }\n\n function onStartNewConversation(): void {\n newConversation()\n toast.success(t('chat.newConvToast', { defaultValue: 'Started a new conversation' }))\n setSheet('none')\n requestAnimationFrame(() => inputRef.current?.focus())\n }\n\n return (\n <div className=\"relative flex h-dvh flex-col bg-bg\">\n <NativeSetupDialog\n open={nativeSetupDialogOpen}\n reason={nativeSetupReason}\n onOpenChange={setNativeSetupDialogOpen}\n onConfigured={() => switchAgent('agim')}\n />\n\n <header\n className=\"flex items-center gap-2 border-b border-border bg-surface px-3 py-2\"\n style={{ paddingTop: 'calc(env(safe-area-inset-top) + 0.5rem)' }}\n >\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={t('chat.back', { defaultValue: 'Back' })}\n onClick={() => (window.history.length > 1 ? window.history.back() : window.location.assign('/'))}\n className=\"h-9 w-9 p-0\"\n >\n <ChevronLeft className=\"h-5 w-5\" />\n </Button>\n <div className=\"flex min-w-0 flex-1 flex-col items-center\">\n <span className=\"truncate text-sm font-semibold\">{latestUserTitle}</span>\n <span className=\"flex items-center gap-1.5 text-[11px] text-text-dim\">\n <span className={cn('inline-block h-1.5 w-1.5 rounded-full', STATUS_STYLES[state.status])} />\n <span>{state.agent ? agentDisplayName(state.agent) : '—'}</span>\n <span>·</span>\n <span>{state.activeRunId ? t('chat.running', { defaultValue: 'Running' }) : statusLabel}</span>\n </span>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={t('chat.menu', { defaultValue: 'Menu' })}\n onClick={() => setSheet('menu')}\n className=\"h-9 w-9 p-0\"\n >\n <MoreVertical className=\"h-5 w-5\" />\n </Button>\n </header>\n\n <div ref={listRef} className=\"flex-1 overflow-y-auto\">\n <div className=\"mx-auto flex w-full max-w-3xl flex-col gap-3 px-3 py-4\">\n {chatMessages.length === 0 && state.status === 'open' && (\n <div className=\"flex flex-col items-center gap-2 py-14 text-center\">\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-surface-2 text-2xl\">\n 💬\n </div>\n <h2 className=\"text-base font-semibold\">\n {t('chat.welcomeTitle', { defaultValue: 'Start a conversation' })}\n </h2>\n <p className=\"max-w-xs text-sm text-text-dim\">\n {t('chat.welcomeBodyMobile', {\n defaultValue: 'Type a message below. Switch agent or start over from the menu.',\n })}\n </p>\n </div>\n )}\n {chatMessages.length === 0 && state.status !== 'open' && (\n <div className=\"grid place-items-center py-16 text-center\">\n <p className=\"text-sm text-text-dim\">\n {state.status === 'connecting'\n ? t('chat.connecting', { defaultValue: 'Connecting to agim…' })\n : t('chat.disconnected', {\n defaultValue: 'Disconnected. Reconnecting automatically.',\n })}\n </p>\n </div>\n )}\n {rows.map((row) => row.type === 'divider' ? (\n <div key={row.key} className=\"py-1 text-center text-[11px] text-text-muted\">\n {row.label}\n </div>\n ) : (\n <div key={row.key} className=\"space-y-1\">\n <MessageBubble\n msg={row.msg}\n onApprove={(mid, reqId, choice) => approvalClick(mid, reqId, choice)}\n />\n <div className={cn(\n 'px-1 text-[11px] text-text-muted',\n row.msg.role === 'user' ? 'text-right' : 'text-left',\n )}\n >\n {formatClock(row.msg.timestamp, i18n.language)}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {showScrollDown && (\n <button\n type=\"button\"\n onClick={onScrollToBottom}\n className=\"absolute bottom-28 left-1/2 z-20 -translate-x-1/2 rounded-full border border-border bg-surface p-2 shadow-md\"\n aria-label={t('chat.scrollDown', { defaultValue: 'Scroll to bottom' })}\n >\n <ArrowDown className=\"h-4 w-4\" />\n </button>\n )}\n\n <ApprovalDock\n approvals={state.pendingApprovals}\n onApprove={(mid, reqId, choice) => approvalClick(mid, reqId, choice)}\n />\n\n <form\n onSubmit={onSubmit}\n className=\"sticky bottom-0 border-t border-border bg-surface px-3 py-2\"\n style={{ paddingBottom: 'calc(env(safe-area-inset-bottom) + 0.5rem)' }}\n >\n {chatMessages.length === 0 && state.status === 'open' && (\n <div className=\"mb-2 flex gap-2 overflow-x-auto pb-1\">\n {quickPrompts.map((prompt) => (\n <button\n key={prompt}\n type=\"button\"\n onClick={() => {\n setInput(prompt)\n requestAnimationFrame(() => inputRef.current?.focus())\n }}\n className=\"shrink-0 rounded-full border border-border bg-surface-2 px-3 py-1.5 text-xs text-text-dim hover:bg-surface-hover\"\n >\n {prompt}\n </button>\n ))}\n </div>\n )}\n\n {activeRun && (\n <div className=\"mb-2 flex items-center justify-between rounded-xl border border-info/30 bg-info-bg/50 px-3 py-1.5\">\n <span className=\"inline-flex items-center gap-1 text-xs text-info\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n {t('chat.running', { defaultValue: 'Running' })}\n </span>\n <span className=\"truncate text-xs text-text-dim\">\n {agentDisplayName(activeRun.agent)} · {formatDurationMs(activeRun.durationMs)}\n </span>\n </div>\n )}\n\n <div className=\"flex items-end gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={onStartNewConversation}\n disabled={state.status !== 'open' || !!state.currentReplyId}\n aria-label={t('chat.newConv', { defaultValue: 'New conversation' })}\n className=\"h-11 w-11 shrink-0 rounded-full p-0\"\n >\n <Sparkles className=\"h-4 w-4\" />\n </Button>\n <textarea\n ref={inputRef}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={t('chat.inputPlaceholderMobile', { defaultValue: 'Message…' })}\n rows={1}\n className={cn(\n 'flex-1 resize-none rounded-3xl border border-border bg-bg',\n 'px-3 py-2 text-[15px] leading-6',\n 'focus:outline-none focus:ring-2 focus:ring-accent focus:ring-offset-1 focus:ring-offset-bg',\n )}\n />\n <Button\n type=\"submit\"\n disabled={!input.trim() || state.status !== 'open' || !!state.currentReplyId}\n aria-label={t('chat.send', { defaultValue: 'Send' })}\n className=\"h-11 w-11 shrink-0 rounded-full p-0\"\n >\n {state.currentReplyId ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Send className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n\n <div className=\"mt-2 flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {state.currentReplyId && (\n <Badge variant=\"info\">\n {t('chat.streaming', { defaultValue: '… streaming' })}\n </Badge>\n )}\n {!state.currentReplyId && (\n <span className=\"text-[11px] text-text-muted\">\n {t('chat.mobileHint')}\n </span>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => setSheet('activity')}\n className=\"inline-flex items-center gap-1 rounded px-1.5 py-1 text-xs text-text-dim hover:bg-surface-hover hover:text-text\"\n >\n <Activity className=\"h-3.5 w-3.5\" />\n {t('chat.activity', { defaultValue: 'Activity' })}\n </button>\n </div>\n </form>\n\n {sheet !== 'none' && (\n <>\n <button\n type=\"button\"\n aria-label={t('actions.close', { ns: 'common', defaultValue: 'Close' })}\n className=\"fixed inset-0 z-30 bg-black/35\"\n onClick={() => setSheet('none')}\n />\n <div className=\"fixed inset-x-0 bottom-0 z-40 rounded-t-2xl border border-border bg-surface px-4 pb-safe pt-3 shadow-lg\">\n <div className=\"mx-auto mb-3 h-1.5 w-12 rounded-full bg-border\" />\n\n {sheet === 'menu' && (\n <div className=\"space-y-3 pb-3\">\n <div>\n <div className=\"mb-1 text-[11px] uppercase text-text-dim\">\n {t('chat.agent', { defaultValue: 'Agent' })}\n </div>\n <AgentPicker\n agents={state.agents}\n value={state.agent}\n onChange={(a) => {\n switchAgent(a)\n setSheet('none')\n }}\n />\n </div>\n\n <button\n type=\"button\"\n className=\"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover disabled:opacity-50\"\n disabled={state.status !== 'open' || !!state.currentReplyId}\n onClick={onStartNewConversation}\n >\n {t('chat.newConv', { defaultValue: 'New conversation' })}\n </button>\n\n <button\n type=\"button\"\n className=\"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover\"\n onClick={() => setSheet('activity')}\n >\n {t('chat.activity', { defaultValue: 'Activity' })}\n </button>\n\n <button\n type=\"button\"\n className=\"block w-full rounded-md border border-border px-3 py-2 text-left text-sm hover:bg-surface-hover\"\n onClick={() => {\n setSheet('none')\n window.location.assign('/settings/llm')\n }}\n >\n {t('chat.llmSettings', { defaultValue: 'LLM settings' })}\n </button>\n\n <button\n type=\"button\"\n className=\"block w-full rounded-md border border-danger/30 px-3 py-2 text-left text-sm text-danger hover:bg-danger/10\"\n onClick={onLogout}\n >\n {t('chat.logout', { defaultValue: 'Log out' })}\n </button>\n </div>\n )}\n\n {sheet === 'activity' && (\n <div className=\"space-y-3 pb-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold\">\n {t('chat.activityTitle', { defaultValue: 'Run activity' })}\n </div>\n <button\n type=\"button\"\n className=\"text-xs text-text-dim hover:text-text\"\n onClick={() => setSheet('menu')}\n >\n {t('actions.back', { ns: 'common', defaultValue: 'Back' })}\n </button>\n </div>\n\n <div className=\"rounded-md border border-border bg-surface-2 px-3 py-2 text-xs text-text-dim\">\n {t('chat.pendingApprovals', { defaultValue: 'Pending approvals' })}: {state.pendingApprovals.length}\n </div>\n\n <div className=\"max-h-72 space-y-2 overflow-y-auto pr-1\">\n {latestRuns.length === 0 && (\n <div className=\"rounded-md border border-border px-3 py-5 text-center text-xs text-text-dim\">\n {t('chat.activityEmpty', { defaultValue: 'No recent runs yet.' })}\n </div>\n )}\n {latestRuns.map((run) => (\n <div key={run.runId} className=\"rounded-md border border-border px-3 py-2\">\n <div className=\"flex items-center gap-2\">\n <Badge className={cn('border-0', runStatusBadgeClass(run.status))}>\n {run.status}\n </Badge>\n <span className=\"truncate text-xs font-medium\">{agentDisplayName(run.agent)}</span>\n <span className=\"ml-auto text-[11px] text-text-muted\">\n {formatDurationMs(run.durationMs)}\n </span>\n </div>\n <div className=\"mt-1 flex items-center gap-1 text-[11px] text-text-muted\">\n <Clock3 className=\"h-3 w-3\" />\n {formatClock(run.startedAt, i18n.language)}\n {run.outputChars != null && (\n <span>· {run.outputChars} chars</span>\n )}\n </div>\n {run.error && (\n <p className=\"mt-1 text-[11px] text-danger\">{run.error}</p>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )\n}\n"],"names":["Clock3","createLucideIcon","EllipsisVertical","Sparkles","STATUS_STYLES","safeTs","ts","dayKey","d","m","day","formatDay","locale","formatClock","formatDurationMs","ms","buildRows","messages","rows","prevDay","msg","k","runStatusBadgeClass","status","MobileChatRoute","t","i18n","useTranslation","state","send","switchAgent","approvalClick","newConversation","clearError","useChat","input","setInput","useState","sheet","setSheet","showScrollDown","setShowScrollDown","nativeSetupDialogOpen","setNativeSetupDialogOpen","nativeSetupReason","setNativeSetupReason","listRef","useRef","inputRef","statusLabel","quickPrompts","useMemo","chatMessages","latestUserTitle","firstUser","compact","latestRuns","activeRun","r","useEffect","el","onScroll","dist","isNativeSetupError","toast","ta","onSubmit","e","v","onKeyDown","onScrollToBottom","onLogout","onStartNewConversation","jsxs","jsx","NativeSetupDialog","Button","ChevronLeft","cn","agentDisplayName","MoreVertical","row","MessageBubble","mid","reqId","choice","ArrowDown","ApprovalDock","prompt","Loader2","Send","Badge","Activity","Fragment","AgentPicker","a","run"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{o as c}from"./index-DY2Zglku.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const r=c("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);export{r as C};
|
|
7
|
-
//# sourceMappingURL=circle-check-COhM5JsK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"circle-check-COhM5JsK.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheck = createLucideIcon(\"CircleCheck\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n"],"names":["CircleCheck","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAcC,EAAiB,cAAe,CAClD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,CAAC","x_google_ignoreList":[0]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as y,j as a,D as j,t as D,v as g,w as h,x as b,y as p,B as r}from"./index-DY2Zglku.js";import{r as n}from"./react-DlP5eolq.js";function v({open:c,onOpenChange:t,title:d,description:e,confirmLabel:u,cancelLabel:f,intent:x="default",onConfirm:l}){const{t:i}=y("common"),[s,o]=n.useState(!1),m=n.useCallback(async()=>{o(!0);try{await l(),t(!1)}catch{}finally{o(!1)}},[l,t]);return a.jsx(j,{open:c,onOpenChange:s?()=>{}:t,children:a.jsxs(D,{children:[a.jsxs(g,{children:[a.jsx(h,{children:d}),e&&a.jsx(b,{children:e})]}),a.jsxs(p,{children:[a.jsx(r,{type:"button",variant:"secondary",onClick:()=>t(!1),disabled:s,children:f??i("actions.cancel")}),a.jsx(r,{type:"button",variant:x==="danger"?"destructive":"default",onClick:m,disabled:s,"aria-busy":s,children:s?i("states.saving"):u??i("actions.confirm")})]})]})})}v.displayName="ConfirmDialog";export{v as C};
|
|
2
|
-
//# sourceMappingURL=confirm-dialog-CgpJL9oN.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{o as J,u as U,a6 as K,a7 as W,j as e,l as O,B as k,S as _,g as L,h as E,i as S,k as x,a8 as Z,m as p,n as Y,L as $,I as ee,c as se}from"./index-DY2Zglku.js";import{r as f}from"./react-DlP5eolq.js";import{u as te,a as le,b as ne}from"./use-settings-Co-iafXD.js";import{L as B}from"./loader-circle-D8L1w9c1.js";import{S as ae}from"./save-BYFmz9gD.js";import{i as ie,j as re}from"./use-memory-B9oRyQC8.js";import{R as oe}from"./refresh-ccw-7HdadG5V.js";import{P as de}from"./play-Di1jqulh.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const ce=J("AlarmClockCheck",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}],["path",{d:"m9 13 2 2 4-4",key:"6343dt"}]]),y={intervalMs:"300000",floorMin:"30",batchMax:"20",maxPending:"200"};function me(n){const s=(n??"1").trim().toLowerCase();return s!=="0"&&s!=="false"&&s!=="no"&&s!=="off"}function ue(n){const s=(n||"auto").toLowerCase();return s==="agent"||s==="llm"?s:"auto"}function xe({onSaved:n}){const{t:s}=U(["memory","common"]),a=te({reveal:!1}),r=f.useMemo(()=>a.data?.env??{},[a.data?.env]),j=le(),d=K(),c=j.data?.agents??[],h=d.data?.backends??[],v=d.data?.roles?.distill??"",T=f.useMemo(()=>()=>({source:ue(r.IMHUB_MEMORY_DISTILL_SOURCE),agent:r.IMHUB_MEMORY_DISTILL_AGENT||"",llmBackend:v,enabled:me(r.IMHUB_MEMORY_DISTILL_ENABLED),intervalMs:r.IMHUB_MEMORY_DISTILL_INTERVAL_MS||"",floorMin:r.IMHUB_MEMORY_DISTILL_FLOOR_MIN||"",batchMax:r.IMHUB_MEMORY_DISTILL_BATCH_MAX||"",maxPending:r.IMHUB_MEMORY_DISTILL_MAX_PENDING||""}),[r,v]),[l,N]=f.useState(T),g=f.useRef(l),A=f.useRef(!1);f.useEffect(()=>{if(A.current||!a.data||!d.data)return;const t=T();N(t),g.current=t,A.current=!0},[a.data,d.data,T]);const H=ne(),P=W(),w=f.useMemo(()=>{const t=g.current;return Object.keys(l).some(i=>l[i]!==t[i])},[l]);function m(t,i){N(o=>({...o,[t]:i}))}function I(t,i,o){if(!t.trim())return null;const u=Number(t);return!Number.isFinite(u)||u<i?s("distill.form.errors.numRange",{field:o,min:i}):null}function F(){return l.source==="agent"&&!l.agent.trim()?s("distill.form.errors.agentRequired"):l.source==="llm"&&!l.llmBackend.trim()?s("distill.form.errors.llmRequired"):I(l.intervalMs,1e4,s("distill.form.intervalMs"))??I(l.floorMin,0,s("distill.form.floorMin"))??I(l.batchMax,1,s("distill.form.batchMax"))??I(l.maxPending,1,s("distill.form.maxPending"))}function V(){const t=g.current,i={},o=(u,M,q)=>{M!==q&&(i[u]=M.trim()===""?null:M.trim())};return l.source!==t.source&&(i.IMHUB_MEMORY_DISTILL_SOURCE=l.source==="auto"?null:l.source),l.enabled!==t.enabled&&(i.IMHUB_MEMORY_DISTILL_ENABLED=l.enabled?"1":"0"),l.source==="agent"?o("IMHUB_MEMORY_DISTILL_AGENT",l.agent,t.agent):t.agent&&(i.IMHUB_MEMORY_DISTILL_AGENT=null),o("IMHUB_MEMORY_DISTILL_INTERVAL_MS",l.intervalMs,t.intervalMs),o("IMHUB_MEMORY_DISTILL_FLOOR_MIN",l.floorMin,t.floorMin),o("IMHUB_MEMORY_DISTILL_BATCH_MAX",l.batchMax,t.batchMax),o("IMHUB_MEMORY_DISTILL_MAX_PENDING",l.maxPending,t.maxPending),i}async function G(){const t=F();if(t){p.error(t);return}const i=V(),o=l.source==="llm"&&l.llmBackend.trim()!==""&&l.llmBackend!==g.current.llmBackend;if(Object.keys(i).length===0&&!o){p.info(s("distill.form.nothingChanged"));return}try{Object.keys(i).length>0&&await H.mutateAsync({updates:i}),o&&await P.mutateAsync({distill:l.llmBackend.trim()}),p.success(s("distill.form.savedToast")),g.current={...l},N(u=>({...u})),n?.()}catch(u){const{message:M}=Y(u,s);p.error(M)}}function z(){N(g.current)}const C=H.isPending||P.isPending,Q=h.length===0,X=c.length===0;return e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h2",{className:"text-sm font-medium",children:s("distill.form.title")}),w&&e.jsx(O,{variant:"info",children:s("distill.form.dirty")}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[w&&e.jsx(k,{type:"button",variant:"secondary",size:"sm",onClick:z,disabled:C,children:s("distill.form.discard")}),e.jsxs(k,{type:"button",size:"sm",onClick:()=>void G(),disabled:!w||C,children:[C?e.jsx(B,{className:"h-4 w-4 animate-spin"}):e.jsx(ae,{className:"h-4 w-4"}),s("distill.form.save")]})]})]}),e.jsx("p",{className:"mt-1 text-xs text-text-dim",children:s("distill.form.hint")}),a.isLoading?e.jsx("div",{className:"mt-3 h-32 w-full rounded-md bg-surface-2 animate-pulse"}):e.jsxs("div",{className:"mt-3 flex flex-col gap-4",children:[e.jsxs("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsx(b,{label:s("distill.form.source"),help:s("distill.form.sourceHelp"),children:e.jsxs(_,{value:l.source,onValueChange:t=>m("source",t),children:[e.jsx(L,{children:e.jsx(E,{})}),e.jsxs(S,{children:[e.jsx(x,{value:"auto",children:s("distill.form.sourceAuto")}),e.jsx(x,{value:"agent",children:s("distill.form.sourceAgent")}),e.jsx(x,{value:"llm",children:s("distill.form.sourceLlm")})]})]})}),l.source==="auto"&&e.jsx("div",{className:"flex items-end",children:e.jsx("p",{className:"text-[11px] text-text-muted",children:s("distill.form.autoNote")})}),l.source==="agent"&&e.jsx(b,{label:s("distill.form.agent"),help:s("distill.form.agentHelp"),children:X?e.jsx("p",{className:"text-[11px] text-warning",children:s("distill.form.noAgents")}):e.jsxs(_,{value:l.agent,onValueChange:t=>m("agent",t),children:[e.jsx(L,{children:e.jsx(E,{placeholder:s("distill.form.agentPlaceholder")})}),e.jsx(S,{children:c.map(t=>e.jsx(x,{value:t,children:Z(t)},t))})]})}),l.source==="llm"&&e.jsx(b,{label:s("distill.form.llmBackend"),help:s("distill.form.llmBackendHelp"),children:Q?e.jsx("p",{className:"text-[11px] text-warning",children:s("distill.form.noBackends")}):e.jsxs(_,{value:l.llmBackend,onValueChange:t=>m("llmBackend",t),children:[e.jsx(L,{children:e.jsx(E,{placeholder:s("distill.form.llmPlaceholder")})}),e.jsx(S,{children:h.map(t=>e.jsxs(x,{value:t.name,children:[t.name," ",e.jsxs("span",{className:"text-text-muted",children:["· ",t.model]})]},t.name))})]})})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs font-medium text-text-dim",children:s("distill.form.scheduleTitle")}),e.jsxs("div",{className:"mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2",children:[e.jsx(b,{label:s("distill.form.enabled"),help:s("distill.form.enabledHelp"),children:e.jsxs(_,{value:l.enabled?"on":"off",onValueChange:t=>m("enabled",t==="on"),children:[e.jsx(L,{children:e.jsx(E,{})}),e.jsxs(S,{children:[e.jsx(x,{value:"on",children:s("distill.form.enabledOn")}),e.jsx(x,{value:"off",children:s("distill.form.enabledOff")})]})]})}),e.jsx(R,{label:s("distill.form.intervalMs"),help:s("distill.form.intervalMsHelp"),value:l.intervalMs,placeholder:y.intervalMs,min:1e4,step:1e4,onChange:t=>m("intervalMs",t)}),e.jsx(R,{label:s("distill.form.floorMin"),help:s("distill.form.floorMinHelp"),value:l.floorMin,placeholder:y.floorMin,min:0,step:5,onChange:t=>m("floorMin",t)}),e.jsx(R,{label:s("distill.form.batchMax"),help:s("distill.form.batchMaxHelp"),value:l.batchMax,placeholder:y.batchMax,min:1,step:1,onChange:t=>m("batchMax",t)}),e.jsx(R,{label:s("distill.form.maxPending"),help:s("distill.form.maxPendingHelp"),value:l.maxPending,placeholder:y.maxPending,min:1,step:10,onChange:t=>m("maxPending",t)})]})]})]})]})}function b({label:n,help:s,children:a}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx($,{className:"text-xs text-text-dim",children:n}),a,s&&e.jsx("p",{className:"text-[11px] text-text-muted",children:s})]})}function R({label:n,help:s,value:a,placeholder:r,min:j,step:d,onChange:c}){return e.jsx(b,{label:n,help:s,children:e.jsx(ee,{type:"number",min:j,step:d,value:a,placeholder:r,onChange:h=>c(h.target.value),className:"font-mono text-xs"})})}function _e(){const{t:n}=U(["memory","common"]),s=ie(),a=s.data,r=re();async function j(){try{await r.mutateAsync(),p.success(n("distill.actions.runStarted"))}catch(h){const{message:v}=Y(h,n);p.error(v)}}const d=!!a?.running,c=a?.pendingTotal??0;return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-4",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:n("distill.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>s.refetch(),disabled:s.isFetching,"aria-label":n("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(B,{className:"h-4 w-4 animate-spin"}):e.jsx(oe,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:n("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:n("distill.subtitle")})]}),e.jsx(xe,{onSaved:()=>void s.refetch()}),e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-sm",children:[e.jsx("span",{className:"font-medium",children:n("distill.status.title")}),e.jsx(O,{variant:a?.enabled?"success":"secondary",children:a?.enabled?n("distill.status.enabledTrue"):n("distill.status.enabledFalse")}),d&&e.jsxs(O,{variant:"info",children:[e.jsx(B,{className:"mr-1 inline h-3 w-3 animate-spin"}),n("distill.status.running")]}),e.jsx("div",{className:"ml-auto",children:e.jsxs(k,{variant:"default",size:"sm",onClick:()=>void j(),disabled:r.isPending||d||!a?.enabled,children:[r.isPending?e.jsx(B,{className:"h-4 w-4 animate-spin"}):e.jsx(de,{className:"h-4 w-4"}),n("distill.actions.runNow")]})})]}),s.isLoading?e.jsx("div",{className:"mt-3 h-20 w-full rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2 sm:grid-cols-3",children:[e.jsx(D,{label:n("distill.status.pending"),value:c,tone:c>0?"warning":"success"}),e.jsx(D,{label:n("distill.status.lastProcessed"),value:a?.lastProcessed??0,tone:"info"}),e.jsx(D,{label:n("distill.status.lastRun"),value:he(a?.lastRunAt),tone:"info"})]}),c===0&&e.jsxs("p",{className:"mt-2 flex items-center gap-1 text-xs text-text-muted",children:[e.jsx(ce,{className:"h-3 w-3"}),n("distill.status.bufferEmpty")]}),a?.lastError&&e.jsxs("p",{className:"mt-2 text-xs text-danger break-all",children:[n("distill.status.lastError"),": ",a.lastError]})]})]})]})}const fe={info:"border-info/30 text-info",success:"border-success/30 text-success",warning:"border-warning/30 text-warning",danger:"border-danger/30 text-danger"};function D({label:n,value:s,tone:a}){return e.jsxs("div",{className:se("rounded-md border bg-bg px-2 py-2",fe[a]),children:[e.jsx("div",{className:"text-[10px] uppercase tracking-wide text-text-dim",children:n}),e.jsx("div",{className:"text-xl font-semibold tabular-nums",children:s})]})}function he(n){if(!n)return"—";try{const s=new Date(n);return Number.isNaN(s.getTime())?String(n):s.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return String(n)}}export{_e as default};
|
|
7
|
-
//# sourceMappingURL=distill-D9p8O8Jf.js.map
|