siclaw 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/LICENSE +190 -0
- package/README.md +268 -0
- package/dist/agentbox/gateway-client.d.ts +41 -0
- package/dist/agentbox/gateway-client.js +108 -0
- package/dist/agentbox/gateway-client.js.map +1 -0
- package/dist/agentbox/http-server.d.ts +12 -0
- package/dist/agentbox/http-server.js +700 -0
- package/dist/agentbox/http-server.js.map +1 -0
- package/dist/agentbox/mcp-sync.d.ts +6 -0
- package/dist/agentbox/mcp-sync.js +26 -0
- package/dist/agentbox/mcp-sync.js.map +1 -0
- package/dist/agentbox/resource-handlers.d.ts +40 -0
- package/dist/agentbox/resource-handlers.js +116 -0
- package/dist/agentbox/resource-handlers.js.map +1 -0
- package/dist/agentbox/resource-sync.d.ts +28 -0
- package/dist/agentbox/resource-sync.js +74 -0
- package/dist/agentbox/resource-sync.js.map +1 -0
- package/dist/agentbox/session.d.ts +145 -0
- package/dist/agentbox/session.js +444 -0
- package/dist/agentbox/session.js.map +1 -0
- package/dist/agentbox-main.d.ts +7 -0
- package/dist/agentbox-main.js +90 -0
- package/dist/agentbox-main.js.map +1 -0
- package/dist/cli-main.d.ts +1 -0
- package/dist/cli-main.js +187 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli-setup.d.ts +17 -0
- package/dist/cli-setup.js +247 -0
- package/dist/cli-setup.js.map +1 -0
- package/dist/core/agent-factory.d.ts +52 -0
- package/dist/core/agent-factory.js +547 -0
- package/dist/core/agent-factory.js.map +1 -0
- package/dist/core/brain-session.d.ts +67 -0
- package/dist/core/brain-session.js +15 -0
- package/dist/core/brain-session.js.map +1 -0
- package/dist/core/brains/claude-sdk-brain.d.ts +76 -0
- package/dist/core/brains/claude-sdk-brain.js +403 -0
- package/dist/core/brains/claude-sdk-brain.js.map +1 -0
- package/dist/core/brains/pi-agent-brain.d.ts +28 -0
- package/dist/core/brains/pi-agent-brain.js +84 -0
- package/dist/core/brains/pi-agent-brain.js.map +1 -0
- package/dist/core/config.d.ts +109 -0
- package/dist/core/config.js +294 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/extensions/context-pruning.d.ts +38 -0
- package/dist/core/extensions/context-pruning.js +162 -0
- package/dist/core/extensions/context-pruning.js.map +1 -0
- package/dist/core/extensions/deep-investigation.d.ts +2 -0
- package/dist/core/extensions/deep-investigation.js +541 -0
- package/dist/core/extensions/deep-investigation.js.map +1 -0
- package/dist/core/extensions/memory-flush.d.ts +20 -0
- package/dist/core/extensions/memory-flush.js +120 -0
- package/dist/core/extensions/memory-flush.js.map +1 -0
- package/dist/core/llm-proxy.d.ts +37 -0
- package/dist/core/llm-proxy.js +578 -0
- package/dist/core/llm-proxy.js.map +1 -0
- package/dist/core/mcp-client.d.ts +80 -0
- package/dist/core/mcp-client.js +285 -0
- package/dist/core/mcp-client.js.map +1 -0
- package/dist/core/prompt.d.ts +1 -0
- package/dist/core/prompt.js +64 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/tool-adapter.d.ts +45 -0
- package/dist/core/tool-adapter.js +154 -0
- package/dist/core/tool-adapter.js.map +1 -0
- package/dist/cron/cron-api.d.ts +9 -0
- package/dist/cron/cron-api.js +94 -0
- package/dist/cron/cron-api.js.map +1 -0
- package/dist/cron/cron-coordinator.d.ts +29 -0
- package/dist/cron/cron-coordinator.js +150 -0
- package/dist/cron/cron-coordinator.js.map +1 -0
- package/dist/cron/cron-executor.d.ts +15 -0
- package/dist/cron/cron-executor.js +90 -0
- package/dist/cron/cron-executor.js.map +1 -0
- package/dist/cron/cron-matcher.d.ts +19 -0
- package/dist/cron/cron-matcher.js +114 -0
- package/dist/cron/cron-matcher.js.map +1 -0
- package/dist/cron/cron-scheduler.d.ts +42 -0
- package/dist/cron/cron-scheduler.js +91 -0
- package/dist/cron/cron-scheduler.js.map +1 -0
- package/dist/cron/gateway-client.d.ts +32 -0
- package/dist/cron/gateway-client.js +91 -0
- package/dist/cron/gateway-client.js.map +1 -0
- package/dist/cron-main.d.ts +10 -0
- package/dist/cron-main.js +75 -0
- package/dist/cron-main.js.map +1 -0
- package/dist/gateway/agentbox/client.d.ts +187 -0
- package/dist/gateway/agentbox/client.js +314 -0
- package/dist/gateway/agentbox/client.js.map +1 -0
- package/dist/gateway/agentbox/index.d.ts +10 -0
- package/dist/gateway/agentbox/index.js +11 -0
- package/dist/gateway/agentbox/index.js.map +1 -0
- package/dist/gateway/agentbox/k8s-spawner.d.ts +70 -0
- package/dist/gateway/agentbox/k8s-spawner.js +466 -0
- package/dist/gateway/agentbox/k8s-spawner.js.map +1 -0
- package/dist/gateway/agentbox/local-spawner.d.ts +63 -0
- package/dist/gateway/agentbox/local-spawner.js +234 -0
- package/dist/gateway/agentbox/local-spawner.js.map +1 -0
- package/dist/gateway/agentbox/manager.d.ts +121 -0
- package/dist/gateway/agentbox/manager.js +325 -0
- package/dist/gateway/agentbox/manager.js.map +1 -0
- package/dist/gateway/agentbox/process-spawner.d.ts +21 -0
- package/dist/gateway/agentbox/process-spawner.js +168 -0
- package/dist/gateway/agentbox/process-spawner.js.map +1 -0
- package/dist/gateway/agentbox/spawner.d.ts +33 -0
- package/dist/gateway/agentbox/spawner.js +10 -0
- package/dist/gateway/agentbox/spawner.js.map +1 -0
- package/dist/gateway/agentbox/types.d.ts +39 -0
- package/dist/gateway/agentbox/types.js +5 -0
- package/dist/gateway/agentbox/types.js.map +1 -0
- package/dist/gateway/auth/bind-code-store.d.ts +31 -0
- package/dist/gateway/auth/bind-code-store.js +73 -0
- package/dist/gateway/auth/bind-code-store.js.map +1 -0
- package/dist/gateway/auth/index.d.ts +9 -0
- package/dist/gateway/auth/index.js +10 -0
- package/dist/gateway/auth/index.js.map +1 -0
- package/dist/gateway/auth/jwt.d.ts +23 -0
- package/dist/gateway/auth/jwt.js +82 -0
- package/dist/gateway/auth/jwt.js.map +1 -0
- package/dist/gateway/auth/login.d.ts +26 -0
- package/dist/gateway/auth/login.js +74 -0
- package/dist/gateway/auth/login.js.map +1 -0
- package/dist/gateway/auth/middleware.d.ts +23 -0
- package/dist/gateway/auth/middleware.js +67 -0
- package/dist/gateway/auth/middleware.js.map +1 -0
- package/dist/gateway/auth/oauth2.d.ts +57 -0
- package/dist/gateway/auth/oauth2.js +113 -0
- package/dist/gateway/auth/oauth2.js.map +1 -0
- package/dist/gateway/auth/user-store.d.ts +95 -0
- package/dist/gateway/auth/user-store.js +291 -0
- package/dist/gateway/auth/user-store.js.map +1 -0
- package/dist/gateway/channels/channel-manager.d.ts +42 -0
- package/dist/gateway/channels/channel-manager.js +156 -0
- package/dist/gateway/channels/channel-manager.js.map +1 -0
- package/dist/gateway/channels/channel-rpc.d.ts +9 -0
- package/dist/gateway/channels/channel-rpc.js +104 -0
- package/dist/gateway/channels/channel-rpc.js.map +1 -0
- package/dist/gateway/channels/channel-store.d.ts +32 -0
- package/dist/gateway/channels/channel-store.js +114 -0
- package/dist/gateway/channels/channel-store.js.map +1 -0
- package/dist/gateway/channels/discord.d.ts +5 -0
- package/dist/gateway/channels/discord.js +177 -0
- package/dist/gateway/channels/discord.js.map +1 -0
- package/dist/gateway/channels/lark-format.d.ts +41 -0
- package/dist/gateway/channels/lark-format.js +620 -0
- package/dist/gateway/channels/lark-format.js.map +1 -0
- package/dist/gateway/channels/lark.d.ts +5 -0
- package/dist/gateway/channels/lark.js +1000 -0
- package/dist/gateway/channels/lark.js.map +1 -0
- package/dist/gateway/channels/slack.d.ts +5 -0
- package/dist/gateway/channels/slack.js +170 -0
- package/dist/gateway/channels/slack.js.map +1 -0
- package/dist/gateway/channels/telegram.d.ts +5 -0
- package/dist/gateway/channels/telegram.js +173 -0
- package/dist/gateway/channels/telegram.js.map +1 -0
- package/dist/gateway/channels/utils.d.ts +34 -0
- package/dist/gateway/channels/utils.js +115 -0
- package/dist/gateway/channels/utils.js.map +1 -0
- package/dist/gateway/config.d.ts +14 -0
- package/dist/gateway/config.js +12 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/cron/notify.d.ts +14 -0
- package/dist/gateway/cron/notify.js +40 -0
- package/dist/gateway/cron/notify.js.map +1 -0
- package/dist/gateway/db/dialect-helpers.d.ts +8 -0
- package/dist/gateway/db/dialect-helpers.js +26 -0
- package/dist/gateway/db/dialect-helpers.js.map +1 -0
- package/dist/gateway/db/index.d.ts +20 -0
- package/dist/gateway/db/index.js +140 -0
- package/dist/gateway/db/index.js.map +1 -0
- package/dist/gateway/db/init-schema.d.ts +8 -0
- package/dist/gateway/db/init-schema.js +385 -0
- package/dist/gateway/db/init-schema.js.map +1 -0
- package/dist/gateway/db/migrate-sqlite.d.ts +8 -0
- package/dist/gateway/db/migrate-sqlite.js +335 -0
- package/dist/gateway/db/migrate-sqlite.js.map +1 -0
- package/dist/gateway/db/repositories/chat-repo.d.ts +64 -0
- package/dist/gateway/db/repositories/chat-repo.js +115 -0
- package/dist/gateway/db/repositories/chat-repo.js.map +1 -0
- package/dist/gateway/db/repositories/config-repo.d.ts +164 -0
- package/dist/gateway/db/repositories/config-repo.js +267 -0
- package/dist/gateway/db/repositories/config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/credential-repo.d.ts +51 -0
- package/dist/gateway/db/repositories/credential-repo.js +70 -0
- package/dist/gateway/db/repositories/credential-repo.js.map +1 -0
- package/dist/gateway/db/repositories/env-repo.d.ts +37 -0
- package/dist/gateway/db/repositories/env-repo.js +74 -0
- package/dist/gateway/db/repositories/env-repo.js.map +1 -0
- package/dist/gateway/db/repositories/mcp-server-repo.d.ts +97 -0
- package/dist/gateway/db/repositories/mcp-server-repo.js +83 -0
- package/dist/gateway/db/repositories/mcp-server-repo.js.map +1 -0
- package/dist/gateway/db/repositories/model-config-repo.d.ts +141 -0
- package/dist/gateway/db/repositories/model-config-repo.js +439 -0
- package/dist/gateway/db/repositories/model-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/notification-repo.d.ts +50 -0
- package/dist/gateway/db/repositories/notification-repo.js +105 -0
- package/dist/gateway/db/repositories/notification-repo.js.map +1 -0
- package/dist/gateway/db/repositories/permission-repo.d.ts +28 -0
- package/dist/gateway/db/repositories/permission-repo.js +74 -0
- package/dist/gateway/db/repositories/permission-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-content-repo.d.ts +29 -0
- package/dist/gateway/db/repositories/skill-content-repo.js +90 -0
- package/dist/gateway/db/repositories/skill-content-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-repo.d.ts +170 -0
- package/dist/gateway/db/repositories/skill-repo.js +185 -0
- package/dist/gateway/db/repositories/skill-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-review-repo.d.ts +44 -0
- package/dist/gateway/db/repositories/skill-review-repo.js +44 -0
- package/dist/gateway/db/repositories/skill-review-repo.js.map +1 -0
- package/dist/gateway/db/repositories/skill-version-repo.d.ts +30 -0
- package/dist/gateway/db/repositories/skill-version-repo.js +56 -0
- package/dist/gateway/db/repositories/skill-version-repo.js.map +1 -0
- package/dist/gateway/db/repositories/system-config-repo.d.ts +21 -0
- package/dist/gateway/db/repositories/system-config-repo.js +86 -0
- package/dist/gateway/db/repositories/system-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/user-env-config-repo.d.ts +32 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js +79 -0
- package/dist/gateway/db/repositories/user-env-config-repo.js.map +1 -0
- package/dist/gateway/db/repositories/user-repo.d.ts +59 -0
- package/dist/gateway/db/repositories/user-repo.js +83 -0
- package/dist/gateway/db/repositories/user-repo.js.map +1 -0
- package/dist/gateway/db/repositories/vote-repo.d.ts +26 -0
- package/dist/gateway/db/repositories/vote-repo.js +97 -0
- package/dist/gateway/db/repositories/vote-repo.js.map +1 -0
- package/dist/gateway/db/repositories/workspace-repo.d.ts +27 -0
- package/dist/gateway/db/repositories/workspace-repo.js +145 -0
- package/dist/gateway/db/repositories/workspace-repo.js.map +1 -0
- package/dist/gateway/db/schema-mysql.d.ts +3897 -0
- package/dist/gateway/db/schema-mysql.js +354 -0
- package/dist/gateway/db/schema-mysql.js.map +1 -0
- package/dist/gateway/db/schema-sqlite.d.ts +4147 -0
- package/dist/gateway/db/schema-sqlite.js +345 -0
- package/dist/gateway/db/schema-sqlite.js.map +1 -0
- package/dist/gateway/db/schema.d.ts +3869 -0
- package/dist/gateway/db/schema.js +16 -0
- package/dist/gateway/db/schema.js.map +1 -0
- package/dist/gateway/mcp-config-builder.d.ts +8 -0
- package/dist/gateway/mcp-config-builder.js +39 -0
- package/dist/gateway/mcp-config-builder.js.map +1 -0
- package/dist/gateway/output-redactor.d.ts +27 -0
- package/dist/gateway/output-redactor.js +101 -0
- package/dist/gateway/output-redactor.js.map +1 -0
- package/dist/gateway/plugins/api.d.ts +181 -0
- package/dist/gateway/plugins/api.js +28 -0
- package/dist/gateway/plugins/api.js.map +1 -0
- package/dist/gateway/plugins/channel-bridge.d.ts +72 -0
- package/dist/gateway/plugins/channel-bridge.js +586 -0
- package/dist/gateway/plugins/channel-bridge.js.map +1 -0
- package/dist/gateway/plugins/loader.d.ts +2 -0
- package/dist/gateway/plugins/loader.js +83 -0
- package/dist/gateway/plugins/loader.js.map +1 -0
- package/dist/gateway/plugins/runtime.d.ts +25 -0
- package/dist/gateway/plugins/runtime.js +64 -0
- package/dist/gateway/plugins/runtime.js.map +1 -0
- package/dist/gateway/resource-notifier.d.ts +36 -0
- package/dist/gateway/resource-notifier.js +123 -0
- package/dist/gateway/resource-notifier.js.map +1 -0
- package/dist/gateway/rpc-methods.d.ts +34 -0
- package/dist/gateway/rpc-methods.js +3198 -0
- package/dist/gateway/rpc-methods.js.map +1 -0
- package/dist/gateway/security/cert-manager.d.ts +77 -0
- package/dist/gateway/security/cert-manager.js +280 -0
- package/dist/gateway/security/cert-manager.js.map +1 -0
- package/dist/gateway/security/mtls-middleware.d.ts +33 -0
- package/dist/gateway/security/mtls-middleware.js +89 -0
- package/dist/gateway/security/mtls-middleware.js.map +1 -0
- package/dist/gateway/server.d.ts +54 -0
- package/dist/gateway/server.js +1146 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/skill-labels.d.ts +16 -0
- package/dist/gateway/skill-labels.js +79 -0
- package/dist/gateway/skill-labels.js.map +1 -0
- package/dist/gateway/skills/file-writer.d.ts +75 -0
- package/dist/gateway/skills/file-writer.js +320 -0
- package/dist/gateway/skills/file-writer.js.map +1 -0
- package/dist/gateway/skills/script-evaluator.d.ts +42 -0
- package/dist/gateway/skills/script-evaluator.js +204 -0
- package/dist/gateway/skills/script-evaluator.js.map +1 -0
- package/dist/gateway/skills/skill-bundle.d.ts +34 -0
- package/dist/gateway/skills/skill-bundle.js +83 -0
- package/dist/gateway/skills/skill-bundle.js.map +1 -0
- package/dist/gateway/web/dist/assets/index-BF6CtvnV.css +1 -0
- package/dist/gateway/web/dist/assets/index-Dumzqsr-.js +680 -0
- package/dist/gateway/web/dist/assets/index-n4IMHP1Q.js +675 -0
- package/dist/gateway/web/dist/index.html +14 -0
- package/dist/gateway/web/dist/noise.png +1 -0
- package/dist/gateway/web/dist/robots.txt +2 -0
- package/dist/gateway/web/dist/vite.svg +1 -0
- package/dist/gateway/ws-protocol.d.ts +68 -0
- package/dist/gateway/ws-protocol.js +106 -0
- package/dist/gateway/ws-protocol.js.map +1 -0
- package/dist/gateway-main.d.ts +1 -0
- package/dist/gateway-main.js +129 -0
- package/dist/gateway-main.js.map +1 -0
- package/dist/lib/s3-backup.d.ts +28 -0
- package/dist/lib/s3-backup.js +85 -0
- package/dist/lib/s3-backup.js.map +1 -0
- package/dist/lib/s3-storage.d.ts +45 -0
- package/dist/lib/s3-storage.js +210 -0
- package/dist/lib/s3-storage.js.map +1 -0
- package/dist/memory/chunker.d.ts +15 -0
- package/dist/memory/chunker.js +94 -0
- package/dist/memory/chunker.js.map +1 -0
- package/dist/memory/embeddings.d.ts +14 -0
- package/dist/memory/embeddings.js +143 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/index.d.ts +18 -0
- package/dist/memory/index.js +15 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/indexer.d.ts +70 -0
- package/dist/memory/indexer.js +567 -0
- package/dist/memory/indexer.js.map +1 -0
- package/dist/memory/mmr.d.ts +22 -0
- package/dist/memory/mmr.js +82 -0
- package/dist/memory/mmr.js.map +1 -0
- package/dist/memory/schema.d.ts +2 -0
- package/dist/memory/schema.js +85 -0
- package/dist/memory/schema.js.map +1 -0
- package/dist/memory/session-summarizer.d.ts +19 -0
- package/dist/memory/session-summarizer.js +139 -0
- package/dist/memory/session-summarizer.js.map +1 -0
- package/dist/memory/stop-words.d.ts +13 -0
- package/dist/memory/stop-words.js +132 -0
- package/dist/memory/stop-words.js.map +1 -0
- package/dist/memory/temporal-decay.d.ts +20 -0
- package/dist/memory/temporal-decay.js +63 -0
- package/dist/memory/temporal-decay.js.map +1 -0
- package/dist/memory/types.d.ts +40 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/shared/resource-sync.d.ts +80 -0
- package/dist/shared/resource-sync.js +24 -0
- package/dist/shared/resource-sync.js.map +1 -0
- package/dist/tools/command-sets.d.ts +61 -0
- package/dist/tools/command-sets.js +845 -0
- package/dist/tools/command-sets.js.map +1 -0
- package/dist/tools/create-skill.d.ts +2 -0
- package/dist/tools/create-skill.js +169 -0
- package/dist/tools/create-skill.js.map +1 -0
- package/dist/tools/credential-list.d.ts +8 -0
- package/dist/tools/credential-list.js +139 -0
- package/dist/tools/credential-list.js.map +1 -0
- package/dist/tools/deep-search/engine.d.ts +40 -0
- package/dist/tools/deep-search/engine.js +594 -0
- package/dist/tools/deep-search/engine.js.map +1 -0
- package/dist/tools/deep-search/events.d.ts +11 -0
- package/dist/tools/deep-search/events.js +10 -0
- package/dist/tools/deep-search/events.js.map +1 -0
- package/dist/tools/deep-search/format.d.ts +11 -0
- package/dist/tools/deep-search/format.js +143 -0
- package/dist/tools/deep-search/format.js.map +1 -0
- package/dist/tools/deep-search/prompts.d.ts +30 -0
- package/dist/tools/deep-search/prompts.js +237 -0
- package/dist/tools/deep-search/prompts.js.map +1 -0
- package/dist/tools/deep-search/sre-knowledge.d.ts +21 -0
- package/dist/tools/deep-search/sre-knowledge.js +112 -0
- package/dist/tools/deep-search/sre-knowledge.js.map +1 -0
- package/dist/tools/deep-search/sub-agent.d.ts +71 -0
- package/dist/tools/deep-search/sub-agent.js +401 -0
- package/dist/tools/deep-search/sub-agent.js.map +1 -0
- package/dist/tools/deep-search/tool.d.ts +9 -0
- package/dist/tools/deep-search/tool.js +201 -0
- package/dist/tools/deep-search/tool.js.map +1 -0
- package/dist/tools/deep-search/types.d.ts +67 -0
- package/dist/tools/deep-search/types.js +41 -0
- package/dist/tools/deep-search/types.js.map +1 -0
- package/dist/tools/dp-tools.d.ts +47 -0
- package/dist/tools/dp-tools.js +170 -0
- package/dist/tools/dp-tools.js.map +1 -0
- package/dist/tools/fork-skill.d.ts +2 -0
- package/dist/tools/fork-skill.js +93 -0
- package/dist/tools/fork-skill.js.map +1 -0
- package/dist/tools/k8s-checks.d.ts +18 -0
- package/dist/tools/k8s-checks.js +105 -0
- package/dist/tools/k8s-checks.js.map +1 -0
- package/dist/tools/kubeconfig-resolver.d.ts +11 -0
- package/dist/tools/kubeconfig-resolver.js +53 -0
- package/dist/tools/kubeconfig-resolver.js.map +1 -0
- package/dist/tools/kubectl.d.ts +12 -0
- package/dist/tools/kubectl.js +169 -0
- package/dist/tools/kubectl.js.map +1 -0
- package/dist/tools/manage-schedule.d.ts +3 -0
- package/dist/tools/manage-schedule.js +189 -0
- package/dist/tools/manage-schedule.js.map +1 -0
- package/dist/tools/memory-get.d.ts +2 -0
- package/dist/tools/memory-get.js +99 -0
- package/dist/tools/memory-get.js.map +1 -0
- package/dist/tools/memory-search.d.ts +3 -0
- package/dist/tools/memory-search.js +93 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/tools/netns-script.d.ts +3 -0
- package/dist/tools/netns-script.js +394 -0
- package/dist/tools/netns-script.js.map +1 -0
- package/dist/tools/node-exec.d.ts +18 -0
- package/dist/tools/node-exec.js +342 -0
- package/dist/tools/node-exec.js.map +1 -0
- package/dist/tools/node-script.d.ts +3 -0
- package/dist/tools/node-script.js +266 -0
- package/dist/tools/node-script.js.map +1 -0
- package/dist/tools/pod-exec.d.ts +4 -0
- package/dist/tools/pod-exec.js +146 -0
- package/dist/tools/pod-exec.js.map +1 -0
- package/dist/tools/pod-nsenter-exec.d.ts +3 -0
- package/dist/tools/pod-nsenter-exec.js +333 -0
- package/dist/tools/pod-nsenter-exec.js.map +1 -0
- package/dist/tools/pod-script.d.ts +3 -0
- package/dist/tools/pod-script.js +176 -0
- package/dist/tools/pod-script.js.map +1 -0
- package/dist/tools/restricted-bash.d.ts +41 -0
- package/dist/tools/restricted-bash.js +503 -0
- package/dist/tools/restricted-bash.js.map +1 -0
- package/dist/tools/run-skill.d.ts +3 -0
- package/dist/tools/run-skill.js +169 -0
- package/dist/tools/run-skill.js.map +1 -0
- package/dist/tools/sanitize-env.d.ts +14 -0
- package/dist/tools/sanitize-env.js +95 -0
- package/dist/tools/sanitize-env.js.map +1 -0
- package/dist/tools/script-resolver.d.ts +35 -0
- package/dist/tools/script-resolver.js +213 -0
- package/dist/tools/script-resolver.js.map +1 -0
- package/dist/tools/tool-render.d.ts +20 -0
- package/dist/tools/tool-render.js +77 -0
- package/dist/tools/tool-render.js.map +1 -0
- package/dist/tools/update-skill.d.ts +2 -0
- package/dist/tools/update-skill.js +169 -0
- package/dist/tools/update-skill.js.map +1 -0
- package/package.json +106 -0
- package/settings.example.json +74 -0
- package/siclaw.mjs +48 -0
- package/skills/core/cluster-events/SKILL.md +150 -0
- package/skills/core/deep-investigation/SKILL.md +87 -0
- package/skills/core/deep-investigation/default-memory.md +8 -0
- package/skills/core/deployment-rollout-debug/SKILL.md +144 -0
- package/skills/core/dns-debug/SKILL.md +144 -0
- package/skills/core/find-node/SKILL.md +23 -0
- package/skills/core/find-node/scripts/find-node.sh +9 -0
- package/skills/core/hpa-debug/SKILL.md +159 -0
- package/skills/core/image-pull-debug/SKILL.md +151 -0
- package/skills/core/ingress-debug/SKILL.md +189 -0
- package/skills/core/job-debug/SKILL.md +180 -0
- package/skills/core/meta.json +23 -0
- package/skills/core/node-health-check/SKILL.md +150 -0
- package/skills/core/node-logs/SKILL.md +68 -0
- package/skills/core/node-logs/scripts/get-node-logs.sh +78 -0
- package/skills/core/node-ping-gateway/SKILL.md +54 -0
- package/skills/core/node-ping-gateway/scripts/ping-node-gateway.sh +71 -0
- package/skills/core/node-show-gateway/SKILL.md +55 -0
- package/skills/core/node-show-gateway/scripts/show-node-gateway.sh +90 -0
- package/skills/core/pod-crash-debug/SKILL.md +135 -0
- package/skills/core/pod-pending-debug/SKILL.md +146 -0
- package/skills/core/pod-ping-gateway/SKILL.md +44 -0
- package/skills/core/pod-ping-gateway/scripts/ping-gateway.sh +76 -0
- package/skills/core/pod-show-gateway/SKILL.md +54 -0
- package/skills/core/pod-show-gateway/scripts/show-gateway.sh +115 -0
- package/skills/core/pvc-debug/SKILL.md +169 -0
- package/skills/core/service-debug/SKILL.md +164 -0
- package/skills/extension/.gitkeep +0 -0
- package/skills/platform/create-skill/SKILL.md +288 -0
- package/skills/platform/manage-skill/SKILL.md +23 -0
- package/skills/platform/update-skill/SKILL.md +52 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>Siclaw</title>
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-n4IMHP1Q.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BF6CtvnV.css">
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div id="root"></div>
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>vite</title><path d="M30 3.73l-1.47-.94a3.83 3.83 0 0 0-3.34-.17l-3.38 1.48a.29.29 0 0 1-.36-.12l-1.37-2.61A3.72 3.72 0 0 0 16.64 0h-.09a3.72 3.72 0 0 0-3.44 1.37L11.75 4a.29.29 0 0 1-.36.12L8 2.62a3.83 3.83 0 0 0-3.34.17L3.2 3.73a1.44 1.44 0 0 0-.58 2l12.7 25.61a1.09 1.09 0 0 0 2 0l12.7-25.6a1.45 1.45 0 0 0-.6-2.01z" fill="#ffc629"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>vite</title><path d="M30 3.73l-1.47-.94a3.83 3.83 0 0 0-3.34-.17l-3.38 1.48a.29.29 0 0 1-.36-.12l-1.37-2.61A3.72 3.72 0 0 0 16.64 0h-.09a3.72 3.72 0 0 0-3.44 1.37L11.75 4a.29.29 0 0 1-.36.12L8 2.62a3.83 3.83 0 0 0-3.34.17L3.2 3.73a1.44 1.44 0 0 0-.58 2l12.7 25.61a1.09 1.09 0 0 0 2 0l12.7-25.6a1.45 1.45 0 0 0-.6-2.01z" fill="#ffc629"/></svg>
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { WebSocket } from "ws";
|
|
2
|
+
export declare const ErrorCode: {
|
|
3
|
+
readonly INVALID_REQUEST: "INVALID_REQUEST";
|
|
4
|
+
readonly UNAVAILABLE: "UNAVAILABLE";
|
|
5
|
+
readonly AGENT_TIMEOUT: "AGENT_TIMEOUT";
|
|
6
|
+
readonly UNAUTHORIZED: "UNAUTHORIZED";
|
|
7
|
+
readonly FORBIDDEN: "FORBIDDEN";
|
|
8
|
+
readonly NOT_FOUND: "NOT_FOUND";
|
|
9
|
+
readonly INTERNAL: "INTERNAL";
|
|
10
|
+
};
|
|
11
|
+
export type ErrorCode = (typeof ErrorCode)[keyof typeof ErrorCode];
|
|
12
|
+
export interface ErrorShape {
|
|
13
|
+
code: string;
|
|
14
|
+
message: string;
|
|
15
|
+
details?: unknown;
|
|
16
|
+
retryable?: boolean;
|
|
17
|
+
retryAfterMs?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function errorShape(code: string, message: string, opts?: {
|
|
20
|
+
details?: unknown;
|
|
21
|
+
retryable?: boolean;
|
|
22
|
+
retryAfterMs?: number;
|
|
23
|
+
}): ErrorShape;
|
|
24
|
+
export declare class RpcError extends Error {
|
|
25
|
+
readonly code: string;
|
|
26
|
+
readonly retryable?: boolean | undefined;
|
|
27
|
+
readonly retryAfterMs?: number | undefined;
|
|
28
|
+
constructor(code: string, message: string, retryable?: boolean | undefined, retryAfterMs?: number | undefined);
|
|
29
|
+
}
|
|
30
|
+
export interface WsRequest {
|
|
31
|
+
type: "req";
|
|
32
|
+
id: string;
|
|
33
|
+
method: string;
|
|
34
|
+
params?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
export interface WsResponse {
|
|
37
|
+
type: "res";
|
|
38
|
+
id: string;
|
|
39
|
+
ok: boolean;
|
|
40
|
+
payload?: unknown;
|
|
41
|
+
error?: ErrorShape;
|
|
42
|
+
}
|
|
43
|
+
export interface WsEvent {
|
|
44
|
+
type: "event";
|
|
45
|
+
event: string;
|
|
46
|
+
seq: number;
|
|
47
|
+
payload: Record<string, unknown>;
|
|
48
|
+
}
|
|
49
|
+
export type SendEventFn = (event: string, payload: Record<string, unknown>) => void;
|
|
50
|
+
export interface RpcContext {
|
|
51
|
+
auth?: {
|
|
52
|
+
userId: string;
|
|
53
|
+
username: string;
|
|
54
|
+
};
|
|
55
|
+
/** Send an event to the requesting WebSocket client only */
|
|
56
|
+
sendEvent: SendEventFn;
|
|
57
|
+
/** Reference to the originating WebSocket connection */
|
|
58
|
+
ws?: WebSocket;
|
|
59
|
+
}
|
|
60
|
+
export type RpcHandler = (params: Record<string, unknown>, context: RpcContext) => Promise<unknown>;
|
|
61
|
+
export declare function resetSeq(): void;
|
|
62
|
+
export declare function parseFrame(data: string): WsRequest | null;
|
|
63
|
+
export declare function sendResponse(ws: WebSocket, id: string, ok: boolean, payload?: unknown, error?: ErrorShape): void;
|
|
64
|
+
export declare function buildEvent(event: string, payload: Record<string, unknown>): string;
|
|
65
|
+
export type BroadcastFn = (event: string, payload: Record<string, unknown>) => void;
|
|
66
|
+
export declare const MAX_BUFFERED_BYTES: number;
|
|
67
|
+
export declare function createBroadcaster(clients: Set<WebSocket>): BroadcastFn;
|
|
68
|
+
export declare function dispatchRpc(methods: Map<string, RpcHandler>, request: WsRequest, ws: WebSocket, context: RpcContext): Promise<void>;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// --- Error types ---
|
|
2
|
+
export const ErrorCode = {
|
|
3
|
+
INVALID_REQUEST: "INVALID_REQUEST",
|
|
4
|
+
UNAVAILABLE: "UNAVAILABLE",
|
|
5
|
+
AGENT_TIMEOUT: "AGENT_TIMEOUT",
|
|
6
|
+
UNAUTHORIZED: "UNAUTHORIZED",
|
|
7
|
+
FORBIDDEN: "FORBIDDEN",
|
|
8
|
+
NOT_FOUND: "NOT_FOUND",
|
|
9
|
+
INTERNAL: "INTERNAL",
|
|
10
|
+
};
|
|
11
|
+
export function errorShape(code, message, opts) {
|
|
12
|
+
return { code, message, ...opts };
|
|
13
|
+
}
|
|
14
|
+
export class RpcError extends Error {
|
|
15
|
+
code;
|
|
16
|
+
retryable;
|
|
17
|
+
retryAfterMs;
|
|
18
|
+
constructor(code, message, retryable, retryAfterMs) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.code = code;
|
|
21
|
+
this.retryable = retryable;
|
|
22
|
+
this.retryAfterMs = retryAfterMs;
|
|
23
|
+
this.name = "RpcError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// --- Dispatch ---
|
|
27
|
+
let eventSeq = 0;
|
|
28
|
+
export function resetSeq() {
|
|
29
|
+
eventSeq = 0;
|
|
30
|
+
}
|
|
31
|
+
export function parseFrame(data) {
|
|
32
|
+
try {
|
|
33
|
+
const obj = JSON.parse(data);
|
|
34
|
+
if (obj && obj.type === "req" && typeof obj.id === "string" && typeof obj.method === "string") {
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// ignore malformed frames
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
export function sendResponse(ws, id, ok, payload, error) {
|
|
44
|
+
const msg = { type: "res", id, ok };
|
|
45
|
+
if (payload !== undefined)
|
|
46
|
+
msg.payload = payload;
|
|
47
|
+
if (error !== undefined)
|
|
48
|
+
msg.error = error;
|
|
49
|
+
ws.send(JSON.stringify(msg));
|
|
50
|
+
}
|
|
51
|
+
export function buildEvent(event, payload) {
|
|
52
|
+
const msg = { type: "event", event, seq: ++eventSeq, payload };
|
|
53
|
+
return JSON.stringify(msg);
|
|
54
|
+
}
|
|
55
|
+
export const MAX_BUFFERED_BYTES = 1024 * 1024; // 1 MiB
|
|
56
|
+
export function createBroadcaster(clients) {
|
|
57
|
+
return (event, payload) => {
|
|
58
|
+
const frame = buildEvent(event, payload);
|
|
59
|
+
for (const ws of clients) {
|
|
60
|
+
if (ws.readyState === ws.OPEN) {
|
|
61
|
+
if (ws.bufferedAmount > MAX_BUFFERED_BYTES) {
|
|
62
|
+
console.warn(`[ws] Backpressure: skipping broadcast to client (buffered=${ws.bufferedAmount})`);
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
ws.send(frame);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function classifyErrorCode(message) {
|
|
71
|
+
if (/Unauthorized|login required/i.test(message))
|
|
72
|
+
return ErrorCode.UNAUTHORIZED;
|
|
73
|
+
if (/Forbidden|admin access/i.test(message))
|
|
74
|
+
return ErrorCode.FORBIDDEN;
|
|
75
|
+
if (/not found/i.test(message))
|
|
76
|
+
return ErrorCode.NOT_FOUND;
|
|
77
|
+
if (/Unknown method/i.test(message))
|
|
78
|
+
return ErrorCode.INVALID_REQUEST;
|
|
79
|
+
if (/timed? ?out/i.test(message))
|
|
80
|
+
return ErrorCode.AGENT_TIMEOUT;
|
|
81
|
+
return ErrorCode.INTERNAL;
|
|
82
|
+
}
|
|
83
|
+
export async function dispatchRpc(methods, request, ws, context) {
|
|
84
|
+
const handler = methods.get(request.method);
|
|
85
|
+
if (!handler) {
|
|
86
|
+
sendResponse(ws, request.id, false, undefined, errorShape(ErrorCode.INVALID_REQUEST, `Unknown method: ${request.method}`));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const startTime = Date.now();
|
|
90
|
+
try {
|
|
91
|
+
const result = await handler(request.params ?? {}, context);
|
|
92
|
+
console.log(`[rpc] ${request.method} completed in ${Date.now() - startTime}ms`);
|
|
93
|
+
sendResponse(ws, request.id, true, result);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
97
|
+
console.error(`[rpc] ${request.method} error (${Date.now() - startTime}ms):`, message);
|
|
98
|
+
if (err instanceof RpcError) {
|
|
99
|
+
sendResponse(ws, request.id, false, undefined, errorShape(err.code, message, { retryable: err.retryable, retryAfterMs: err.retryAfterMs }));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
sendResponse(ws, request.id, false, undefined, errorShape(classifyErrorCode(message), message));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=ws-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-protocol.js","sourceRoot":"","sources":["../../src/gateway/ws-protocol.ts"],"names":[],"mappings":"AAEA,sBAAsB;AAEtB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,eAAe,EAAE,iBAAiB;IAClC,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,eAAe;IAC9B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAWX,MAAM,UAAU,UAAU,CACxB,IAAY,EAAE,OAAe,EAC7B,IAAwE;IAExE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IACA;IACA;IAHlB,YACkB,IAAY,EAAE,OAAe,EAC7B,SAAmB,EACnB,YAAqB;QAErC,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,cAAS,GAAT,SAAS,CAAU;QACnB,iBAAY,GAAZ,YAAY,CAAS;QAGrC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AA2CD,mBAAmB;AAEnB,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,MAAM,UAAU,QAAQ;IACtB,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC9F,OAAO,GAAgB,CAAC;QAC1B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAa,EAAE,EAAU,EAAE,EAAW,EAAE,OAAiB,EAAE,KAAkB;IACxG,MAAM,GAAG,GAAe,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAChD,IAAI,OAAO,KAAK,SAAS;QAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAgC;IACxE,MAAM,GAAG,GAAY,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACxE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAID,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;AAEvD,MAAM,UAAU,iBAAiB,CAAC,OAAuB;IACvD,OAAO,CAAC,KAAa,EAAE,OAAgC,EAAE,EAAE;QACzD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,EAAE,CAAC,cAAc,GAAG,kBAAkB,EAAE,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC,6DAA6D,EAAE,CAAC,cAAc,GAAG,CAAC,CAAC;oBAChG,SAAS;gBACX,CAAC;gBACD,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC,YAAY,CAAC;IAChF,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC,SAAS,CAAC;IACxE,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC,SAAS,CAAC;IAC3D,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC,eAAe,CAAC;IACtE,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC,aAAa,CAAC;IACjE,OAAO,SAAS,CAAC,QAAQ,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAgC,EAChC,OAAkB,EAClB,EAAa,EACb,OAAmB;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,eAAe,EAAE,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3H,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,iBAAiB,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;QAChF,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,MAAM,WAAW,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,MAAM,EAAE,OAAO,CAAC,CAAC;QACvF,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC9I,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { loadGatewayConfig } from "./gateway/config.js";
|
|
2
|
+
import { startGateway } from "./gateway/server.js";
|
|
3
|
+
import { AgentBoxManager, LocalSpawner, K8sSpawner, ProcessSpawner } from "./gateway/agentbox/index.js";
|
|
4
|
+
import { createChannelBridge } from "./gateway/plugins/channel-bridge.js";
|
|
5
|
+
import { ChannelStore } from "./gateway/channels/channel-store.js";
|
|
6
|
+
import { ChannelManager } from "./gateway/channels/channel-manager.js";
|
|
7
|
+
import { createChannelRpcMethods } from "./gateway/channels/channel-rpc.js";
|
|
8
|
+
import { ConfigRepository } from "./gateway/db/repositories/config-repo.js";
|
|
9
|
+
// Parse arguments
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const useK8s = args.includes("--k8s");
|
|
12
|
+
const useProcess = args.includes("--process");
|
|
13
|
+
// Load config
|
|
14
|
+
const config = loadGatewayConfig();
|
|
15
|
+
console.log(`[gateway] Config: port=${config.port}, host=${config.host}`);
|
|
16
|
+
// Create Spawner (selects K8s / Process / Local based on arguments)
|
|
17
|
+
const spawner = useK8s
|
|
18
|
+
? new K8sSpawner({
|
|
19
|
+
namespace: process.env.SICLAW_K8S_NAMESPACE || "default",
|
|
20
|
+
image: process.env.SICLAW_AGENTBOX_IMAGE || "siclaw-agentbox:latest",
|
|
21
|
+
})
|
|
22
|
+
: useProcess
|
|
23
|
+
? new ProcessSpawner()
|
|
24
|
+
: new LocalSpawner(4000);
|
|
25
|
+
console.log(`[gateway] Using spawner: ${spawner.name}`);
|
|
26
|
+
// Create AgentBox Manager
|
|
27
|
+
const agentBoxManager = new AgentBoxManager(spawner, {
|
|
28
|
+
namespace: process.env.SICLAW_K8S_NAMESPACE || "default",
|
|
29
|
+
});
|
|
30
|
+
agentBoxManager.startHealthCheck();
|
|
31
|
+
// Channel RPC + Manager are initialized after gateway starts (needs broadcast)
|
|
32
|
+
// Plugin HTTP handlers (dynamically loaded from overlay builds)
|
|
33
|
+
const extraHttpHandlers = new Map();
|
|
34
|
+
try {
|
|
35
|
+
const pluginPath = "./gateway/plugins/internal/index.js";
|
|
36
|
+
const { createHandlers } = await import(pluginPath);
|
|
37
|
+
for (const [k, v] of createHandlers())
|
|
38
|
+
extraHttpHandlers.set(k, v);
|
|
39
|
+
console.log("[gateway] Internal plugin loaded");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Internal plugin not available — running in open-source mode
|
|
43
|
+
}
|
|
44
|
+
// Start HTTP + WebSocket server
|
|
45
|
+
const gateway = await startGateway({
|
|
46
|
+
config,
|
|
47
|
+
agentBoxManager,
|
|
48
|
+
spawner,
|
|
49
|
+
extraHttpHandlers,
|
|
50
|
+
});
|
|
51
|
+
// --- Channel subsystem ---
|
|
52
|
+
// ChannelStore: persists channel configs to DB
|
|
53
|
+
const channelStore = new ChannelStore(gateway.db);
|
|
54
|
+
await channelStore.init();
|
|
55
|
+
// ConfigRepository for schedule auto-execution in channel bridge
|
|
56
|
+
const configRepo = gateway.db ? new ConfigRepository(gateway.db) : undefined;
|
|
57
|
+
// Create channel bridge (routes through AgentBox pods, not in-process sessions)
|
|
58
|
+
const channelBridge = createChannelBridge(agentBoxManager, gateway.broadcast, gateway.userStore, configRepo, gateway.buildCredentialPayload);
|
|
59
|
+
// Auto-remember chatId from inbound messages for notifications
|
|
60
|
+
channelBridge.onInbound = (channelId, chatId) => {
|
|
61
|
+
channelStore.setDefaultChatId(channelId, chatId);
|
|
62
|
+
};
|
|
63
|
+
// Create channel manager (with deps for bind command interception)
|
|
64
|
+
const channelManager = new ChannelManager(channelBridge, channelStore, {
|
|
65
|
+
userStore: gateway.userStore,
|
|
66
|
+
bindCodeStore: gateway.bindCodeStore,
|
|
67
|
+
});
|
|
68
|
+
// Register channel RPC methods
|
|
69
|
+
const channelRpc = createChannelRpcMethods(channelStore, channelManager);
|
|
70
|
+
for (const [name, handler] of channelRpc) {
|
|
71
|
+
gateway.rpcMethods.set(name, handler);
|
|
72
|
+
}
|
|
73
|
+
// --- Cron notification callback ---
|
|
74
|
+
gateway.onCronNotify = (data) => {
|
|
75
|
+
const { userId, jobName, result, resultText, error } = data;
|
|
76
|
+
const text = result === "success"
|
|
77
|
+
? `**Scheduled task "${jobName}" completed**\n\n${resultText || "(no output)"}`
|
|
78
|
+
: `**Scheduled task "${jobName}" failed**\n\n${error || "Unknown error"}`;
|
|
79
|
+
channelManager.sendUserNotification(userId, text);
|
|
80
|
+
};
|
|
81
|
+
// --- Trigger webhook subsystem ---
|
|
82
|
+
// Triggers execute via the same internal agent-prompt API as cron
|
|
83
|
+
gateway.onWebhook = async (trigger, payload) => {
|
|
84
|
+
const sessionId = `trigger-${trigger.id}`;
|
|
85
|
+
const description = trigger.configJson?.description || trigger.name;
|
|
86
|
+
const prompt = `You received an event from trigger "${trigger.name}".
|
|
87
|
+
Trigger description: ${description}
|
|
88
|
+
Event payload:
|
|
89
|
+
\`\`\`json
|
|
90
|
+
${JSON.stringify(payload, null, 2)}
|
|
91
|
+
\`\`\`
|
|
92
|
+
Analyze this event and take appropriate action.`;
|
|
93
|
+
try {
|
|
94
|
+
const resp = await fetch(`http://localhost:${config.port}/api/internal/agent-prompt`, {
|
|
95
|
+
method: "POST",
|
|
96
|
+
headers: { "Content-Type": "application/json" },
|
|
97
|
+
body: JSON.stringify({
|
|
98
|
+
userId: trigger.userId,
|
|
99
|
+
sessionId,
|
|
100
|
+
text: prompt,
|
|
101
|
+
timeoutMs: 300_000,
|
|
102
|
+
caller: "trigger",
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
const data = await resp.json();
|
|
106
|
+
if (data.status !== "success") {
|
|
107
|
+
console.error(`[trigger] ${trigger.id} failed: ${data.error}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error(`[trigger] Error for ${trigger.id}:`, err instanceof Error ? err.message : err);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
// Boot all enabled channels
|
|
115
|
+
channelManager.bootFromStore().then(() => {
|
|
116
|
+
console.log("[gateway] Channel boot complete");
|
|
117
|
+
}).catch((err) => {
|
|
118
|
+
console.error("[gateway] Channel boot error:", err);
|
|
119
|
+
});
|
|
120
|
+
// Graceful shutdown
|
|
121
|
+
async function shutdown() {
|
|
122
|
+
console.log("\n[gateway] Shutting down...");
|
|
123
|
+
await channelManager.stopAll();
|
|
124
|
+
await gateway.close();
|
|
125
|
+
process.exit(0);
|
|
126
|
+
}
|
|
127
|
+
process.on("SIGINT", shutdown);
|
|
128
|
+
process.on("SIGTERM", shutdown);
|
|
129
|
+
//# sourceMappingURL=gateway-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-main.js","sourceRoot":"","sources":["../src/gateway-main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3/OSS Backup Utility
|
|
3
|
+
*
|
|
4
|
+
* Optional — enabled when SICLAW_S3_ENDPOINT + SICLAW_S3_BUCKET env vars are set.
|
|
5
|
+
* Compatible with AWS S3, Aliyun OSS, MinIO, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface S3BackupConfig {
|
|
8
|
+
endpoint: string;
|
|
9
|
+
bucket: string;
|
|
10
|
+
accessKey: string;
|
|
11
|
+
secretKey: string;
|
|
12
|
+
region?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class S3Backup {
|
|
15
|
+
private config;
|
|
16
|
+
private client;
|
|
17
|
+
constructor(config: S3BackupConfig);
|
|
18
|
+
/** Lazy-load S3 client (avoids import cost when not used) */
|
|
19
|
+
private getClient;
|
|
20
|
+
/** Upload a single file */
|
|
21
|
+
uploadFile(key: string, content: Buffer | string): Promise<void>;
|
|
22
|
+
/** Upload all files in a directory recursively */
|
|
23
|
+
uploadDir(prefix: string, localDir: string): Promise<void>;
|
|
24
|
+
/** Check if S3 is configured */
|
|
25
|
+
isEnabled(): boolean;
|
|
26
|
+
/** Create from environment variables (returns null if not configured) */
|
|
27
|
+
static fromEnv(): S3Backup | null;
|
|
28
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3/OSS Backup Utility
|
|
3
|
+
*
|
|
4
|
+
* Optional — enabled when SICLAW_S3_ENDPOINT + SICLAW_S3_BUCKET env vars are set.
|
|
5
|
+
* Compatible with AWS S3, Aliyun OSS, MinIO, etc.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
export class S3Backup {
|
|
10
|
+
config;
|
|
11
|
+
client = null;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/** Lazy-load S3 client (avoids import cost when not used) */
|
|
16
|
+
async getClient() {
|
|
17
|
+
if (this.client)
|
|
18
|
+
return this.client;
|
|
19
|
+
try {
|
|
20
|
+
const { S3Client } = await import("@aws-sdk/client-s3");
|
|
21
|
+
this.client = new S3Client({
|
|
22
|
+
endpoint: this.config.endpoint,
|
|
23
|
+
region: this.config.region || "us-east-1",
|
|
24
|
+
credentials: {
|
|
25
|
+
accessKeyId: this.config.accessKey,
|
|
26
|
+
secretAccessKey: this.config.secretKey,
|
|
27
|
+
},
|
|
28
|
+
forcePathStyle: true,
|
|
29
|
+
});
|
|
30
|
+
return this.client;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
console.warn("[s3-backup] @aws-sdk/client-s3 not installed, S3 backup disabled");
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Upload a single file */
|
|
38
|
+
async uploadFile(key, content) {
|
|
39
|
+
const client = await this.getClient();
|
|
40
|
+
if (!client)
|
|
41
|
+
return;
|
|
42
|
+
const { PutObjectCommand } = await import("@aws-sdk/client-s3");
|
|
43
|
+
await client.send(new PutObjectCommand({
|
|
44
|
+
Bucket: this.config.bucket,
|
|
45
|
+
Key: key,
|
|
46
|
+
Body: typeof content === "string" ? Buffer.from(content) : content,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
/** Upload all files in a directory recursively */
|
|
50
|
+
async uploadDir(prefix, localDir) {
|
|
51
|
+
if (!fs.existsSync(localDir))
|
|
52
|
+
return;
|
|
53
|
+
const entries = fs.readdirSync(localDir, { withFileTypes: true });
|
|
54
|
+
for (const entry of entries) {
|
|
55
|
+
const localPath = path.join(localDir, entry.name);
|
|
56
|
+
const s3Key = `${prefix}/${entry.name}`;
|
|
57
|
+
if (entry.isDirectory()) {
|
|
58
|
+
// Skip .git
|
|
59
|
+
if (entry.name === ".git")
|
|
60
|
+
continue;
|
|
61
|
+
await this.uploadDir(s3Key, localPath);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
const content = fs.readFileSync(localPath);
|
|
65
|
+
await this.uploadFile(s3Key, content);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Check if S3 is configured */
|
|
70
|
+
isEnabled() {
|
|
71
|
+
return !!(this.config.endpoint && this.config.bucket);
|
|
72
|
+
}
|
|
73
|
+
/** Create from environment variables (returns null if not configured) */
|
|
74
|
+
static fromEnv() {
|
|
75
|
+
const endpoint = process.env.SICLAW_S3_ENDPOINT;
|
|
76
|
+
const bucket = process.env.SICLAW_S3_BUCKET;
|
|
77
|
+
const accessKey = process.env.SICLAW_S3_ACCESS_KEY;
|
|
78
|
+
const secretKey = process.env.SICLAW_S3_SECRET_KEY;
|
|
79
|
+
if (!endpoint || !bucket || !accessKey || !secretKey) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return new S3Backup({ endpoint, bucket, accessKey, secretKey });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=s3-backup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"s3-backup.js","sourceRoot":"","sources":["../../src/lib/s3-backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S3/OSS Storage Utility
|
|
3
|
+
*
|
|
4
|
+
* Primary storage for skill versions — must be reliable with retries.
|
|
5
|
+
* Compatible with AWS S3, Aliyun OSS, MinIO, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface S3StorageConfig {
|
|
8
|
+
endpoint: string;
|
|
9
|
+
bucket: string;
|
|
10
|
+
accessKey: string;
|
|
11
|
+
secretKey: string;
|
|
12
|
+
region?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class S3Storage {
|
|
15
|
+
private config;
|
|
16
|
+
private client;
|
|
17
|
+
constructor(config: S3StorageConfig);
|
|
18
|
+
/** Lazy-load S3 client (avoids import cost when not used) */
|
|
19
|
+
private getClient;
|
|
20
|
+
/** Retry wrapper for reliability (S3 is primary storage) */
|
|
21
|
+
private withRetry;
|
|
22
|
+
/** Upload a single file */
|
|
23
|
+
uploadFile(key: string, content: Buffer | string): Promise<void>;
|
|
24
|
+
/** Upload all files in a directory recursively */
|
|
25
|
+
uploadDir(prefix: string, localDir: string): Promise<void>;
|
|
26
|
+
private _uploadDirInner;
|
|
27
|
+
/** Download a single file, returns null on NoSuchKey */
|
|
28
|
+
downloadFile(key: string): Promise<Buffer | null>;
|
|
29
|
+
/** Download all files under a prefix to a local directory */
|
|
30
|
+
downloadDir(prefix: string, localDir: string): Promise<void>;
|
|
31
|
+
/** List all object keys under a prefix (with pagination) */
|
|
32
|
+
listKeys(prefix: string): Promise<string[]>;
|
|
33
|
+
private _listKeysInner;
|
|
34
|
+
/** Delete all objects under a prefix */
|
|
35
|
+
deleteDir(prefix: string): Promise<void>;
|
|
36
|
+
/** Check if S3 is configured */
|
|
37
|
+
isEnabled(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Create from DB config → environment variables.
|
|
40
|
+
* Priority: dbConfig > SICLAW_S3_* env vars > null
|
|
41
|
+
*/
|
|
42
|
+
static create(dbConfig?: Record<string, string>): S3Storage | null;
|
|
43
|
+
/** @deprecated Use create() instead */
|
|
44
|
+
static fromEnv(): S3Storage | null;
|
|
45
|
+
}
|