@qlingzzy/qling 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/CHANGELOG.md +122 -0
- package/LICENSE +21 -0
- package/README.en.md +129 -0
- package/README.md +416 -0
- package/dist/agent/subtask.d.ts +21 -0
- package/dist/agent/subtask.d.ts.map +1 -0
- package/dist/agent/subtask.js +55 -0
- package/dist/agent-loop.d.ts +151 -0
- package/dist/agent-loop.d.ts.map +1 -0
- package/dist/agent-loop.js +1498 -0
- package/dist/agents/isolation-policy.d.ts +14 -0
- package/dist/agents/isolation-policy.d.ts.map +1 -0
- package/dist/agents/isolation-policy.js +52 -0
- package/dist/channels/console-channel.d.ts +15 -0
- package/dist/channels/console-channel.d.ts.map +1 -0
- package/dist/channels/console-channel.js +66 -0
- package/dist/channels/registry.d.ts +10 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +25 -0
- package/dist/channels/slack-channel.d.ts +35 -0
- package/dist/channels/slack-channel.d.ts.map +1 -0
- package/dist/channels/slack-channel.js +232 -0
- package/dist/channels/telegram-channel.d.ts +32 -0
- package/dist/channels/telegram-channel.d.ts.map +1 -0
- package/dist/channels/telegram-channel.js +167 -0
- package/dist/channels/types.d.ts +31 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +4 -0
- package/dist/cli/bootstrap.d.ts +39 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +138 -0
- package/dist/cli/channel-bootstrap.d.ts +23 -0
- package/dist/cli/channel-bootstrap.d.ts.map +1 -0
- package/dist/cli/channel-bootstrap.js +46 -0
- package/dist/cli/daemon-control.d.ts +31 -0
- package/dist/cli/daemon-control.d.ts.map +1 -0
- package/dist/cli/daemon-control.js +177 -0
- package/dist/cli/guidance-panel.d.ts +11 -0
- package/dist/cli/guidance-panel.d.ts.map +1 -0
- package/dist/cli/guidance-panel.js +16 -0
- package/dist/cli/mcp-control.d.ts +7 -0
- package/dist/cli/mcp-control.d.ts.map +1 -0
- package/dist/cli/mcp-control.js +119 -0
- package/dist/cli/mission-views.d.ts +13 -0
- package/dist/cli/mission-views.d.ts.map +1 -0
- package/dist/cli/mission-views.js +82 -0
- package/dist/cli/setup.d.ts +9 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +140 -0
- package/dist/cli/startup-contract.d.ts +23 -0
- package/dist/cli/startup-contract.d.ts.map +1 -0
- package/dist/cli/startup-contract.js +694 -0
- package/dist/commands/agents.d.ts +3 -0
- package/dist/commands/agents.d.ts.map +1 -0
- package/dist/commands/agents.js +44 -0
- package/dist/commands/checkpoint.d.ts +3 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +52 -0
- package/dist/commands/claude-style.d.ts +12 -0
- package/dist/commands/claude-style.d.ts.map +1 -0
- package/dist/commands/claude-style.js +560 -0
- package/dist/commands/clear.d.ts +3 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +20 -0
- package/dist/commands/compact.d.ts +3 -0
- package/dist/commands/compact.d.ts.map +1 -0
- package/dist/commands/compact.js +23 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +22 -0
- package/dist/commands/connect.d.ts +3 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +102 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +13 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +22 -0
- package/dist/commands/detach.d.ts +3 -0
- package/dist/commands/detach.d.ts.map +1 -0
- package/dist/commands/detach.js +44 -0
- package/dist/commands/distill.d.ts +3 -0
- package/dist/commands/distill.d.ts.map +1 -0
- package/dist/commands/distill.js +23 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +13 -0
- package/dist/commands/dream.d.ts +3 -0
- package/dist/commands/dream.d.ts.map +1 -0
- package/dist/commands/dream.js +59 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +18 -0
- package/dist/commands/exports.d.ts +3 -0
- package/dist/commands/exports.d.ts.map +1 -0
- package/dist/commands/exports.js +15 -0
- package/dist/commands/goal.d.ts +3 -0
- package/dist/commands/goal.d.ts.map +1 -0
- package/dist/commands/goal.js +147 -0
- package/dist/commands/help.d.ts +4 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +75 -0
- package/dist/commands/hooks.d.ts +3 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +14 -0
- package/dist/commands/index.d.ts +29 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +417 -0
- package/dist/commands/knowledge.d.ts +8 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +191 -0
- package/dist/commands/loop.d.ts +3 -0
- package/dist/commands/loop.d.ts.map +1 -0
- package/dist/commands/loop.js +138 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +57 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +215 -0
- package/dist/commands/mission.d.ts +3 -0
- package/dist/commands/mission.d.ts.map +1 -0
- package/dist/commands/mission.js +129 -0
- package/dist/commands/permissions.d.ts +3 -0
- package/dist/commands/permissions.d.ts.map +1 -0
- package/dist/commands/permissions.js +82 -0
- package/dist/commands/privacy.d.ts +3 -0
- package/dist/commands/privacy.d.ts.map +1 -0
- package/dist/commands/privacy.js +13 -0
- package/dist/commands/recap.d.ts +3 -0
- package/dist/commands/recap.d.ts.map +1 -0
- package/dist/commands/recap.js +11 -0
- package/dist/commands/repomap.d.ts +3 -0
- package/dist/commands/repomap.d.ts.map +1 -0
- package/dist/commands/repomap.js +146 -0
- package/dist/commands/resume.d.ts +3 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +42 -0
- package/dist/commands/runtime.d.ts +61 -0
- package/dist/commands/runtime.d.ts.map +1 -0
- package/dist/commands/runtime.js +20 -0
- package/dist/commands/sessions.d.ts +3 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +34 -0
- package/dist/commands/shortcuts.d.ts +3 -0
- package/dist/commands/shortcuts.d.ts.map +1 -0
- package/dist/commands/shortcuts.js +12 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +20 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +31 -0
- package/dist/commands/statusline.d.ts +3 -0
- package/dist/commands/statusline.d.ts.map +1 -0
- package/dist/commands/statusline.js +40 -0
- package/dist/commands/storage.d.ts +3 -0
- package/dist/commands/storage.d.ts.map +1 -0
- package/dist/commands/storage.js +122 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +117 -0
- package/dist/commands/types.d.ts +14 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +86 -0
- package/dist/config-report.d.ts +35 -0
- package/dist/config-report.d.ts.map +1 -0
- package/dist/config-report.js +100 -0
- package/dist/config.d.ts +217 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +690 -0
- package/dist/context-compactor.d.ts +27 -0
- package/dist/context-compactor.d.ts.map +1 -0
- package/dist/context-compactor.js +489 -0
- package/dist/context-report.d.ts +35 -0
- package/dist/context-report.d.ts.map +1 -0
- package/dist/context-report.js +172 -0
- package/dist/daemon.d.ts +2 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +316 -0
- package/dist/dashboard-server.d.ts +18 -0
- package/dist/dashboard-server.d.ts.map +1 -0
- package/dist/dashboard-server.js +325 -0
- package/dist/discovery-registry.d.ts +28 -0
- package/dist/discovery-registry.d.ts.map +1 -0
- package/dist/discovery-registry.js +106 -0
- package/dist/discovery-types.d.ts +54 -0
- package/dist/discovery-types.d.ts.map +1 -0
- package/dist/discovery-types.js +5 -0
- package/dist/doctor.d.ts +31 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +343 -0
- package/dist/eval/runner.d.ts +10 -0
- package/dist/eval/runner.d.ts.map +1 -0
- package/dist/eval/runner.js +78 -0
- package/dist/eval/tasks.d.ts +3 -0
- package/dist/eval/tasks.d.ts.map +1 -0
- package/dist/eval/tasks.js +179 -0
- package/dist/eval/types.d.ts +31 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +4 -0
- package/dist/git/auto-commit.d.ts +28 -0
- package/dist/git/auto-commit.d.ts.map +1 -0
- package/dist/git/auto-commit.js +112 -0
- package/dist/guard/approval.d.ts +16 -0
- package/dist/guard/approval.d.ts.map +1 -0
- package/dist/guard/approval.js +68 -0
- package/dist/guard/content-filter.d.ts +15 -0
- package/dist/guard/content-filter.d.ts.map +1 -0
- package/dist/guard/content-filter.js +102 -0
- package/dist/guard/permissions.d.ts +17 -0
- package/dist/guard/permissions.d.ts.map +1 -0
- package/dist/guard/permissions.js +54 -0
- package/dist/guard/rate-limit.d.ts +14 -0
- package/dist/guard/rate-limit.d.ts.map +1 -0
- package/dist/guard/rate-limit.js +47 -0
- package/dist/guard.d.ts +21 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +144 -0
- package/dist/help-topics.d.ts +19 -0
- package/dist/help-topics.d.ts.map +1 -0
- package/dist/help-topics.js +391 -0
- package/dist/hooks-report.d.ts +23 -0
- package/dist/hooks-report.d.ts.map +1 -0
- package/dist/hooks-report.js +44 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +4 -0
- package/dist/i18n/zh-cn.d.ts +180 -0
- package/dist/i18n/zh-cn.d.ts.map +1 -0
- package/dist/i18n/zh-cn.js +184 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1157 -0
- package/dist/knowledge-agent.d.ts +47 -0
- package/dist/knowledge-agent.d.ts.map +1 -0
- package/dist/knowledge-agent.js +320 -0
- package/dist/local-status-report.d.ts +23 -0
- package/dist/local-status-report.d.ts.map +1 -0
- package/dist/local-status-report.js +63 -0
- package/dist/local-storage-report.d.ts +32 -0
- package/dist/local-storage-report.d.ts.map +1 -0
- package/dist/local-storage-report.js +171 -0
- package/dist/mcp/bridge.d.ts +11 -0
- package/dist/mcp/bridge.d.ts.map +1 -0
- package/dist/mcp/bridge.js +37 -0
- package/dist/mcp/client.d.ts +26 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +209 -0
- package/dist/mcp/http-transport.d.ts +21 -0
- package/dist/mcp/http-transport.d.ts.map +1 -0
- package/dist/mcp/http-transport.js +126 -0
- package/dist/mcp/presets.d.ts +22 -0
- package/dist/mcp/presets.d.ts.map +1 -0
- package/dist/mcp/presets.js +80 -0
- package/dist/mcp/registry.d.ts +23 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +85 -0
- package/dist/mcp/stdio-transport.d.ts +25 -0
- package/dist/mcp/stdio-transport.d.ts.map +1 -0
- package/dist/mcp/stdio-transport.js +92 -0
- package/dist/mcp/store.d.ts +41 -0
- package/dist/mcp/store.d.ts.map +1 -0
- package/dist/mcp/store.js +100 -0
- package/dist/mcp/types.d.ts +40 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +4 -0
- package/dist/mcp-report.d.ts +30 -0
- package/dist/mcp-report.d.ts.map +1 -0
- package/dist/mcp-report.js +104 -0
- package/dist/memory/cognitive-index.d.ts +56 -0
- package/dist/memory/cognitive-index.d.ts.map +1 -0
- package/dist/memory/cognitive-index.js +265 -0
- package/dist/memory/compactor.d.ts +28 -0
- package/dist/memory/compactor.d.ts.map +1 -0
- package/dist/memory/compactor.js +92 -0
- package/dist/memory/consolidation.d.ts +13 -0
- package/dist/memory/consolidation.d.ts.map +1 -0
- package/dist/memory/consolidation.js +77 -0
- package/dist/memory/embedding.d.ts +15 -0
- package/dist/memory/embedding.d.ts.map +1 -0
- package/dist/memory/embedding.js +59 -0
- package/dist/memory/memory-llm-dream.d.ts +3 -0
- package/dist/memory/memory-llm-dream.d.ts.map +1 -0
- package/dist/memory/memory-llm-dream.js +59 -0
- package/dist/memory/projection-worker.d.ts +30 -0
- package/dist/memory/projection-worker.d.ts.map +1 -0
- package/dist/memory/projection-worker.js +92 -0
- package/dist/memory/semantic-index.d.ts +18 -0
- package/dist/memory/semantic-index.d.ts.map +1 -0
- package/dist/memory/semantic-index.js +86 -0
- package/dist/memory/wal.d.ts +33 -0
- package/dist/memory/wal.d.ts.map +1 -0
- package/dist/memory/wal.js +131 -0
- package/dist/memory-report.d.ts +120 -0
- package/dist/memory-report.d.ts.map +1 -0
- package/dist/memory-report.js +726 -0
- package/dist/memory.d.ts +149 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +632 -0
- package/dist/metrics/agent-telemetry.d.ts +14 -0
- package/dist/metrics/agent-telemetry.d.ts.map +1 -0
- package/dist/metrics/agent-telemetry.js +44 -0
- package/dist/metrics/collector.d.ts +17 -0
- package/dist/metrics/collector.d.ts.map +1 -0
- package/dist/metrics/collector.js +137 -0
- package/dist/metrics/types.d.ts +14 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +4 -0
- package/dist/mission/manager.d.ts +28 -0
- package/dist/mission/manager.d.ts.map +1 -0
- package/dist/mission/manager.js +208 -0
- package/dist/mission/types.d.ts +37 -0
- package/dist/mission/types.d.ts.map +1 -0
- package/dist/mission/types.js +5 -0
- package/dist/onboarding/tutorial.d.ts +33 -0
- package/dist/onboarding/tutorial.d.ts.map +1 -0
- package/dist/onboarding/tutorial.js +96 -0
- package/dist/output-style.d.ts +14 -0
- package/dist/output-style.d.ts.map +1 -0
- package/dist/output-style.js +29 -0
- package/dist/package-version.d.ts +12 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +42 -0
- package/dist/permissions-report.d.ts +42 -0
- package/dist/permissions-report.d.ts.map +1 -0
- package/dist/permissions-report.js +120 -0
- package/dist/pipeline/consistency-checker.d.ts +8 -0
- package/dist/pipeline/consistency-checker.d.ts.map +1 -0
- package/dist/pipeline/consistency-checker.js +40 -0
- package/dist/pipeline/example-generator.d.ts +4 -0
- package/dist/pipeline/example-generator.d.ts.map +1 -0
- package/dist/pipeline/example-generator.js +64 -0
- package/dist/pipeline/hooks.d.ts +68 -0
- package/dist/pipeline/hooks.d.ts.map +1 -0
- package/dist/pipeline/hooks.js +377 -0
- package/dist/pipeline/sections.d.ts +41 -0
- package/dist/pipeline/sections.d.ts.map +1 -0
- package/dist/pipeline/sections.js +244 -0
- package/dist/pipeline/verification.d.ts +12 -0
- package/dist/pipeline/verification.d.ts.map +1 -0
- package/dist/pipeline/verification.js +138 -0
- package/dist/privacy-report.d.ts +24 -0
- package/dist/privacy-report.d.ts.map +1 -0
- package/dist/privacy-report.js +78 -0
- package/dist/providers/presets.d.ts +25 -0
- package/dist/providers/presets.d.ts.map +1 -0
- package/dist/providers/presets.js +205 -0
- package/dist/recap.d.ts +38 -0
- package/dist/recap.d.ts.map +1 -0
- package/dist/recap.js +154 -0
- package/dist/repl.d.ts +41 -0
- package/dist/repl.d.ts.map +1 -0
- package/dist/repl.js +396 -0
- package/dist/runtime-paths.d.ts +32 -0
- package/dist/runtime-paths.d.ts.map +1 -0
- package/dist/runtime-paths.js +134 -0
- package/dist/sdk.d.ts +12 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +18 -0
- package/dist/session/daemon-session-api.d.ts +22 -0
- package/dist/session/daemon-session-api.d.ts.map +1 -0
- package/dist/session/daemon-session-api.js +48 -0
- package/dist/session/durable-session-supervisor.d.ts +24 -0
- package/dist/session/durable-session-supervisor.d.ts.map +1 -0
- package/dist/session/durable-session-supervisor.js +195 -0
- package/dist/session/goal-controller.d.ts +43 -0
- package/dist/session/goal-controller.d.ts.map +1 -0
- package/dist/session/goal-controller.js +77 -0
- package/dist/session/goal-evaluator.d.ts +29 -0
- package/dist/session/goal-evaluator.d.ts.map +1 -0
- package/dist/session/goal-evaluator.js +100 -0
- package/dist/session/loop-prompt.d.ts +14 -0
- package/dist/session/loop-prompt.d.ts.map +1 -0
- package/dist/session/loop-prompt.js +49 -0
- package/dist/session/session-goal-manager.d.ts +51 -0
- package/dist/session/session-goal-manager.d.ts.map +1 -0
- package/dist/session/session-goal-manager.js +118 -0
- package/dist/session/session-registry.d.ts +40 -0
- package/dist/session/session-registry.d.ts.map +1 -0
- package/dist/session/session-registry.js +124 -0
- package/dist/session/session-scheduler.d.ts +59 -0
- package/dist/session/session-scheduler.d.ts.map +1 -0
- package/dist/session/session-scheduler.js +170 -0
- package/dist/session-checkpoint-report.d.ts +22 -0
- package/dist/session-checkpoint-report.d.ts.map +1 -0
- package/dist/session-checkpoint-report.js +99 -0
- package/dist/session-export-index.d.ts +23 -0
- package/dist/session-export-index.d.ts.map +1 -0
- package/dist/session-export-index.js +96 -0
- package/dist/session-export.d.ts +28 -0
- package/dist/session-export.d.ts.map +1 -0
- package/dist/session-export.js +99 -0
- package/dist/session-goal-report.d.ts +37 -0
- package/dist/session-goal-report.d.ts.map +1 -0
- package/dist/session-goal-report.js +219 -0
- package/dist/session-list-report.d.ts +16 -0
- package/dist/session-list-report.d.ts.map +1 -0
- package/dist/session-list-report.js +60 -0
- package/dist/session-task-report.d.ts +23 -0
- package/dist/session-task-report.d.ts.map +1 -0
- package/dist/session-task-report.js +183 -0
- package/dist/shortcuts.d.ts +2 -0
- package/dist/shortcuts.d.ts.map +1 -0
- package/dist/shortcuts.js +32 -0
- package/dist/skills/registry.d.ts +8 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +119 -0
- package/dist/skills/types.d.ts +7 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +4 -0
- package/dist/statusline.d.ts +37 -0
- package/dist/statusline.d.ts.map +1 -0
- package/dist/statusline.js +207 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +278 -0
- package/dist/tools/browser-fetch.d.ts +7 -0
- package/dist/tools/browser-fetch.d.ts.map +1 -0
- package/dist/tools/browser-fetch.js +133 -0
- package/dist/tools/error-utils.d.ts +9 -0
- package/dist/tools/error-utils.d.ts.map +1 -0
- package/dist/tools/error-utils.js +35 -0
- package/dist/tools/index.d.ts +27 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +86 -0
- package/dist/tools/patch.d.ts +22 -0
- package/dist/tools/patch.d.ts.map +1 -0
- package/dist/tools/patch.js +458 -0
- package/dist/tools/planner.d.ts +7 -0
- package/dist/tools/planner.d.ts.map +1 -0
- package/dist/tools/planner.js +148 -0
- package/dist/tools/read.d.ts +8 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +114 -0
- package/dist/tools/search.d.ts +11 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +636 -0
- package/dist/tools/skill.d.ts +8 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +181 -0
- package/dist/tools/subtask.d.ts +9 -0
- package/dist/tools/subtask.d.ts.map +1 -0
- package/dist/tools/subtask.js +120 -0
- package/dist/tools/todo.d.ts +8 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +170 -0
- package/dist/tools/url-fetch.d.ts +11 -0
- package/dist/tools/url-fetch.d.ts.map +1 -0
- package/dist/tools/url-fetch.js +208 -0
- package/dist/tools/vision-analyze.d.ts +9 -0
- package/dist/tools/vision-analyze.d.ts.map +1 -0
- package/dist/tools/vision-analyze.js +179 -0
- package/dist/tools/write.d.ts +7 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +128 -0
- package/dist/tui/chrome.d.ts +7 -0
- package/dist/tui/chrome.d.ts.map +1 -0
- package/dist/tui/chrome.js +22 -0
- package/dist/tui/input-buffer.d.ts +37 -0
- package/dist/tui/input-buffer.d.ts.map +1 -0
- package/dist/tui/input-buffer.js +228 -0
- package/dist/tui/input-history.d.ts +11 -0
- package/dist/tui/input-history.d.ts.map +1 -0
- package/dist/tui/input-history.js +69 -0
- package/dist/tui/input-queue.d.ts +27 -0
- package/dist/tui/input-queue.d.ts.map +1 -0
- package/dist/tui/input-queue.js +85 -0
- package/dist/tui/markdown.d.ts +10 -0
- package/dist/tui/markdown.d.ts.map +1 -0
- package/dist/tui/markdown.js +396 -0
- package/dist/tui/progress.d.ts +3 -0
- package/dist/tui/progress.d.ts.map +1 -0
- package/dist/tui/progress.js +13 -0
- package/dist/tui/shell.d.ts +67 -0
- package/dist/tui/shell.d.ts.map +1 -0
- package/dist/tui/shell.js +271 -0
- package/dist/tui/streaming-repl.d.ts +39 -0
- package/dist/tui/streaming-repl.d.ts.map +1 -0
- package/dist/tui/streaming-repl.js +460 -0
- package/dist/tui/streaming-tui.d.ts +174 -0
- package/dist/tui/streaming-tui.d.ts.map +1 -0
- package/dist/tui/streaming-tui.js +1049 -0
- package/dist/types.d.ts +221 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +37 -0
- package/dist/utils/symbol-extractor.d.ts +8 -0
- package/dist/utils/symbol-extractor.d.ts.map +1 -0
- package/dist/utils/symbol-extractor.js +190 -0
- package/dist/workflow-runtime.d.ts +45 -0
- package/dist/workflow-runtime.d.ts.map +1 -0
- package/dist/workflow-runtime.js +146 -0
- package/dist/workflow-types.d.ts +73 -0
- package/dist/workflow-types.d.ts.map +1 -0
- package/dist/workflow-types.js +34 -0
- package/docs/docker.md +66 -0
- package/docs/install.md +159 -0
- package/docs/sdk.md +67 -0
- package/docs/skills.md +51 -0
- package/package.json +102 -0
- package/scripts/bootstrap.mjs +63 -0
- package/scripts/check_image.ps1 +18 -0
- package/scripts/clean-dist.mjs +18 -0
- package/scripts/copy_image.ps1 +5 -0
- package/scripts/eval-smoke.mjs +17 -0
- package/skills/examples/repo-triage/SKILL.md +50 -0
- package/skills/qling.md +42 -0
- package/skills/templates/SKILL.md +37 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 轻灵 - s05 Skill 加载
|
|
3
|
+
// 动态加载 .md 知识文件,通过 tool_result 注入上下文
|
|
4
|
+
// 格言:用到什么知识,临时加载什么知识,不塞 system prompt
|
|
5
|
+
// ============================================================
|
|
6
|
+
import { readFile } from "fs/promises";
|
|
7
|
+
import { existsSync } from "fs";
|
|
8
|
+
import { resolve, join } from "path";
|
|
9
|
+
import { toolError, toolSuccess } from "./error-utils.js";
|
|
10
|
+
import { listSkills, searchSkills } from "../skills/registry.js";
|
|
11
|
+
// Skill 查找路径
|
|
12
|
+
// 支持两种格式:
|
|
13
|
+
// name="foo" → 搜索 skills/foo.md
|
|
14
|
+
// name="@scope/foo" → 搜索 skills/scopes/scope/foo.md
|
|
15
|
+
export function getSkillDirs() {
|
|
16
|
+
const dirs = [
|
|
17
|
+
resolve(process.cwd(), "skills"),
|
|
18
|
+
resolve(process.cwd(), ".qling/skills"),
|
|
19
|
+
];
|
|
20
|
+
const hermesHome = process.env.HERMES_HOME;
|
|
21
|
+
if (hermesHome && hermesHome.trim()) {
|
|
22
|
+
dirs.push(join(hermesHome.trim(), "skills"));
|
|
23
|
+
}
|
|
24
|
+
return dirs;
|
|
25
|
+
}
|
|
26
|
+
function resolveSkillPath(name) {
|
|
27
|
+
const dirs = getSkillDirs();
|
|
28
|
+
// @scope/name 格式
|
|
29
|
+
const scoped = name.match(/^@([^/]+)\/(.+)$/);
|
|
30
|
+
if (scoped) {
|
|
31
|
+
const [, scope, base] = scoped;
|
|
32
|
+
for (const dir of dirs) {
|
|
33
|
+
// scopes/scope/name.md
|
|
34
|
+
const p = join(dir, "scopes", scope, `${base}.md`);
|
|
35
|
+
if (existsSync(p))
|
|
36
|
+
return p;
|
|
37
|
+
// scopes/scope/name/index.md
|
|
38
|
+
const p2 = join(dir, "scopes", scope, base, "index.md");
|
|
39
|
+
if (existsSync(p2))
|
|
40
|
+
return p2;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
// 普通 name 格式
|
|
45
|
+
for (const dir of dirs) {
|
|
46
|
+
const p = join(dir, `${name}.md`);
|
|
47
|
+
if (existsSync(p))
|
|
48
|
+
return p;
|
|
49
|
+
// name/index.md
|
|
50
|
+
const p2 = join(dir, name, "index.md");
|
|
51
|
+
if (existsSync(p2))
|
|
52
|
+
return p2;
|
|
53
|
+
const p3 = join(dir, name, "SKILL.md");
|
|
54
|
+
if (existsSync(p3))
|
|
55
|
+
return p3;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
export const skillTool = {
|
|
60
|
+
name: "skill",
|
|
61
|
+
description: "Dynamically load a skill/knowledge file (.md). Use when encountering unfamiliar tools, APIs, or frameworks. Use 'list' to discover available skills, 'search query=X' to find skills, or 'name=X' to load one.",
|
|
62
|
+
longDescription: `动态加载技能/知识文件(SKILL.md),内容通过 tool_result 注入上下文。
|
|
63
|
+
|
|
64
|
+
**核心原则**: "用到什么知识,临时加载什么知识,不塞 system prompt"
|
|
65
|
+
|
|
66
|
+
**三种操作**:
|
|
67
|
+
- skill list — 列出所有可用技能
|
|
68
|
+
- skill search query="docker" — 搜索技能
|
|
69
|
+
- skill name="docker" — 加载技能内容
|
|
70
|
+
|
|
71
|
+
**查找路径**:
|
|
72
|
+
- skills/{name}.md
|
|
73
|
+
- skills/{category}/{name}.md
|
|
74
|
+
- @scope/name → scopes/{scope}/{name}.md
|
|
75
|
+
|
|
76
|
+
**使用场景**:
|
|
77
|
+
- 调用 docker 但不熟悉命令 → skill(name="docker")
|
|
78
|
+
- 调用 Kubernetes API → skill(name="k8s-debug")
|
|
79
|
+
- 不确定有哪些技能 → skill list
|
|
80
|
+
- 搜索特定领域技能 → skill search query="api"
|
|
81
|
+
|
|
82
|
+
**返回内容**:
|
|
83
|
+
- 文件的 markdown body(不含 frontmatter)
|
|
84
|
+
- 包含使用说明、命令示例、已知陷阱`,
|
|
85
|
+
parameters: {
|
|
86
|
+
type: "object",
|
|
87
|
+
properties: {
|
|
88
|
+
name: {
|
|
89
|
+
type: "string",
|
|
90
|
+
description: "Skill name without .md extension (e.g. 'docker', '@k8s/debug'), or 'list' to list all skills",
|
|
91
|
+
},
|
|
92
|
+
query: {
|
|
93
|
+
type: "string",
|
|
94
|
+
description: "Search query for finding skills by name/description/tags (used with search action)",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
required: [],
|
|
98
|
+
},
|
|
99
|
+
paramSchema: {
|
|
100
|
+
name: {
|
|
101
|
+
type: "string",
|
|
102
|
+
description: "技能名称(不含 .md 后缀)。支持普通格式和 @scope/name 格式。传 'list' 列出所有技能。",
|
|
103
|
+
minLength: 1,
|
|
104
|
+
pattern: "^[a-zA-Z0-9_/@-]+$",
|
|
105
|
+
},
|
|
106
|
+
query: {
|
|
107
|
+
type: "string",
|
|
108
|
+
description: "搜索关键词,按名称/描述/标签模糊匹配。",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
examples: [
|
|
112
|
+
'skill list',
|
|
113
|
+
'skill search query="docker"',
|
|
114
|
+
'skill name="docker"',
|
|
115
|
+
'skill name="python-async"',
|
|
116
|
+
'skill name="@k8s/debug"',
|
|
117
|
+
],
|
|
118
|
+
seeAlso: ["bash", "todo"],
|
|
119
|
+
scenes: ["knowledge", "planning"],
|
|
120
|
+
priority: 6,
|
|
121
|
+
readOnly: true,
|
|
122
|
+
destructive: false,
|
|
123
|
+
concurrencySafe: true,
|
|
124
|
+
effortHint: "minimal",
|
|
125
|
+
};
|
|
126
|
+
export async function runSkill(args) {
|
|
127
|
+
const name = String(args.name ?? "").trim();
|
|
128
|
+
const query = String(args.query ?? "").trim();
|
|
129
|
+
// list mode
|
|
130
|
+
if (name === "list") {
|
|
131
|
+
const dirs = getSkillDirs();
|
|
132
|
+
const skills = await listSkills(dirs);
|
|
133
|
+
if (skills.length === 0) {
|
|
134
|
+
return toolSuccess("No skills found. Create .md files in skills/ directory to add skills.");
|
|
135
|
+
}
|
|
136
|
+
const lines = skills.map((s) => {
|
|
137
|
+
const tags = s.tags.length > 0 ? ` [${s.tags.join(", ")}]` : "";
|
|
138
|
+
return `- ${s.name}: ${s.description || "(no description)"}${tags}`;
|
|
139
|
+
});
|
|
140
|
+
return toolSuccess(`Available skills (${skills.length}):\n${lines.join("\n")}`);
|
|
141
|
+
}
|
|
142
|
+
// search mode
|
|
143
|
+
if (query) {
|
|
144
|
+
const dirs = getSkillDirs();
|
|
145
|
+
const results = await searchSkills(query, dirs);
|
|
146
|
+
if (results.length === 0) {
|
|
147
|
+
return toolSuccess(`No skills matching "${query}".`);
|
|
148
|
+
}
|
|
149
|
+
const lines = results.map((s) => {
|
|
150
|
+
const tags = s.tags.length > 0 ? ` [${s.tags.join(", ")}]` : "";
|
|
151
|
+
return `- ${s.name}: ${s.description || "(no description)"}${tags}`;
|
|
152
|
+
});
|
|
153
|
+
return toolSuccess(`Skills matching "${query}" (${results.length}):\n${lines.join("\n")}`);
|
|
154
|
+
}
|
|
155
|
+
// load mode
|
|
156
|
+
if (!name) {
|
|
157
|
+
return toolError("SKILL_MISSING_NAME", "name is required (or use 'list' to list skills)");
|
|
158
|
+
}
|
|
159
|
+
const filePath = resolveSkillPath(name);
|
|
160
|
+
if (!filePath) {
|
|
161
|
+
const dirs = getSkillDirs();
|
|
162
|
+
const available = await listSkills(dirs);
|
|
163
|
+
const hint = available.length > 0
|
|
164
|
+
? `\nAvailable skills: ${available.map((s) => s.name).join(", ")}`
|
|
165
|
+
: "\nNo skills found. Create .md files in skills/ directory.";
|
|
166
|
+
return toolError("SKILL_NOT_FOUND", `skill not found: ${name}${hint}`);
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
const content = await readFile(filePath, "utf-8");
|
|
170
|
+
const lines = content.split("\n");
|
|
171
|
+
const startIdx = lines.findIndex((l) => l.trim() === "---");
|
|
172
|
+
const endIdx = startIdx >= 0 ? lines.findIndex((l, i) => i > startIdx && l.trim() === "---") : -1;
|
|
173
|
+
const body = startIdx >= 0 && endIdx >= 0
|
|
174
|
+
? lines.slice(endIdx + 1).join("\n").trim()
|
|
175
|
+
: content;
|
|
176
|
+
return toolSuccess(`📖 Skill: ${name}\n\n${body}`);
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
return toolError("SKILL_READ_FAILED", `failed to read skill: ${err.message}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolDefinition, ToolResult } from "../types.js";
|
|
2
|
+
export declare const subtaskTool: ToolDefinition;
|
|
3
|
+
export declare function runSubtask(args: {
|
|
4
|
+
task: string;
|
|
5
|
+
context?: string;
|
|
6
|
+
max_iterations?: number;
|
|
7
|
+
timeout_ms?: number;
|
|
8
|
+
}): Promise<ToolResult>;
|
|
9
|
+
//# sourceMappingURL=subtask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subtask.d.ts","sourceRoot":"","sources":["../../src/tools/subtask.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAa9D,eAAO,MAAM,WAAW,EAAE,cAyBzB,CAAC;AAEF,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwFtB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// 轻灵 - Subtask 工具定义
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { SubtaskRunner } from "../agent/subtask.js";
|
|
5
|
+
import { toolError, toolSuccess } from "./error-utils.js";
|
|
6
|
+
import { bashTool } from "./bash.js";
|
|
7
|
+
import { readTool } from "./read.js";
|
|
8
|
+
import { writeTool } from "./write.js";
|
|
9
|
+
import { todoTool } from "./todo.js";
|
|
10
|
+
import { skillTool } from "./skill.js";
|
|
11
|
+
import { searchTool } from "./search.js";
|
|
12
|
+
import { plannerTool } from "./planner.js";
|
|
13
|
+
import { urlFetchTool } from "./url-fetch.js";
|
|
14
|
+
import { getRuntimeRootsFromEnv } from "../runtime-paths.js";
|
|
15
|
+
export const subtaskTool = {
|
|
16
|
+
name: "subtask",
|
|
17
|
+
description: "Spawn an isolated sub-agent for an independent subtask. The sub-agent has its own context but shares memory with the parent.",
|
|
18
|
+
parameters: {
|
|
19
|
+
type: "object",
|
|
20
|
+
properties: {
|
|
21
|
+
task: {
|
|
22
|
+
type: "string",
|
|
23
|
+
description: "The subtask description",
|
|
24
|
+
},
|
|
25
|
+
context: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description: "Additional context to pass to the sub-agent",
|
|
28
|
+
},
|
|
29
|
+
max_iterations: {
|
|
30
|
+
type: "number",
|
|
31
|
+
description: "Max iterations (default 10)",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
required: ["task"],
|
|
35
|
+
},
|
|
36
|
+
readOnly: false,
|
|
37
|
+
destructive: false,
|
|
38
|
+
scenes: ["planning"],
|
|
39
|
+
effortHint: "high",
|
|
40
|
+
};
|
|
41
|
+
export async function runSubtask(args) {
|
|
42
|
+
const task = String(args.task ?? "").trim();
|
|
43
|
+
if (!task) {
|
|
44
|
+
return toolError("SUBTASK_MISSING_TASK", "task is required");
|
|
45
|
+
}
|
|
46
|
+
const apiKey = process.env.QLING_LLM_API_KEY ??
|
|
47
|
+
process.env.DEEPSEEK_API_KEY ??
|
|
48
|
+
process.env.OPENAI_API_KEY ??
|
|
49
|
+
"";
|
|
50
|
+
if (!apiKey) {
|
|
51
|
+
return toolError("SUBTASK_MISSING_API_KEY", "missing API key for subtask agent");
|
|
52
|
+
}
|
|
53
|
+
const maxIterationsRaw = Number(args.max_iterations ?? 10);
|
|
54
|
+
const maxIterations = Number.isFinite(maxIterationsRaw) && maxIterationsRaw > 0
|
|
55
|
+
? Math.min(50, Math.max(1, Math.floor(maxIterationsRaw)))
|
|
56
|
+
: 10;
|
|
57
|
+
const timeoutRaw = Number(args.timeout_ms ?? 120_000);
|
|
58
|
+
const timeoutMs = Number.isFinite(timeoutRaw) && timeoutRaw > 0 ? Math.min(600_000, timeoutRaw) : 120_000;
|
|
59
|
+
const roots = getRuntimeRootsFromEnv();
|
|
60
|
+
const runner = new SubtaskRunner({
|
|
61
|
+
apiKey,
|
|
62
|
+
provider: process.env.QLING_LLM_PROVIDER ?? "deepseek",
|
|
63
|
+
endpoint: process.env.QLING_LLM_ENDPOINT ??
|
|
64
|
+
process.env.OPENAI_BASE_URL ??
|
|
65
|
+
process.env.DEEPSEEK_BASE_URL ??
|
|
66
|
+
"https://api.deepseek.com",
|
|
67
|
+
model: process.env.QLING_LLM_MODEL ?? "deepseek-chat",
|
|
68
|
+
tools: [
|
|
69
|
+
bashTool,
|
|
70
|
+
readTool,
|
|
71
|
+
writeTool,
|
|
72
|
+
todoTool,
|
|
73
|
+
skillTool,
|
|
74
|
+
searchTool,
|
|
75
|
+
plannerTool,
|
|
76
|
+
urlFetchTool,
|
|
77
|
+
],
|
|
78
|
+
runtime: {
|
|
79
|
+
workspaceDir: roots.workspaceDir,
|
|
80
|
+
fileCacheDir: roots.fileCacheDir,
|
|
81
|
+
fileStateDir: roots.fileStateDir,
|
|
82
|
+
maxSteps: maxIterations,
|
|
83
|
+
parseRetries: 2,
|
|
84
|
+
maxTokenBudget: 120_000,
|
|
85
|
+
toolRepeatLimit: 6,
|
|
86
|
+
timeoutMs,
|
|
87
|
+
},
|
|
88
|
+
logging: {
|
|
89
|
+
level: "info",
|
|
90
|
+
format: "text",
|
|
91
|
+
inspectPrompt: false,
|
|
92
|
+
inspectRequest: false,
|
|
93
|
+
inspectDumpDir: roots.fileStateDir,
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
try {
|
|
97
|
+
const result = await runner.run({
|
|
98
|
+
task,
|
|
99
|
+
parentContext: args.context,
|
|
100
|
+
maxIterations,
|
|
101
|
+
depth: 1,
|
|
102
|
+
timeoutMs,
|
|
103
|
+
});
|
|
104
|
+
if (!result.success) {
|
|
105
|
+
return toolError("SUBTASK_FAILED", result.output, { retriable: false, category: "runtime" });
|
|
106
|
+
}
|
|
107
|
+
return toolSuccess([
|
|
108
|
+
`subtask completed in ${result.durationMs}ms`,
|
|
109
|
+
`iterations=${result.iterations}`,
|
|
110
|
+
"",
|
|
111
|
+
result.output,
|
|
112
|
+
].join("\n"));
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
return toolError("SUBTASK_RUN_FAILED", err instanceof Error ? err.message : String(err), {
|
|
116
|
+
retriable: false,
|
|
117
|
+
category: "runtime",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../src/tools/todo.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA4BzD,eAAO,MAAM,QAAQ,EAAE,cA0EtB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,UAAU,CAAC,CA+EtB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { writeFile, readFile, mkdir } from "fs/promises";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import { resolve } from "path";
|
|
4
|
+
const TODO_FILE = resolve(process.cwd(), ".qling-todos.json");
|
|
5
|
+
async function readTodos() {
|
|
6
|
+
if (!existsSync(TODO_FILE))
|
|
7
|
+
return [];
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(await readFile(TODO_FILE, "utf-8"));
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function saveTodos(todos) {
|
|
16
|
+
await mkdir(resolve(process.cwd(), ".qling-todos.json").replace(/[/\\][^/\\]+$/, ""), {
|
|
17
|
+
recursive: true,
|
|
18
|
+
});
|
|
19
|
+
await writeFile(TODO_FILE, JSON.stringify(todos, null, 2), "utf-8");
|
|
20
|
+
}
|
|
21
|
+
export const todoTool = {
|
|
22
|
+
name: "todo",
|
|
23
|
+
description: "Manage a persistent task list (stored in .qling-todos.json). Create, update, list, or remove tasks. Use for planning multi-step tasks and tracking session progress.",
|
|
24
|
+
longDescription: `管理持久化任务列表,存储在 .qling-todos.json 中。**不会直接执行任何操作**。
|
|
25
|
+
|
|
26
|
+
**Action 类型**:
|
|
27
|
+
- list: 列出所有任务(默认)
|
|
28
|
+
- add: 添加新任务
|
|
29
|
+
- done: 标记任务为已完成
|
|
30
|
+
- cancel: 标记任务为已取消
|
|
31
|
+
- remove: 删除单个任务
|
|
32
|
+
- clear: 清空所有任务
|
|
33
|
+
|
|
34
|
+
**任务状态**:
|
|
35
|
+
- pending(待处理,默认)
|
|
36
|
+
- in_progress(进行中)
|
|
37
|
+
- completed(已完成)
|
|
38
|
+
- cancelled(已取消)
|
|
39
|
+
|
|
40
|
+
**使用建议**:
|
|
41
|
+
- 复杂任务先用 todo add 创建计划
|
|
42
|
+
- 每完成一步用 todo done 标记
|
|
43
|
+
- 用 todo list 查看整体进度
|
|
44
|
+
|
|
45
|
+
**注意**: 任务列表在会话之间持久化,清空操作需谨慎。`,
|
|
46
|
+
parameters: {
|
|
47
|
+
type: "object",
|
|
48
|
+
properties: {
|
|
49
|
+
action: {
|
|
50
|
+
type: "string",
|
|
51
|
+
enum: ["list", "add", "done", "cancel", "remove", "clear"],
|
|
52
|
+
description: "Action: list | add | done | cancel | remove | clear",
|
|
53
|
+
},
|
|
54
|
+
content: {
|
|
55
|
+
type: "string",
|
|
56
|
+
description: "Task content (required for action=add)",
|
|
57
|
+
},
|
|
58
|
+
id: {
|
|
59
|
+
type: "string",
|
|
60
|
+
description: "Task ID (required for action=done/cancel/remove)",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
required: ["action"],
|
|
64
|
+
},
|
|
65
|
+
paramSchema: {
|
|
66
|
+
action: {
|
|
67
|
+
type: "string",
|
|
68
|
+
description: "操作类型:list=列表,add=添加,done=完成,cancel=取消,remove=删除,clear=清空",
|
|
69
|
+
enum: ["list", "add", "done", "cancel", "remove", "clear"],
|
|
70
|
+
required: true,
|
|
71
|
+
},
|
|
72
|
+
content: {
|
|
73
|
+
type: "string",
|
|
74
|
+
description: "任务内容描述(仅 action=add 时需要)",
|
|
75
|
+
},
|
|
76
|
+
id: {
|
|
77
|
+
type: "string",
|
|
78
|
+
description: "任务 ID(action=done/cancel/remove 时需要)",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
examples: [
|
|
82
|
+
'todo action="list"',
|
|
83
|
+
'todo action="add" content="完成登录功能"',
|
|
84
|
+
'todo action="done" id="abc123"',
|
|
85
|
+
'todo action="remove" id="abc123"',
|
|
86
|
+
],
|
|
87
|
+
seeAlso: ["bash"],
|
|
88
|
+
scenes: ["planning"],
|
|
89
|
+
priority: 7,
|
|
90
|
+
readOnly: false,
|
|
91
|
+
destructive: false,
|
|
92
|
+
concurrencySafe: false,
|
|
93
|
+
effortHint: "minimal",
|
|
94
|
+
};
|
|
95
|
+
export async function runTodo(args) {
|
|
96
|
+
try {
|
|
97
|
+
const todos = await readTodos();
|
|
98
|
+
switch (args.action) {
|
|
99
|
+
case "list": {
|
|
100
|
+
if (todos.length === 0) {
|
|
101
|
+
return { tool_call_id: "", output: "📋 暂无任务" };
|
|
102
|
+
}
|
|
103
|
+
const lines = todos.map((t) => {
|
|
104
|
+
const icon = t.status === "completed"
|
|
105
|
+
? "✅"
|
|
106
|
+
: t.status === "in_progress"
|
|
107
|
+
? "🔄"
|
|
108
|
+
: t.status === "cancelled"
|
|
109
|
+
? "❌"
|
|
110
|
+
: "⬜";
|
|
111
|
+
return `${icon} [${t.id}] ${t.content}`;
|
|
112
|
+
});
|
|
113
|
+
return { tool_call_id: "", output: "📋 任务列表:\n" + lines.join("\n") };
|
|
114
|
+
}
|
|
115
|
+
case "add": {
|
|
116
|
+
const id = Date.now().toString(36);
|
|
117
|
+
const now = new Date().toISOString();
|
|
118
|
+
const item = {
|
|
119
|
+
id,
|
|
120
|
+
content: args.content ?? "",
|
|
121
|
+
status: "pending",
|
|
122
|
+
createdAt: now,
|
|
123
|
+
updatedAt: now,
|
|
124
|
+
};
|
|
125
|
+
todos.push(item);
|
|
126
|
+
await saveTodos(todos);
|
|
127
|
+
return { tool_call_id: "", output: `✅ 已添加任务 [${id}]: ${item.content}` };
|
|
128
|
+
}
|
|
129
|
+
case "done": {
|
|
130
|
+
const todo = todos.find((t) => t.id === args.id);
|
|
131
|
+
if (!todo)
|
|
132
|
+
return { tool_call_id: "", output: `未找到任务 [${args.id}]`, is_error: true };
|
|
133
|
+
todo.status = "completed";
|
|
134
|
+
todo.updatedAt = new Date().toISOString();
|
|
135
|
+
await saveTodos(todos);
|
|
136
|
+
return { tool_call_id: "", output: `✅ 已完成 [${args.id}]: ${todo.content}` };
|
|
137
|
+
}
|
|
138
|
+
case "cancel": {
|
|
139
|
+
const todo = todos.find((t) => t.id === args.id);
|
|
140
|
+
if (!todo)
|
|
141
|
+
return { tool_call_id: "", output: `未找到任务 [${args.id}]`, is_error: true };
|
|
142
|
+
todo.status = "cancelled";
|
|
143
|
+
todo.updatedAt = new Date().toISOString();
|
|
144
|
+
await saveTodos(todos);
|
|
145
|
+
return { tool_call_id: "", output: `❌ 已取消 [${args.id}]: ${todo.content}` };
|
|
146
|
+
}
|
|
147
|
+
case "remove": {
|
|
148
|
+
const idx = todos.findIndex((t) => t.id === args.id);
|
|
149
|
+
if (idx === -1)
|
|
150
|
+
return { tool_call_id: "", output: `未找到任务 [${args.id}]`, is_error: true };
|
|
151
|
+
todos.splice(idx, 1);
|
|
152
|
+
await saveTodos(todos);
|
|
153
|
+
return { tool_call_id: "", output: `🗑️ 已删除 [${args.id}]` };
|
|
154
|
+
}
|
|
155
|
+
case "clear": {
|
|
156
|
+
await saveTodos([]);
|
|
157
|
+
return { tool_call_id: "", output: "🗑️ 任务列表已清空" };
|
|
158
|
+
}
|
|
159
|
+
default:
|
|
160
|
+
return {
|
|
161
|
+
tool_call_id: "",
|
|
162
|
+
output: `未知 action: ${args.action}`,
|
|
163
|
+
is_error: true,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
return { tool_call_id: "", output: `Error: ${err.message}`, is_error: true };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition, ToolResult } from "../types.js";
|
|
2
|
+
export declare const urlFetchTool: ToolDefinition;
|
|
3
|
+
export declare function runUrlFetch(args: {
|
|
4
|
+
url: string;
|
|
5
|
+
method?: string;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
body?: string;
|
|
8
|
+
timeout_seconds?: number;
|
|
9
|
+
follow_redirects?: boolean;
|
|
10
|
+
}): Promise<ToolResult>;
|
|
11
|
+
//# sourceMappingURL=url-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/url-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9D,eAAO,MAAM,YAAY,EAAE,cA0E1B,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,UAAU,CAAC,CAoItB"}
|