@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,102 @@
|
|
|
1
|
+
// P4: 国内平台连接器引导
|
|
2
|
+
// 统一入口 /connect 或 qling connect
|
|
3
|
+
// 先完善 Telegram/Slack, 规划 Feishu/DingTalk/WeChat
|
|
4
|
+
// 中文指南 + doctor 检查 + 脱敏
|
|
5
|
+
const CONNECTORS = {
|
|
6
|
+
telegram: {
|
|
7
|
+
name: "Telegram",
|
|
8
|
+
guide: "准备: Bot Token (从 @BotFather 获取)\n权限: 机器人需有 chat 权限\n存放: 环境变量 QLING_CHANNEL_TELEGRAM_TOKEN\n测试: /connect telegram test",
|
|
9
|
+
env: "QLING_CHANNEL_TELEGRAM_TOKEN",
|
|
10
|
+
doctor: "检查 token 是否设置, 网络连通",
|
|
11
|
+
},
|
|
12
|
+
slack: {
|
|
13
|
+
name: "Slack",
|
|
14
|
+
guide: "准备: Bot Token, App Token, Channel IDs\n权限: 机器人需加入频道\n存放: QLING_CHANNEL_SLACK_BOT_TOKEN 等\n测试: /connect slack test",
|
|
15
|
+
env: "QLING_CHANNEL_SLACK_BOT_TOKEN",
|
|
16
|
+
doctor: "检查 tokens, app 权限",
|
|
17
|
+
},
|
|
18
|
+
feishu: {
|
|
19
|
+
name: "飞书 (Feishu)",
|
|
20
|
+
guide: "准备: App ID, App Secret, User Access Token\n权限: 应用需有 im:message 权限\n存放: 环境变量 (暂未内置)\n规划中: 使用 lark-cli 集成",
|
|
21
|
+
env: "QLING_CHANNEL_FEISHU_APP_ID",
|
|
22
|
+
doctor: "检查 token, 飞书开放平台权限",
|
|
23
|
+
},
|
|
24
|
+
dingtalk: {
|
|
25
|
+
name: "钉钉 (DingTalk)",
|
|
26
|
+
guide: "准备: AppKey, AppSecret, Agent ID\n权限: 机器人权限\n存放: 环境变量\n规划中",
|
|
27
|
+
env: "QLING_CHANNEL_DINGTALK_APPKEY",
|
|
28
|
+
doctor: "检查配置, 钉钉连接",
|
|
29
|
+
},
|
|
30
|
+
wechat: {
|
|
31
|
+
name: "微信 (WeChat)",
|
|
32
|
+
guide: "准备: 公众号/企业微信配置\n注意: 敏感, 推荐使用 opencli 或外部桥接\n存放: 绝不写入 .env\n规划中: 参考 LangBot",
|
|
33
|
+
env: "",
|
|
34
|
+
doctor: "使用 doctor 检查 webhook 等",
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export const connectCommand = {
|
|
38
|
+
name: "/connect",
|
|
39
|
+
aliases: ["/连接", "/connector"],
|
|
40
|
+
description: "国内平台连接器引导 (P4)",
|
|
41
|
+
usage: "/connect [telegram|slack|feishu|dingtalk|wechat] [test|guide]",
|
|
42
|
+
execute: async (args, context) => {
|
|
43
|
+
const sub = (args[0] || "").toLowerCase();
|
|
44
|
+
const action = (args[1] || "").toLowerCase();
|
|
45
|
+
context.writeLine("");
|
|
46
|
+
context.writeLine("🔗 【轻灵连接器】国内平台引导");
|
|
47
|
+
context.writeLine("-----------------------------------------");
|
|
48
|
+
if (!sub || sub === "help") {
|
|
49
|
+
context.writeLine("支持: telegram, slack, feishu, dingtalk, wechat");
|
|
50
|
+
context.writeLine("用法: /connect <平台> guide | test");
|
|
51
|
+
context.writeLine("示例: /connect telegram guide");
|
|
52
|
+
context.writeLine("优先: 完善 Telegram/Slack, 规划其他");
|
|
53
|
+
context.writeLine("敏感: 绝不保存明文到 .env, 用 doctor 检查");
|
|
54
|
+
}
|
|
55
|
+
else if (CONNECTORS[sub]) {
|
|
56
|
+
const c = CONNECTORS[sub];
|
|
57
|
+
if (action === "guide" || action === "指南") {
|
|
58
|
+
context.writeLine(`${c.name} 准备向导:`);
|
|
59
|
+
context.writeLine(c.guide);
|
|
60
|
+
context.writeLine(`环境变量: ${c.env || "参考 config"}`);
|
|
61
|
+
context.writeLine("敏感: 绝不写入 .env,使用系统环境变量或 secret store");
|
|
62
|
+
}
|
|
63
|
+
else if (action === "test" || action === "测试") {
|
|
64
|
+
context.writeLine(`正在测试 ${c.name} 连通性...`);
|
|
65
|
+
const token = process.env[c.env] || "";
|
|
66
|
+
if (!token) {
|
|
67
|
+
context.writeLine(`❌ ${c.name} 测试失败: 未设置 ${c.env}`);
|
|
68
|
+
context.writeLine("提示: 运行 qling doctor 检查配置");
|
|
69
|
+
context.writeLine("常见: token 缺失或错误");
|
|
70
|
+
}
|
|
71
|
+
else if (sub === "telegram") {
|
|
72
|
+
// 实际简单测试:调用 getMe (不泄露 token)
|
|
73
|
+
try {
|
|
74
|
+
// 模拟或实际 axios getMe,但为脱敏,这里用提示
|
|
75
|
+
context.writeLine("✅ Token 已设置,尝试连通性检查 (使用 doctor 验证完整)");
|
|
76
|
+
context.writeLine("提示: 真实测试需在 TUI 或启用 channel 后运行");
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
context.writeLine(`❌ 测试失败: ${e}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
context.writeLine("✅ 配置存在,使用 doctor 进行详细检查");
|
|
84
|
+
context.writeLine("常见失败: token 无效, 权限不足, 网络问题");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
context.writeLine(`${c.name} 信息:`);
|
|
89
|
+
context.writeLine(c.guide.split("\n")[0]);
|
|
90
|
+
context.writeLine("使用 /connect " + sub + " guide 获取完整指南");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
context.writeLine("未知平台: " + sub);
|
|
95
|
+
context.writeLine("可用: " + Object.keys(CONNECTORS).join(", "));
|
|
96
|
+
}
|
|
97
|
+
context.writeLine("-----------------------------------------");
|
|
98
|
+
context.writeLine("边界: 敏感 token 用环境变量或 secret store");
|
|
99
|
+
context.writeLine("复用: scanner + doctor 警告");
|
|
100
|
+
context.writeLine("");
|
|
101
|
+
},
|
|
102
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,cAAc,EAAE,YAW5B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { buildContextReport, formatContextReport } from "../context-report.js";
|
|
2
|
+
export const contextCommand = {
|
|
3
|
+
name: "/context",
|
|
4
|
+
aliases: ["/上下文"],
|
|
5
|
+
description: "查看当前会话上下文占用与本地留存路径",
|
|
6
|
+
usage: "/context",
|
|
7
|
+
execute: async (_args, context) => {
|
|
8
|
+
const report = await buildContextReport(context);
|
|
9
|
+
for (const line of formatContextReport(report)) {
|
|
10
|
+
context.writeLine(line);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,gBAAgB,EAAE,YAqB9B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const dashboardCommand = {
|
|
2
|
+
name: "/dashboard",
|
|
3
|
+
description: "获取观测控制台链接",
|
|
4
|
+
usage: "/dashboard",
|
|
5
|
+
execute: async (_args, context) => {
|
|
6
|
+
const port = process.env.QLING_DASHBOARD_PORT || "9999";
|
|
7
|
+
const enabled = process.env.QLING_FEATURES_DASHBOARD === "true";
|
|
8
|
+
context.writeLine("");
|
|
9
|
+
context.writeLine("📊 【Observability Dashboard】");
|
|
10
|
+
context.writeLine("-----------------------------------------");
|
|
11
|
+
if (enabled) {
|
|
12
|
+
context.writeLine(`本地链接 : http://localhost:${port}`);
|
|
13
|
+
context.writeLine("状态 : 运行中");
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
context.writeLine("状态 : 未开启");
|
|
17
|
+
context.writeLine("提示 : 请设置环境变量 QLING_FEATURES_DASHBOARD=true 以启用。");
|
|
18
|
+
}
|
|
19
|
+
context.writeLine("-----------------------------------------");
|
|
20
|
+
context.writeLine("");
|
|
21
|
+
},
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detach.d.ts","sourceRoot":"","sources":["../../src/commands/detach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,aAAa,EAAE,YA+C3B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
export const detachCommand = {
|
|
3
|
+
name: "/detach",
|
|
4
|
+
description: "将当前任务脱离终端在后台运行 (v0.5 M3)",
|
|
5
|
+
usage: "/detach",
|
|
6
|
+
execute: async (_args, context) => {
|
|
7
|
+
const DAEMON_PORT = process.env.QLING_DAEMON_PORT || "9998";
|
|
8
|
+
const endpoint = `http://localhost:${DAEMON_PORT}/missions`;
|
|
9
|
+
context.writeLine("");
|
|
10
|
+
context.writeLine("🚀 【正在尝试后台脱离...】");
|
|
11
|
+
try {
|
|
12
|
+
// 1. 获取当前状态快照
|
|
13
|
+
const checkpoint = context.agentLoop.getWorkflowRuntime().getCheckpoint();
|
|
14
|
+
const stats = {
|
|
15
|
+
turnCount: context.agentLoop.turnCount,
|
|
16
|
+
sessionTokens: context.agentLoop.sessionTokens,
|
|
17
|
+
};
|
|
18
|
+
// 2. 提交至守护进程
|
|
19
|
+
await axios.post(endpoint, {
|
|
20
|
+
name: "Detached Mission",
|
|
21
|
+
description: "从交互式会话脱离的任务",
|
|
22
|
+
sessionId: context.agentLoop.getSessionId(),
|
|
23
|
+
checkpoint,
|
|
24
|
+
stats,
|
|
25
|
+
}, { timeout: 3000 });
|
|
26
|
+
context.writeLine("-----------------------------------------");
|
|
27
|
+
context.writeLine("✅ 使命已成功移交至 qlingd 守护进程。");
|
|
28
|
+
context.writeLine("状态 : 已脱离 (Detached)");
|
|
29
|
+
context.writeLine("提示 : 您现在可以安全地关闭此终端。");
|
|
30
|
+
context.writeLine("查看 : 请访问 Dashboard 或输入 qling mission list");
|
|
31
|
+
context.writeLine("-----------------------------------------");
|
|
32
|
+
context.writeLine("");
|
|
33
|
+
// 触发本进程退出逻辑
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
context.writeError("-----------------------------------------");
|
|
38
|
+
context.writeError("❌ 脱离失败: 守护进程 qlingd 未响应。");
|
|
39
|
+
context.writeError("请先执行 `qling daemon start` 启动后台守护进程。");
|
|
40
|
+
context.writeError("-----------------------------------------");
|
|
41
|
+
context.writeError("");
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distill.d.ts","sourceRoot":"","sources":["../../src/commands/distill.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAS1C,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { homedir } from "os";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { formatLocalMemoryPracticesReport, listLocalMemoryPractices, parseMemoryReportCount, } from "../memory-report.js";
|
|
4
|
+
function resolveStateDir(context) {
|
|
5
|
+
const agentLoop = context.agentLoop;
|
|
6
|
+
return agentLoop.getRuntimeRootDir?.()
|
|
7
|
+
|| process.env.QLING_FILE_STATE_DIR
|
|
8
|
+
|| join(context.homeDir ?? homedir(), ".qling");
|
|
9
|
+
}
|
|
10
|
+
export const distillCommand = {
|
|
11
|
+
name: "/distill",
|
|
12
|
+
aliases: ["/蒸馏", "/经验"],
|
|
13
|
+
description: "查看本地蒸馏实践摘要",
|
|
14
|
+
usage: "/distill [count]",
|
|
15
|
+
execute: async (args, context) => {
|
|
16
|
+
const report = await listLocalMemoryPractices(resolveStateDir(context), {
|
|
17
|
+
count: parseMemoryReportCount(args[0]),
|
|
18
|
+
});
|
|
19
|
+
for (const line of formatLocalMemoryPracticesReport(report)) {
|
|
20
|
+
context.writeLine(line);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,aAAa,EAAE,YAW3B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { buildDoctorReport, formatDoctorReport } from "../doctor.js";
|
|
2
|
+
export const doctorCommand = {
|
|
3
|
+
name: "/doctor",
|
|
4
|
+
aliases: ["/诊断"],
|
|
5
|
+
description: "运行本地稳定性与数据留存诊断",
|
|
6
|
+
usage: "/doctor",
|
|
7
|
+
execute: async (_args, context) => {
|
|
8
|
+
const report = await buildDoctorReport(context);
|
|
9
|
+
for (const line of formatDoctorReport(report)) {
|
|
10
|
+
context.writeLine(line);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream.d.ts","sourceRoot":"","sources":["../../src/commands/dream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA2B1C,eAAO,MAAM,YAAY,EAAE,YAuC1B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { extractDreamMemories } from "../memory.js";
|
|
2
|
+
function parseCount(value) {
|
|
3
|
+
const parsed = Number(value);
|
|
4
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
5
|
+
return 4;
|
|
6
|
+
return Math.min(Math.floor(parsed), 20);
|
|
7
|
+
}
|
|
8
|
+
function getConversationMessages(context) {
|
|
9
|
+
const agentLoop = context.agentLoop;
|
|
10
|
+
if (typeof agentLoop.getMessagesSnapshot !== "function")
|
|
11
|
+
return [];
|
|
12
|
+
const messages = agentLoop.getMessagesSnapshot();
|
|
13
|
+
if (!Array.isArray(messages))
|
|
14
|
+
return [];
|
|
15
|
+
return messages.filter((message) => message.role === "user" || message.role === "assistant");
|
|
16
|
+
}
|
|
17
|
+
function getExistingMemoryContents(memoryStore) {
|
|
18
|
+
if (typeof memoryStore.exportPersisted !== "function")
|
|
19
|
+
return new Set();
|
|
20
|
+
const entries = memoryStore.exportPersisted();
|
|
21
|
+
if (!Array.isArray(entries))
|
|
22
|
+
return new Set();
|
|
23
|
+
return new Set(entries
|
|
24
|
+
.map((entry) => typeof entry?.content === "string" ? entry.content : null)
|
|
25
|
+
.filter((content) => Boolean(content)));
|
|
26
|
+
}
|
|
27
|
+
export const dreamCommand = {
|
|
28
|
+
name: "/dream",
|
|
29
|
+
aliases: ["/记梦", "/沉淀"],
|
|
30
|
+
description: "将当前会话中的关键信息沉淀到本地记忆",
|
|
31
|
+
usage: "/dream [count]",
|
|
32
|
+
execute: async (args, context) => {
|
|
33
|
+
const agentLoop = context.agentLoop;
|
|
34
|
+
const memoryStore = typeof agentLoop.getMemoryStore === "function" ? agentLoop.getMemoryStore() : null;
|
|
35
|
+
if (!memoryStore || typeof memoryStore.add !== "function" || typeof memoryStore.saveToDisk !== "function") {
|
|
36
|
+
context.writeError("当前会话不支持本地 dream 写入。");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const count = parseCount(args[0]);
|
|
40
|
+
const messages = getConversationMessages(context);
|
|
41
|
+
const transcript = messages.map((message) => message.content);
|
|
42
|
+
const memories = await extractDreamMemories({ turnCount: Math.max(transcript.length, count), transcript }, { enabled: true, turnThreshold: 1, transcriptWindow: count });
|
|
43
|
+
const existingContents = getExistingMemoryContents(memoryStore);
|
|
44
|
+
const newMemories = memories.filter((memory) => !existingContents.has(memory));
|
|
45
|
+
if (newMemories.length === 0) {
|
|
46
|
+
context.writeLine("dream: 没有新的本地记忆候选;未写入、不调用模型、不联网。");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
for (const memory of newMemories) {
|
|
50
|
+
memoryStore.add(memory, "manual-dream", 0.7);
|
|
51
|
+
}
|
|
52
|
+
if (typeof memoryStore.compactPersisted === "function") {
|
|
53
|
+
memoryStore.compactPersisted(1000);
|
|
54
|
+
}
|
|
55
|
+
await memoryStore.saveToDisk();
|
|
56
|
+
context.writeLine(`dream: 已沉淀 ${newMemories.length} 条本地记忆。`);
|
|
57
|
+
context.writeLine("边界: 未输出记忆正文;只读取当前 user/assistant 消息;不调用模型、不联网。");
|
|
58
|
+
},
|
|
59
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,aAAa,EAAE,YAgB3B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { writeSessionExport } from "../session-export.js";
|
|
2
|
+
export const exportCommand = {
|
|
3
|
+
name: "/export",
|
|
4
|
+
aliases: ["/导出"],
|
|
5
|
+
description: "将当前会话导出为本地 Markdown",
|
|
6
|
+
usage: "/export",
|
|
7
|
+
execute: async (_args, context) => {
|
|
8
|
+
const result = await writeSessionExport(context);
|
|
9
|
+
context.writeLine("");
|
|
10
|
+
context.writeLine("📄 会话已导出");
|
|
11
|
+
context.writeLine("-----------------------------------------");
|
|
12
|
+
context.writeLine(`Path : ${result.path}`);
|
|
13
|
+
context.writeLine(`Messages : ${result.messageCount}`);
|
|
14
|
+
context.writeLine("说明 : 导出只读取本地会话快照,不调用模型、不联网。");
|
|
15
|
+
context.writeLine("-----------------------------------------");
|
|
16
|
+
context.writeLine("");
|
|
17
|
+
},
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/commands/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,cAAc,EAAE,YAa5B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { formatSessionExportIndex, listSessionExportFiles, parseSessionExportCount } from "../session-export-index.js";
|
|
2
|
+
export const exportsCommand = {
|
|
3
|
+
name: "/exports",
|
|
4
|
+
aliases: ["/导出列表"],
|
|
5
|
+
description: "查看本地 Markdown 会话导出列表",
|
|
6
|
+
usage: "/exports [count]",
|
|
7
|
+
execute: async (args, context) => {
|
|
8
|
+
const report = await listSessionExportFiles(context, {
|
|
9
|
+
count: parseSessionExportCount(args[0]),
|
|
10
|
+
});
|
|
11
|
+
for (const line of formatSessionExportIndex(report)) {
|
|
12
|
+
context.writeLine(line);
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../../src/commands/goal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B1C,eAAO,MAAM,WAAW,EAAE,YAkIzB,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
const CLEAR_ALIASES = new Set(["clear", "stop", "off", "reset", "none", "cancel"]);
|
|
2
|
+
const STATUS_ALIASES = new Set(["status", "show", "list", "状态", "查看", "列表"]);
|
|
3
|
+
const SET_ALIASES = new Set(["set", "设置"]);
|
|
4
|
+
const DAEMON_ALIASES = new Set(["daemon", "durable", "bg"]);
|
|
5
|
+
function formatGoalStatus(goal) {
|
|
6
|
+
if (!goal) {
|
|
7
|
+
return ["", "◎ 当前 session 没有 active goal。", ""];
|
|
8
|
+
}
|
|
9
|
+
const lines = [
|
|
10
|
+
"",
|
|
11
|
+
"◎ /goal 状态",
|
|
12
|
+
"-----------------------------------------",
|
|
13
|
+
`状态 : ${goal.status}`,
|
|
14
|
+
`Runner : ${goal.runner ?? "session"}`,
|
|
15
|
+
`Pending : ${goal.pending ? "yes" : "no"}`,
|
|
16
|
+
`条件 : ${goal.condition || "(空)"}`,
|
|
17
|
+
`创建时间 : ${goal.createdAt ? new Date(goal.createdAt).toLocaleString() : "-"}`,
|
|
18
|
+
`评估轮次 : ${goal.evaluatedTurns ?? 0}`,
|
|
19
|
+
`最近原因 : ${goal.lastReason ?? "-"}`,
|
|
20
|
+
"-----------------------------------------",
|
|
21
|
+
"",
|
|
22
|
+
];
|
|
23
|
+
return lines;
|
|
24
|
+
}
|
|
25
|
+
export const goalCommand = {
|
|
26
|
+
name: "/goal",
|
|
27
|
+
aliases: ["/目标"],
|
|
28
|
+
description: "设置、查询或清除当前 session 的 goal",
|
|
29
|
+
usage: "/goal [condition|clear]",
|
|
30
|
+
execute: async (args, context) => {
|
|
31
|
+
const controller = context.goalController;
|
|
32
|
+
if (!controller || typeof controller.getGoalStatus !== "function") {
|
|
33
|
+
context.writeError("❌ 当前会话未启用 goal controller。");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (args.length === 0) {
|
|
37
|
+
const status = await controller.getGoalStatus();
|
|
38
|
+
for (const line of formatGoalStatus(status)) {
|
|
39
|
+
context.writeLine(line);
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const firstArg = args[0].toLowerCase();
|
|
44
|
+
if (STATUS_ALIASES.has(firstArg)) {
|
|
45
|
+
const status = await controller.getGoalStatus();
|
|
46
|
+
for (const line of formatGoalStatus(status)) {
|
|
47
|
+
context.writeLine(line);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (CLEAR_ALIASES.has(firstArg)) {
|
|
52
|
+
const cleared = await controller.clearGoal("user_clear");
|
|
53
|
+
context.writeLine("");
|
|
54
|
+
context.writeLine(`🛑 已清除 goal: ${cleared.condition || "(空)"}`);
|
|
55
|
+
context.writeLine("");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (DAEMON_ALIASES.has(firstArg)) {
|
|
59
|
+
const daemonApi = context.daemonSessionApi;
|
|
60
|
+
if (!daemonApi) {
|
|
61
|
+
context.writeError("❌ 当前会话未启用 daemon session API。请先启动 `qling daemon start`。");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const sessionId = context.agentLoop.getSessionId?.() ?? "";
|
|
65
|
+
if (!sessionId) {
|
|
66
|
+
context.writeError("❌ 无法解析当前 sessionId。");
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const daemonSub = args[1]?.toLowerCase();
|
|
70
|
+
if (!daemonSub) {
|
|
71
|
+
if (!daemonApi.getGoal) {
|
|
72
|
+
context.writeError("❌ daemon session API 未实现 getGoal。");
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const status = await daemonApi.getGoal(sessionId);
|
|
76
|
+
for (const line of formatGoalStatus(status)) {
|
|
77
|
+
context.writeLine(line);
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (CLEAR_ALIASES.has(daemonSub)) {
|
|
82
|
+
if (!daemonApi.clearGoal) {
|
|
83
|
+
context.writeError("❌ daemon session API 未实现 clearGoal。");
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const cleared = await daemonApi.clearGoal(sessionId);
|
|
87
|
+
context.writeLine("");
|
|
88
|
+
context.writeLine(`🛑 已清除 daemon goal: ${cleared.condition || "(空)"}`);
|
|
89
|
+
context.writeLine("");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const condition = args.slice(1).join(" ").trim();
|
|
93
|
+
if (!condition) {
|
|
94
|
+
context.writeError("❌ 用法: /goal daemon <condition>");
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const stats = typeof context.agentLoop.getSessionStats === "function"
|
|
98
|
+
? await context.agentLoop.getSessionStats()
|
|
99
|
+
: { turnCount: 0, tokens: 0 };
|
|
100
|
+
if (typeof context.agentLoop.checkpointSession === "function") {
|
|
101
|
+
await context.agentLoop.checkpointSession();
|
|
102
|
+
}
|
|
103
|
+
if (!daemonApi.setGoal) {
|
|
104
|
+
context.writeError("❌ daemon session API 未实现 setGoal。");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const goal = await daemonApi.setGoal(sessionId, condition, {
|
|
108
|
+
turnCount: stats.turnCount ?? 0,
|
|
109
|
+
tokens: stats.tokens ?? 0,
|
|
110
|
+
});
|
|
111
|
+
context.writeLine("");
|
|
112
|
+
context.writeLine("◎ /goal daemon active");
|
|
113
|
+
context.writeLine("-----------------------------------------");
|
|
114
|
+
context.writeLine(`条件 : ${goal.condition}`);
|
|
115
|
+
context.writeLine(`Runner : ${goal.runner ?? "daemon"}`);
|
|
116
|
+
context.writeLine("说明 : 已交由 qlingd 在后台持续推进。");
|
|
117
|
+
context.writeLine("-----------------------------------------");
|
|
118
|
+
context.writeLine("");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const conditionArgs = SET_ALIASES.has(firstArg) ? args.slice(1) : args;
|
|
122
|
+
const condition = conditionArgs.join(" ").trim();
|
|
123
|
+
if (!condition) {
|
|
124
|
+
context.writeError("❌ 用法: /goal [status|set <condition>|clear|daemon ...]");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const stats = typeof context.agentLoop.getSessionStats === "function"
|
|
128
|
+
? await context.agentLoop.getSessionStats()
|
|
129
|
+
: { turnCount: 0, tokens: 0 };
|
|
130
|
+
const goal = await controller.setGoal(condition, {
|
|
131
|
+
turnCount: stats.turnCount ?? 0,
|
|
132
|
+
tokens: stats.tokens ?? 0,
|
|
133
|
+
}, {
|
|
134
|
+
runner: "session",
|
|
135
|
+
});
|
|
136
|
+
const immediatePrompt = controller.buildInitialPrompt(goal.condition);
|
|
137
|
+
context.setImmediatePrompt?.(immediatePrompt);
|
|
138
|
+
context.writeLine("");
|
|
139
|
+
context.writeLine("◎ /goal active");
|
|
140
|
+
context.writeLine("-----------------------------------------");
|
|
141
|
+
context.writeLine(`条件 : ${goal.condition}`);
|
|
142
|
+
context.writeLine(`Runner : ${goal.runner ?? "session"}`);
|
|
143
|
+
context.writeLine("说明 : 已立即启动自动续跑。");
|
|
144
|
+
context.writeLine("-----------------------------------------");
|
|
145
|
+
context.writeLine("");
|
|
146
|
+
},
|
|
147
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,UAAU,UA6DtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,YAWzB,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { formatFocusedHelp } from "../help-topics.js";
|
|
2
|
+
export const HELP_LINES = [
|
|
3
|
+
"",
|
|
4
|
+
"【轻灵 Slash Commands】",
|
|
5
|
+
"-----------------------------------------",
|
|
6
|
+
"/help, /? - 显示此帮助信息",
|
|
7
|
+
"/init [--force] - 生成轻灵本地项目指南",
|
|
8
|
+
"/model [list|use <p>|m] - 查看/列出预设/切换模型或 Provider",
|
|
9
|
+
"/plan [on|off|status|..] - Plan Mode(只读规划,禁写工具)",
|
|
10
|
+
"/expand [on|off|status] - 切换长工具输出展开(同 Ctrl+O)",
|
|
11
|
+
"/plan [description] - 创建普通会话计划请求",
|
|
12
|
+
"/usage, /cost, /stats - 查看本地 token 与上下文用量",
|
|
13
|
+
"/diff - 查看当前 Git 变更摘要",
|
|
14
|
+
"/copy [N] - 复制最近第 N 条 assistant 回复",
|
|
15
|
+
"/rewind, /undo - 查看可恢复会话点",
|
|
16
|
+
"/skill [list|search <query>|name] - 列出、搜索或读取本地技能",
|
|
17
|
+
"/sessions - 查看最近保存的会话快照",
|
|
18
|
+
"/resume [session|latest] - 恢复最近一次或指定会话",
|
|
19
|
+
"/checkpoint [name] [--force], /检查点 - 保存当前会话为本地恢复检查点",
|
|
20
|
+
"/clear, /reset - 清空当前对话上下文",
|
|
21
|
+
"/compact - 手动触发上下文压缩",
|
|
22
|
+
"/goal [condition|clear] - 设定、查询或清除当前 session 的目标条件",
|
|
23
|
+
"/goal daemon - 查询 daemon runner 的 goal 状态",
|
|
24
|
+
"/goal daemon clear - 清理 daemon runner 的 goal",
|
|
25
|
+
"/goal daemon <condition> - 将 goal 交由 qlingd 在后台持续推进",
|
|
26
|
+
"/loop [interval] [prompt] - 在当前 session 内周期性重跑 prompt",
|
|
27
|
+
"/loop daemon [interval] [prompt] - 创建 daemon-backed durable loop",
|
|
28
|
+
"/tasks [cancel <id>|clear] - 查看或取消当前 session 的 loop 任务",
|
|
29
|
+
"/tasks daemon [cancel <id>|clear] - 查看或取消 daemon runner 的 loop 任务",
|
|
30
|
+
"/agents, /代理 - 查看本地后台 mission 分组视图",
|
|
31
|
+
"/mission, /使命 - 查看或控制本地 mission",
|
|
32
|
+
"/permissions [status|allow|deny|ask] - 查看或切换工具权限默认策略",
|
|
33
|
+
"/permissions explain <tool> - 解释指定工具的本地权限决策",
|
|
34
|
+
"/statusline [on|off] - 查看或切换 prompt 前本地状态线",
|
|
35
|
+
"/recap [count], /回顾 - 查看当前本地会话回顾",
|
|
36
|
+
"/privacy, /隐私 - 查看本地数据留存路径与边界说明",
|
|
37
|
+
"/shortcuts, /快捷键 - 查看 TUI 输入快捷键",
|
|
38
|
+
"/queue [clear], /队列 [清空] - TUI 中即时查看或清空 pending 输入队列",
|
|
39
|
+
"/export, /导出 - 将当前会话导出为本地 Markdown",
|
|
40
|
+
"/exports [count], /导出列表 - 查看本地 Markdown 导出列表",
|
|
41
|
+
"/memory [count], /记忆 - 查看本地持久化记忆索引",
|
|
42
|
+
"/memory search <query> - 搜索本地持久化记忆并显示匹配路径",
|
|
43
|
+
"/memory sources - 查看本地上下文记忆来源与边界",
|
|
44
|
+
"/memory practices [count] - 查看本地蒸馏实践摘要",
|
|
45
|
+
"/memory graph [count] - 查看本地知识图谱节点摘要",
|
|
46
|
+
"/memory show <id> - 查看指定本地记忆详情",
|
|
47
|
+
"/dream [count], /沉淀 - 从当前会话沉淀本地记忆",
|
|
48
|
+
"/distill [count], /蒸馏 - 查看本地蒸馏实践摘要",
|
|
49
|
+
"/storage, /存储 - 查看本地数据存储占用",
|
|
50
|
+
"/repomap [path] [limit] - 扫描项目文件并生成符号地图(Repo Map)",
|
|
51
|
+
"/verify status|set <cmd>|clear|run - 配置与运行构建/测试验证与自动自愈",
|
|
52
|
+
"/mcp, /外部工具 - 查看本地 MCP server 配置摘要",
|
|
53
|
+
"/hooks, /钩子 - 查看本地 hooks/guard 配置摘要",
|
|
54
|
+
"/doctor, /诊断 - 运行本地稳定性与数据留存诊断",
|
|
55
|
+
"/context, /上下文 - 查看上下文占用与本地留存路径",
|
|
56
|
+
"/config - 查看当前生效配置",
|
|
57
|
+
"/status - 查看会话状态与 Token 统计",
|
|
58
|
+
"/dashboard - 获取观测控制台链接",
|
|
59
|
+
"-----------------------------------------",
|
|
60
|
+
"提示: 输入 /help <topic> 查看聚焦帮助;帮助与纠错均在本地完成,不调用模型。",
|
|
61
|
+
"安全: API key 推荐放在系统用户环境变量;setup 不会写入 .env。",
|
|
62
|
+
"",
|
|
63
|
+
];
|
|
64
|
+
export const helpCommand = {
|
|
65
|
+
name: "/help",
|
|
66
|
+
aliases: ["/?"],
|
|
67
|
+
description: "显示可用指令列表",
|
|
68
|
+
usage: "/help [topic]",
|
|
69
|
+
execute: async (args, context) => {
|
|
70
|
+
const lines = args.length ? formatFocusedHelp(args.join(" "), { surface: "slash" }) : HELP_LINES;
|
|
71
|
+
for (const line of lines) {
|
|
72
|
+
context.writeLine(line);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,YAW1B,CAAC"}
|