@full-self-developing/fsd 1.0.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/.engine/engine-config.json +27 -0
- package/CODEBASE_CONTEXT.md +152 -0
- package/README.md +111 -0
- package/README_zh.md +111 -0
- package/UI_SPEC.md +57 -0
- package/agents/api-proxy.js +542 -0
- package/agents/base.js +280 -0
- package/agents/branch-manager.js +135 -0
- package/agents/cli-models.json +48 -0
- package/agents/coder.js +128 -0
- package/agents/core-request.js +174 -0
- package/agents/dispatcher.js +491 -0
- package/agents/drivers/.atomcode/graph.bin +0 -0
- package/agents/drivers/atomcode.js +143 -0
- package/agents/drivers/gemini-cli.js +195 -0
- package/agents/drivers/index.js +65 -0
- package/agents/drivers/openrouter.js +390 -0
- package/agents/engine-config.js +444 -0
- package/agents/log-fixer.js +72 -0
- package/agents/mcp-client-manager.js +159 -0
- package/agents/optimizer.js +54 -0
- package/agents/path-validator.js +43 -0
- package/agents/planner.js +81 -0
- package/agents/prompt-manager.js +170 -0
- package/agents/skeptic.js +79 -0
- package/agents/skills-manager.js +130 -0
- package/agents/summarizer.js +34 -0
- package/agents/test-runner.js +85 -0
- package/bin/cli.js +166 -0
- package/client/eslint.config.js +21 -0
- package/client/index.html +12 -0
- package/client/package-lock.json +3339 -0
- package/client/package.json +35 -0
- package/client/src/App.jsx +745 -0
- package/client/src/api.js +78 -0
- package/client/src/components/ChatPanel.jsx +277 -0
- package/client/src/components/ConfirmationModal.jsx +61 -0
- package/client/src/components/ErrorBoundary.jsx +66 -0
- package/client/src/components/FolderPicker.jsx +200 -0
- package/client/src/components/LoopPanel.jsx +863 -0
- package/client/src/components/NotFound.jsx +52 -0
- package/client/src/components/SettingsPanel.jsx +966 -0
- package/client/src/components/Sidebar.jsx +318 -0
- package/client/src/context/SettingsContext.jsx +353 -0
- package/client/src/i18n.js +462 -0
- package/client/src/index.css +31 -0
- package/client/src/main.jsx +17 -0
- package/client/vite.config.js +19 -0
- package/design.md +875 -0
- package/extensions/alibaba/index.ts +11 -0
- package/extensions/alibaba/openclaw.plugin.json +34 -0
- package/extensions/alibaba/package.json +15 -0
- package/extensions/alibaba/plugin-registration.contract.test.ts +7 -0
- package/extensions/alibaba/tsconfig.json +16 -0
- package/extensions/alibaba/video-generation-provider.test.ts +92 -0
- package/extensions/alibaba/video-generation-provider.ts +83 -0
- package/extensions/amazon-bedrock/api.ts +6 -0
- package/extensions/amazon-bedrock/aws-credential-refresh.ts +42 -0
- package/extensions/amazon-bedrock/config-api.ts +4 -0
- package/extensions/amazon-bedrock/config-compat.test.ts +81 -0
- package/extensions/amazon-bedrock/config-compat.ts +107 -0
- package/extensions/amazon-bedrock/discovery-shared.ts +28 -0
- package/extensions/amazon-bedrock/discovery.test.ts +608 -0
- package/extensions/amazon-bedrock/discovery.ts +616 -0
- package/extensions/amazon-bedrock/embedding-provider.test.ts +109 -0
- package/extensions/amazon-bedrock/embedding-provider.ts +470 -0
- package/extensions/amazon-bedrock/index.test.ts +1249 -0
- package/extensions/amazon-bedrock/index.ts +11 -0
- package/extensions/amazon-bedrock/lazy-import.test.ts +56 -0
- package/extensions/amazon-bedrock/memory-embedding-adapter.test.ts +105 -0
- package/extensions/amazon-bedrock/memory-embedding-adapter.ts +47 -0
- package/extensions/amazon-bedrock/npm-shrinkwrap.json +1241 -0
- package/extensions/amazon-bedrock/openclaw.plugin.json +80 -0
- package/extensions/amazon-bedrock/package.json +41 -0
- package/extensions/amazon-bedrock/provider-policy-api.test.ts +46 -0
- package/extensions/amazon-bedrock/provider-policy-api.ts +9 -0
- package/extensions/amazon-bedrock/register.sync.runtime.ts +659 -0
- package/extensions/amazon-bedrock/setup-api.ts +18 -0
- package/extensions/amazon-bedrock/thinking-policy.ts +32 -0
- package/extensions/amazon-bedrock/tsconfig.json +16 -0
- package/extensions/anthropic/api.ts +11 -0
- package/extensions/anthropic/claude-model-refs.ts +104 -0
- package/extensions/anthropic/cli-auth-seam.ts +13 -0
- package/extensions/anthropic/cli-backend-api.ts +6 -0
- package/extensions/anthropic/cli-backend.ts +83 -0
- package/extensions/anthropic/cli-catalog.ts +42 -0
- package/extensions/anthropic/cli-constants.ts +41 -0
- package/extensions/anthropic/cli-migration.test.ts +487 -0
- package/extensions/anthropic/cli-migration.ts +266 -0
- package/extensions/anthropic/cli-shared.test.ts +300 -0
- package/extensions/anthropic/cli-shared.ts +248 -0
- package/extensions/anthropic/config-defaults.ts +428 -0
- package/extensions/anthropic/contract-api.ts +9 -0
- package/extensions/anthropic/doctor-contract-api.ts +14 -0
- package/extensions/anthropic/index.test.ts +663 -0
- package/extensions/anthropic/index.ts +11 -0
- package/extensions/anthropic/media-understanding-provider.ts +15 -0
- package/extensions/anthropic/openclaw.plugin.json +112 -0
- package/extensions/anthropic/package.json +18 -0
- package/extensions/anthropic/provider-contract-api.ts +59 -0
- package/extensions/anthropic/provider-discovery.ts +35 -0
- package/extensions/anthropic/provider-policy-api.test.ts +135 -0
- package/extensions/anthropic/provider-policy-api.ts +24 -0
- package/extensions/anthropic/provider-runtime.contract.test.ts +3 -0
- package/extensions/anthropic/register.runtime.ts +668 -0
- package/extensions/anthropic/replay-policy.ts +9 -0
- package/extensions/anthropic/setup-api.ts +11 -0
- package/extensions/anthropic/stream-wrappers.test.ts +233 -0
- package/extensions/anthropic/stream-wrappers.ts +228 -0
- package/extensions/anthropic/test-api.ts +3 -0
- package/extensions/anthropic/tsconfig.json +16 -0
- package/extensions/arcee/api.ts +8 -0
- package/extensions/arcee/index.test.ts +195 -0
- package/extensions/arcee/index.ts +142 -0
- package/extensions/arcee/models.ts +68 -0
- package/extensions/arcee/onboard.ts +43 -0
- package/extensions/arcee/openclaw.plugin.json +46 -0
- package/extensions/arcee/package.json +15 -0
- package/extensions/arcee/provider-catalog.ts +54 -0
- package/extensions/arcee/tsconfig.json +16 -0
- package/extensions/azure-speech/azure-speech.live.test.ts +92 -0
- package/extensions/azure-speech/index.ts +11 -0
- package/extensions/azure-speech/openclaw.plugin.json +66 -0
- package/extensions/azure-speech/package.json +15 -0
- package/extensions/azure-speech/speech-provider.test.ts +242 -0
- package/extensions/azure-speech/speech-provider.ts +306 -0
- package/extensions/azure-speech/tsconfig.json +16 -0
- package/extensions/azure-speech/tts.test.ts +127 -0
- package/extensions/azure-speech/tts.ts +209 -0
- package/extensions/byteplus/api.ts +8 -0
- package/extensions/byteplus/index.test.ts +60 -0
- package/extensions/byteplus/index.ts +84 -0
- package/extensions/byteplus/live.test.ts +60 -0
- package/extensions/byteplus/models.ts +35 -0
- package/extensions/byteplus/openclaw.plugin.json +165 -0
- package/extensions/byteplus/package.json +15 -0
- package/extensions/byteplus/plugin-registration.contract.test.ts +8 -0
- package/extensions/byteplus/provider-catalog.ts +17 -0
- package/extensions/byteplus/provider-discovery.ts +31 -0
- package/extensions/byteplus/tsconfig.json +16 -0
- package/extensions/byteplus/video-generation-provider.test.ts +223 -0
- package/extensions/byteplus/video-generation-provider.ts +389 -0
- package/extensions/cerebras/api.ts +7 -0
- package/extensions/cerebras/index.ts +41 -0
- package/extensions/cerebras/models.ts +25 -0
- package/extensions/cerebras/onboard.ts +26 -0
- package/extensions/cerebras/openclaw.plugin.json +111 -0
- package/extensions/cerebras/package.json +15 -0
- package/extensions/cerebras/provider-catalog.ts +10 -0
- package/extensions/cerebras/tsconfig.json +16 -0
- package/extensions/chutes/api.ts +14 -0
- package/extensions/chutes/implicit-provider.test.ts +107 -0
- package/extensions/chutes/index.ts +194 -0
- package/extensions/chutes/model-discovery-env.ts +5 -0
- package/extensions/chutes/models.test.ts +289 -0
- package/extensions/chutes/models.ts +632 -0
- package/extensions/chutes/oauth.ts +235 -0
- package/extensions/chutes/onboard.ts +63 -0
- package/extensions/chutes/openclaw.plugin.json +726 -0
- package/extensions/chutes/package.json +15 -0
- package/extensions/chutes/provider-catalog.ts +29 -0
- package/extensions/chutes/tsconfig.json +16 -0
- package/extensions/cloudflare-ai-gateway/api.ts +14 -0
- package/extensions/cloudflare-ai-gateway/catalog-provider.ts +73 -0
- package/extensions/cloudflare-ai-gateway/index.test.ts +60 -0
- package/extensions/cloudflare-ai-gateway/index.ts +233 -0
- package/extensions/cloudflare-ai-gateway/models.ts +44 -0
- package/extensions/cloudflare-ai-gateway/onboard.ts +91 -0
- package/extensions/cloudflare-ai-gateway/openclaw.plugin.json +44 -0
- package/extensions/cloudflare-ai-gateway/package.json +15 -0
- package/extensions/cloudflare-ai-gateway/provider-discovery.contract.test.ts +3 -0
- package/extensions/cloudflare-ai-gateway/stream-wrappers.test.ts +160 -0
- package/extensions/cloudflare-ai-gateway/stream-wrappers.ts +32 -0
- package/extensions/cloudflare-ai-gateway/tsconfig.json +16 -0
- package/extensions/codex/doctor-contract-api.test.ts +44 -0
- package/extensions/codex/doctor-contract-api.ts +68 -0
- package/extensions/codex/harness.ts +85 -0
- package/extensions/codex/index.test.ts +230 -0
- package/extensions/codex/index.ts +125 -0
- package/extensions/codex/media-understanding-provider.test.ts +496 -0
- package/extensions/codex/media-understanding-provider.ts +524 -0
- package/extensions/codex/npm-shrinkwrap.json +1949 -0
- package/extensions/codex/openclaw.plugin.json +403 -0
- package/extensions/codex/package.json +41 -0
- package/extensions/codex/prompt-overlay-runtime-contract.test.ts +48 -0
- package/extensions/codex/prompt-overlay.ts +21 -0
- package/extensions/codex/provider-catalog.ts +83 -0
- package/extensions/codex/provider-discovery.ts +45 -0
- package/extensions/codex/provider.test.ts +384 -0
- package/extensions/codex/provider.ts +243 -0
- package/extensions/codex/src/app-server/app-inventory-cache.test.ts +176 -0
- package/extensions/codex/src/app-server/app-inventory-cache.ts +324 -0
- package/extensions/codex/src/app-server/approval-bridge.test.ts +1472 -0
- package/extensions/codex/src/app-server/approval-bridge.ts +1211 -0
- package/extensions/codex/src/app-server/auth-bridge.test.ts +1449 -0
- package/extensions/codex/src/app-server/auth-bridge.ts +614 -0
- package/extensions/codex/src/app-server/auth-profile-runtime-contract.test.ts +242 -0
- package/extensions/codex/src/app-server/capabilities.ts +27 -0
- package/extensions/codex/src/app-server/client-factory.ts +24 -0
- package/extensions/codex/src/app-server/client.test.ts +563 -0
- package/extensions/codex/src/app-server/client.ts +721 -0
- package/extensions/codex/src/app-server/compact.test.ts +1029 -0
- package/extensions/codex/src/app-server/compact.ts +662 -0
- package/extensions/codex/src/app-server/computer-use.test.ts +788 -0
- package/extensions/codex/src/app-server/computer-use.ts +683 -0
- package/extensions/codex/src/app-server/config.test.ts +948 -0
- package/extensions/codex/src/app-server/config.ts +1093 -0
- package/extensions/codex/src/app-server/context-engine-projection.test.ts +252 -0
- package/extensions/codex/src/app-server/context-engine-projection.ts +403 -0
- package/extensions/codex/src/app-server/delivery-no-reply-runtime-contract.test.ts +80 -0
- package/extensions/codex/src/app-server/dynamic-tool-diagnostics.ts +73 -0
- package/extensions/codex/src/app-server/dynamic-tool-profile.ts +70 -0
- package/extensions/codex/src/app-server/dynamic-tools.test.ts +1357 -0
- package/extensions/codex/src/app-server/dynamic-tools.ts +646 -0
- package/extensions/codex/src/app-server/elicitation-bridge.test.ts +1281 -0
- package/extensions/codex/src/app-server/elicitation-bridge.ts +828 -0
- package/extensions/codex/src/app-server/event-projector.test.ts +2885 -0
- package/extensions/codex/src/app-server/event-projector.ts +2047 -0
- package/extensions/codex/src/app-server/image-payload-sanitizer.test.ts +49 -0
- package/extensions/codex/src/app-server/image-payload-sanitizer.ts +195 -0
- package/extensions/codex/src/app-server/local-runtime-attribution.ts +39 -0
- package/extensions/codex/src/app-server/managed-binary.test.ts +141 -0
- package/extensions/codex/src/app-server/managed-binary.ts +193 -0
- package/extensions/codex/src/app-server/models.test.ts +246 -0
- package/extensions/codex/src/app-server/models.ts +172 -0
- package/extensions/codex/src/app-server/native-hook-relay.test.ts +274 -0
- package/extensions/codex/src/app-server/native-hook-relay.ts +150 -0
- package/extensions/codex/src/app-server/native-subagent-monitor.test.ts +1125 -0
- package/extensions/codex/src/app-server/native-subagent-monitor.ts +1061 -0
- package/extensions/codex/src/app-server/native-subagent-notification.test.ts +176 -0
- package/extensions/codex/src/app-server/native-subagent-notification.ts +222 -0
- package/extensions/codex/src/app-server/native-subagent-task-ids.ts +3 -0
- package/extensions/codex/src/app-server/native-subagent-task-mirror.test.ts +625 -0
- package/extensions/codex/src/app-server/native-subagent-task-mirror.ts +460 -0
- package/extensions/codex/src/app-server/notification-correlation.ts +91 -0
- package/extensions/codex/src/app-server/openclaw-owned-tool-runtime-contract.test.ts +456 -0
- package/extensions/codex/src/app-server/outcome-fallback-runtime-contract.test.ts +404 -0
- package/extensions/codex/src/app-server/plugin-activation.test.ts +336 -0
- package/extensions/codex/src/app-server/plugin-activation.ts +283 -0
- package/extensions/codex/src/app-server/plugin-app-cache-key.ts +74 -0
- package/extensions/codex/src/app-server/plugin-approval-roundtrip.ts +122 -0
- package/extensions/codex/src/app-server/plugin-inventory.test.ts +355 -0
- package/extensions/codex/src/app-server/plugin-inventory.ts +357 -0
- package/extensions/codex/src/app-server/plugin-thread-config.test.ts +865 -0
- package/extensions/codex/src/app-server/plugin-thread-config.ts +455 -0
- package/extensions/codex/src/app-server/protocol-generated/json/DynamicToolCallParams.json +33 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/ErrorNotification.json +199 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/GetAccountResponse.json +102 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/ModelListResponse.json +227 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/ThreadResumeResponse.json +2630 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/ThreadStartResponse.json +2630 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/TurnCompletedNotification.json +1659 -0
- package/extensions/codex/src/app-server/protocol-generated/json/v2/TurnStartResponse.json +1655 -0
- package/extensions/codex/src/app-server/protocol-validators.test.ts +75 -0
- package/extensions/codex/src/app-server/protocol-validators.ts +203 -0
- package/extensions/codex/src/app-server/protocol.ts +537 -0
- package/extensions/codex/src/app-server/rate-limit-cache.ts +48 -0
- package/extensions/codex/src/app-server/rate-limits.test.ts +202 -0
- package/extensions/codex/src/app-server/rate-limits.ts +583 -0
- package/extensions/codex/src/app-server/request.test.ts +68 -0
- package/extensions/codex/src/app-server/request.ts +90 -0
- package/extensions/codex/src/app-server/run-attempt-thread-cleanup.test.ts +197 -0
- package/extensions/codex/src/app-server/run-attempt.context-engine.test.ts +1246 -0
- package/extensions/codex/src/app-server/run-attempt.test.ts +10799 -0
- package/extensions/codex/src/app-server/run-attempt.ts +5264 -0
- package/extensions/codex/src/app-server/run-attempt.vision-tools.test.ts +35 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/filesystem.ts +261 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/fs-policy.ts +346 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/http.ts +312 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/json-rpc.ts +93 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/processes.ts +411 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/runtime.ts +22 -0
- package/extensions/codex/src/app-server/sandbox-exec-server/types.ts +80 -0
- package/extensions/codex/src/app-server/sandbox-exec-server.fs.test.ts +527 -0
- package/extensions/codex/src/app-server/sandbox-exec-server.http.test.ts +210 -0
- package/extensions/codex/src/app-server/sandbox-exec-server.test-helpers.ts +236 -0
- package/extensions/codex/src/app-server/sandbox-exec-server.test.ts +460 -0
- package/extensions/codex/src/app-server/sandbox-exec-server.ts +355 -0
- package/extensions/codex/src/app-server/sandbox-guard.ts +153 -0
- package/extensions/codex/src/app-server/schema-normalization-runtime-contract.test.ts +206 -0
- package/extensions/codex/src/app-server/session-binding.test.ts +303 -0
- package/extensions/codex/src/app-server/session-binding.ts +407 -0
- package/extensions/codex/src/app-server/session-history.ts +44 -0
- package/extensions/codex/src/app-server/shared-client.test.ts +591 -0
- package/extensions/codex/src/app-server/shared-client.ts +289 -0
- package/extensions/codex/src/app-server/side-question.test.ts +1243 -0
- package/extensions/codex/src/app-server/side-question.ts +1019 -0
- package/extensions/codex/src/app-server/test-support.ts +48 -0
- package/extensions/codex/src/app-server/thread-lifecycle.test.ts +447 -0
- package/extensions/codex/src/app-server/thread-lifecycle.ts +1004 -0
- package/extensions/codex/src/app-server/thread-lifecycle.user-mcp-servers.test.ts +442 -0
- package/extensions/codex/src/app-server/timeout.ts +9 -0
- package/extensions/codex/src/app-server/tool-progress-normalization.ts +77 -0
- package/extensions/codex/src/app-server/trajectory.test.ts +205 -0
- package/extensions/codex/src/app-server/trajectory.ts +368 -0
- package/extensions/codex/src/app-server/transcript-mirror.test.ts +527 -0
- package/extensions/codex/src/app-server/transcript-mirror.ts +208 -0
- package/extensions/codex/src/app-server/transcript-repair-runtime-contract.test.ts +44 -0
- package/extensions/codex/src/app-server/transport-stdio.test.ts +184 -0
- package/extensions/codex/src/app-server/transport-stdio.ts +107 -0
- package/extensions/codex/src/app-server/transport-websocket.test.ts +71 -0
- package/extensions/codex/src/app-server/transport-websocket.ts +90 -0
- package/extensions/codex/src/app-server/transport.ts +117 -0
- package/extensions/codex/src/app-server/user-input-bridge.test.ts +249 -0
- package/extensions/codex/src/app-server/user-input-bridge.ts +316 -0
- package/extensions/codex/src/app-server/version.ts +5 -0
- package/extensions/codex/src/app-server/vision-tools.ts +12 -0
- package/extensions/codex/src/command-account.ts +589 -0
- package/extensions/codex/src/command-formatters.ts +426 -0
- package/extensions/codex/src/command-handlers.ts +2092 -0
- package/extensions/codex/src/command-plugins-management.test.ts +172 -0
- package/extensions/codex/src/command-plugins-management.ts +137 -0
- package/extensions/codex/src/command-rpc.test.ts +16 -0
- package/extensions/codex/src/command-rpc.ts +146 -0
- package/extensions/codex/src/commands.test.ts +3737 -0
- package/extensions/codex/src/commands.ts +65 -0
- package/extensions/codex/src/conversation-binding-data.ts +124 -0
- package/extensions/codex/src/conversation-binding.test.ts +697 -0
- package/extensions/codex/src/conversation-binding.ts +575 -0
- package/extensions/codex/src/conversation-control.test.ts +126 -0
- package/extensions/codex/src/conversation-control.ts +303 -0
- package/extensions/codex/src/conversation-turn-collector.test.ts +191 -0
- package/extensions/codex/src/conversation-turn-collector.ts +190 -0
- package/extensions/codex/src/conversation-turn-input.test.ts +141 -0
- package/extensions/codex/src/conversation-turn-input.ts +106 -0
- package/extensions/codex/src/manifest.test.ts +20 -0
- package/extensions/codex/src/migration/apply.ts +501 -0
- package/extensions/codex/src/migration/helpers.ts +55 -0
- package/extensions/codex/src/migration/plan.ts +461 -0
- package/extensions/codex/src/migration/provider.test.ts +1741 -0
- package/extensions/codex/src/migration/provider.ts +41 -0
- package/extensions/codex/src/migration/source.ts +643 -0
- package/extensions/codex/src/migration/targets.ts +25 -0
- package/extensions/codex/src/node-cli-sessions.test.ts +180 -0
- package/extensions/codex/src/node-cli-sessions.ts +711 -0
- package/extensions/codex/test-api.ts +95 -0
- package/extensions/codex/tsconfig.json +16 -0
- package/extensions/comfy/comfy.live.test.ts +128 -0
- package/extensions/comfy/image-generation-provider.test.ts +457 -0
- package/extensions/comfy/image-generation-provider.ts +79 -0
- package/extensions/comfy/index.test.ts +51 -0
- package/extensions/comfy/index.ts +45 -0
- package/extensions/comfy/music-generation-provider.test.ts +101 -0
- package/extensions/comfy/music-generation-provider.ts +88 -0
- package/extensions/comfy/openclaw.plugin.json +268 -0
- package/extensions/comfy/package.json +15 -0
- package/extensions/comfy/plugin-registration.contract.test.ts +11 -0
- package/extensions/comfy/test-helpers.ts +113 -0
- package/extensions/comfy/tsconfig.json +16 -0
- package/extensions/comfy/video-generation-provider.test.ts +184 -0
- package/extensions/comfy/video-generation-provider.ts +104 -0
- package/extensions/comfy/workflow-runtime.ts +827 -0
- package/extensions/deepgram/audio.live.test.ts +75 -0
- package/extensions/deepgram/audio.test.ts +146 -0
- package/extensions/deepgram/audio.ts +109 -0
- package/extensions/deepgram/index.ts +13 -0
- package/extensions/deepgram/media-understanding-provider.ts +10 -0
- package/extensions/deepgram/openclaw.plugin.json +30 -0
- package/extensions/deepgram/package.json +15 -0
- package/extensions/deepgram/realtime-transcription-provider.test.ts +69 -0
- package/extensions/deepgram/realtime-transcription-provider.ts +283 -0
- package/extensions/deepgram/test-api.ts +2 -0
- package/extensions/deepgram/tsconfig.json +16 -0
- package/extensions/deepinfra/api.ts +8 -0
- package/extensions/deepinfra/embedding-provider.ts +33 -0
- package/extensions/deepinfra/image-generation-provider.test.ts +224 -0
- package/extensions/deepinfra/image-generation-provider.ts +89 -0
- package/extensions/deepinfra/index.test.ts +113 -0
- package/extensions/deepinfra/index.ts +84 -0
- package/extensions/deepinfra/media-models.ts +50 -0
- package/extensions/deepinfra/media-understanding-provider.test.ts +73 -0
- package/extensions/deepinfra/media-understanding-provider.ts +37 -0
- package/extensions/deepinfra/memory-embedding-adapter.test.ts +31 -0
- package/extensions/deepinfra/memory-embedding-adapter.ts +35 -0
- package/extensions/deepinfra/onboard.test.ts +172 -0
- package/extensions/deepinfra/onboard.ts +36 -0
- package/extensions/deepinfra/openclaw.plugin.json +203 -0
- package/extensions/deepinfra/package.json +15 -0
- package/extensions/deepinfra/provider-catalog.ts +24 -0
- package/extensions/deepinfra/provider-models.test.ts +217 -0
- package/extensions/deepinfra/provider-models.ts +167 -0
- package/extensions/deepinfra/provider-policy-api.test.ts +41 -0
- package/extensions/deepinfra/provider-policy-api.ts +21 -0
- package/extensions/deepinfra/provider.contract.test.ts +3 -0
- package/extensions/deepinfra/speech-provider.test.ts +169 -0
- package/extensions/deepinfra/speech-provider.ts +41 -0
- package/extensions/deepinfra/tsconfig.json +16 -0
- package/extensions/deepinfra/video-generation-provider.test.ts +194 -0
- package/extensions/deepinfra/video-generation-provider.ts +262 -0
- package/extensions/deepseek/api.ts +7 -0
- package/extensions/deepseek/deepseek.live.test.ts +232 -0
- package/extensions/deepseek/index.test.ts +488 -0
- package/extensions/deepseek/index.ts +58 -0
- package/extensions/deepseek/models.ts +33 -0
- package/extensions/deepseek/onboard.ts +31 -0
- package/extensions/deepseek/openclaw.plugin.json +132 -0
- package/extensions/deepseek/package.json +15 -0
- package/extensions/deepseek/provider-catalog.ts +14 -0
- package/extensions/deepseek/provider-discovery.ts +17 -0
- package/extensions/deepseek/provider-policy-api.test.ts +264 -0
- package/extensions/deepseek/provider-policy-api.ts +104 -0
- package/extensions/deepseek/stream.ts +14 -0
- package/extensions/deepseek/thinking.ts +19 -0
- package/extensions/deepseek/tsconfig.json +16 -0
- package/extensions/elevenlabs/config-api.ts +8 -0
- package/extensions/elevenlabs/config-compat.test.ts +75 -0
- package/extensions/elevenlabs/config-compat.ts +181 -0
- package/extensions/elevenlabs/contract-api.ts +8 -0
- package/extensions/elevenlabs/doctor-contract.ts +34 -0
- package/extensions/elevenlabs/elevenlabs.live.test.ts +91 -0
- package/extensions/elevenlabs/index.ts +15 -0
- package/extensions/elevenlabs/media-understanding-provider.test.ts +95 -0
- package/extensions/elevenlabs/media-understanding-provider.ts +85 -0
- package/extensions/elevenlabs/openclaw.plugin.json +40 -0
- package/extensions/elevenlabs/package.json +15 -0
- package/extensions/elevenlabs/realtime-transcription-provider.test.ts +60 -0
- package/extensions/elevenlabs/realtime-transcription-provider.ts +284 -0
- package/extensions/elevenlabs/setup-api.ts +11 -0
- package/extensions/elevenlabs/shared.ts +10 -0
- package/extensions/elevenlabs/speech-provider.test.ts +124 -0
- package/extensions/elevenlabs/speech-provider.ts +594 -0
- package/extensions/elevenlabs/test-api.ts +6 -0
- package/extensions/elevenlabs/tsconfig.json +16 -0
- package/extensions/elevenlabs/tts.test.ts +212 -0
- package/extensions/elevenlabs/tts.ts +198 -0
- package/extensions/fal/image-generation-provider.test.ts +710 -0
- package/extensions/fal/image-generation-provider.ts +463 -0
- package/extensions/fal/index.ts +19 -0
- package/extensions/fal/music-generation-provider.test.ts +200 -0
- package/extensions/fal/music-generation-provider.ts +219 -0
- package/extensions/fal/onboard.ts +21 -0
- package/extensions/fal/openclaw.plugin.json +42 -0
- package/extensions/fal/package.json +15 -0
- package/extensions/fal/plugin-registration.contract.test.ts +11 -0
- package/extensions/fal/provider-contract-api.ts +31 -0
- package/extensions/fal/provider-registration.ts +38 -0
- package/extensions/fal/test-api.ts +3 -0
- package/extensions/fal/tsconfig.json +16 -0
- package/extensions/fal/video-generation-provider.test.ts +566 -0
- package/extensions/fal/video-generation-provider.ts +648 -0
- package/extensions/fireworks/index.test.ts +181 -0
- package/extensions/fireworks/index.ts +85 -0
- package/extensions/fireworks/model-id.ts +5 -0
- package/extensions/fireworks/onboard.ts +30 -0
- package/extensions/fireworks/openclaw.plugin.json +73 -0
- package/extensions/fireworks/package.json +18 -0
- package/extensions/fireworks/provider-catalog.ts +50 -0
- package/extensions/fireworks/provider-policy-api.ts +8 -0
- package/extensions/fireworks/stream.test.ts +184 -0
- package/extensions/fireworks/stream.ts +39 -0
- package/extensions/fireworks/thinking-policy.ts +17 -0
- package/extensions/fireworks/tsconfig.json +16 -0
- package/extensions/github-copilot/api.ts +1 -0
- package/extensions/github-copilot/auth.test.ts +109 -0
- package/extensions/github-copilot/auth.ts +65 -0
- package/extensions/github-copilot/connection-bound-ids.live.test.ts +231 -0
- package/extensions/github-copilot/connection-bound-ids.test.ts +96 -0
- package/extensions/github-copilot/connection-bound-ids.ts +81 -0
- package/extensions/github-copilot/embeddings.test.ts +287 -0
- package/extensions/github-copilot/embeddings.ts +342 -0
- package/extensions/github-copilot/index.test.ts +660 -0
- package/extensions/github-copilot/index.ts +492 -0
- package/extensions/github-copilot/login.ts +323 -0
- package/extensions/github-copilot/model-metadata.ts +51 -0
- package/extensions/github-copilot/models-defaults.ts +61 -0
- package/extensions/github-copilot/models.test.ts +695 -0
- package/extensions/github-copilot/models.ts +274 -0
- package/extensions/github-copilot/openclaw.plugin.json +270 -0
- package/extensions/github-copilot/package.json +19 -0
- package/extensions/github-copilot/provider-auth.contract.test.ts +3 -0
- package/extensions/github-copilot/provider-discovery.contract.test.ts +7 -0
- package/extensions/github-copilot/provider-runtime.contract.test.ts +3 -0
- package/extensions/github-copilot/register.runtime.ts +24 -0
- package/extensions/github-copilot/replay-policy.ts +9 -0
- package/extensions/github-copilot/stream.test.ts +282 -0
- package/extensions/github-copilot/stream.ts +157 -0
- package/extensions/github-copilot/token.ts +6 -0
- package/extensions/github-copilot/tsconfig.json +16 -0
- package/extensions/github-copilot/usage.ts +68 -0
- package/extensions/google/api.test.ts +249 -0
- package/extensions/google/api.ts +91 -0
- package/extensions/google/cli-backend.ts +58 -0
- package/extensions/google/default-model.test.ts +115 -0
- package/extensions/google/doctor-contract-api.ts +18 -0
- package/extensions/google/embedding-batch.ts +379 -0
- package/extensions/google/embedding-provider.test.ts +264 -0
- package/extensions/google/embedding-provider.ts +441 -0
- package/extensions/google/gemini-auth.ts +20 -0
- package/extensions/google/gemini-cli-provider.ts +145 -0
- package/extensions/google/generation-provider-metadata.ts +121 -0
- package/extensions/google/google-genai-runtime.ts +8 -0
- package/extensions/google/google-shared.test-helpers.ts +99 -0
- package/extensions/google/google-shared.test.ts +380 -0
- package/extensions/google/google.live.test.ts +179 -0
- package/extensions/google/image-generation-provider.test.ts +503 -0
- package/extensions/google/image-generation-provider.ts +272 -0
- package/extensions/google/index.test.ts +310 -0
- package/extensions/google/index.ts +354 -0
- package/extensions/google/manifest.test.ts +104 -0
- package/extensions/google/media-understanding-provider.ts +164 -0
- package/extensions/google/media-understanding-provider.video.test.ts +158 -0
- package/extensions/google/memory-embedding-adapter.ts +79 -0
- package/extensions/google/model-id.test.ts +42 -0
- package/extensions/google/model-id.ts +35 -0
- package/extensions/google/music-generation-provider.test.ts +278 -0
- package/extensions/google/music-generation-provider.ts +176 -0
- package/extensions/google/oauth-token-shared.test.ts +39 -0
- package/extensions/google/oauth-token-shared.ts +42 -0
- package/extensions/google/oauth.credentials.ts +273 -0
- package/extensions/google/oauth.flow.ts +61 -0
- package/extensions/google/oauth.http.ts +24 -0
- package/extensions/google/oauth.project.ts +232 -0
- package/extensions/google/oauth.runtime.ts +1 -0
- package/extensions/google/oauth.settings.ts +72 -0
- package/extensions/google/oauth.shared.ts +44 -0
- package/extensions/google/oauth.test.ts +922 -0
- package/extensions/google/oauth.token.ts +138 -0
- package/extensions/google/oauth.ts +104 -0
- package/extensions/google/onboard.ts +78 -0
- package/extensions/google/openclaw.plugin.json +706 -0
- package/extensions/google/package.json +19 -0
- package/extensions/google/plugin-registration.contract.test.ts +12 -0
- package/extensions/google/provider-contract-api.ts +77 -0
- package/extensions/google/provider-hooks.ts +18 -0
- package/extensions/google/provider-models.test.ts +513 -0
- package/extensions/google/provider-models.ts +237 -0
- package/extensions/google/provider-policy-api.test.ts +201 -0
- package/extensions/google/provider-policy-api.ts +11 -0
- package/extensions/google/provider-policy.ts +208 -0
- package/extensions/google/provider-registration.ts +72 -0
- package/extensions/google/provider-runtime.contract.test.ts +3 -0
- package/extensions/google/realtime-voice-provider.test.ts +857 -0
- package/extensions/google/realtime-voice-provider.ts +952 -0
- package/extensions/google/runtime-api.ts +19 -0
- package/extensions/google/setup-api.test.ts +23 -0
- package/extensions/google/setup-api.ts +13 -0
- package/extensions/google/speech-provider.test.ts +682 -0
- package/extensions/google/speech-provider.ts +683 -0
- package/extensions/google/src/gemini-web-search-provider.runtime.ts +367 -0
- package/extensions/google/src/gemini-web-search-provider.shared.ts +45 -0
- package/extensions/google/src/gemini-web-search-provider.ts +151 -0
- package/extensions/google/test-api.ts +6 -0
- package/extensions/google/thinking-api.ts +14 -0
- package/extensions/google/thinking.test.ts +153 -0
- package/extensions/google/thinking.ts +14 -0
- package/extensions/google/transport-stream.test.ts +1726 -0
- package/extensions/google/transport-stream.ts +1396 -0
- package/extensions/google/tsconfig.json +16 -0
- package/extensions/google/vertex-adc.ts +188 -0
- package/extensions/google/video-generation-provider.test.ts +573 -0
- package/extensions/google/video-generation-provider.ts +591 -0
- package/extensions/google/web-search-contract-api.ts +1 -0
- package/extensions/google/web-search-provider.test.ts +548 -0
- package/extensions/google/web-search-provider.ts +1 -0
- package/extensions/groq/api.ts +60 -0
- package/extensions/groq/index.test.ts +90 -0
- package/extensions/groq/index.ts +21 -0
- package/extensions/groq/media-understanding-provider.ts +21 -0
- package/extensions/groq/openclaw.plugin.json +314 -0
- package/extensions/groq/package.json +15 -0
- package/extensions/groq/test-api.ts +1 -0
- package/extensions/groq/tsconfig.json +16 -0
- package/extensions/huggingface/api.ts +10 -0
- package/extensions/huggingface/index.test.ts +81 -0
- package/extensions/huggingface/index.ts +60 -0
- package/extensions/huggingface/model-discovery-env.ts +5 -0
- package/extensions/huggingface/models.test.ts +98 -0
- package/extensions/huggingface/models.ts +218 -0
- package/extensions/huggingface/onboard.ts +26 -0
- package/extensions/huggingface/openclaw.plugin.json +57 -0
- package/extensions/huggingface/package.json +15 -0
- package/extensions/huggingface/provider-catalog.ts +22 -0
- package/extensions/huggingface/tsconfig.json +16 -0
- package/extensions/image-generation-core/api.ts +30 -0
- package/extensions/image-generation-core/package.json +10 -0
- package/extensions/image-generation-core/runtime-api.ts +6 -0
- package/extensions/image-generation-core/src/runtime.test.ts +29 -0
- package/extensions/image-generation-core/src/runtime.ts +6 -0
- package/extensions/image-generation-core/tsconfig.json +16 -0
- package/extensions/kimi-coding/api.ts +8 -0
- package/extensions/kimi-coding/implicit-provider.test.ts +116 -0
- package/extensions/kimi-coding/index.test.ts +45 -0
- package/extensions/kimi-coding/index.ts +113 -0
- package/extensions/kimi-coding/onboard.test.ts +44 -0
- package/extensions/kimi-coding/onboard.ts +42 -0
- package/extensions/kimi-coding/openclaw.plugin.json +64 -0
- package/extensions/kimi-coding/package.json +18 -0
- package/extensions/kimi-coding/provider-catalog.test.ts +23 -0
- package/extensions/kimi-coding/provider-catalog.ts +58 -0
- package/extensions/kimi-coding/replay-policy.test.ts +10 -0
- package/extensions/kimi-coding/replay-policy.ts +3 -0
- package/extensions/kimi-coding/stream.test.ts +603 -0
- package/extensions/kimi-coding/stream.ts +399 -0
- package/extensions/kimi-coding/tsconfig.json +16 -0
- package/extensions/litellm/api.ts +8 -0
- package/extensions/litellm/image-generation-provider.test.ts +348 -0
- package/extensions/litellm/image-generation-provider.ts +142 -0
- package/extensions/litellm/index.test.ts +107 -0
- package/extensions/litellm/index.ts +108 -0
- package/extensions/litellm/onboard.test.ts +21 -0
- package/extensions/litellm/onboard.ts +55 -0
- package/extensions/litellm/openclaw.plugin.json +35 -0
- package/extensions/litellm/package.json +15 -0
- package/extensions/litellm/provider-catalog.ts +10 -0
- package/extensions/litellm/tsconfig.json +16 -0
- package/extensions/lmstudio/README.md +3 -0
- package/extensions/lmstudio/api.ts +36 -0
- package/extensions/lmstudio/index.test.ts +207 -0
- package/extensions/lmstudio/index.ts +137 -0
- package/extensions/lmstudio/memory-embedding-adapter.ts +36 -0
- package/extensions/lmstudio/openclaw.plugin.json +53 -0
- package/extensions/lmstudio/package.json +15 -0
- package/extensions/lmstudio/plugin-registration.contract.test.ts +6 -0
- package/extensions/lmstudio/runtime-api.ts +35 -0
- package/extensions/lmstudio/src/api.ts +42 -0
- package/extensions/lmstudio/src/defaults.ts +14 -0
- package/extensions/lmstudio/src/embedding-provider.ts +147 -0
- package/extensions/lmstudio/src/models.fetch.ts +277 -0
- package/extensions/lmstudio/src/models.test.ts +491 -0
- package/extensions/lmstudio/src/models.ts +536 -0
- package/extensions/lmstudio/src/plain-text-tool-calls.ts +24 -0
- package/extensions/lmstudio/src/provider-auth.ts +59 -0
- package/extensions/lmstudio/src/runtime.test.ts +357 -0
- package/extensions/lmstudio/src/runtime.ts +276 -0
- package/extensions/lmstudio/src/setup.test.ts +1543 -0
- package/extensions/lmstudio/src/setup.ts +878 -0
- package/extensions/lmstudio/src/stream.test.ts +658 -0
- package/extensions/lmstudio/src/stream.ts +493 -0
- package/extensions/media-understanding-core/image-ops.ts +137 -0
- package/extensions/media-understanding-core/package.json +14 -0
- package/extensions/media-understanding-core/runtime-api.ts +9 -0
- package/extensions/media-understanding-core/src/runtime.ts +9 -0
- package/extensions/media-understanding-core/tsconfig.json +16 -0
- package/extensions/microsoft/index.ts +11 -0
- package/extensions/microsoft/microsoft.live.test.ts +14 -0
- package/extensions/microsoft/openclaw.plugin.json +15 -0
- package/extensions/microsoft/package.json +18 -0
- package/extensions/microsoft/speech-provider.test.ts +298 -0
- package/extensions/microsoft/speech-provider.ts +295 -0
- package/extensions/microsoft/test-api.ts +1 -0
- package/extensions/microsoft/tsconfig.json +16 -0
- package/extensions/microsoft/tts.test.ts +193 -0
- package/extensions/microsoft/tts.ts +137 -0
- package/extensions/minimax/README.md +37 -0
- package/extensions/minimax/api.ts +27 -0
- package/extensions/minimax/image-generation-provider.test.ts +313 -0
- package/extensions/minimax/image-generation-provider.ts +216 -0
- package/extensions/minimax/index.test.ts +408 -0
- package/extensions/minimax/index.ts +39 -0
- package/extensions/minimax/media-understanding-provider.ts +23 -0
- package/extensions/minimax/minimax.live.test.ts +115 -0
- package/extensions/minimax/model-definitions.test.ts +101 -0
- package/extensions/minimax/model-definitions.ts +91 -0
- package/extensions/minimax/music-generation-provider.test.ts +198 -0
- package/extensions/minimax/music-generation-provider.ts +259 -0
- package/extensions/minimax/oauth.runtime.ts +1 -0
- package/extensions/minimax/oauth.ts +233 -0
- package/extensions/minimax/onboard.test.ts +126 -0
- package/extensions/minimax/onboard.ts +104 -0
- package/extensions/minimax/openclaw.plugin.json +133 -0
- package/extensions/minimax/package.json +15 -0
- package/extensions/minimax/plugin-registration.contract.test.ts +15 -0
- package/extensions/minimax/provider-catalog.ts +86 -0
- package/extensions/minimax/provider-contract-api.ts +84 -0
- package/extensions/minimax/provider-discovery.contract.test.ts +3 -0
- package/extensions/minimax/provider-http.test-helpers.ts +142 -0
- package/extensions/minimax/provider-models.ts +21 -0
- package/extensions/minimax/provider-registration.ts +285 -0
- package/extensions/minimax/speech-provider.test.ts +576 -0
- package/extensions/minimax/speech-provider.ts +312 -0
- package/extensions/minimax/src/minimax-web-search-provider.runtime.ts +270 -0
- package/extensions/minimax/src/minimax-web-search-provider.test.ts +177 -0
- package/extensions/minimax/src/minimax-web-search-provider.ts +64 -0
- package/extensions/minimax/test-api.ts +11 -0
- package/extensions/minimax/tsconfig.json +16 -0
- package/extensions/minimax/tts.ts +116 -0
- package/extensions/minimax/video-generation-provider.test.ts +214 -0
- package/extensions/minimax/video-generation-provider.ts +456 -0
- package/extensions/minimax/web-search-contract-api.ts +35 -0
- package/extensions/minimax/web-search-provider.ts +1 -0
- package/extensions/mistral/api.test.ts +195 -0
- package/extensions/mistral/api.ts +81 -0
- package/extensions/mistral/embedding-provider.ts +52 -0
- package/extensions/mistral/index.ts +61 -0
- package/extensions/mistral/media-understanding-provider.test.ts +46 -0
- package/extensions/mistral/media-understanding-provider.ts +21 -0
- package/extensions/mistral/memory-embedding-adapter.ts +35 -0
- package/extensions/mistral/mistral.live.test.ts +62 -0
- package/extensions/mistral/model-definitions.test.ts +65 -0
- package/extensions/mistral/model-definitions.ts +37 -0
- package/extensions/mistral/onboard.test.ts +54 -0
- package/extensions/mistral/onboard.ts +31 -0
- package/extensions/mistral/openclaw.plugin.json +180 -0
- package/extensions/mistral/package.json +15 -0
- package/extensions/mistral/provider-catalog.ts +10 -0
- package/extensions/mistral/provider-compat.ts +62 -0
- package/extensions/mistral/realtime-transcription-provider.test.ts +61 -0
- package/extensions/mistral/realtime-transcription-provider.ts +280 -0
- package/extensions/mistral/test-api.ts +2 -0
- package/extensions/mistral/tsconfig.json +16 -0
- package/extensions/moonshot/api.ts +9 -0
- package/extensions/moonshot/index.test.ts +73 -0
- package/extensions/moonshot/index.ts +81 -0
- package/extensions/moonshot/media-understanding-provider.test.ts +92 -0
- package/extensions/moonshot/media-understanding-provider.ts +85 -0
- package/extensions/moonshot/moonshot.live.test.ts +56 -0
- package/extensions/moonshot/onboard.ts +38 -0
- package/extensions/moonshot/openclaw.plugin.json +209 -0
- package/extensions/moonshot/package.json +15 -0
- package/extensions/moonshot/provider-catalog.test.ts +84 -0
- package/extensions/moonshot/provider-catalog.ts +34 -0
- package/extensions/moonshot/provider-contract-api.ts +33 -0
- package/extensions/moonshot/provider-discovery.ts +17 -0
- package/extensions/moonshot/src/kimi-web-search-provider.runtime.ts +513 -0
- package/extensions/moonshot/src/kimi-web-search-provider.test.ts +297 -0
- package/extensions/moonshot/src/kimi-web-search-provider.ts +71 -0
- package/extensions/moonshot/test-api.ts +2 -0
- package/extensions/moonshot/tsconfig.json +16 -0
- package/extensions/moonshot/web-search-contract-api.ts +28 -0
- package/extensions/moonshot/web-search-provider.ts +1 -0
- package/extensions/nvidia/api.ts +6 -0
- package/extensions/nvidia/index.test.ts +180 -0
- package/extensions/nvidia/index.ts +64 -0
- package/extensions/nvidia/onboard.test.ts +49 -0
- package/extensions/nvidia/onboard.ts +30 -0
- package/extensions/nvidia/openclaw.plugin.json +122 -0
- package/extensions/nvidia/package.json +15 -0
- package/extensions/nvidia/plugin-registration.contract.test.ts +14 -0
- package/extensions/nvidia/provider-catalog.test.ts +21 -0
- package/extensions/nvidia/provider-catalog.ts +15 -0
- package/extensions/nvidia/tsconfig.json +16 -0
- package/extensions/ollama/README.md +3 -0
- package/extensions/ollama/api.ts +34 -0
- package/extensions/ollama/index.test.ts +979 -0
- package/extensions/ollama/index.ts +336 -0
- package/extensions/ollama/ollama.live.test.ts +287 -0
- package/extensions/ollama/openclaw.plugin.json +67 -0
- package/extensions/ollama/package.json +19 -0
- package/extensions/ollama/plugin-registration.contract.test.ts +7 -0
- package/extensions/ollama/provider-discovery.import-guard.test.ts +29 -0
- package/extensions/ollama/provider-discovery.test.ts +657 -0
- package/extensions/ollama/provider-discovery.ts +69 -0
- package/extensions/ollama/provider-policy-api.test.ts +72 -0
- package/extensions/ollama/provider-policy-api.ts +59 -0
- package/extensions/ollama/runtime-api.ts +22 -0
- package/extensions/ollama/src/defaults.ts +14 -0
- package/extensions/ollama/src/discovery-shared.test.ts +41 -0
- package/extensions/ollama/src/discovery-shared.ts +322 -0
- package/extensions/ollama/src/embedding-provider.test.ts +557 -0
- package/extensions/ollama/src/embedding-provider.ts +393 -0
- package/extensions/ollama/src/media-understanding-provider.ts +18 -0
- package/extensions/ollama/src/memory-embedding-adapter.ts +30 -0
- package/extensions/ollama/src/model-id.ts +24 -0
- package/extensions/ollama/src/ollama-json.ts +143 -0
- package/extensions/ollama/src/provider-base-url.test.ts +44 -0
- package/extensions/ollama/src/provider-base-url.ts +23 -0
- package/extensions/ollama/src/provider-models.ssrf.test.ts +41 -0
- package/extensions/ollama/src/provider-models.test.ts +312 -0
- package/extensions/ollama/src/provider-models.ts +327 -0
- package/extensions/ollama/src/setup.test.ts +771 -0
- package/extensions/ollama/src/setup.ts +743 -0
- package/extensions/ollama/src/stream-runtime.test.ts +2218 -0
- package/extensions/ollama/src/stream.test.ts +252 -0
- package/extensions/ollama/src/stream.ts +1347 -0
- package/extensions/ollama/src/web-search-provider.test.ts +488 -0
- package/extensions/ollama/src/web-search-provider.ts +350 -0
- package/extensions/ollama/src/wsl2-crash-loop-check.test.ts +157 -0
- package/extensions/ollama/src/wsl2-crash-loop-check.ts +84 -0
- package/extensions/ollama/tsconfig.json +16 -0
- package/extensions/ollama/web-search-contract-api.ts +26 -0
- package/extensions/ollama/web-search-provider.ts +1 -0
- package/extensions/openai/api.ts +16 -0
- package/extensions/openai/auth-choice-copy.ts +33 -0
- package/extensions/openai/base-url.test.ts +60 -0
- package/extensions/openai/base-url.ts +23 -0
- package/extensions/openai/default-models.test.ts +36 -0
- package/extensions/openai/default-models.ts +40 -0
- package/extensions/openai/embedding-batch.test.ts +10 -0
- package/extensions/openai/embedding-batch.ts +274 -0
- package/extensions/openai/embedding-provider.test.ts +102 -0
- package/extensions/openai/embedding-provider.ts +110 -0
- package/extensions/openai/image-generation-provider.test.ts +1624 -0
- package/extensions/openai/image-generation-provider.ts +903 -0
- package/extensions/openai/index.test.ts +630 -0
- package/extensions/openai/index.ts +58 -0
- package/extensions/openai/media-understanding-provider.test.ts +119 -0
- package/extensions/openai/media-understanding-provider.ts +51 -0
- package/extensions/openai/memory-embedding-adapter.test.ts +82 -0
- package/extensions/openai/memory-embedding-adapter.ts +68 -0
- package/extensions/openai/native-web-search.ts +103 -0
- package/extensions/openai/openai-codex-auth-identity.test.ts +77 -0
- package/extensions/openai/openai-codex-auth-identity.ts +100 -0
- package/extensions/openai/openai-codex-catalog.ts +12 -0
- package/extensions/openai/openai-codex-device-code.test.ts +248 -0
- package/extensions/openai/openai-codex-device-code.ts +309 -0
- package/extensions/openai/openai-codex-oauth.runtime.ts +348 -0
- package/extensions/openai/openai-codex-provider.runtime.ts +45 -0
- package/extensions/openai/openai-codex-provider.test.ts +883 -0
- package/extensions/openai/openai-codex-provider.ts +636 -0
- package/extensions/openai/openai-codex-shared.ts +3 -0
- package/extensions/openai/openai-provider.live.test.ts +196 -0
- package/extensions/openai/openai-provider.test.ts +929 -0
- package/extensions/openai/openai-provider.ts +325 -0
- package/extensions/openai/openai-tts.live.test.ts +44 -0
- package/extensions/openai/openai.live.test.ts +493 -0
- package/extensions/openai/openclaw.plugin.json +897 -0
- package/extensions/openai/openclaw.plugin.test.ts +181 -0
- package/extensions/openai/package.json +19 -0
- package/extensions/openai/plugin-registration.contract.test.ts +9 -0
- package/extensions/openai/prompt-overlay.ts +51 -0
- package/extensions/openai/provider-auth.contract.test.ts +12 -0
- package/extensions/openai/provider-catalog.contract.test.ts +3 -0
- package/extensions/openai/provider-contract-api.ts +83 -0
- package/extensions/openai/provider-policy-api.ts +20 -0
- package/extensions/openai/provider-runtime.contract.test.ts +3 -0
- package/extensions/openai/realtime-provider-shared.ts +168 -0
- package/extensions/openai/realtime-transcription-provider.test.ts +356 -0
- package/extensions/openai/realtime-transcription-provider.ts +307 -0
- package/extensions/openai/realtime-voice-provider.test.ts +1924 -0
- package/extensions/openai/realtime-voice-provider.ts +1315 -0
- package/extensions/openai/register.runtime.ts +15 -0
- package/extensions/openai/replay-policy.ts +32 -0
- package/extensions/openai/setup-api.test.ts +29 -0
- package/extensions/openai/setup-api.ts +166 -0
- package/extensions/openai/shared.ts +131 -0
- package/extensions/openai/speech-provider.test.ts +324 -0
- package/extensions/openai/speech-provider.ts +347 -0
- package/extensions/openai/test-api.ts +9 -0
- package/extensions/openai/test-support/provider-catalog.contract-test-support.ts +134 -0
- package/extensions/openai/thinking-policy.ts +55 -0
- package/extensions/openai/transport-policy.test.ts +128 -0
- package/extensions/openai/transport-policy.ts +111 -0
- package/extensions/openai/tsconfig.json +16 -0
- package/extensions/openai/tts.test.ts +444 -0
- package/extensions/openai/tts.ts +184 -0
- package/extensions/openai/video-generation-provider.test.ts +254 -0
- package/extensions/openai/video-generation-provider.ts +382 -0
- package/extensions/opencode/api.ts +9 -0
- package/extensions/opencode/index.test.ts +84 -0
- package/extensions/opencode/index.ts +74 -0
- package/extensions/opencode/media-understanding-provider.test.ts +44 -0
- package/extensions/opencode/media-understanding-provider.ts +42 -0
- package/extensions/opencode/onboard.test.ts +25 -0
- package/extensions/opencode/onboard.ts +29 -0
- package/extensions/opencode/openclaw.plugin.json +55 -0
- package/extensions/opencode/package.json +15 -0
- package/extensions/opencode/plugin-registration.contract.test.ts +8 -0
- package/extensions/opencode/provider-policy-api.test.ts +44 -0
- package/extensions/opencode/provider-policy-api.ts +5 -0
- package/extensions/opencode/tsconfig.json +16 -0
- package/extensions/opencode-go/api.ts +27 -0
- package/extensions/opencode-go/index.test.ts +305 -0
- package/extensions/opencode-go/index.ts +101 -0
- package/extensions/opencode-go/media-understanding-provider.test.ts +12 -0
- package/extensions/opencode-go/media-understanding-provider.ts +15 -0
- package/extensions/opencode-go/onboard.test.ts +28 -0
- package/extensions/opencode-go/onboard.ts +17 -0
- package/extensions/opencode-go/openclaw.plugin.json +106 -0
- package/extensions/opencode-go/package.json +15 -0
- package/extensions/opencode-go/plugin-registration.contract.test.ts +8 -0
- package/extensions/opencode-go/provider-catalog.ts +135 -0
- package/extensions/opencode-go/stream.ts +51 -0
- package/extensions/opencode-go/tsconfig.json +16 -0
- package/extensions/openrouter/api.ts +12 -0
- package/extensions/openrouter/image-generation-provider.test.ts +361 -0
- package/extensions/openrouter/image-generation-provider.ts +345 -0
- package/extensions/openrouter/index.test.ts +650 -0
- package/extensions/openrouter/index.ts +184 -0
- package/extensions/openrouter/media-understanding-provider.test.ts +260 -0
- package/extensions/openrouter/media-understanding-provider.ts +176 -0
- package/extensions/openrouter/models.ts +18 -0
- package/extensions/openrouter/music-generation-provider.test.ts +226 -0
- package/extensions/openrouter/music-generation-provider.ts +344 -0
- package/extensions/openrouter/onboard.test.ts +27 -0
- package/extensions/openrouter/onboard.ts +32 -0
- package/extensions/openrouter/openclaw.plugin.json +81 -0
- package/extensions/openrouter/openrouter.live.test.ts +118 -0
- package/extensions/openrouter/package.json +15 -0
- package/extensions/openrouter/provider-catalog.ts +88 -0
- package/extensions/openrouter/provider-contract-api.ts +27 -0
- package/extensions/openrouter/provider-policy-api.ts +5 -0
- package/extensions/openrouter/provider-routing.ts +87 -0
- package/extensions/openrouter/provider-runtime.contract.test.ts +3 -0
- package/extensions/openrouter/speech-provider.test.ts +218 -0
- package/extensions/openrouter/speech-provider.ts +46 -0
- package/extensions/openrouter/stream.ts +247 -0
- package/extensions/openrouter/test-api.ts +4 -0
- package/extensions/openrouter/thinking-policy.ts +34 -0
- package/extensions/openrouter/tsconfig.json +16 -0
- package/extensions/openrouter/video-generation-provider.test.ts +722 -0
- package/extensions/openrouter/video-generation-provider.ts +530 -0
- package/extensions/openrouter/video-http.ts +48 -0
- package/extensions/openrouter/video-model-catalog.ts +299 -0
- package/extensions/openshell/index.ts +28 -0
- package/extensions/openshell/npm-shrinkwrap.json +24 -0
- package/extensions/openshell/openclaw.plugin.json +118 -0
- package/extensions/openshell/package.json +37 -0
- package/extensions/openshell/src/backend.e2e.test.ts +595 -0
- package/extensions/openshell/src/backend.test.ts +40 -0
- package/extensions/openshell/src/backend.ts +512 -0
- package/extensions/openshell/src/backend.types.ts +11 -0
- package/extensions/openshell/src/cli.ts +85 -0
- package/extensions/openshell/src/config.test.ts +80 -0
- package/extensions/openshell/src/config.ts +194 -0
- package/extensions/openshell/src/fs-bridge.ts +370 -0
- package/extensions/openshell/src/mirror.test.ts +194 -0
- package/extensions/openshell/src/mirror.ts +141 -0
- package/extensions/openshell/src/openshell-core.test.ts +529 -0
- package/extensions/openshell/tsconfig.json +16 -0
- package/extensions/perplexity/index.ts +11 -0
- package/extensions/perplexity/openclaw.plugin.json +52 -0
- package/extensions/perplexity/package.json +15 -0
- package/extensions/perplexity/src/perplexity-web-search-provider.runtime.ts +551 -0
- package/extensions/perplexity/src/perplexity-web-search-provider.shared.ts +124 -0
- package/extensions/perplexity/src/perplexity-web-search-provider.test.ts +151 -0
- package/extensions/perplexity/src/perplexity-web-search-provider.ts +127 -0
- package/extensions/perplexity/test-api.ts +1 -0
- package/extensions/perplexity/tsconfig.json +16 -0
- package/extensions/perplexity/web-search-contract-api.ts +13 -0
- package/extensions/perplexity/web-search-provider.ts +1 -0
- package/extensions/qianfan/api.ts +6 -0
- package/extensions/qianfan/index.test.ts +133 -0
- package/extensions/qianfan/index.ts +31 -0
- package/extensions/qianfan/onboard.ts +61 -0
- package/extensions/qianfan/openclaw.plugin.json +78 -0
- package/extensions/qianfan/package.json +15 -0
- package/extensions/qianfan/provider-catalog.ts +13 -0
- package/extensions/qianfan/tsconfig.json +16 -0
- package/extensions/qwen/api.ts +34 -0
- package/extensions/qwen/index.test.ts +31 -0
- package/extensions/qwen/index.ts +181 -0
- package/extensions/qwen/media-understanding-provider.test.ts +76 -0
- package/extensions/qwen/media-understanding-provider.ts +88 -0
- package/extensions/qwen/model-definitions.ts +20 -0
- package/extensions/qwen/models.ts +202 -0
- package/extensions/qwen/onboard.ts +73 -0
- package/extensions/qwen/openclaw.plugin.json +143 -0
- package/extensions/qwen/package.json +15 -0
- package/extensions/qwen/plugin-registration.contract.test.ts +10 -0
- package/extensions/qwen/provider-catalog.test.ts +62 -0
- package/extensions/qwen/provider-catalog.ts +13 -0
- package/extensions/qwen/provider-discovery.contract.test.ts +3 -0
- package/extensions/qwen/stream.test.ts +171 -0
- package/extensions/qwen/stream.ts +87 -0
- package/extensions/qwen/test-api.ts +2 -0
- package/extensions/qwen/tsconfig.json +16 -0
- package/extensions/qwen/video-generation-provider.test.ts +155 -0
- package/extensions/qwen/video-generation-provider.ts +111 -0
- package/extensions/runway/index.ts +11 -0
- package/extensions/runway/openclaw.plugin.json +34 -0
- package/extensions/runway/package.json +15 -0
- package/extensions/runway/plugin-registration.contract.test.ts +7 -0
- package/extensions/runway/tsconfig.json +16 -0
- package/extensions/runway/video-generation-provider.test.ts +248 -0
- package/extensions/runway/video-generation-provider.ts +462 -0
- package/extensions/senseaudio/index.ts +11 -0
- package/extensions/senseaudio/media-understanding-provider.test.ts +136 -0
- package/extensions/senseaudio/media-understanding-provider.ts +25 -0
- package/extensions/senseaudio/openclaw.plugin.json +18 -0
- package/extensions/senseaudio/package.json +15 -0
- package/extensions/senseaudio/test-api.ts +1 -0
- package/extensions/sglang/README.md +3 -0
- package/extensions/sglang/api.ts +7 -0
- package/extensions/sglang/defaults.ts +4 -0
- package/extensions/sglang/index.test.ts +34 -0
- package/extensions/sglang/index.ts +95 -0
- package/extensions/sglang/models.ts +23 -0
- package/extensions/sglang/openclaw.plugin.json +45 -0
- package/extensions/sglang/package.json +15 -0
- package/extensions/sglang/provider-discovery.contract.test.ts +7 -0
- package/extensions/sglang/tsconfig.json +16 -0
- package/extensions/skill-workshop/api.ts +3 -0
- package/extensions/skill-workshop/index.test.ts +990 -0
- package/extensions/skill-workshop/index.ts +170 -0
- package/extensions/skill-workshop/openclaw.plugin.json +83 -0
- package/extensions/skill-workshop/package.json +18 -0
- package/extensions/skill-workshop/src/config.ts +50 -0
- package/extensions/skill-workshop/src/prompt.ts +18 -0
- package/extensions/skill-workshop/src/reviewer.ts +290 -0
- package/extensions/skill-workshop/src/scanner.ts +69 -0
- package/extensions/skill-workshop/src/signals.ts +95 -0
- package/extensions/skill-workshop/src/skills.ts +186 -0
- package/extensions/skill-workshop/src/store.ts +184 -0
- package/extensions/skill-workshop/src/text.ts +59 -0
- package/extensions/skill-workshop/src/tool.ts +200 -0
- package/extensions/skill-workshop/src/types.ts +42 -0
- package/extensions/skill-workshop/src/workshop.ts +85 -0
- package/extensions/speech-core/api.ts +54 -0
- package/extensions/speech-core/package.json +10 -0
- package/extensions/speech-core/runtime-api.ts +42 -0
- package/extensions/speech-core/src/tts.test.ts +1025 -0
- package/extensions/speech-core/src/tts.ts +1929 -0
- package/extensions/speech-core/tsconfig.json +16 -0
- package/extensions/stepfun/index.ts +252 -0
- package/extensions/stepfun/onboard.ts +73 -0
- package/extensions/stepfun/openclaw.plugin.json +148 -0
- package/extensions/stepfun/package.json +15 -0
- package/extensions/stepfun/provider-catalog.ts +40 -0
- package/extensions/stepfun/tsconfig.json +16 -0
- package/extensions/tencent/api.ts +7 -0
- package/extensions/tencent/index.ts +64 -0
- package/extensions/tencent/models.ts +25 -0
- package/extensions/tencent/onboard.ts +38 -0
- package/extensions/tencent/openclaw.plugin.json +86 -0
- package/extensions/tencent/package.json +15 -0
- package/extensions/tencent/provider-catalog.ts +14 -0
- package/extensions/tencent/provider-discovery.ts +17 -0
- package/extensions/tencent/tsconfig.json +16 -0
- package/extensions/together/api.ts +7 -0
- package/extensions/together/index.ts +42 -0
- package/extensions/together/models.ts +23 -0
- package/extensions/together/onboard.ts +26 -0
- package/extensions/together/openclaw.plugin.json +160 -0
- package/extensions/together/package.json +15 -0
- package/extensions/together/plugin-registration.contract.test.ts +8 -0
- package/extensions/together/provider-catalog.ts +10 -0
- package/extensions/together/tsconfig.json +16 -0
- package/extensions/together/video-generation-provider.test.ts +130 -0
- package/extensions/together/video-generation-provider.ts +281 -0
- package/extensions/tts-local-cli/index.ts +11 -0
- package/extensions/tts-local-cli/openclaw.plugin.json +15 -0
- package/extensions/tts-local-cli/package.json +15 -0
- package/extensions/tts-local-cli/speech-provider.test.ts +307 -0
- package/extensions/tts-local-cli/speech-provider.ts +455 -0
- package/extensions/venice/api.ts +8 -0
- package/extensions/venice/index.test.ts +109 -0
- package/extensions/venice/index.ts +70 -0
- package/extensions/venice/models.test.ts +291 -0
- package/extensions/venice/models.ts +302 -0
- package/extensions/venice/onboard.ts +27 -0
- package/extensions/venice/openclaw.plugin.json +504 -0
- package/extensions/venice/package.json +15 -0
- package/extensions/venice/provider-catalog.ts +11 -0
- package/extensions/venice/provider-runtime.contract.test.ts +3 -0
- package/extensions/venice/stream.ts +37 -0
- package/extensions/venice/tsconfig.json +16 -0
- package/extensions/vercel-ai-gateway/api.ts +12 -0
- package/extensions/vercel-ai-gateway/index.ts +41 -0
- package/extensions/vercel-ai-gateway/models.ts +226 -0
- package/extensions/vercel-ai-gateway/onboard.ts +32 -0
- package/extensions/vercel-ai-gateway/openclaw.plugin.json +61 -0
- package/extensions/vercel-ai-gateway/package.json +15 -0
- package/extensions/vercel-ai-gateway/provider-catalog.test.ts +96 -0
- package/extensions/vercel-ai-gateway/provider-catalog.ts +22 -0
- package/extensions/vercel-ai-gateway/thinking.test.ts +100 -0
- package/extensions/vercel-ai-gateway/thinking.ts +77 -0
- package/extensions/vercel-ai-gateway/tsconfig.json +16 -0
- package/extensions/vllm/README.md +3 -0
- package/extensions/vllm/api.ts +8 -0
- package/extensions/vllm/defaults.ts +4 -0
- package/extensions/vllm/index.ts +96 -0
- package/extensions/vllm/models.ts +23 -0
- package/extensions/vllm/openclaw.plugin.json +45 -0
- package/extensions/vllm/package.json +15 -0
- package/extensions/vllm/provider-discovery.contract.test.ts +7 -0
- package/extensions/vllm/register.runtime.ts +7 -0
- package/extensions/vllm/stream.test.ts +282 -0
- package/extensions/vllm/stream.ts +164 -0
- package/extensions/vllm/tsconfig.json +16 -0
- package/extensions/volcengine/api.ts +56 -0
- package/extensions/volcengine/index.test.ts +92 -0
- package/extensions/volcengine/index.ts +87 -0
- package/extensions/volcengine/models.ts +28 -0
- package/extensions/volcengine/openclaw.plugin.json +221 -0
- package/extensions/volcengine/package.json +15 -0
- package/extensions/volcengine/provider-catalog.ts +17 -0
- package/extensions/volcengine/provider-discovery.ts +31 -0
- package/extensions/volcengine/speech-provider.ts +229 -0
- package/extensions/volcengine/tsconfig.json +16 -0
- package/extensions/volcengine/tts.live.test.ts +30 -0
- package/extensions/volcengine/tts.test.ts +279 -0
- package/extensions/volcengine/tts.ts +266 -0
- package/extensions/voyage/embedding-batch.ts +315 -0
- package/extensions/voyage/embedding-provider.ts +90 -0
- package/extensions/voyage/index.ts +11 -0
- package/extensions/voyage/memory-embedding-adapter.ts +56 -0
- package/extensions/voyage/openclaw.plugin.json +18 -0
- package/extensions/voyage/package.json +15 -0
- package/extensions/xai/.boundary-stubs/anthropic-vertex-api.d.ts +2 -0
- package/extensions/xai/.boundary-stubs/ollama-api.d.ts +1 -0
- package/extensions/xai/.boundary-stubs/ollama-runtime-api.d.ts +16 -0
- package/extensions/xai/.boundary-stubs/speech-core-runtime-api.d.ts +33 -0
- package/extensions/xai/api.test.ts +51 -0
- package/extensions/xai/api.ts +119 -0
- package/extensions/xai/code-execution.test.ts +262 -0
- package/extensions/xai/code-execution.ts +146 -0
- package/extensions/xai/image-generation-provider.test.ts +293 -0
- package/extensions/xai/image-generation-provider.ts +124 -0
- package/extensions/xai/index.test.ts +263 -0
- package/extensions/xai/index.ts +233 -0
- package/extensions/xai/model-compat.ts +34 -0
- package/extensions/xai/model-definitions.ts +346 -0
- package/extensions/xai/model-id.test.ts +32 -0
- package/extensions/xai/model-id.ts +24 -0
- package/extensions/xai/onboard.test.ts +91 -0
- package/extensions/xai/onboard.ts +56 -0
- package/extensions/xai/openclaw.plugin.json +274 -0
- package/extensions/xai/package.json +20 -0
- package/extensions/xai/plugin-registration.contract.test.ts +11 -0
- package/extensions/xai/provider-catalog.ts +12 -0
- package/extensions/xai/provider-contract-api.ts +22 -0
- package/extensions/xai/provider-discovery.ts +27 -0
- package/extensions/xai/provider-models.ts +45 -0
- package/extensions/xai/provider-policy-api.test.ts +37 -0
- package/extensions/xai/provider-policy-api.ts +18 -0
- package/extensions/xai/realtime-transcription-provider.test.ts +273 -0
- package/extensions/xai/realtime-transcription-provider.ts +306 -0
- package/extensions/xai/runtime-model-compat.test.ts +60 -0
- package/extensions/xai/runtime-model-compat.ts +72 -0
- package/extensions/xai/setup-api.ts +22 -0
- package/extensions/xai/speech-provider.test.ts +184 -0
- package/extensions/xai/speech-provider.ts +275 -0
- package/extensions/xai/src/code-execution-shared.ts +110 -0
- package/extensions/xai/src/responses-tool-shared.test.ts +107 -0
- package/extensions/xai/src/responses-tool-shared.ts +163 -0
- package/extensions/xai/src/tool-auth-shared.test.ts +326 -0
- package/extensions/xai/src/tool-auth-shared.ts +219 -0
- package/extensions/xai/src/tool-config-shared.test.ts +36 -0
- package/extensions/xai/src/tool-config-shared.ts +32 -0
- package/extensions/xai/src/web-search-provider.runtime.ts +429 -0
- package/extensions/xai/src/web-search-response.types.ts +25 -0
- package/extensions/xai/src/web-search-shared.ts +124 -0
- package/extensions/xai/src/x-search-config.ts +78 -0
- package/extensions/xai/src/x-search-shared.ts +146 -0
- package/extensions/xai/src/xai-user-agent.test.ts +59 -0
- package/extensions/xai/src/xai-user-agent.ts +52 -0
- package/extensions/xai/stream.test.ts +410 -0
- package/extensions/xai/stream.ts +359 -0
- package/extensions/xai/stt.test.ts +106 -0
- package/extensions/xai/stt.ts +91 -0
- package/extensions/xai/test-api.ts +1 -0
- package/extensions/xai/test-helpers.ts +73 -0
- package/extensions/xai/tsconfig.json +64 -0
- package/extensions/xai/tts.test.ts +125 -0
- package/extensions/xai/tts.ts +97 -0
- package/extensions/xai/video-generation-provider.test.ts +443 -0
- package/extensions/xai/video-generation-provider.ts +499 -0
- package/extensions/xai/web-search-contract-api.ts +29 -0
- package/extensions/xai/web-search.test.ts +1242 -0
- package/extensions/xai/web-search.ts +68 -0
- package/extensions/xai/x-search-tool-shared.ts +48 -0
- package/extensions/xai/x-search.live.test.ts +76 -0
- package/extensions/xai/x-search.test.ts +484 -0
- package/extensions/xai/x-search.ts +230 -0
- package/extensions/xai/xai-oauth.test.ts +387 -0
- package/extensions/xai/xai-oauth.ts +752 -0
- package/extensions/xai/xai.live.test.ts +323 -0
- package/launcher.js +97 -0
- package/logger.js +87 -0
- package/package.json +21 -0
- package/server.js +1800 -0
- package/skills/ai-error-prevention/SKILL.md +105 -0
- package/skills/api-design/SKILL.md +523 -0
- package/skills/architecture-decision-records/SKILL.md +179 -0
- package/skills/autonomous-loops/SKILL.md +610 -0
- package/skills/backend-patterns/SKILL.md +598 -0
- package/skills/codebase-onboarding/SKILL.md +233 -0
- package/skills/coding-standards/SKILL.md +530 -0
- package/skills/database-migrations/SKILL.md +429 -0
- package/skills/deep-research/SKILL.md +155 -0
- package/skills/error-prevention/SKILL.md +61 -0
- package/skills/exa-search/SKILL.md +103 -0
- package/skills/frontend-slides/SKILL.md +184 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/git-workflow/SKILL.md +715 -0
- package/skills/iterative-retrieval/SKILL.md +211 -0
- package/skills/php-security/SKILL.md +70 -0
- package/skills/php-security/rules/thinkphp-security.rules +23 -0
- package/skills/requirement-ears/SKILL.md +31 -0
- package/skills/rules-distill/SKILL.md +264 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/search-first/SKILL.md +161 -0
- package/skills/security-review/SKILL.md +495 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/security-scan/SKILL.md +68 -0
- package/skills/security-scan/scripts/scan-config.ps1 +31 -0
- package/skills/security-scan/scripts/scan-sqli.ps1 +21 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/strategic-compact/SKILL.md +131 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/tdd-workflow/SKILL.md +90 -0
- package/skills/tdd-workflow/examples/IntegrationTestExample.php +35 -0
- package/skills/tdd-workflow/examples/UnitTestExample.php +39 -0
- package/skills/ui-spec-guider/ui-spec-guider/SKILL.md +37 -0
- package/skills/ui-spec-guider/ui-spec-guider.skill +0 -0
- package/skills/verification-loop/SKILL.md +126 -0
- package/start.bat +29 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iterative-retrieval
|
|
3
|
+
description: Pattern for progressively refining context retrieval to solve the subagent context problem
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Iterative Retrieval Pattern
|
|
8
|
+
|
|
9
|
+
Solves the "context problem" in multi-agent workflows where subagents don't know what context they need until they start working.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- Spawning subagents that need codebase context they cannot predict upfront
|
|
14
|
+
- Building multi-agent workflows where context is progressively refined
|
|
15
|
+
- Encountering "context too large" or "missing context" failures in agent tasks
|
|
16
|
+
- Designing RAG-like retrieval pipelines for code exploration
|
|
17
|
+
- Optimizing token usage in agent orchestration
|
|
18
|
+
|
|
19
|
+
## The Problem
|
|
20
|
+
|
|
21
|
+
Subagents are spawned with limited context. They don't know:
|
|
22
|
+
- Which files contain relevant code
|
|
23
|
+
- What patterns exist in the codebase
|
|
24
|
+
- What terminology the project uses
|
|
25
|
+
|
|
26
|
+
Standard approaches fail:
|
|
27
|
+
- **Send everything**: Exceeds context limits
|
|
28
|
+
- **Send nothing**: Agent lacks critical information
|
|
29
|
+
- **Guess what's needed**: Often wrong
|
|
30
|
+
|
|
31
|
+
## The Solution: Iterative Retrieval
|
|
32
|
+
|
|
33
|
+
A 4-phase loop that progressively refines context:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
┌─────────────────────────────────────────────┐
|
|
37
|
+
│ │
|
|
38
|
+
│ ┌──────────┐ ┌──────────┐ │
|
|
39
|
+
│ │ DISPATCH │─────│ EVALUATE │ │
|
|
40
|
+
│ └──────────┘ └──────────┘ │
|
|
41
|
+
│ ▲ │ │
|
|
42
|
+
│ │ ▼ │
|
|
43
|
+
│ ┌──────────┐ ┌──────────┐ │
|
|
44
|
+
│ │ LOOP │─────│ REFINE │ │
|
|
45
|
+
│ └──────────┘ └──────────┘ │
|
|
46
|
+
│ │
|
|
47
|
+
│ Max 3 cycles, then proceed │
|
|
48
|
+
└─────────────────────────────────────────────┘
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Phase 1: DISPATCH
|
|
52
|
+
|
|
53
|
+
Initial broad query to gather candidate files:
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// Start with high-level intent
|
|
57
|
+
const initialQuery = {
|
|
58
|
+
patterns: ['src/**/*.ts', 'lib/**/*.ts'],
|
|
59
|
+
keywords: ['authentication', 'user', 'session'],
|
|
60
|
+
excludes: ['*.test.ts', '*.spec.ts']
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Dispatch to retrieval agent
|
|
64
|
+
const candidates = await retrieveFiles(initialQuery);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Phase 2: EVALUATE
|
|
68
|
+
|
|
69
|
+
Assess retrieved content for relevance:
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
function evaluateRelevance(files, task) {
|
|
73
|
+
return files.map(file => ({
|
|
74
|
+
path: file.path,
|
|
75
|
+
relevance: scoreRelevance(file.content, task),
|
|
76
|
+
reason: explainRelevance(file.content, task),
|
|
77
|
+
missingContext: identifyGaps(file.content, task)
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Scoring criteria:
|
|
83
|
+
- **High (0.8-1.0)**: Directly implements target functionality
|
|
84
|
+
- **Medium (0.5-0.7)**: Contains related patterns or types
|
|
85
|
+
- **Low (0.2-0.4)**: Tangentially related
|
|
86
|
+
- **None (0-0.2)**: Not relevant, exclude
|
|
87
|
+
|
|
88
|
+
### Phase 3: REFINE
|
|
89
|
+
|
|
90
|
+
Update search criteria based on evaluation:
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
function refineQuery(evaluation, previousQuery) {
|
|
94
|
+
return {
|
|
95
|
+
// Add new patterns discovered in high-relevance files
|
|
96
|
+
patterns: [...previousQuery.patterns, ...extractPatterns(evaluation)],
|
|
97
|
+
|
|
98
|
+
// Add terminology found in codebase
|
|
99
|
+
keywords: [...previousQuery.keywords, ...extractKeywords(evaluation)],
|
|
100
|
+
|
|
101
|
+
// Exclude confirmed irrelevant paths
|
|
102
|
+
excludes: [...previousQuery.excludes, ...evaluation
|
|
103
|
+
.filter(e => e.relevance < 0.2)
|
|
104
|
+
.map(e => e.path)
|
|
105
|
+
],
|
|
106
|
+
|
|
107
|
+
// Target specific gaps
|
|
108
|
+
focusAreas: evaluation
|
|
109
|
+
.flatMap(e => e.missingContext)
|
|
110
|
+
.filter(unique)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Phase 4: LOOP
|
|
116
|
+
|
|
117
|
+
Repeat with refined criteria (max 3 cycles):
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
async function iterativeRetrieve(task, maxCycles = 3) {
|
|
121
|
+
let query = createInitialQuery(task);
|
|
122
|
+
let bestContext = [];
|
|
123
|
+
|
|
124
|
+
for (let cycle = 0; cycle < maxCycles; cycle++) {
|
|
125
|
+
const candidates = await retrieveFiles(query);
|
|
126
|
+
const evaluation = evaluateRelevance(candidates, task);
|
|
127
|
+
|
|
128
|
+
// Check if we have sufficient context
|
|
129
|
+
const highRelevance = evaluation.filter(e => e.relevance >= 0.7);
|
|
130
|
+
if (highRelevance.length >= 3 && !hasCriticalGaps(evaluation)) {
|
|
131
|
+
return highRelevance;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Refine and continue
|
|
135
|
+
query = refineQuery(evaluation, query);
|
|
136
|
+
bestContext = mergeContext(bestContext, highRelevance);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return bestContext;
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Practical Examples
|
|
144
|
+
|
|
145
|
+
### Example 1: Bug Fix Context
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Task: "Fix the authentication token expiry bug"
|
|
149
|
+
|
|
150
|
+
Cycle 1:
|
|
151
|
+
DISPATCH: Search for "token", "auth", "expiry" in src/**
|
|
152
|
+
EVALUATE: Found auth.ts (0.9), tokens.ts (0.8), user.ts (0.3)
|
|
153
|
+
REFINE: Add "refresh", "jwt" keywords; exclude user.ts
|
|
154
|
+
|
|
155
|
+
Cycle 2:
|
|
156
|
+
DISPATCH: Search refined terms
|
|
157
|
+
EVALUATE: Found session-manager.ts (0.95), jwt-utils.ts (0.85)
|
|
158
|
+
REFINE: Sufficient context (2 high-relevance files)
|
|
159
|
+
|
|
160
|
+
Result: auth.ts, tokens.ts, session-manager.ts, jwt-utils.ts
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Example 2: Feature Implementation
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
Task: "Add rate limiting to API endpoints"
|
|
167
|
+
|
|
168
|
+
Cycle 1:
|
|
169
|
+
DISPATCH: Search "rate", "limit", "api" in routes/**
|
|
170
|
+
EVALUATE: No matches - codebase uses "throttle" terminology
|
|
171
|
+
REFINE: Add "throttle", "middleware" keywords
|
|
172
|
+
|
|
173
|
+
Cycle 2:
|
|
174
|
+
DISPATCH: Search refined terms
|
|
175
|
+
EVALUATE: Found throttle.ts (0.9), middleware/index.ts (0.7)
|
|
176
|
+
REFINE: Need router patterns
|
|
177
|
+
|
|
178
|
+
Cycle 3:
|
|
179
|
+
DISPATCH: Search "router", "express" patterns
|
|
180
|
+
EVALUATE: Found router-setup.ts (0.8)
|
|
181
|
+
REFINE: Sufficient context
|
|
182
|
+
|
|
183
|
+
Result: throttle.ts, middleware/index.ts, router-setup.ts
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Integration with Agents
|
|
187
|
+
|
|
188
|
+
Use in agent prompts:
|
|
189
|
+
|
|
190
|
+
```markdown
|
|
191
|
+
When retrieving context for this task:
|
|
192
|
+
1. Start with broad keyword search
|
|
193
|
+
2. Evaluate each file's relevance (0-1 scale)
|
|
194
|
+
3. Identify what context is still missing
|
|
195
|
+
4. Refine search criteria and repeat (max 3 cycles)
|
|
196
|
+
5. Return files with relevance >= 0.7
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Best Practices
|
|
200
|
+
|
|
201
|
+
1. **Start broad, narrow progressively** - Don't over-specify initial queries
|
|
202
|
+
2. **Learn codebase terminology** - First cycle often reveals naming conventions
|
|
203
|
+
3. **Track what's missing** - Explicit gap identification drives refinement
|
|
204
|
+
4. **Stop at "good enough"** - 3 high-relevance files beats 10 mediocre ones
|
|
205
|
+
5. **Exclude confidently** - Low-relevance files won't become relevant
|
|
206
|
+
|
|
207
|
+
## Related
|
|
208
|
+
|
|
209
|
+
- [The Longform Guide](https://x.com/affaanmustafa/status/2014040193557471352) - Subagent orchestration section
|
|
210
|
+
- `continuous-learning` skill - For patterns that improve over time
|
|
211
|
+
- Agent definitions bundled with ECC (manual install path: `agents/`)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: php-security
|
|
3
|
+
description: PHP and ThinkPHP 5.0 security best practices, including common vulnerabilities (RCE, SQLi, XSS) and hardening.
|
|
4
|
+
origin: ECC (Adapted for ThinkPHP 5.0)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PHP/ThinkPHP Security Best Practices
|
|
8
|
+
|
|
9
|
+
Comprehensive security guidance for ThinkPHP 5.0 applications to protect against common vulnerabilities.
|
|
10
|
+
|
|
11
|
+
## Common ThinkPHP 5.0 Vulnerabilities
|
|
12
|
+
|
|
13
|
+
### 1. Remote Code Execution (RCE)
|
|
14
|
+
ThinkPHP 5.x has historically been vulnerable to RCE through controller/method manipulation in the URL.
|
|
15
|
+
- **Fix**: Ensure you are on ThinkPHP **5.0.24** or higher.
|
|
16
|
+
- **Check**: Look at `thinkphp/base.php` or `thinkphp/VERSION` for version information.
|
|
17
|
+
|
|
18
|
+
### 2. SQL Injection
|
|
19
|
+
Even with Query Builder, improper use of `whereRaw` or direct `Db::query` can lead to SQLi.
|
|
20
|
+
- **Best Practice**: Always use parameter binding or standard Query Builder methods (`where(['id' => $id])`).
|
|
21
|
+
- **Avoid**: `Db::query("SELECT * FROM users WHERE id = $id")` (Direct interpolation).
|
|
22
|
+
|
|
23
|
+
### 3. Debug Mode Leakage
|
|
24
|
+
Leaving `app_debug` set to `true` in production exposes stack traces and environment variables.
|
|
25
|
+
- **Setting**: `application/config.php` -> `'app_debug' => false`.
|
|
26
|
+
|
|
27
|
+
## Core Security Hardening
|
|
28
|
+
|
|
29
|
+
### Input Validation
|
|
30
|
+
Always use the `Validate` class for all user-provided data.
|
|
31
|
+
- **Example**:
|
|
32
|
+
```php
|
|
33
|
+
$rule = [
|
|
34
|
+
'id' => 'require|number',
|
|
35
|
+
'name' => 'require|max:25',
|
|
36
|
+
];
|
|
37
|
+
$data = ['id' => 1, 'name' => 'thinkphp'];
|
|
38
|
+
$validate = new \think\Validate($rule);
|
|
39
|
+
if (!$validate->check($data)) {
|
|
40
|
+
dump($validate->getError());
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### XSS Prevention
|
|
45
|
+
Sanitize all user-generated content before rendering.
|
|
46
|
+
- Use `htmlspecialchars()` or ThinkPHP's `input('param', '', 'filter')` helper.
|
|
47
|
+
- **Blade/Templates**: Ensure output is escaped.
|
|
48
|
+
|
|
49
|
+
### CSRF Protection
|
|
50
|
+
ThinkPHP 5.0 includes a token mechanism for form submission.
|
|
51
|
+
- **Usage**: Use `token()` in forms and verify in the controller.
|
|
52
|
+
|
|
53
|
+
## Secrets and Credentials
|
|
54
|
+
- Never hardcode database credentials in `application/database.php`. Use environment variables or a `.env` file if supported.
|
|
55
|
+
- Ensure `runtime/` and `file/` directories are not publicly accessible via the web server.
|
|
56
|
+
|
|
57
|
+
## File Upload Safety
|
|
58
|
+
- Validate MIME type, extension, and file size.
|
|
59
|
+
- Store uploads outside the web root if possible.
|
|
60
|
+
- Avoid using predictable filenames.
|
|
61
|
+
```php
|
|
62
|
+
$file = request()->file('image');
|
|
63
|
+
$info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads');
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Success Metrics
|
|
67
|
+
- No hardcoded secrets in the codebase.
|
|
68
|
+
- `app_debug` is disabled in production.
|
|
69
|
+
- All database queries use parameter binding.
|
|
70
|
+
- All user inputs are validated.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ThinkPHP 5.0 Security Rules (Grep Patterns)
|
|
2
|
+
|
|
3
|
+
## SQL Injection (Raw Queries)
|
|
4
|
+
# Identify whereRaw or Db::query with potential interpolation
|
|
5
|
+
grep -r "whereRaw" application/
|
|
6
|
+
grep -r "Db::query" application/
|
|
7
|
+
grep -r "->query(" application/
|
|
8
|
+
|
|
9
|
+
## RCE (Method/Controller manipulation)
|
|
10
|
+
# Check for vulnerable ThinkPHP versions (below 5.0.24)
|
|
11
|
+
grep "'VERSION'" thinkphp/base.php
|
|
12
|
+
|
|
13
|
+
## Insecure Configuration
|
|
14
|
+
# Check if app_debug is true in production
|
|
15
|
+
grep "'app_debug'" application/config.php | grep "true"
|
|
16
|
+
|
|
17
|
+
## Insecure File Uploads
|
|
18
|
+
# Check for missing extension validation in move()
|
|
19
|
+
grep -r "->move(" application/ | grep -v "validate"
|
|
20
|
+
|
|
21
|
+
## Hardcoded Credentials
|
|
22
|
+
# Scan database.php for potential hardcoded production passwords
|
|
23
|
+
grep -C 5 "'password'" application/database.php
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# EARS (Easy Approach to Requirements Syntax)
|
|
2
|
+
|
|
3
|
+
This skill provides templates and patterns for writing clear, unambiguous requirements for TheOMS.
|
|
4
|
+
|
|
5
|
+
## Requirement Types
|
|
6
|
+
|
|
7
|
+
| Type | Template | When to Use |
|
|
8
|
+
|------|----------|-------------|
|
|
9
|
+
| **Ubiquitous** | The `<system>` shall `<action>`. | For always-active behavior. |
|
|
10
|
+
| **Event-driven** | When `<trigger>`, the `<system>` shall `<action>`. | For actions triggered by events (e.g., API calls, webhooks). |
|
|
11
|
+
| **State-driven** | While `<state>`, the `<system>` shall `<action>`. | For behavior active during a specific state (e.g., while order is 'pending'). |
|
|
12
|
+
| **Conditional** | If `<condition>`, then the `<system>` shall `<action>`. | For logic branching based on data or environment. |
|
|
13
|
+
| **Unwanted Behavior** | If `<condition>`, then the `<system>` shall `<response>`. | For error handling and validation (e.g., invalid input). |
|
|
14
|
+
|
|
15
|
+
## TheOMS Examples
|
|
16
|
+
|
|
17
|
+
### API & Controller
|
|
18
|
+
- **Event-driven**: When a `POST` request is sent to `/api/v1/order/refund`, the system shall validate the `order_id` and `amount`.
|
|
19
|
+
- **Unwanted Behavior**: If the refund amount exceeds the original order amount, then the system shall return a `400 Bad Request` with error code `REFUND_EXCEEDS_TOTAL`.
|
|
20
|
+
|
|
21
|
+
### Business Logic (Service Layer)
|
|
22
|
+
- **Conditional**: If the user has a "VIP" membership, then the system shall apply a 10% discount to all purchase items.
|
|
23
|
+
- **State-driven**: While an inventory item is marked as "restricted", the system shall prevent it from being added to new purchase orders.
|
|
24
|
+
|
|
25
|
+
### Security
|
|
26
|
+
- **Ubiquitous**: The system shall sanitize all user-provided HTML input using `htmlspecialchars` before database storage.
|
|
27
|
+
|
|
28
|
+
## Best Practices
|
|
29
|
+
1. **Be Specific**: Use exact field names or model names.
|
|
30
|
+
2. **Avoid Ambiguity**: Avoid words like "fast", "efficient", or "user-friendly". Use measurable criteria.
|
|
31
|
+
3. **Traceability**: Each requirement must have a unique ID (e.g., `REQ-1`).
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rules-distill
|
|
3
|
+
description: "Scan skills to extract cross-cutting principles and distill them into rules — append, revise, or create new rule files"
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rules Distill
|
|
8
|
+
|
|
9
|
+
Scan installed skills, extract cross-cutting principles that appear in multiple skills, and distill them into rules — appending to existing rule files, revising outdated content, or creating new rule files.
|
|
10
|
+
|
|
11
|
+
Applies the "deterministic collection + LLM judgment" principle: scripts collect facts exhaustively, then an LLM cross-reads the full context and produces verdicts.
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Periodic rules maintenance (monthly or after installing new skills)
|
|
16
|
+
- After a skill-stocktake reveals patterns that should be rules
|
|
17
|
+
- When rules feel incomplete relative to the skills being used
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
The rules distillation process follows three phases:
|
|
22
|
+
|
|
23
|
+
### Phase 1: Inventory (Deterministic Collection)
|
|
24
|
+
|
|
25
|
+
#### 1a. Collect skill inventory
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
bash ~/.claude/skills/rules-distill/scripts/scan-skills.sh
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
#### 1b. Collect rules index
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
bash ~/.claude/skills/rules-distill/scripts/scan-rules.sh
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
#### 1c. Present to user
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Rules Distillation — Phase 1: Inventory
|
|
41
|
+
────────────────────────────────────────
|
|
42
|
+
Skills: {N} files scanned
|
|
43
|
+
Rules: {M} files ({K} headings indexed)
|
|
44
|
+
|
|
45
|
+
Proceeding to cross-read analysis...
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Phase 2: Cross-read, Match & Verdict (LLM Judgment)
|
|
49
|
+
|
|
50
|
+
Extraction and matching are unified in a single pass. Rules files are small enough (~800 lines total) that the full text can be provided to the LLM — no grep pre-filtering needed.
|
|
51
|
+
|
|
52
|
+
#### Batching
|
|
53
|
+
|
|
54
|
+
Group skills into **thematic clusters** based on their descriptions. Analyze each cluster in a subagent with the full rules text.
|
|
55
|
+
|
|
56
|
+
#### Cross-batch Merge
|
|
57
|
+
|
|
58
|
+
After all batches complete, merge candidates across batches:
|
|
59
|
+
- Deduplicate candidates with the same or overlapping principles
|
|
60
|
+
- Re-check the "2+ skills" requirement using evidence from **all** batches combined — a principle found in 1 skill per batch but 2+ skills total is valid
|
|
61
|
+
|
|
62
|
+
#### Subagent Prompt
|
|
63
|
+
|
|
64
|
+
Launch a general-purpose Agent with the following prompt:
|
|
65
|
+
|
|
66
|
+
````
|
|
67
|
+
You are an analyst who cross-reads skills to extract principles that should be promoted to rules.
|
|
68
|
+
|
|
69
|
+
## Input
|
|
70
|
+
- Skills: {full text of skills in this batch}
|
|
71
|
+
- Existing rules: {full text of all rule files}
|
|
72
|
+
|
|
73
|
+
## Extraction Criteria
|
|
74
|
+
|
|
75
|
+
Include a candidate ONLY if ALL of these are true:
|
|
76
|
+
|
|
77
|
+
1. **Appears in 2+ skills**: Principles found in only one skill should stay in that skill
|
|
78
|
+
2. **Actionable behavior change**: Can be written as "do X" or "don't do Y" — not "X is important"
|
|
79
|
+
3. **Clear violation risk**: What goes wrong if this principle is ignored (1 sentence)
|
|
80
|
+
4. **Not already in rules**: Check the full rules text — including concepts expressed in different words
|
|
81
|
+
|
|
82
|
+
## Matching & Verdict
|
|
83
|
+
|
|
84
|
+
For each candidate, compare against the full rules text and assign a verdict:
|
|
85
|
+
|
|
86
|
+
- **Append**: Add to an existing section of an existing rule file
|
|
87
|
+
- **Revise**: Existing rule content is inaccurate or insufficient — propose a correction
|
|
88
|
+
- **New Section**: Add a new section to an existing rule file
|
|
89
|
+
- **New File**: Create a new rule file
|
|
90
|
+
- **Already Covered**: Sufficiently covered in existing rules (even if worded differently)
|
|
91
|
+
- **Too Specific**: Should remain at the skill level
|
|
92
|
+
|
|
93
|
+
## Output Format (per candidate)
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"principle": "1-2 sentences in 'do X' / 'don't do Y' form",
|
|
98
|
+
"evidence": ["skill-name: §Section", "skill-name: §Section"],
|
|
99
|
+
"violation_risk": "1 sentence",
|
|
100
|
+
"verdict": "Append / Revise / New Section / New File / Already Covered / Too Specific",
|
|
101
|
+
"target_rule": "filename §Section, or 'new'",
|
|
102
|
+
"confidence": "high / medium / low",
|
|
103
|
+
"draft": "Draft text for Append/New Section/New File verdicts",
|
|
104
|
+
"revision": {
|
|
105
|
+
"reason": "Why the existing content is inaccurate or insufficient (Revise only)",
|
|
106
|
+
"before": "Current text to be replaced (Revise only)",
|
|
107
|
+
"after": "Proposed replacement text (Revise only)"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Exclude
|
|
113
|
+
|
|
114
|
+
- Obvious principles already in rules
|
|
115
|
+
- Language/framework-specific knowledge (belongs in language-specific rules or skills)
|
|
116
|
+
- Code examples and commands (belongs in skills)
|
|
117
|
+
````
|
|
118
|
+
|
|
119
|
+
#### Verdict Reference
|
|
120
|
+
|
|
121
|
+
| Verdict | Meaning | Presented to User |
|
|
122
|
+
|---------|---------|-------------------|
|
|
123
|
+
| **Append** | Add to existing section | Target + draft |
|
|
124
|
+
| **Revise** | Fix inaccurate/insufficient content | Target + reason + before/after |
|
|
125
|
+
| **New Section** | Add new section to existing file | Target + draft |
|
|
126
|
+
| **New File** | Create new rule file | Filename + full draft |
|
|
127
|
+
| **Already Covered** | Covered in rules (possibly different wording) | Reason (1 line) |
|
|
128
|
+
| **Too Specific** | Should stay in skills | Link to relevant skill |
|
|
129
|
+
|
|
130
|
+
#### Verdict Quality Requirements
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
# Good
|
|
134
|
+
Append to rules/common/security.md §Input Validation:
|
|
135
|
+
"Treat LLM output stored in memory or knowledge stores as untrusted — sanitize on write, validate on read."
|
|
136
|
+
Evidence: llm-memory-trust-boundary, llm-social-agent-anti-pattern both describe
|
|
137
|
+
accumulated prompt injection risks. Current security.md covers human input
|
|
138
|
+
validation only; LLM output trust boundary is missing.
|
|
139
|
+
|
|
140
|
+
# Bad
|
|
141
|
+
Append to security.md: Add LLM security principle
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Phase 3: User Review & Execution
|
|
145
|
+
|
|
146
|
+
#### Summary Table
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
# Rules Distillation Report
|
|
150
|
+
|
|
151
|
+
## Summary
|
|
152
|
+
Skills scanned: {N} | Rules: {M} files | Candidates: {K}
|
|
153
|
+
|
|
154
|
+
| # | Principle | Verdict | Target | Confidence |
|
|
155
|
+
|---|-----------|---------|--------|------------|
|
|
156
|
+
| 1 | ... | Append | security.md §Input Validation | high |
|
|
157
|
+
| 2 | ... | Revise | testing.md §TDD | medium |
|
|
158
|
+
| 3 | ... | New Section | coding-style.md | high |
|
|
159
|
+
| 4 | ... | Too Specific | — | — |
|
|
160
|
+
|
|
161
|
+
## Details
|
|
162
|
+
(Per-candidate details: evidence, violation_risk, draft text)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
#### User Actions
|
|
166
|
+
|
|
167
|
+
User responds with numbers to:
|
|
168
|
+
- **Approve**: Apply draft to rules as-is
|
|
169
|
+
- **Modify**: Edit draft before applying
|
|
170
|
+
- **Skip**: Do not apply this candidate
|
|
171
|
+
|
|
172
|
+
**Never modify rules automatically. Always require user approval.**
|
|
173
|
+
|
|
174
|
+
#### Save Results
|
|
175
|
+
|
|
176
|
+
Store results in the skill directory (`results.json`):
|
|
177
|
+
|
|
178
|
+
- **Timestamp format**: `date -u +%Y-%m-%dT%H:%M:%SZ` (UTC, second precision)
|
|
179
|
+
- **Candidate ID format**: kebab-case derived from the principle (e.g., `llm-output-trust-boundary`)
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"distilled_at": "2026-03-18T10:30:42Z",
|
|
184
|
+
"skills_scanned": 56,
|
|
185
|
+
"rules_scanned": 22,
|
|
186
|
+
"candidates": {
|
|
187
|
+
"llm-output-trust-boundary": {
|
|
188
|
+
"principle": "Treat LLM output as untrusted when stored or re-injected",
|
|
189
|
+
"verdict": "Append",
|
|
190
|
+
"target": "rules/common/security.md",
|
|
191
|
+
"evidence": ["llm-memory-trust-boundary", "llm-social-agent-anti-pattern"],
|
|
192
|
+
"status": "applied"
|
|
193
|
+
},
|
|
194
|
+
"iteration-bounds": {
|
|
195
|
+
"principle": "Define explicit stop conditions for all iteration loops",
|
|
196
|
+
"verdict": "New Section",
|
|
197
|
+
"target": "rules/common/coding-style.md",
|
|
198
|
+
"evidence": ["iterative-retrieval", "continuous-agent-loop", "agent-harness-construction"],
|
|
199
|
+
"status": "skipped"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Example
|
|
206
|
+
|
|
207
|
+
### End-to-end run
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
$ /rules-distill
|
|
211
|
+
|
|
212
|
+
Rules Distillation — Phase 1: Inventory
|
|
213
|
+
────────────────────────────────────────
|
|
214
|
+
Skills: 56 files scanned
|
|
215
|
+
Rules: 22 files (75 headings indexed)
|
|
216
|
+
|
|
217
|
+
Proceeding to cross-read analysis...
|
|
218
|
+
|
|
219
|
+
[Subagent analysis: Batch 1 (agent/meta skills) ...]
|
|
220
|
+
[Subagent analysis: Batch 2 (coding/pattern skills) ...]
|
|
221
|
+
[Cross-batch merge: 2 duplicates removed, 1 cross-batch candidate promoted]
|
|
222
|
+
|
|
223
|
+
# Rules Distillation Report
|
|
224
|
+
|
|
225
|
+
## Summary
|
|
226
|
+
Skills scanned: 56 | Rules: 22 files | Candidates: 4
|
|
227
|
+
|
|
228
|
+
| # | Principle | Verdict | Target | Confidence |
|
|
229
|
+
|---|-----------|---------|--------|------------|
|
|
230
|
+
| 1 | LLM output: normalize, type-check, sanitize before reuse | New Section | coding-style.md | high |
|
|
231
|
+
| 2 | Define explicit stop conditions for iteration loops | New Section | coding-style.md | high |
|
|
232
|
+
| 3 | Compact context at phase boundaries, not mid-task | Append | performance.md §Context Window | high |
|
|
233
|
+
| 4 | Separate business logic from I/O framework types | New Section | patterns.md | high |
|
|
234
|
+
|
|
235
|
+
## Details
|
|
236
|
+
|
|
237
|
+
### 1. LLM Output Validation
|
|
238
|
+
Verdict: New Section in coding-style.md
|
|
239
|
+
Evidence: parallel-subagent-batch-merge, llm-social-agent-anti-pattern, llm-memory-trust-boundary
|
|
240
|
+
Violation risk: Format drift, type mismatch, or syntax errors in LLM output crash downstream processing
|
|
241
|
+
Draft:
|
|
242
|
+
## LLM Output Validation
|
|
243
|
+
Normalize, type-check, and sanitize LLM output before reuse...
|
|
244
|
+
See skill: parallel-subagent-batch-merge, llm-memory-trust-boundary
|
|
245
|
+
|
|
246
|
+
[... details for candidates 2-4 ...]
|
|
247
|
+
|
|
248
|
+
Approve, modify, or skip each candidate by number:
|
|
249
|
+
> User: Approve 1, 3. Skip 2, 4.
|
|
250
|
+
|
|
251
|
+
✓ Applied: coding-style.md §LLM Output Validation
|
|
252
|
+
✓ Applied: performance.md §Context Window Management
|
|
253
|
+
✗ Skipped: Iteration Bounds
|
|
254
|
+
✗ Skipped: Boundary Type Conversion
|
|
255
|
+
|
|
256
|
+
Results saved to results.json
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Design Principles
|
|
260
|
+
|
|
261
|
+
- **What, not How**: Extract principles (rules territory) only. Code examples and commands stay in skills.
|
|
262
|
+
- **Link back**: Draft text should include `See skill: [name]` references so readers can find the detailed How.
|
|
263
|
+
- **Deterministic collection, LLM judgment**: Scripts guarantee exhaustiveness; the LLM guarantees contextual understanding.
|
|
264
|
+
- **Anti-abstraction safeguard**: The 3-layer filter (2+ skills evidence, actionable behavior test, violation risk) prevents overly abstract principles from entering rules.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# scan-rules.sh — enumerate rule files and extract H2 heading index
|
|
3
|
+
# Usage: scan-rules.sh [RULES_DIR]
|
|
4
|
+
# Output: JSON to stdout
|
|
5
|
+
#
|
|
6
|
+
# Environment:
|
|
7
|
+
# RULES_DISTILL_DIR Override ~/.claude/rules (for testing only)
|
|
8
|
+
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
RULES_DIR="${RULES_DISTILL_DIR:-${1:-$HOME/.claude/rules}}"
|
|
12
|
+
|
|
13
|
+
if [[ ! -d "$RULES_DIR" ]]; then
|
|
14
|
+
jq -n --arg path "$RULES_DIR" '{"error":"rules directory not found","path":$path}' >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
# Collect all .md files (excluding _archived/)
|
|
19
|
+
files=()
|
|
20
|
+
while IFS= read -r f; do
|
|
21
|
+
files+=("$f")
|
|
22
|
+
done < <(find "$RULES_DIR" -name '*.md' -not -path '*/_archived/*' -print | sort)
|
|
23
|
+
|
|
24
|
+
total=${#files[@]}
|
|
25
|
+
|
|
26
|
+
tmpdir=$(mktemp -d)
|
|
27
|
+
_rules_cleanup() { rm -rf "$tmpdir"; }
|
|
28
|
+
trap _rules_cleanup EXIT
|
|
29
|
+
|
|
30
|
+
for i in "${!files[@]}"; do
|
|
31
|
+
file="${files[$i]}"
|
|
32
|
+
rel_path="${file#"$HOME"/}"
|
|
33
|
+
rel_path="~/$rel_path"
|
|
34
|
+
|
|
35
|
+
# Extract H2 headings (## Title) into a JSON array via jq
|
|
36
|
+
headings_json=$({ grep -E '^## ' "$file" 2>/dev/null || true; } | sed 's/^## //' | jq -R . | jq -s '.')
|
|
37
|
+
|
|
38
|
+
# Get line count
|
|
39
|
+
line_count=$(wc -l < "$file" | tr -d ' ')
|
|
40
|
+
|
|
41
|
+
jq -n \
|
|
42
|
+
--arg path "$rel_path" \
|
|
43
|
+
--arg file "$(basename "$file")" \
|
|
44
|
+
--argjson lines "$line_count" \
|
|
45
|
+
--argjson headings "$headings_json" \
|
|
46
|
+
'{path:$path,file:$file,lines:$lines,headings:$headings}' \
|
|
47
|
+
> "$tmpdir/$i.json"
|
|
48
|
+
done
|
|
49
|
+
|
|
50
|
+
if [[ ${#files[@]} -eq 0 ]]; then
|
|
51
|
+
jq -n --arg dir "$RULES_DIR" '{rules_dir:$dir,total:0,rules:[]}'
|
|
52
|
+
else
|
|
53
|
+
jq -n \
|
|
54
|
+
--arg dir "$RULES_DIR" \
|
|
55
|
+
--argjson total "$total" \
|
|
56
|
+
--argjson rules "$(jq -s '.' "$tmpdir"/*.json)" \
|
|
57
|
+
'{rules_dir:$dir,total:$total,rules:$rules}'
|
|
58
|
+
fi
|