@stardust-bytes/agent-hub 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +184 -0
- package/backend/.env.example +26 -0
- package/backend/dist/agent/agent.controller.d.ts +23 -0
- package/backend/dist/agent/agent.controller.js +114 -0
- package/backend/dist/agent/agent.controller.js.map +1 -0
- package/backend/dist/agent/agent.module.d.ts +2 -0
- package/backend/dist/agent/agent.module.js +128 -0
- package/backend/dist/agent/agent.module.js.map +1 -0
- package/backend/dist/agent/agent.service.d.ts +25 -0
- package/backend/dist/agent/agent.service.js +198 -0
- package/backend/dist/agent/agent.service.js.map +1 -0
- package/backend/dist/agent/dto/agent-action.dto.d.ts +10 -0
- package/backend/dist/agent/dto/agent-action.dto.js +73 -0
- package/backend/dist/agent/dto/agent-action.dto.js.map +1 -0
- package/backend/dist/agent/dto/agent-command.util.d.ts +4 -0
- package/backend/dist/agent/dto/agent-command.util.js +13 -0
- package/backend/dist/agent/dto/agent-command.util.js.map +1 -0
- package/backend/dist/agent/dto/agent-run-state.d.ts +21 -0
- package/backend/dist/agent/dto/agent-run-state.js +19 -0
- package/backend/dist/agent/dto/agent-run-state.js.map +1 -0
- package/backend/dist/agent/dto/agent-state.enum.d.ts +6 -0
- package/backend/dist/agent/dto/agent-state.enum.js +11 -0
- package/backend/dist/agent/dto/agent-state.enum.js.map +1 -0
- package/backend/dist/agent/dto/approve-tool.dto.d.ts +4 -0
- package/backend/dist/agent/dto/approve-tool.dto.js +25 -0
- package/backend/dist/agent/dto/approve-tool.dto.js.map +1 -0
- package/backend/dist/agent/dto/chat.dto.d.ts +6 -0
- package/backend/dist/agent/dto/chat.dto.js +35 -0
- package/backend/dist/agent/dto/chat.dto.js.map +1 -0
- package/backend/dist/agent/dto/execute-plan.dto.d.ts +4 -0
- package/backend/dist/agent/dto/execute-plan.dto.js +25 -0
- package/backend/dist/agent/dto/execute-plan.dto.js.map +1 -0
- package/backend/dist/agent/dto/permissions-config.d.ts +8 -0
- package/backend/dist/agent/dto/permissions-config.js +11 -0
- package/backend/dist/agent/dto/permissions-config.js.map +1 -0
- package/backend/dist/agent/dto/update-permissions.dto.d.ts +7 -0
- package/backend/dist/agent/dto/update-permissions.dto.js +46 -0
- package/backend/dist/agent/dto/update-permissions.dto.js.map +1 -0
- package/backend/dist/agent/dto/write-stream.interface.d.ts +3 -0
- package/backend/dist/agent/dto/write-stream.interface.js +3 -0
- package/backend/dist/agent/dto/write-stream.interface.js.map +1 -0
- package/backend/dist/agent/dto/yolo-config.dto.d.ts +5 -0
- package/backend/dist/agent/dto/yolo-config.dto.js +33 -0
- package/backend/dist/agent/dto/yolo-config.dto.js.map +1 -0
- package/backend/dist/agent/mcp/mcp-client.service.d.ts +15 -0
- package/backend/dist/agent/mcp/mcp-client.service.js +71 -0
- package/backend/dist/agent/mcp/mcp-client.service.js.map +1 -0
- package/backend/dist/agent/mcp/mcp.module.d.ts +2 -0
- package/backend/dist/agent/mcp/mcp.module.js +24 -0
- package/backend/dist/agent/mcp/mcp.module.js.map +1 -0
- package/backend/dist/agent/mcp/mcp.service.d.ts +23 -0
- package/backend/dist/agent/mcp/mcp.service.js +123 -0
- package/backend/dist/agent/mcp/mcp.service.js.map +1 -0
- package/backend/dist/agent/providers/llm-provider.interface.d.ts +41 -0
- package/backend/dist/agent/providers/llm-provider.interface.js +3 -0
- package/backend/dist/agent/providers/llm-provider.interface.js.map +1 -0
- package/backend/dist/agent/providers/ollama.provider.d.ts +5 -0
- package/backend/dist/agent/providers/ollama.provider.js +92 -0
- package/backend/dist/agent/providers/ollama.provider.js.map +1 -0
- package/backend/dist/agent/providers/openai.provider.d.ts +5 -0
- package/backend/dist/agent/providers/openai.provider.js +169 -0
- package/backend/dist/agent/providers/openai.provider.js.map +1 -0
- package/backend/dist/agent/services/agent-loop.service.d.ts +131 -0
- package/backend/dist/agent/services/agent-loop.service.js +764 -0
- package/backend/dist/agent/services/agent-loop.service.js.map +1 -0
- package/backend/dist/agent/services/approval-manager.service.d.ts +8 -0
- package/backend/dist/agent/services/approval-manager.service.js +50 -0
- package/backend/dist/agent/services/approval-manager.service.js.map +1 -0
- package/backend/dist/agent/services/context-builder.service.d.ts +32 -0
- package/backend/dist/agent/services/context-builder.service.js +118 -0
- package/backend/dist/agent/services/context-builder.service.js.map +1 -0
- package/backend/dist/agent/services/danger-patterns.config.d.ts +10 -0
- package/backend/dist/agent/services/danger-patterns.config.js +82 -0
- package/backend/dist/agent/services/danger-patterns.config.js.map +1 -0
- package/backend/dist/agent/services/denial-tracking.d.ts +12 -0
- package/backend/dist/agent/services/denial-tracking.js +34 -0
- package/backend/dist/agent/services/denial-tracking.js.map +1 -0
- package/backend/dist/agent/services/llm-controller.service.d.ts +19 -0
- package/backend/dist/agent/services/llm-controller.service.js +70 -0
- package/backend/dist/agent/services/llm-controller.service.js.map +1 -0
- package/backend/dist/agent/services/permissions.service.d.ts +24 -0
- package/backend/dist/agent/services/permissions.service.js +106 -0
- package/backend/dist/agent/services/permissions.service.js.map +1 -0
- package/backend/dist/agent/services/yolo-classifier.constants.d.ts +6 -0
- package/backend/dist/agent/services/yolo-classifier.constants.js +39 -0
- package/backend/dist/agent/services/yolo-classifier.constants.js.map +1 -0
- package/backend/dist/agent/services/yolo-classifier.service.d.ts +29 -0
- package/backend/dist/agent/services/yolo-classifier.service.js +139 -0
- package/backend/dist/agent/services/yolo-classifier.service.js.map +1 -0
- package/backend/dist/agent/subagent/subagent-tools.util.d.ts +3 -0
- package/backend/dist/agent/subagent/subagent-tools.util.js +37 -0
- package/backend/dist/agent/subagent/subagent-tools.util.js.map +1 -0
- package/backend/dist/agent/subagent/subagent.service.d.ts +17 -0
- package/backend/dist/agent/subagent/subagent.service.js +89 -0
- package/backend/dist/agent/subagent/subagent.service.js.map +1 -0
- package/backend/dist/agent-output/agent-output.controller.d.ts +20 -0
- package/backend/dist/agent-output/agent-output.controller.js +123 -0
- package/backend/dist/agent-output/agent-output.controller.js.map +1 -0
- package/backend/dist/agent-output/agent-output.module.d.ts +2 -0
- package/backend/dist/agent-output/agent-output.module.js +22 -0
- package/backend/dist/agent-output/agent-output.module.js.map +1 -0
- package/backend/dist/agent-profiles/agent-profiles.controller.d.ts +59 -0
- package/backend/dist/agent-profiles/agent-profiles.controller.js +70 -0
- package/backend/dist/agent-profiles/agent-profiles.controller.js.map +1 -0
- package/backend/dist/agent-profiles/agent-profiles.module.d.ts +2 -0
- package/backend/dist/agent-profiles/agent-profiles.module.js +23 -0
- package/backend/dist/agent-profiles/agent-profiles.module.js.map +1 -0
- package/backend/dist/agent-profiles/agent-profiles.service.d.ts +85 -0
- package/backend/dist/agent-profiles/agent-profiles.service.js +48 -0
- package/backend/dist/agent-profiles/agent-profiles.service.js.map +1 -0
- package/backend/dist/agent-profiles/dto/create-agent-profile.dto.d.ts +9 -0
- package/backend/dist/agent-profiles/dto/create-agent-profile.dto.js +52 -0
- package/backend/dist/agent-profiles/dto/create-agent-profile.dto.js.map +1 -0
- package/backend/dist/agent-profiles/dto/update-agent-profile.dto.d.ts +5 -0
- package/backend/dist/agent-profiles/dto/update-agent-profile.dto.js +9 -0
- package/backend/dist/agent-profiles/dto/update-agent-profile.dto.js.map +1 -0
- package/backend/dist/app.controller.d.ts +10 -0
- package/backend/dist/app.controller.js +39 -0
- package/backend/dist/app.controller.js.map +1 -0
- package/backend/dist/app.module.d.ts +2 -0
- package/backend/dist/app.module.js +68 -0
- package/backend/dist/app.module.js.map +1 -0
- package/backend/dist/connector/connector.controller.d.ts +67 -0
- package/backend/dist/connector/connector.controller.js +150 -0
- package/backend/dist/connector/connector.controller.js.map +1 -0
- package/backend/dist/connector/connector.module.d.ts +2 -0
- package/backend/dist/connector/connector.module.js +28 -0
- package/backend/dist/connector/connector.module.js.map +1 -0
- package/backend/dist/connector/connector.service.d.ts +61 -0
- package/backend/dist/connector/connector.service.js +63 -0
- package/backend/dist/connector/connector.service.js.map +1 -0
- package/backend/dist/connector/dto/oauth-confirm.dto.d.ts +4 -0
- package/backend/dist/connector/dto/oauth-confirm.dto.js +25 -0
- package/backend/dist/connector/dto/oauth-confirm.dto.js.map +1 -0
- package/backend/dist/connector/dto/update-connector.dto.d.ts +5 -0
- package/backend/dist/connector/dto/update-connector.dto.js +9 -0
- package/backend/dist/connector/dto/update-connector.dto.js.map +1 -0
- package/backend/dist/connector/dto/upsert-connector.dto.d.ts +6 -0
- package/backend/dist/connector/dto/upsert-connector.dto.js +35 -0
- package/backend/dist/connector/dto/upsert-connector.dto.js.map +1 -0
- package/backend/dist/connector/providers/google/gmail.service.d.ts +31 -0
- package/backend/dist/connector/providers/google/gmail.service.js +114 -0
- package/backend/dist/connector/providers/google/gmail.service.js.map +1 -0
- package/backend/dist/connector/providers/google/google-calendar.service.d.ts +37 -0
- package/backend/dist/connector/providers/google/google-calendar.service.js +105 -0
- package/backend/dist/connector/providers/google/google-calendar.service.js.map +1 -0
- package/backend/dist/connector/providers/google/google-drive.service.d.ts +22 -0
- package/backend/dist/connector/providers/google/google-drive.service.js +130 -0
- package/backend/dist/connector/providers/google/google-drive.service.js.map +1 -0
- package/backend/dist/connector/providers/google/google-oauth.service.d.ts +23 -0
- package/backend/dist/connector/providers/google/google-oauth.service.js +74 -0
- package/backend/dist/connector/providers/google/google-oauth.service.js.map +1 -0
- package/backend/dist/connector/providers/google/google-sheets.service.d.ts +29 -0
- package/backend/dist/connector/providers/google/google-sheets.service.js +246 -0
- package/backend/dist/connector/providers/google/google-sheets.service.js.map +1 -0
- package/backend/dist/cowork/cowork.controller.d.ts +37 -0
- package/backend/dist/cowork/cowork.controller.js +127 -0
- package/backend/dist/cowork/cowork.controller.js.map +1 -0
- package/backend/dist/cowork/cowork.module.d.ts +2 -0
- package/backend/dist/cowork/cowork.module.js +26 -0
- package/backend/dist/cowork/cowork.module.js.map +1 -0
- package/backend/dist/cowork/cowork.service.d.ts +40 -0
- package/backend/dist/cowork/cowork.service.js +116 -0
- package/backend/dist/cowork/cowork.service.js.map +1 -0
- package/backend/dist/cowork/dto/set-project.dto.d.ts +3 -0
- package/backend/dist/cowork/dto/set-project.dto.js +21 -0
- package/backend/dist/cowork/dto/set-project.dto.js.map +1 -0
- package/backend/dist/excel/excel.module.d.ts +2 -0
- package/backend/dist/excel/excel.module.js +26 -0
- package/backend/dist/excel/excel.module.js.map +1 -0
- package/backend/dist/excel/excel.service.d.ts +33 -0
- package/backend/dist/excel/excel.service.js +204 -0
- package/backend/dist/excel/excel.service.js.map +1 -0
- package/backend/dist/excel/executors/excel-add-sheet.executor.d.ts +12 -0
- package/backend/dist/excel/executors/excel-add-sheet.executor.js +64 -0
- package/backend/dist/excel/executors/excel-add-sheet.executor.js.map +1 -0
- package/backend/dist/excel/executors/excel-chart.executor.d.ts +12 -0
- package/backend/dist/excel/executors/excel-chart.executor.js +68 -0
- package/backend/dist/excel/executors/excel-chart.executor.js.map +1 -0
- package/backend/dist/excel/executors/list-excel-sheets.executor.d.ts +8 -0
- package/backend/dist/excel/executors/list-excel-sheets.executor.js +38 -0
- package/backend/dist/excel/executors/list-excel-sheets.executor.js.map +1 -0
- package/backend/dist/excel/executors/read-excel.executor.d.ts +8 -0
- package/backend/dist/excel/executors/read-excel.executor.js +40 -0
- package/backend/dist/excel/executors/read-excel.executor.js.map +1 -0
- package/backend/dist/excel/executors/write-excel.executor.d.ts +12 -0
- package/backend/dist/excel/executors/write-excel.executor.js +66 -0
- package/backend/dist/excel/executors/write-excel.executor.js.map +1 -0
- package/backend/dist/files/files.controller.d.ts +8 -0
- package/backend/dist/files/files.controller.js +53 -0
- package/backend/dist/files/files.controller.js.map +1 -0
- package/backend/dist/files/files.module.d.ts +2 -0
- package/backend/dist/files/files.module.js +20 -0
- package/backend/dist/files/files.module.js.map +1 -0
- package/backend/dist/http-exception.filter.d.ts +4 -0
- package/backend/dist/http-exception.filter.js +32 -0
- package/backend/dist/http-exception.filter.js.map +1 -0
- package/backend/dist/knowledge/dto/search.dto.d.ts +3 -0
- package/backend/dist/knowledge/dto/search.dto.js +21 -0
- package/backend/dist/knowledge/dto/search.dto.js.map +1 -0
- package/backend/dist/knowledge/knowledge.controller.d.ts +38 -0
- package/backend/dist/knowledge/knowledge.controller.js +91 -0
- package/backend/dist/knowledge/knowledge.controller.js.map +1 -0
- package/backend/dist/knowledge/knowledge.module.d.ts +2 -0
- package/backend/dist/knowledge/knowledge.module.js +25 -0
- package/backend/dist/knowledge/knowledge.module.js.map +1 -0
- package/backend/dist/knowledge/knowledge.service.d.ts +103 -0
- package/backend/dist/knowledge/knowledge.service.js +379 -0
- package/backend/dist/knowledge/knowledge.service.js.map +1 -0
- package/backend/dist/main.d.ts +1 -0
- package/backend/dist/main.js +33 -0
- package/backend/dist/main.js.map +1 -0
- package/backend/dist/memory/dto/create-memory.dto.d.ts +6 -0
- package/backend/dist/memory/dto/create-memory.dto.js +34 -0
- package/backend/dist/memory/dto/create-memory.dto.js.map +1 -0
- package/backend/dist/memory/dto/search-memory.dto.d.ts +5 -0
- package/backend/dist/memory/dto/search-memory.dto.js +32 -0
- package/backend/dist/memory/dto/search-memory.dto.js.map +1 -0
- package/backend/dist/memory/dto/update-memory.dto.d.ts +5 -0
- package/backend/dist/memory/dto/update-memory.dto.js +9 -0
- package/backend/dist/memory/dto/update-memory.dto.js.map +1 -0
- package/backend/dist/memory/memory-extraction.service.d.ts +19 -0
- package/backend/dist/memory/memory-extraction.service.js +87 -0
- package/backend/dist/memory/memory-extraction.service.js.map +1 -0
- package/backend/dist/memory/memory.constants.d.ts +9 -0
- package/backend/dist/memory/memory.constants.js +13 -0
- package/backend/dist/memory/memory.constants.js.map +1 -0
- package/backend/dist/memory/memory.controller.d.ts +53 -0
- package/backend/dist/memory/memory.controller.js +81 -0
- package/backend/dist/memory/memory.controller.js.map +1 -0
- package/backend/dist/memory/memory.gateway.d.ts +8 -0
- package/backend/dist/memory/memory.gateway.js +37 -0
- package/backend/dist/memory/memory.gateway.js.map +1 -0
- package/backend/dist/memory/memory.module.d.ts +2 -0
- package/backend/dist/memory/memory.module.js +25 -0
- package/backend/dist/memory/memory.module.js.map +1 -0
- package/backend/dist/memory/memory.service.d.ts +70 -0
- package/backend/dist/memory/memory.service.js +144 -0
- package/backend/dist/memory/memory.service.js.map +1 -0
- package/backend/dist/mode-policy/mode-policy.config.d.ts +20 -0
- package/backend/dist/mode-policy/mode-policy.config.js +17 -0
- package/backend/dist/mode-policy/mode-policy.config.js.map +1 -0
- package/backend/dist/mode-policy/mode-policy.module.d.ts +2 -0
- package/backend/dist/mode-policy/mode-policy.module.js +21 -0
- package/backend/dist/mode-policy/mode-policy.module.js.map +1 -0
- package/backend/dist/mode-policy/mode-policy.service.d.ts +18 -0
- package/backend/dist/mode-policy/mode-policy.service.js +66 -0
- package/backend/dist/mode-policy/mode-policy.service.js.map +1 -0
- package/backend/dist/notes/dto/create-note.dto.d.ts +4 -0
- package/backend/dist/notes/dto/create-note.dto.js +27 -0
- package/backend/dist/notes/dto/create-note.dto.js.map +1 -0
- package/backend/dist/notes/dto/update-note.dto.d.ts +5 -0
- package/backend/dist/notes/dto/update-note.dto.js +9 -0
- package/backend/dist/notes/dto/update-note.dto.js.map +1 -0
- package/backend/dist/notes/notes.controller.d.ts +35 -0
- package/backend/dist/notes/notes.controller.js +70 -0
- package/backend/dist/notes/notes.controller.js.map +1 -0
- package/backend/dist/notes/notes.gateway.d.ts +8 -0
- package/backend/dist/notes/notes.gateway.js +37 -0
- package/backend/dist/notes/notes.gateway.js.map +1 -0
- package/backend/dist/notes/notes.module.d.ts +2 -0
- package/backend/dist/notes/notes.module.js +24 -0
- package/backend/dist/notes/notes.module.js.map +1 -0
- package/backend/dist/notes/notes.service.d.ts +45 -0
- package/backend/dist/notes/notes.service.js +57 -0
- package/backend/dist/notes/notes.service.js.map +1 -0
- package/backend/dist/plans/plans.controller.d.ts +100 -0
- package/backend/dist/plans/plans.controller.js +80 -0
- package/backend/dist/plans/plans.controller.js.map +1 -0
- package/backend/dist/plans/plans.module.d.ts +2 -0
- package/backend/dist/plans/plans.module.js +23 -0
- package/backend/dist/plans/plans.module.js.map +1 -0
- package/backend/dist/plans/plans.service.d.ts +141 -0
- package/backend/dist/plans/plans.service.js +94 -0
- package/backend/dist/plans/plans.service.js.map +1 -0
- package/backend/dist/prisma/prisma.module.d.ts +2 -0
- package/backend/dist/prisma/prisma.module.js +22 -0
- package/backend/dist/prisma/prisma.module.js.map +1 -0
- package/backend/dist/prisma/prisma.service.d.ts +6 -0
- package/backend/dist/prisma/prisma.service.js +24 -0
- package/backend/dist/prisma/prisma.service.js.map +1 -0
- package/backend/dist/providers/dto/create-provider-model.dto.d.ts +3 -0
- package/backend/dist/providers/dto/create-provider-model.dto.js +22 -0
- package/backend/dist/providers/dto/create-provider-model.dto.js.map +1 -0
- package/backend/dist/providers/dto/create-provider.dto.d.ts +6 -0
- package/backend/dist/providers/dto/create-provider.dto.js +37 -0
- package/backend/dist/providers/dto/create-provider.dto.js.map +1 -0
- package/backend/dist/providers/dto/update-provider.dto.d.ts +5 -0
- package/backend/dist/providers/dto/update-provider.dto.js +9 -0
- package/backend/dist/providers/dto/update-provider.dto.js.map +1 -0
- package/backend/dist/providers/providers.controller.d.ts +60 -0
- package/backend/dist/providers/providers.controller.js +113 -0
- package/backend/dist/providers/providers.controller.js.map +1 -0
- package/backend/dist/providers/providers.module.d.ts +2 -0
- package/backend/dist/providers/providers.module.js +23 -0
- package/backend/dist/providers/providers.module.js.map +1 -0
- package/backend/dist/providers/providers.service.d.ts +86 -0
- package/backend/dist/providers/providers.service.js +100 -0
- package/backend/dist/providers/providers.service.js.map +1 -0
- package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.d.ts +13 -0
- package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.js +81 -0
- package/backend/dist/schedule-tasks/dto/create-schedule-task.dto.js.map +1 -0
- package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.d.ts +5 -0
- package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.js +9 -0
- package/backend/dist/schedule-tasks/dto/update-schedule-task.dto.js.map +1 -0
- package/backend/dist/schedule-tasks/schedule-cron.service.d.ts +8 -0
- package/backend/dist/schedule-tasks/schedule-cron.service.js +50 -0
- package/backend/dist/schedule-tasks/schedule-cron.service.js.map +1 -0
- package/backend/dist/schedule-tasks/schedule-runner.service.d.ts +25 -0
- package/backend/dist/schedule-tasks/schedule-runner.service.js +109 -0
- package/backend/dist/schedule-tasks/schedule-runner.service.js.map +1 -0
- package/backend/dist/schedule-tasks/schedule-tasks.controller.d.ts +108 -0
- package/backend/dist/schedule-tasks/schedule-tasks.controller.js +85 -0
- package/backend/dist/schedule-tasks/schedule-tasks.controller.js.map +1 -0
- package/backend/dist/schedule-tasks/schedule-tasks.module.d.ts +2 -0
- package/backend/dist/schedule-tasks/schedule-tasks.module.js +32 -0
- package/backend/dist/schedule-tasks/schedule-tasks.module.js.map +1 -0
- package/backend/dist/schedule-tasks/schedule-tasks.service.d.ts +141 -0
- package/backend/dist/schedule-tasks/schedule-tasks.service.js +80 -0
- package/backend/dist/schedule-tasks/schedule-tasks.service.js.map +1 -0
- package/backend/dist/sessions/sessions.controller.d.ts +40 -0
- package/backend/dist/sessions/sessions.controller.js +75 -0
- package/backend/dist/sessions/sessions.controller.js.map +1 -0
- package/backend/dist/sessions/sessions.module.d.ts +2 -0
- package/backend/dist/sessions/sessions.module.js +23 -0
- package/backend/dist/sessions/sessions.module.js.map +1 -0
- package/backend/dist/sessions/sessions.service.d.ts +55 -0
- package/backend/dist/sessions/sessions.service.js +73 -0
- package/backend/dist/sessions/sessions.service.js.map +1 -0
- package/backend/dist/settings/settings.controller.d.ts +14 -0
- package/backend/dist/settings/settings.controller.js +56 -0
- package/backend/dist/settings/settings.controller.js.map +1 -0
- package/backend/dist/settings/settings.module.d.ts +2 -0
- package/backend/dist/settings/settings.module.js +24 -0
- package/backend/dist/settings/settings.module.js.map +1 -0
- package/backend/dist/settings/settings.service.d.ts +10 -0
- package/backend/dist/settings/settings.service.js +49 -0
- package/backend/dist/settings/settings.service.js.map +1 -0
- package/backend/dist/tools/executors/convert-note-to-task.executor.d.ts +12 -0
- package/backend/dist/tools/executors/convert-note-to-task.executor.js +59 -0
- package/backend/dist/tools/executors/convert-note-to-task.executor.js.map +1 -0
- package/backend/dist/tools/executors/create-note.executor.d.ts +8 -0
- package/backend/dist/tools/executors/create-note.executor.js +39 -0
- package/backend/dist/tools/executors/create-note.executor.js.map +1 -0
- package/backend/dist/tools/executors/create-plan.executor.d.ts +8 -0
- package/backend/dist/tools/executors/create-plan.executor.js +45 -0
- package/backend/dist/tools/executors/create-plan.executor.js.map +1 -0
- package/backend/dist/tools/executors/create-task.executor.d.ts +10 -0
- package/backend/dist/tools/executors/create-task.executor.js +53 -0
- package/backend/dist/tools/executors/create-task.executor.js.map +1 -0
- package/backend/dist/tools/executors/delete-note.executor.d.ts +8 -0
- package/backend/dist/tools/executors/delete-note.executor.js +38 -0
- package/backend/dist/tools/executors/delete-note.executor.js.map +1 -0
- package/backend/dist/tools/executors/delete-tasks.executor.d.ts +8 -0
- package/backend/dist/tools/executors/delete-tasks.executor.js +33 -0
- package/backend/dist/tools/executors/delete-tasks.executor.js.map +1 -0
- package/backend/dist/tools/executors/get-task.executor.d.ts +8 -0
- package/backend/dist/tools/executors/get-task.executor.js +44 -0
- package/backend/dist/tools/executors/get-task.executor.js.map +1 -0
- package/backend/dist/tools/executors/glob.executor.d.ts +10 -0
- package/backend/dist/tools/executors/glob.executor.js +82 -0
- package/backend/dist/tools/executors/glob.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-calendar-availability.executor.d.ts +23 -0
- package/backend/dist/tools/executors/google-calendar-availability.executor.js +46 -0
- package/backend/dist/tools/executors/google-calendar-availability.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-calendar-create.executor.d.ts +42 -0
- package/backend/dist/tools/executors/google-calendar-create.executor.js +48 -0
- package/backend/dist/tools/executors/google-calendar-create.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-calendar-list.executor.d.ts +22 -0
- package/backend/dist/tools/executors/google-calendar-list.executor.js +45 -0
- package/backend/dist/tools/executors/google-calendar-list.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-calendar-update.executor.d.ts +31 -0
- package/backend/dist/tools/executors/google-calendar-update.executor.js +50 -0
- package/backend/dist/tools/executors/google-calendar-update.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-drive-create-folder.executor.d.ts +23 -0
- package/backend/dist/tools/executors/google-drive-create-folder.executor.js +44 -0
- package/backend/dist/tools/executors/google-drive-create-folder.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-drive-list.executor.d.ts +18 -0
- package/backend/dist/tools/executors/google-drive-list.executor.js +44 -0
- package/backend/dist/tools/executors/google-drive-list.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-drive-read.executor.d.ts +19 -0
- package/backend/dist/tools/executors/google-drive-read.executor.js +48 -0
- package/backend/dist/tools/executors/google-drive-read.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-drive-search.executor.d.ts +23 -0
- package/backend/dist/tools/executors/google-drive-search.executor.js +46 -0
- package/backend/dist/tools/executors/google-drive-search.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-drive-upload.executor.d.ts +30 -0
- package/backend/dist/tools/executors/google-drive-upload.executor.js +49 -0
- package/backend/dist/tools/executors/google-drive-upload.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-gmail-draft.executor.d.ts +30 -0
- package/backend/dist/tools/executors/google-gmail-draft.executor.js +45 -0
- package/backend/dist/tools/executors/google-gmail-draft.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-gmail-labels.executor.d.ts +13 -0
- package/backend/dist/tools/executors/google-gmail-labels.executor.js +39 -0
- package/backend/dist/tools/executors/google-gmail-labels.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-gmail-read.executor.d.ts +19 -0
- package/backend/dist/tools/executors/google-gmail-read.executor.js +43 -0
- package/backend/dist/tools/executors/google-gmail-read.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-gmail-search.executor.d.ts +23 -0
- package/backend/dist/tools/executors/google-gmail-search.executor.js +46 -0
- package/backend/dist/tools/executors/google-gmail-search.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-gmail-send.executor.d.ts +44 -0
- package/backend/dist/tools/executors/google-gmail-send.executor.js +47 -0
- package/backend/dist/tools/executors/google-gmail-send.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-add-tab.executor.d.ts +23 -0
- package/backend/dist/tools/executors/google-sheets-add-tab.executor.js +44 -0
- package/backend/dist/tools/executors/google-sheets-add-tab.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-append.executor.d.ts +30 -0
- package/backend/dist/tools/executors/google-sheets-append.executor.js +45 -0
- package/backend/dist/tools/executors/google-sheets-append.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-chart.executor.d.ts +40 -0
- package/backend/dist/tools/executors/google-sheets-chart.executor.js +48 -0
- package/backend/dist/tools/executors/google-sheets-chart.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-create.executor.d.ts +27 -0
- package/backend/dist/tools/executors/google-sheets-create.executor.js +44 -0
- package/backend/dist/tools/executors/google-sheets-create.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-format.executor.d.ts +57 -0
- package/backend/dist/tools/executors/google-sheets-format.executor.js +58 -0
- package/backend/dist/tools/executors/google-sheets-format.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-list-tabs.executor.d.ts +19 -0
- package/backend/dist/tools/executors/google-sheets-list-tabs.executor.js +43 -0
- package/backend/dist/tools/executors/google-sheets-list-tabs.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-read.executor.d.ts +27 -0
- package/backend/dist/tools/executors/google-sheets-read.executor.js +45 -0
- package/backend/dist/tools/executors/google-sheets-read.executor.js.map +1 -0
- package/backend/dist/tools/executors/google-sheets-update.executor.d.ts +34 -0
- package/backend/dist/tools/executors/google-sheets-update.executor.js +46 -0
- package/backend/dist/tools/executors/google-sheets-update.executor.js.map +1 -0
- package/backend/dist/tools/executors/grep.executor.d.ts +9 -0
- package/backend/dist/tools/executors/grep.executor.js +82 -0
- package/backend/dist/tools/executors/grep.executor.js.map +1 -0
- package/backend/dist/tools/executors/list-directory.executor.d.ts +8 -0
- package/backend/dist/tools/executors/list-directory.executor.js +37 -0
- package/backend/dist/tools/executors/list-directory.executor.js.map +1 -0
- package/backend/dist/tools/executors/list-notes.executor.d.ts +8 -0
- package/backend/dist/tools/executors/list-notes.executor.js +37 -0
- package/backend/dist/tools/executors/list-notes.executor.js.map +1 -0
- package/backend/dist/tools/executors/list-tasks.executor.d.ts +8 -0
- package/backend/dist/tools/executors/list-tasks.executor.js +32 -0
- package/backend/dist/tools/executors/list-tasks.executor.js.map +1 -0
- package/backend/dist/tools/executors/read-file.executor.d.ts +8 -0
- package/backend/dist/tools/executors/read-file.executor.js +44 -0
- package/backend/dist/tools/executors/read-file.executor.js.map +1 -0
- package/backend/dist/tools/executors/resume-plan.executor.d.ts +8 -0
- package/backend/dist/tools/executors/resume-plan.executor.js +58 -0
- package/backend/dist/tools/executors/resume-plan.executor.js.map +1 -0
- package/backend/dist/tools/executors/run-command.executor.d.ts +5 -0
- package/backend/dist/tools/executors/run-command.executor.js +55 -0
- package/backend/dist/tools/executors/run-command.executor.js.map +1 -0
- package/backend/dist/tools/executors/search-knowledge.executor.d.ts +8 -0
- package/backend/dist/tools/executors/search-knowledge.executor.js +33 -0
- package/backend/dist/tools/executors/search-knowledge.executor.js.map +1 -0
- package/backend/dist/tools/executors/spawn-subagent.executor.d.ts +5 -0
- package/backend/dist/tools/executors/spawn-subagent.executor.js +27 -0
- package/backend/dist/tools/executors/spawn-subagent.executor.js.map +1 -0
- package/backend/dist/tools/executors/tool-executor.interface.d.ts +8 -0
- package/backend/dist/tools/executors/tool-executor.interface.js +3 -0
- package/backend/dist/tools/executors/tool-executor.interface.js.map +1 -0
- package/backend/dist/tools/executors/update-note.executor.d.ts +8 -0
- package/backend/dist/tools/executors/update-note.executor.js +43 -0
- package/backend/dist/tools/executors/update-note.executor.js.map +1 -0
- package/backend/dist/tools/executors/update-task.executor.d.ts +8 -0
- package/backend/dist/tools/executors/update-task.executor.js +50 -0
- package/backend/dist/tools/executors/update-task.executor.js.map +1 -0
- package/backend/dist/tools/executors/web-fetch.executor.d.ts +8 -0
- package/backend/dist/tools/executors/web-fetch.executor.js +57 -0
- package/backend/dist/tools/executors/web-fetch.executor.js.map +1 -0
- package/backend/dist/tools/executors/web-search.executor.d.ts +8 -0
- package/backend/dist/tools/executors/web-search.executor.js +70 -0
- package/backend/dist/tools/executors/web-search.executor.js.map +1 -0
- package/backend/dist/tools/executors/write-file.executor.d.ts +10 -0
- package/backend/dist/tools/executors/write-file.executor.js +60 -0
- package/backend/dist/tools/executors/write-file.executor.js.map +1 -0
- package/backend/dist/tools/tools.controller.d.ts +37 -0
- package/backend/dist/tools/tools.controller.js +63 -0
- package/backend/dist/tools/tools.controller.js.map +1 -0
- package/backend/dist/tools/tools.module.d.ts +2 -0
- package/backend/dist/tools/tools.module.js +128 -0
- package/backend/dist/tools/tools.module.js.map +1 -0
- package/backend/dist/tools/tools.service.d.ts +55 -0
- package/backend/dist/tools/tools.service.js +49 -0
- package/backend/dist/tools/tools.service.js.map +1 -0
- package/backend/dist/usage/dto/create-usage.dto.d.ts +8 -0
- package/backend/dist/usage/dto/create-usage.dto.js +45 -0
- package/backend/dist/usage/dto/create-usage.dto.js.map +1 -0
- package/backend/dist/usage/usage.controller.d.ts +19 -0
- package/backend/dist/usage/usage.controller.js +43 -0
- package/backend/dist/usage/usage.controller.js.map +1 -0
- package/backend/dist/usage/usage.module.d.ts +2 -0
- package/backend/dist/usage/usage.module.js +24 -0
- package/backend/dist/usage/usage.module.js.map +1 -0
- package/backend/dist/usage/usage.service.d.ts +30 -0
- package/backend/dist/usage/usage.service.js +61 -0
- package/backend/dist/usage/usage.service.js.map +1 -0
- package/backend/dist/word/executors/edit-word.executor.d.ts +12 -0
- package/backend/dist/word/executors/edit-word.executor.js +65 -0
- package/backend/dist/word/executors/edit-word.executor.js.map +1 -0
- package/backend/dist/word/executors/read-word.executor.d.ts +10 -0
- package/backend/dist/word/executors/read-word.executor.js +49 -0
- package/backend/dist/word/executors/read-word.executor.js.map +1 -0
- package/backend/dist/word/executors/write-word.executor.d.ts +12 -0
- package/backend/dist/word/executors/write-word.executor.js +63 -0
- package/backend/dist/word/executors/write-word.executor.js.map +1 -0
- package/backend/dist/word/word.module.d.ts +2 -0
- package/backend/dist/word/word.module.js +21 -0
- package/backend/dist/word/word.module.js.map +1 -0
- package/backend/dist/word/word.service.d.ts +22 -0
- package/backend/dist/word/word.service.js +155 -0
- package/backend/dist/word/word.service.js.map +1 -0
- package/backend/dist/workspace/dto/watch.dto.d.ts +3 -0
- package/backend/dist/workspace/dto/watch.dto.js +22 -0
- package/backend/dist/workspace/dto/watch.dto.js.map +1 -0
- package/backend/dist/workspace/indexer.service.d.ts +24 -0
- package/backend/dist/workspace/indexer.service.js +109 -0
- package/backend/dist/workspace/indexer.service.js.map +1 -0
- package/backend/dist/workspace/workspace-watcher.service.d.ts +20 -0
- package/backend/dist/workspace/workspace-watcher.service.js +73 -0
- package/backend/dist/workspace/workspace-watcher.service.js.map +1 -0
- package/backend/dist/workspace/workspace.controller.d.ts +21 -0
- package/backend/dist/workspace/workspace.controller.js +72 -0
- package/backend/dist/workspace/workspace.controller.js.map +1 -0
- package/backend/dist/workspace/workspace.module.d.ts +2 -0
- package/backend/dist/workspace/workspace.module.js +27 -0
- package/backend/dist/workspace/workspace.module.js.map +1 -0
- package/backend/dist/workspace/workspace.service.d.ts +16 -0
- package/backend/dist/workspace/workspace.service.js +70 -0
- package/backend/dist/workspace/workspace.service.js.map +1 -0
- package/backend/package.json +80 -0
- package/backend/prisma/migrations/20260607051149_init/migration.sql +11 -0
- package/backend/prisma/migrations/20260607082131_add_settings/migration.sql +5 -0
- package/backend/prisma/migrations/20260607090628_add_knowledge_file/migration.sql +12 -0
- package/backend/prisma/migrations/20260607102620_add_sessions_chat_messages/migration.sql +17 -0
- package/backend/prisma/migrations/20260607160733_add_tool_fields_to_message/migration.sql +18 -0
- package/backend/prisma/migrations/20260608120000_add_providers/migration.sql +19 -0
- package/backend/prisma/migrations/20260608150513_add_tools/migration.sql +9 -0
- package/backend/prisma/migrations/20260608155121_add_tool_config/migration.sql +3 -0
- package/backend/prisma/migrations/20260609044217_add_error_message/migration.sql +2 -0
- package/backend/prisma/migrations/20260609110505_add_notes/migration.sql +8 -0
- package/backend/prisma/migrations/20260609151214_add_plan_tables/migration.sql +21 -0
- package/backend/prisma/migrations/20260610100714_add_agent_file/migration.sql +9 -0
- package/backend/prisma/migrations/20260611085424_add_session_mode/migration.sql +2 -0
- package/backend/prisma/migrations/20260611120000_add_memory_model/migration.sql +13 -0
- package/backend/prisma/migrations/20260612120000_add_usage_record/migration.sql +12 -0
- package/backend/prisma/migrations/20260612130000_add_project_model/migration.sql +7 -0
- package/backend/prisma/migrations/20260612130000_add_project_model/migration_lock.toml +5 -0
- package/backend/prisma/migrations/20260612140000_add_connector_model/migration.sql +9 -0
- package/backend/prisma/migrations/20260612173937_add_connector_services_account/migration.sql +24 -0
- package/backend/prisma/migrations/20260612181017_remove_connector_services/migration.sql +23 -0
- package/backend/prisma/migrations/20260613135109_add_schedule_tasks/migration.sql +45 -0
- package/backend/prisma/migrations/20260613140915_add_cron_days_of_week/migration.sql +2 -0
- package/backend/prisma/migrations/20260613142809_add_timezone/migration.sql +2 -0
- package/backend/prisma/migrations/20260613163408_remove_task_model/migration.sql +10 -0
- package/backend/prisma/migrations/20260620120025_add_agent_profile/migration.sql +17 -0
- package/backend/prisma/migrations/migration_lock.toml +3 -0
- package/backend/prisma/schema.prisma +208 -0
- package/backend/prisma/seed.cjs +132 -0
- package/bin/workspace-cli.js +296 -0
- package/frontend/dist/assets/index-DRtpgPPc.css +1 -0
- package/frontend/dist/assets/index-Dn28_pkr.js +101 -0
- package/frontend/dist/index.html +19 -0
- package/frontend/dist/logo.png +0 -0
- package/package.json +54 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { spawn, execSync, exec } = require('child_process');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const http = require('http');
|
|
6
|
+
|
|
7
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
8
|
+
const CWD = process.cwd();
|
|
9
|
+
const DATA_DIR = path.resolve(CWD, 'workspace_data');
|
|
10
|
+
const DB_PATH = path.join(DATA_DIR, 'dev.db');
|
|
11
|
+
|
|
12
|
+
const BACKEND_ENTRY = path.join(ROOT, 'backend', 'dist', 'main.js');
|
|
13
|
+
|
|
14
|
+
function log(tag, msg) {
|
|
15
|
+
console.log(`[${tag}] ${msg}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function createDataDir() {
|
|
19
|
+
if (!fs.existsSync(DATA_DIR)) {
|
|
20
|
+
fs.mkdirSync(DATA_DIR, { recursive: true });
|
|
21
|
+
log('init', 'Created workspace_data directory');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function createEnv() {
|
|
26
|
+
const envPath = path.join(CWD, '.env');
|
|
27
|
+
if (fs.existsSync(envPath)) return;
|
|
28
|
+
const examplePath = path.join(ROOT, 'backend', '.env.example');
|
|
29
|
+
if (fs.existsSync(examplePath)) {
|
|
30
|
+
log('init', 'Creating .env from .env.example — edit it to match your setup');
|
|
31
|
+
fs.copyFileSync(examplePath, envPath);
|
|
32
|
+
} else {
|
|
33
|
+
log('init', 'Creating default .env');
|
|
34
|
+
const defaults = [
|
|
35
|
+
'PORT=17135',
|
|
36
|
+
'OLLAMA_URL=http://localhost:11434',
|
|
37
|
+
'ACTIVE_PROVIDER=ollama',
|
|
38
|
+
'EMBED_MODEL=nomic-embed-text',
|
|
39
|
+
'SUMMARY_MODEL=llama3.2',
|
|
40
|
+
'UPLOAD_DIR=./workspace_data/uploads',
|
|
41
|
+
'APP_URL=http://localhost:17135',
|
|
42
|
+
'',
|
|
43
|
+
'# Google OAuth credentials (optional)',
|
|
44
|
+
'GOOGLE_GMAIL_CLIENT_ID=',
|
|
45
|
+
'GOOGLE_GMAIL_CLIENT_SECRET=',
|
|
46
|
+
'GOOGLE_CALENDAR_CLIENT_ID=',
|
|
47
|
+
'GOOGLE_CALENDAR_CLIENT_SECRET=',
|
|
48
|
+
'GOOGLE_DRIVE_CLIENT_ID=',
|
|
49
|
+
'GOOGLE_DRIVE_CLIENT_SECRET=',
|
|
50
|
+
'GOOGLE_SHEETS_CLIENT_ID=',
|
|
51
|
+
'GOOGLE_SHEETS_CLIENT_SECRET=',
|
|
52
|
+
].join('\n');
|
|
53
|
+
fs.writeFileSync(envPath, defaults);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function needsMigration() {
|
|
58
|
+
return !fs.existsSync(DB_PATH);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function runMigrations() {
|
|
62
|
+
const schemaPath = path.join(ROOT, 'backend', 'prisma', 'schema.prisma');
|
|
63
|
+
const backendDir = path.join(ROOT, 'backend');
|
|
64
|
+
const env = { ...process.env, DATABASE_URL: `file:${DB_PATH}` };
|
|
65
|
+
|
|
66
|
+
log('init', 'Applying database migrations...');
|
|
67
|
+
execSync(`npx prisma migrate deploy --schema="${schemaPath}"`, {
|
|
68
|
+
cwd: backendDir, stdio: 'inherit', env,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
log('init', 'Generating Prisma client...');
|
|
72
|
+
execSync(`npx prisma generate --schema="${schemaPath}"`, {
|
|
73
|
+
cwd: backendDir, stdio: 'inherit', env,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
log('init', 'Seeding database...');
|
|
77
|
+
execSync('npx prisma db seed', {
|
|
78
|
+
cwd: backendDir, stdio: 'inherit', env,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function getPort() {
|
|
83
|
+
return process.env.PORT ?? '17135';
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function resolveEnv() {
|
|
87
|
+
const envPath = path.join(CWD, '.env');
|
|
88
|
+
if (fs.existsSync(envPath)) {
|
|
89
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
90
|
+
for (const line of content.split('\n')) {
|
|
91
|
+
const trimmed = line.trim();
|
|
92
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
93
|
+
const eqIdx = trimmed.indexOf('=');
|
|
94
|
+
if (eqIdx === -1) continue;
|
|
95
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
96
|
+
const val = trimmed.slice(eqIdx + 1).trim();
|
|
97
|
+
if (key && !process.env[key]) {
|
|
98
|
+
process.env[key] = val;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function waitForServer(port, maxRetries = 60) {
|
|
105
|
+
return new Promise((resolve, reject) => {
|
|
106
|
+
let retries = 0;
|
|
107
|
+
const check = () => {
|
|
108
|
+
const req = http.get(`http://localhost:${port}/api/health`, (res) => {
|
|
109
|
+
let data = '';
|
|
110
|
+
res.on('data', (chunk) => { data += chunk; });
|
|
111
|
+
res.on('end', () => {
|
|
112
|
+
try {
|
|
113
|
+
const json = JSON.parse(data);
|
|
114
|
+
if (json.status === 'ok') return resolve();
|
|
115
|
+
} catch {}
|
|
116
|
+
retry();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
req.on('error', retry);
|
|
120
|
+
req.setTimeout(2000, () => { req.destroy(); retry(); });
|
|
121
|
+
};
|
|
122
|
+
const retry = () => {
|
|
123
|
+
if (++retries >= maxRetries) {
|
|
124
|
+
return reject(new Error('Server did not start in time'));
|
|
125
|
+
}
|
|
126
|
+
setTimeout(check, 500);
|
|
127
|
+
};
|
|
128
|
+
check();
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function openBrowser(url) {
|
|
133
|
+
const platform = process.platform;
|
|
134
|
+
if (platform === 'win32') {
|
|
135
|
+
exec(`start "" "${url}"`);
|
|
136
|
+
} else if (platform === 'darwin') {
|
|
137
|
+
exec(`open "${url}"`);
|
|
138
|
+
} else {
|
|
139
|
+
exec(`xdg-open "${url}"`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async function cmdInit() {
|
|
144
|
+
createDataDir();
|
|
145
|
+
createEnv();
|
|
146
|
+
if (needsMigration()) {
|
|
147
|
+
runMigrations();
|
|
148
|
+
log('init', 'Setup complete');
|
|
149
|
+
} else {
|
|
150
|
+
log('init', 'Already initialized (dev.db exists)');
|
|
151
|
+
}
|
|
152
|
+
process.exit(0);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
async function cmdStudio() {
|
|
156
|
+
const noBrowser = process.argv.includes('--no-browser');
|
|
157
|
+
const port = getPort();
|
|
158
|
+
|
|
159
|
+
createDataDir();
|
|
160
|
+
createEnv();
|
|
161
|
+
if (needsMigration()) {
|
|
162
|
+
runMigrations();
|
|
163
|
+
}
|
|
164
|
+
resolveEnv();
|
|
165
|
+
|
|
166
|
+
const server = spawn('node', [BACKEND_ENTRY], {
|
|
167
|
+
stdio: 'inherit',
|
|
168
|
+
env: {
|
|
169
|
+
...process.env,
|
|
170
|
+
DATABASE_URL: `file:${DB_PATH}`,
|
|
171
|
+
PORT: port,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
server.on('error', (err) => {
|
|
176
|
+
console.error(err);
|
|
177
|
+
process.exit(1);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
log('studio', `Starting server on port ${port}...`);
|
|
181
|
+
try {
|
|
182
|
+
await waitForServer(port);
|
|
183
|
+
} catch {
|
|
184
|
+
log('studio', 'Warning: Could not confirm server readiness');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const url = `http://localhost:${port}`;
|
|
188
|
+
console.log('');
|
|
189
|
+
console.log(' ╔══════════════════════════════════════╗');
|
|
190
|
+
console.log(' ║ Agent Hub Studio ║');
|
|
191
|
+
console.log(' ╠══════════════════════════════════════╣');
|
|
192
|
+
console.log(` ║ URL: ${url.padEnd(33)}║`);
|
|
193
|
+
console.log(` ║ Port: ${port.padEnd(33)}║`);
|
|
194
|
+
console.log(' ╠══════════════════════════════════════╣');
|
|
195
|
+
console.log(' ║ Press Ctrl+C to stop ║');
|
|
196
|
+
console.log(' ╚══════════════════════════════════════╝');
|
|
197
|
+
console.log('');
|
|
198
|
+
|
|
199
|
+
if (!noBrowser) {
|
|
200
|
+
openBrowser(url);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const cleanup = () => {
|
|
204
|
+
log('studio', 'Shutting down...');
|
|
205
|
+
server.kill('SIGTERM');
|
|
206
|
+
setTimeout(() => process.exit(0), 1000);
|
|
207
|
+
};
|
|
208
|
+
process.on('SIGINT', cleanup);
|
|
209
|
+
process.on('SIGTERM', cleanup);
|
|
210
|
+
|
|
211
|
+
server.on('exit', (code) => process.exit(code ?? 0));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function getRegistryValue(key, name) {
|
|
215
|
+
return new Promise((resolve) => {
|
|
216
|
+
exec(`reg query "${key}" /v "${name}"`, (err, stdout) => {
|
|
217
|
+
if (err) return resolve(null);
|
|
218
|
+
const match = stdout.match(/REG_SZ\s+(.+)/);
|
|
219
|
+
resolve(match ? match[1].trim() : null);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
async function cmdAutoStart() {
|
|
225
|
+
const sub = process.argv[3];
|
|
226
|
+
const key = 'HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';
|
|
227
|
+
const valueName = 'AgentHubStudio';
|
|
228
|
+
const cliPath = path.resolve(__dirname, 'workspace-cli.js');
|
|
229
|
+
const cmd = `"${process.execPath}" "${cliPath}" studio --no-browser`;
|
|
230
|
+
|
|
231
|
+
if (sub === 'enable') {
|
|
232
|
+
exec(`reg add "${key}" /v "${valueName}" /t REG_SZ /d "${cmd}" /f`, (err) => {
|
|
233
|
+
if (err) {
|
|
234
|
+
console.error('Failed to enable auto-start:', err.message);
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
console.log('Auto-start enabled — Agent Hub Studio will start on Windows boot');
|
|
238
|
+
process.exit(0);
|
|
239
|
+
});
|
|
240
|
+
} else if (sub === 'disable') {
|
|
241
|
+
exec(`reg delete "${key}" /v "${valueName}" /f`, (err) => {
|
|
242
|
+
if (err && !err.message.includes('does not exist')) {
|
|
243
|
+
console.error('Failed to disable auto-start:', err.message);
|
|
244
|
+
process.exit(1);
|
|
245
|
+
}
|
|
246
|
+
console.log('Auto-start disabled');
|
|
247
|
+
process.exit(0);
|
|
248
|
+
});
|
|
249
|
+
} else if (sub === 'status') {
|
|
250
|
+
const val = await getRegistryValue(key, valueName);
|
|
251
|
+
if (val) {
|
|
252
|
+
console.log(`Auto-start: enabled (${val})`);
|
|
253
|
+
} else {
|
|
254
|
+
console.log('Auto-start: disabled');
|
|
255
|
+
}
|
|
256
|
+
process.exit(0);
|
|
257
|
+
} else {
|
|
258
|
+
console.log('Usage: agent-hub auto-start <enable|disable|status>');
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
async function main() {
|
|
264
|
+
const subcommand = process.argv[2];
|
|
265
|
+
if (!subcommand || subcommand === 'studio') {
|
|
266
|
+
await cmdStudio();
|
|
267
|
+
} else if (subcommand === 'init') {
|
|
268
|
+
await cmdInit();
|
|
269
|
+
} else if (subcommand === 'auto-start') {
|
|
270
|
+
await cmdAutoStart();
|
|
271
|
+
} else if (subcommand === '--help' || subcommand === 'help') {
|
|
272
|
+
console.log(`
|
|
273
|
+
Agent Hub Studio — CLI
|
|
274
|
+
|
|
275
|
+
Usage:
|
|
276
|
+
agent-hub Start Studio (server + dashboard)
|
|
277
|
+
agent-hub studio Same as above
|
|
278
|
+
agent-hub studio --no-browser Start server without opening browser
|
|
279
|
+
agent-hub init One-time setup (data dir, .env, migrations)
|
|
280
|
+
agent-hub auto-start enable Register Windows auto-start
|
|
281
|
+
agent-hub auto-start disable Remove Windows auto-start
|
|
282
|
+
agent-hub auto-start status Check auto-start status
|
|
283
|
+
agent-hub --help Show this help
|
|
284
|
+
`);
|
|
285
|
+
process.exit(0);
|
|
286
|
+
} else {
|
|
287
|
+
console.log(`Unknown command: ${subcommand}`);
|
|
288
|
+
console.log('Run "agent-hub --help" for usage');
|
|
289
|
+
process.exit(1);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
main().catch((err) => {
|
|
294
|
+
console.error(err);
|
|
295
|
+
process.exit(1);
|
|
296
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&display=swap";@import"https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.bottom-full{bottom:100%}.left-0{left:0}.right-0{right:0}.right-1\.5{right:.375rem}.top-0{top:0}.top-full{top:100%}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.m-1{margin:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-\[1\.125rem\]{height:1.125rem}.h-\[1\.75rem\]{height:1.75rem}.h-\[3rem\]{height:3rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.min-h-0{min-height:0px}.w-1{width:.25rem}.w-120{width:30rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-72{width:18rem}.w-8{width:2rem}.w-96{width:24rem}.w-\[1\.125rem\]{width:1.125rem}.w-\[32rem\]{width:32rem}.w-\[40rem\]{width:40rem}.w-\[48rem\]{width:48rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-60{max-width:15rem}.max-w-60rem{max-width:60rem}.max-w-\[120px\]{max-width:120px}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes dot-pulse{0%,to{opacity:.2}50%{opacity:1}}.animate-dot-pulse{animation:dot-pulse 1.2s ease-in-out infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-cyber-accent{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyber-accent\/10{border-color:#3b82f61a}.border-cyber-accent\/20{border-color:#3b82f633}.border-cyber-accent\/30{border-color:#3b82f64d}.border-cyber-accent\/40{border-color:#3b82f666}.border-cyber-accent\/5{border-color:#3b82f60d}.border-cyber-accent\/50{border-color:#3b82f680}.border-cyber-accent\/80{border-color:#3b82f6cc}.border-cyber-border,.border-cyber-code-border{--tw-border-opacity: 1;border-color:rgb(48 54 61 / var(--tw-border-opacity, 1))}.border-cyber-code-border\/50{border-color:#30363d80}.border-cyber-cyan\/30{border-color:#00d4ff4d}.border-cyber-cyan\/40{border-color:#00d4ff66}.border-cyber-green{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-cyber-green\/30{border-color:#22c55e4d}.border-cyber-green\/50{border-color:#22c55e80}.border-cyber-muted\/40{border-color:#8886}.border-cyber-orange{--tw-border-opacity: 1;border-color:rgb(255 165 0 / var(--tw-border-opacity, 1))}.border-cyber-orange\/50{border-color:#ffa50080}.border-cyber-orange\/60{border-color:#ffa50099}.border-red-400\/40{border-color:#f8717166}.border-red-400\/50{border-color:#f8717180}.bg-black\/60{background-color:#0009}.bg-cyber-accent{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-cyber-accent\/10{background-color:#3b82f61a}.bg-cyber-accent\/15{background-color:#3b82f626}.bg-cyber-accent\/20{background-color:#3b82f633}.bg-cyber-bg{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity, 1))}.bg-cyber-code-bg{--tw-bg-opacity: 1;background-color:rgb(13 17 23 / var(--tw-bg-opacity, 1))}.bg-cyber-code-border{--tw-bg-opacity: 1;background-color:rgb(48 54 61 / var(--tw-bg-opacity, 1))}.bg-cyber-dark{--tw-bg-opacity: 1;background-color:rgb(17 17 17 / var(--tw-bg-opacity, 1))}.bg-cyber-dark\/40{background-color:#1116}.bg-cyber-dark\/80{background-color:#111c}.bg-cyber-green{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-cyber-modal-bg{--tw-bg-opacity: 1;background-color:rgb(40 40 40 / var(--tw-bg-opacity, 1))}.bg-cyber-muted{--tw-bg-opacity: 1;background-color:rgb(136 136 136 / var(--tw-bg-opacity, 1))}.bg-cyber-orange{--tw-bg-opacity: 1;background-color:rgb(255 165 0 / var(--tw-bg-opacity, 1))}.bg-cyber-status{--tw-bg-opacity: 1;background-color:rgb(22 22 22 / var(--tw-bg-opacity, 1))}.bg-red-500\/80{background-color:#ef4444cc}.bg-transparent{background-color:transparent}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pr-5{padding-right:1.25rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-\[\'Press_Start_2P\'\]{font-family:"Press Start 2P"}.font-mono{font-family:JetBrains Mono,Fira Code,Courier New,monospace}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.leading-5{line-height:1.25rem}.leading-relaxed{line-height:1.625}.tracking-widest{letter-spacing:.1em}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-cyber-accent{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-cyber-accent\/30{color:#3b82f64d}.text-cyber-accent\/40{color:#3b82f666}.text-cyber-accent\/50{color:#3b82f680}.text-cyber-accent\/60{color:#3b82f699}.text-cyber-accent\/70{color:#3b82f6b3}.text-cyber-accent\/80{color:#3b82f6cc}.text-cyber-code-text{--tw-text-opacity: 1;color:rgb(230 237 243 / var(--tw-text-opacity, 1))}.text-cyber-cyan{--tw-text-opacity: 1;color:rgb(0 212 255 / var(--tw-text-opacity, 1))}.text-cyber-cyan\/70{color:#00d4ffb3}.text-cyber-green{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-cyber-muted{--tw-text-opacity: 1;color:rgb(136 136 136 / var(--tw-text-opacity, 1))}.text-cyber-muted\/40{color:#8886}.text-cyber-muted\/50{color:#88888880}.text-cyber-muted\/60{color:#8889}.text-cyber-muted\/80{color:#888c}.text-cyber-orange{--tw-text-opacity: 1;color:rgb(255 165 0 / var(--tw-text-opacity, 1))}.text-cyber-text{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-400\/40{color:#f8717166}.text-red-400\/80{color:#f87171cc}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-100\/60{color:#f1f5f999}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.placeholder-cyber-muted\/40::-moz-placeholder{color:#8886}.placeholder-cyber-muted\/40::placeholder{color:#8886}.caret-white{caret-color:#fff}.accent-cyber-accent{accent-color:#3B82F6}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-500{transition-duration:.5s}:root{--cyber-bg: #000000;--cyber-text: #EEEEEE;--cyber-muted: #888888;--cyber-accent: #3B82F6;--cyber-cyan: #00d4ff;--cyber-link: #58a6ff;--cyber-code-red: #f08383;--cyber-code-bg: #0d1117;--cyber-code-border: #30363d;--cyber-code-text: #e6edf3;--cyber-row: #161b22;--cyber-blockquote: #8b949e;--cyber-scrollbar-track: #141414;--cyber-accent-20: rgba(59, 130, 246, .2);--cyber-cyan-15: rgba(0, 212, 255, .15);--cyber-cyan-05: rgba(0, 212, 255, .05);--cyber-cyan-03: rgba(0, 212, 255, .03);--cyber-inline-code-bg: rgba(110, 118, 129, .4)}*{box-sizing:border-box}html,body,#app{margin:0;padding:0;height:100%;background-color:var(--cyber-bg);color:var(--cyber-text);font-size:16px;font-family:JetBrains Mono,Fira Code,Courier New,monospace}::-webkit-scrollbar{width:.25rem}::-webkit-scrollbar-track{background:var(--cyber-scrollbar-track)}::-webkit-scrollbar-thumb{background:var(--cyber-accent-20);border-radius:.125rem}.markdown-body{font-family:JetBrains Mono,Fira Code,Courier New,monospace}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--cyber-cyan);font-weight:600;margin:1rem 0 .5rem;padding-bottom:.375rem;border-bottom:1px solid var(--cyber-cyan-15)}.markdown-body a{color:var(--cyber-link);text-decoration:none}.markdown-body a:hover{text-decoration:underline}.markdown-body p{margin:0 0 .625rem;line-height:1.7}.markdown-body code{background:var(--cyber-inline-code-bg);color:var(--cyber-code-red);padding:.0625rem .375rem;border-radius:.25rem}.markdown-body pre{background:var(--cyber-code-bg);border:1px solid var(--cyber-code-border);border-radius:.25rem;padding:.75rem;margin:.75rem 0;overflow-x:auto}.markdown-body pre code{background:none;color:var(--cyber-code-text);padding:0;line-height:1.6}.markdown-body table{width:100%;border-collapse:collapse;margin:.75rem 0;border:1px solid var(--cyber-code-border)}.markdown-body th,.markdown-body td{border:1px solid var(--cyber-code-border);padding:.4375rem .625rem;text-align:left}.markdown-body th{background:var(--cyber-row);color:var(--cyber-cyan);font-weight:500}.markdown-body tr:nth-child(2n){background:var(--cyber-cyan-03)}.markdown-body blockquote{border-left:.1875rem solid var(--cyber-cyan);margin:.75rem 0;padding:.5rem .875rem;background:var(--cyber-cyan-05);color:var(--cyber-blockquote);border-radius:0 .25rem .25rem 0}.markdown-body ul,.markdown-body ol{margin:.5rem 0;padding-left:1.25rem;color:var(--cyber-code-text)}.markdown-body ul{list-style:disc}.markdown-body ol{list-style:decimal}.markdown-body li{margin:.1875rem 0}.markdown-body hr{border:none;border-top:1px solid var(--cyber-code-border);margin:1rem 0}.markdown-body img{max-width:100%;border-radius:.25rem}.markdown-body .citation{color:var(--cyber-orange, #FFA500);font-size:.75rem;opacity:.8;white-space:nowrap}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:border-cyber-accent\/30:hover{border-color:#3b82f64d}.hover\:border-cyber-accent\/40:hover{border-color:#3b82f666}.hover\:border-cyber-muted:hover{--tw-border-opacity: 1;border-color:rgb(136 136 136 / var(--tw-border-opacity, 1))}.hover\:bg-cyber-accent\/10:hover{background-color:#3b82f61a}.hover\:bg-cyber-accent\/20:hover{background-color:#3b82f633}.hover\:bg-cyber-accent\/25:hover{background-color:#3b82f640}.hover\:bg-cyber-accent\/5:hover{background-color:#3b82f60d}.hover\:bg-cyber-accent\/80:hover{background-color:#3b82f6cc}.hover\:bg-cyber-bg\/30:hover{background-color:#1e1e1e4d}.hover\:bg-cyber-cyan\/10:hover{background-color:#00d4ff1a}.hover\:bg-cyber-cyan\/20:hover{background-color:#00d4ff33}.hover\:bg-cyber-dark:hover{--tw-bg-opacity: 1;background-color:rgb(17 17 17 / var(--tw-bg-opacity, 1))}.hover\:bg-cyber-dark\/40:hover{background-color:#1116}.hover\:bg-cyber-green\/10:hover{background-color:#22c55e1a}.hover\:bg-cyber-green\/80:hover{background-color:#22c55ecc}.hover\:bg-cyber-row:hover{--tw-bg-opacity: 1;background-color:rgb(22 27 34 / var(--tw-bg-opacity, 1))}.hover\:bg-red-400\/10:hover{background-color:#f871711a}.hover\:bg-red-500:hover{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:text-cyber-accent:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-cyber-accent\/70:hover{color:#3b82f6b3}.hover\:text-cyber-accent\/80:hover{color:#3b82f6cc}.hover\:text-cyber-orange\/80:hover{color:#ffa500cc}.hover\:text-cyber-text:hover{--tw-text-opacity: 1;color:rgb(238 238 238 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-red-400\/80:hover{color:#f87171cc}.hover\:text-slate-100:hover{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.focus\:border-cyber-accent:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyber-accent\/40:focus{border-color:#3b82f666}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:block{display:block}}@media (min-width: 768px){.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1280px){.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:pl-3{padding-left:.75rem}}
|