{"_id":"@apollo-music/dsh-agent-school-expert","_rev":"7-4f12e973ea98583686ebcba4f50fc8db","name":"@apollo-music/dsh-agent-school-expert","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.1.0","_id":"@apollo-music/dsh-agent-school-expert@0.1.0","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"ce426e751a4d1be89e5eb8ae856cabb52ecbcf2c","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.1.0.tgz","fileCount":27,"integrity":"sha512-TgudfgzleRl/pQilF1/jdsKHp17cqn6j3cXRG8lL934jJnAH4OQ6EZ4NOVIH9/xViIx4i0jCDiQw+tjaYGqK1A==","signatures":[{"sig":"MEYCIQC9v5QyhzC0KLhhAB3xBhddG/lmgI5Z2flqCrIuYigWwwIhANFcgiWcJuimp3/Y/bJBtxW/qZCel4tln0Vz47k05/oF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189291},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/bundle-host.d.ts","default":"./dist/bundle-host.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"4a3dcf4bb8da05e084deafa4aa10b688e9a977fd","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v1.json dist/release-contract-v1.json","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Apollo school policy Expert Agent Bundle for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@alicloud/credentials":"2.4.5","@apollo-music/dsh-file-reader":"0.3.0","@apollo-music/dsh-wecom-bridge":"0.5.2","@apollo-music/dsh-sidecar-terms":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.1.0_1787302258090_0.9316347463790899","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.2.0","_id":"@apollo-music/dsh-agent-school-expert@0.2.0","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"dist":{"shasum":"d750f047c332b3de7d378e4b83ca1d8406ef29e1","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.2.0.tgz","fileCount":36,"integrity":"sha512-EHqv08BgI0IGzvPDJmix0M32rl/dcYpASkZOV/AAJooqRxl/HVkJR2qLfHmMMujDK/PYvp/Ifmcp27ZbKU+F2A==","signatures":[{"sig":"MEUCIQClGf4ZDDAPCpUIAf9cg1gV1lWuP3vdxWlQzxxVxNaSHgIgD+ZlakYciYdFJjoNjPsobg9Jj2G651EDe871G+4KEF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218814},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"02f3df6e58de3acb4a52201b796a2f0f34d7e81a","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v1.json dist/release-contract-v1.json","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@alicloud/credentials":"2.4.5","@apollo-music/dsh-file-reader":"0.3.0","@apollo-music/dsh-wecom-bridge":"0.5.2","@apollo-music/dsh-sidecar-terms":"0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-client":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.2.0_1787421655877_0.9339737137136745","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.2.1","_id":"@apollo-music/dsh-agent-school-expert@0.2.1","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"dist":{"shasum":"d0be0581185dd253721e36fce835bc639efdcccc","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.2.1.tgz","fileCount":36,"integrity":"sha512-adc5RCgqmtcXGQwZ9oTCAWHQDQFi15QRav6YCoLrk8hiXX5rRJlFwBeEBR5+6gKuwHW4eeOrWYDFpKww+ULb4A==","signatures":[{"sig":"MEYCIQD2BzbdpeWtcfKq/FGUeCJw819Ws7BYwOUNTkLpixBt2wIhAIv8Z+pmHkr2mwfW49ypcygSX+5mW64FxKFGECuVPvlR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220425},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"30e80cd80f20defaeec0acddb45bbc1434dd6864","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v1.json dist/release-contract-v1.json && chmod 755 dist/cli.js dist/jsonrpc-bin.js","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","test:install":"node ../scripts/verify-self-contained-install.mjs expert","prepublishOnly":"npm test && npm run typecheck && npm run test:install","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.8","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@alicloud/credentials":"2.4.5","@deepseek-ai/dsh-goal":"0.1.0-rc.8","@deepseek-ai/dsh-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-brand":"0.1.0-rc.8","@deepseek-ai/dsh-scope":"0.1.0-rc.8","@deepseek-ai/dsh-shell":"0.1.0-rc.8","@deepseek-ai/dsh-skill":"0.1.0-rc.8","@deepseek-ai/dsh-spill":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-timeout":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-commands":"0.1.0-rc.8","@deepseek-ai/dsh-fs-local":"0.1.0-rc.8","@deepseek-ai/dsh-settings":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-llm-retry":"0.1.0-rc.8","@deepseek-ai/dsh-shell-env":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-tool-goal":"0.1.0-rc.8","@deepseek-ai/dsh-tool-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent-loop":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-bash-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-invariants":"0.1.0-rc.8","@deepseek-ai/dsh-jobs-local":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess":"0.1.0-rc.8","@deepseek-ai/dsh-tool-skill":"0.1.0-rc.8","@deepseek-ai/dsh-credentials":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@apollo-music/dsh-file-reader":"0.3.0","@deepseek-ai/dsh-atomic-write":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-protocol":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@apollo-music/dsh-wecom-bridge":"0.5.2","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-session-title":"0.1.0-rc.8","@deepseek-ai/dsh-system-prompt":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-user-approval":"0.1.0-rc.8","@apollo-music/dsh-sidecar-terms":"0.1.2","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-group":"1.0.1","@deepseek-ai/cordis-plugin-timer":"1.1.3","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-typert-protocol":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-loader":"1.0.2","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-output-retention":"0.1.0-rc.8","@deepseek-ai/dsh-skill-filesystem":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-include":"1.0.6","@deepseek-ai/dsh-anonymous-user-id":"0.1.0-rc.8","@deepseek-ai/dsh-goal-round-driver":"0.1.0-rc.8","@deepseek-ai/dsh-agent-instructions":"0.1.0-rc.8","@deepseek-ai/dsh-cordis-host-runner":"0.1.0-rc.8","@deepseek-ai/dsh-launch-environment":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-in-process-driver":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-client":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.2.1_1787467102401_0.1732137626392658","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.2.2","_id":"@apollo-music/dsh-agent-school-expert@0.2.2","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"dist":{"shasum":"561c6ef3671b70d1bf670b96b3ed645de65b82fa","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.2.2.tgz","fileCount":36,"integrity":"sha512-NLKHB1lIwUWYRxj8BhlDJok4smKJHV43kGcx7ISEH4kRGb3DOh5Laxswi3mLcPkWtOL6rvQOaIgmLnXMjbiLJA==","signatures":[{"sig":"MEYCIQDERfUaGItu0vUUfcLyCEkmgmvT42eKlPzknJJTR6pbXQIhAOVUaX3y1Mvk0NAaAnZAnMHnYbo1EGxo6SxrB6kF968L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223483},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"30e80cd80f20defaeec0acddb45bbc1434dd6864","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v1.json dist/release-contract-v1.json && chmod 755 dist/cli.js dist/jsonrpc-bin.js","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","test:install":"node ../scripts/verify-self-contained-install.mjs expert","prepublishOnly":"npm test && npm run typecheck && npm run test:install","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.8","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@alicloud/credentials":"2.4.5","@deepseek-ai/dsh-goal":"0.1.0-rc.8","@deepseek-ai/dsh-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-brand":"0.1.0-rc.8","@deepseek-ai/dsh-scope":"0.1.0-rc.8","@deepseek-ai/dsh-shell":"0.1.0-rc.8","@deepseek-ai/dsh-skill":"0.1.0-rc.8","@deepseek-ai/dsh-spill":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-timeout":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-commands":"0.1.0-rc.8","@deepseek-ai/dsh-fs-local":"0.1.0-rc.8","@deepseek-ai/dsh-settings":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-llm-retry":"0.1.0-rc.8","@deepseek-ai/dsh-shell-env":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-tool-goal":"0.1.0-rc.8","@deepseek-ai/dsh-tool-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent-loop":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-bash-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-invariants":"0.1.0-rc.8","@deepseek-ai/dsh-jobs-local":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess":"0.1.0-rc.8","@deepseek-ai/dsh-tool-skill":"0.1.0-rc.8","@deepseek-ai/dsh-credentials":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@apollo-music/dsh-file-reader":"0.3.0","@deepseek-ai/dsh-atomic-write":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-protocol":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@apollo-music/dsh-wecom-bridge":"0.5.2","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-session-title":"0.1.0-rc.8","@deepseek-ai/dsh-system-prompt":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-user-approval":"0.1.0-rc.8","@apollo-music/dsh-sidecar-terms":"0.1.2","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-group":"1.0.1","@deepseek-ai/cordis-plugin-timer":"1.1.3","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-typert-protocol":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-loader":"1.0.2","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-output-retention":"0.1.0-rc.8","@deepseek-ai/dsh-skill-filesystem":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-include":"1.0.6","@deepseek-ai/dsh-anonymous-user-id":"0.1.0-rc.8","@deepseek-ai/dsh-goal-round-driver":"0.1.0-rc.8","@deepseek-ai/dsh-agent-instructions":"0.1.0-rc.8","@deepseek-ai/dsh-cordis-host-runner":"0.1.0-rc.8","@deepseek-ai/dsh-launch-environment":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-in-process-driver":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-client":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.2.2_1787471301293_0.09675875017996138","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.2.3","_id":"@apollo-music/dsh-agent-school-expert@0.2.3","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"dist":{"shasum":"bfe0c4817d39c29ac0bfa5de3917707113072abb","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.2.3.tgz","fileCount":37,"integrity":"sha512-3EQzL+cWPPPAwbvWR3PeZNSSojrTUlpQeJ0/7VAqpThm9YRj1C5MjD7BSl2Zhu9nX90REUNJGHD/5vjSg14XQw==","signatures":[{"sig":"MEUCIQCPOnXgs7vjh/pn5ARAnb+ZkVZJRT2TOPqdbvG3rgooWAIgeVe4DLWD7xqgC0UzVUXcRnEscA311zu8q6DtUX/plPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243251},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"30e80cd80f20defaeec0acddb45bbc1434dd6864","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v1.json dist/release-contract-v1.json && cp ../../scripts/query-school-expert-index.mjs dist/query-school-expert-index.mjs && chmod 755 dist/cli.js dist/jsonrpc-bin.js dist/query-school-expert-index.mjs","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","test:install":"node ../scripts/verify-self-contained-install.mjs expert","prepublishOnly":"npm test && npm run typecheck && npm run test:install","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.8","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@alicloud/credentials":"2.4.5","@deepseek-ai/dsh-goal":"0.1.0-rc.8","@deepseek-ai/dsh-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-brand":"0.1.0-rc.8","@deepseek-ai/dsh-scope":"0.1.0-rc.8","@deepseek-ai/dsh-shell":"0.1.0-rc.8","@deepseek-ai/dsh-skill":"0.1.0-rc.8","@deepseek-ai/dsh-spill":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-timeout":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-commands":"0.1.0-rc.8","@deepseek-ai/dsh-fs-local":"0.1.0-rc.8","@deepseek-ai/dsh-settings":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-llm-retry":"0.1.0-rc.8","@deepseek-ai/dsh-shell-env":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-tool-goal":"0.1.0-rc.8","@deepseek-ai/dsh-tool-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent-loop":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-bash-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-invariants":"0.1.0-rc.8","@deepseek-ai/dsh-jobs-local":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess":"0.1.0-rc.8","@deepseek-ai/dsh-tool-skill":"0.1.0-rc.8","@deepseek-ai/dsh-credentials":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@apollo-music/dsh-file-reader":"0.3.0","@deepseek-ai/dsh-atomic-write":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-protocol":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@apollo-music/dsh-wecom-bridge":"0.5.2","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-session-title":"0.1.0-rc.8","@deepseek-ai/dsh-system-prompt":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-user-approval":"0.1.0-rc.8","@apollo-music/dsh-sidecar-terms":"0.1.2","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-group":"1.0.1","@deepseek-ai/cordis-plugin-timer":"1.1.3","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-typert-protocol":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-loader":"1.0.2","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-output-retention":"0.1.0-rc.8","@deepseek-ai/dsh-skill-filesystem":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-include":"1.0.6","@deepseek-ai/dsh-anonymous-user-id":"0.1.0-rc.8","@deepseek-ai/dsh-goal-round-driver":"0.1.0-rc.8","@deepseek-ai/dsh-agent-instructions":"0.1.0-rc.8","@deepseek-ai/dsh-cordis-host-runner":"0.1.0-rc.8","@deepseek-ai/dsh-launch-environment":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-in-process-driver":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-client":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.2.3_1787471764984_0.01149820120417222","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.3.0","_id":"@apollo-music/dsh-agent-school-expert@0.3.0","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"dist":{"shasum":"83815a345ba6d9965d0a05642198c5cfd746c912","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.3.0.tgz","fileCount":37,"integrity":"sha512-6e7x72deS5MZzr0j2/GzzAHsbqhcQJcsIEMH9YjS1fg+x3XUlm06A7C4B8m1qtyQFCM599u/PtyGUhsclaDLmg==","signatures":[{"sig":"MEUCICxcSRn346OmfHHm2AJhQj2Zv+pApAw/Y1/xXTIBlzw7AiEAm6ANclXmTIwAAjDuvfZU1netpowfFRmbfHGScJQCUXs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256139},"type":"module","engines":{"node":">=24"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"}},"gitHead":"30e80cd80f20defaeec0acddb45bbc1434dd6864","private":false,"scripts":{"test":"npm run build && node --test test/*.node-test.ts","build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v2.json dist/release-contract-v2.json && cp ../../scripts/query-school-expert-index.mjs dist/query-school-expert-index.mjs && chmod 755 dist/cli.js dist/jsonrpc-bin.js dist/query-school-expert-index.mjs","prepack":"npm run build","start:web":"./scripts/start-web.sh","typecheck":"tsc --noEmit","test:install":"node ../scripts/verify-self-contained-install.mjs expert","prepublishOnly":"npm test && npm run typecheck && npm run test:install","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts"},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"_npmVersion":"11.6.2","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ali-oss":"6.23.0","js-yaml":"4.3.1","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.8","@deepseek-ai/dsh-llm":"0.1.0-rc.8","@alicloud/credentials":"2.4.5","@deepseek-ai/dsh-goal":"0.1.0-rc.8","@deepseek-ai/dsh-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent":"0.1.0-rc.8","@deepseek-ai/dsh-brand":"0.1.0-rc.8","@deepseek-ai/dsh-scope":"0.1.0-rc.8","@deepseek-ai/dsh-shell":"0.1.0-rc.8","@deepseek-ai/dsh-skill":"0.1.0-rc.8","@deepseek-ai/dsh-spill":"0.1.0-rc.8","@deepseek-ai/dsh-tools":"0.1.0-rc.8","@deepseek-ai/dsh-persona":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-session":"0.1.0-rc.8","@deepseek-ai/dsh-timeout":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs":"0.1.0-rc.8","@deepseek-ai/schemastery":"3.18.1","@deepseek-ai/dsh-app-boot":"0.1.0-rc.8","@deepseek-ai/dsh-commands":"0.1.0-rc.8","@deepseek-ai/dsh-fs-local":"0.1.0-rc.8","@deepseek-ai/dsh-settings":"0.1.0-rc.8","@deepseek-ai/dsh-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-llm-pi-ai":"0.1.0-rc.8","@deepseek-ai/dsh-llm-retry":"0.1.0-rc.8","@deepseek-ai/dsh-shell-env":"0.1.0-rc.8","@deepseek-ai/dsh-tool-bash":"0.1.0-rc.8","@deepseek-ai/dsh-tool-goal":"0.1.0-rc.8","@deepseek-ai/dsh-tool-jobs":"0.1.0-rc.8","@deepseek-ai/dsh-agent-loop":"0.1.0-rc.8","@deepseek-ai/dsh-attachment":"0.1.0-rc.8","@deepseek-ai/dsh-bash-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction":"0.1.0-rc.8","@deepseek-ai/dsh-fs-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-home-paths":"0.1.0-rc.8","@deepseek-ai/dsh-invariants":"0.1.0-rc.8","@deepseek-ai/dsh-jobs-local":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess":"0.1.0-rc.8","@deepseek-ai/dsh-tool-skill":"0.1.0-rc.8","@deepseek-ai/dsh-credentials":"0.1.0-rc.8","@deepseek-ai/dsh-token-meter":"0.1.0-rc.8","@apollo-music/dsh-file-reader":"0.3.0","@deepseek-ai/dsh-atomic-write":"0.1.0-rc.8","@deepseek-ai/dsh-bash-sandbox":"0.1.0-rc.8","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.8","@deepseek-ai/dsh-llm-deepseek":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-protocol":"0.1.0-rc.8","@deepseek-ai/dsh-time-context":"0.1.0-rc.8","@apollo-music/dsh-wecom-bridge":"0.5.2","@deepseek-ai/dsh-agent-presets":"0.1.0-rc.8","@deepseek-ai/dsh-host-apiproxy":"0.1.0-rc.8","@deepseek-ai/dsh-sandbox-local":"0.1.0-rc.8","@deepseek-ai/dsh-session-title":"0.1.0-rc.8","@deepseek-ai/dsh-system-prompt":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent":"0.1.0-rc.8","@deepseek-ai/dsh-user-approval":"0.1.0-rc.8","@apollo-music/dsh-sidecar-terms":"0.1.2","@deepseek-ai/dsh-sandbox-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-fs-search":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-group":"1.0.1","@deepseek-ai/cordis-plugin-timer":"1.1.3","@deepseek-ai/dsh-command-compact":"0.1.0-rc.8","@deepseek-ai/dsh-typert-protocol":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-loader":"1.0.2","@deepseek-ai/dsh-agent-spine-demo":"0.1.0-rc.8","@deepseek-ai/dsh-attachment-local":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-basic":"0.1.0-rc.8","@deepseek-ai/dsh-output-retention":"0.1.0-rc.8","@deepseek-ai/dsh-skill-filesystem":"0.1.0-rc.8","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.8","@deepseek-ai/cordis-plugin-include":"1.0.6","@deepseek-ai/dsh-anonymous-user-id":"0.1.0-rc.8","@deepseek-ai/dsh-goal-round-driver":"0.1.0-rc.8","@deepseek-ai/dsh-agent-instructions":"0.1.0-rc.8","@deepseek-ai/dsh-cordis-host-runner":"0.1.0-rc.8","@deepseek-ai/dsh-launch-environment":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.0-rc.8","@deepseek-ai/dsh-session-projection":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence":"0.1.0-rc.8","@deepseek-ai/dsh-fs-observation-policy":"0.1.0-rc.8","@deepseek-ai/dsh-tool-subagent-control":"0.1.0-rc.8","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.0-rc.8","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.0-rc.8","@deepseek-ai/dsh-subagent-in-process-driver":"0.1.0-rc.8","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.0-rc.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.19.0","devDependencies":{"yaml":"2.8.1","typescript":"7.0.2","@types/node":"24.13.3","@types/js-yaml":"4.0.9","@deepseek-ai/dsh":"0.1.0-rc.8","@deepseek-ai/dsh-sdk-client":"0.1.0-rc.8"},"_npmOperationalInternal":{"tmp":"tmp/dsh-agent-school-expert_0.3.0_1787479942388_0.1936435282463631","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@apollo-music/dsh-agent-school-expert","version":"0.3.1","description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","private":false,"type":"module","packageManager":"pnpm@11.19.0","publishConfig":{"access":"public"},"exports":{".":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./sdk-runtime":{"types":"./dist/sdk-runtime.d.ts","default":"./dist/sdk-runtime.js"},"./persona":{"types":"./dist/persona.d.ts","default":"./dist/persona.js"},"./web-host":{"types":"./dist/web-host.d.ts","default":"./dist/web-host.js"},"./apollo-tools":{"types":"./dist/apollo-tools.d.ts","default":"./dist/apollo-tools.js"},"./apollo-memory":{"types":"./dist/apollo-memory.d.ts","default":"./dist/apollo-memory.js"},"./multiturn-runner":{"types":"./dist/apollo-multiturn-runner.d.ts","default":"./dist/apollo-multiturn-runner.js"},"./terminology-plugin":{"types":"./dist/terminology-plugin.d.ts","default":"./dist/terminology-plugin.js"},"./release-data":{"types":"./dist/release-data.d.ts","default":"./dist/release-data.js"}},"bin":{"apollo-school-expert":"dist/cli.js","apollo-school-expert-jsonrpc":"dist/jsonrpc-bin.js"},"scripts":{"build":"rm -rf dist && tsc -p tsconfig.build.json && cp ../release-contract-v2.json dist/release-contract-v2.json && cp ../../scripts/query-school-expert-index.mjs dist/query-school-expert-index.mjs && chmod 755 dist/cli.js dist/jsonrpc-bin.js dist/query-school-expert-index.mjs","benchmark:programmes:all-schools":"node scripts/benchmark-programmes-all-schools.ts","benchmark:terminology":"node scripts/benchmark-terminology.ts","benchmark:terminology:multiturn":"node scripts/benchmark-terminology-multiturn.ts","benchmark:memory":"node scripts/benchmark-memory.ts","benchmark:memory:multiturn":"node scripts/benchmark-memory-multiturn.ts","start:web":"./scripts/start-web.sh","prepack":"npm run build","prepublishOnly":"npm test && npm run typecheck && npm run test:install","test":"npm run build && node --test test/*.node-test.ts","test:install":"node ../scripts/verify-self-contained-install.mjs expert","typecheck":"tsc --noEmit"},"dependencies":{"@alicloud/credentials":"2.4.5","@apollo-music/dsh-file-reader":"0.3.1","@apollo-music/dsh-sidecar-terms":"0.1.5","@apollo-music/dsh-wecom-bridge":"0.5.3","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/cordis-plugin-group":"1.0.1","@deepseek-ai/cordis-plugin-include":"1.0.6","@deepseek-ai/cordis-plugin-loader":"1.0.2","@deepseek-ai/cordis-plugin-timer":"1.1.3","@deepseek-ai/dsh-agent":"0.1.1-rc.2","@deepseek-ai/dsh-agent-instructions":"0.1.1-rc.2","@deepseek-ai/dsh-agent-loop":"0.1.1-rc.2","@deepseek-ai/dsh-agent-presets":"0.1.1-rc.2","@deepseek-ai/dsh-agent-spine-demo":"0.1.1-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.1.1-rc.2","@deepseek-ai/dsh-api-gateway":"0.1.1-rc.2","@deepseek-ai/dsh-app-boot":"0.1.1-rc.2","@deepseek-ai/dsh-atomic-write":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-attachment-local":"0.1.1-rc.2","@deepseek-ai/dsh-authorization":"0.1.1-rc.2","@deepseek-ai/dsh-bash-local":"0.1.1-rc.2","@deepseek-ai/dsh-bash-sandbox":"0.1.1-rc.2","@deepseek-ai/dsh-brand":"0.1.1-rc.2","@deepseek-ai/dsh-code-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-connection":"0.1.1-rc.2","@deepseek-ai/dsh-command-compact":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-compaction":"0.1.1-rc.2","@deepseek-ai/dsh-compaction-basic":"0.1.1-rc.2","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.1.1-rc.2","@deepseek-ai/dsh-cordis-host-runner":"0.1.1-rc.2","@deepseek-ai/dsh-credentials":"0.1.1-rc.2","@deepseek-ai/dsh-file-reference":"0.1.1-rc.2","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-fs-local":"0.1.1-rc.2","@deepseek-ai/dsh-fs-observation-policy":"0.1.1-rc.2","@deepseek-ai/dsh-fs-sandbox":"0.1.1-rc.2","@deepseek-ai/dsh-goal":"0.1.1-rc.2","@deepseek-ai/dsh-goal-round-driver":"0.1.1-rc.2","@deepseek-ai/dsh-home-paths":"0.1.1-rc.2","@deepseek-ai/dsh-host-apiproxy":"0.1.1-rc.2","@deepseek-ai/dsh-host-plugin-inventory":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2","@deepseek-ai/dsh-invariants":"0.1.1-rc.2","@deepseek-ai/dsh-jobs":"0.1.1-rc.2","@deepseek-ai/dsh-jobs-local":"0.1.1-rc.2","@deepseek-ai/dsh-launch-environment":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.1.1-rc.2","@deepseek-ai/dsh-llm-pi-ai":"0.1.1-rc.2","@deepseek-ai/dsh-llm-retry":"0.1.1-rc.2","@deepseek-ai/dsh-message-feedback":"0.1.1-rc.2","@deepseek-ai/dsh-output-retention":"0.1.1-rc.2","@deepseek-ai/dsh-persona":"0.1.1-rc.2","@deepseek-ai/dsh-sandbox":"0.1.1-rc.2","@deepseek-ai/dsh-sandbox-local":"0.1.1-rc.2","@deepseek-ai/dsh-sandbox-policy":"0.1.1-rc.2","@deepseek-ai/dsh-scope":"0.1.1-rc.2","@deepseek-ai/dsh-sdk-jsonrpc-server":"0.1.1-rc.2","@deepseek-ai/dsh-sdk-protocol":"0.1.1-rc.2","@deepseek-ai/dsh-session":"0.1.1-rc.2","@deepseek-ai/dsh-session-checkpoint-policy":"0.1.1-rc.2","@deepseek-ai/dsh-session-persistence":"0.1.1-rc.2","@deepseek-ai/dsh-session-persistence-jsonl":"0.1.1-rc.2","@deepseek-ai/dsh-session-projection":"0.1.1-rc.2","@deepseek-ai/dsh-session-query":"0.1.1-rc.2","@deepseek-ai/dsh-session-reference":"0.1.1-rc.2","@deepseek-ai/dsh-session-title":"0.1.1-rc.2","@deepseek-ai/dsh-settings":"0.1.1-rc.2","@deepseek-ai/dsh-shell":"0.1.1-rc.2","@deepseek-ai/dsh-shell-env":"0.1.1-rc.2","@deepseek-ai/dsh-skill":"0.1.1-rc.2","@deepseek-ai/dsh-skill-filesystem":"0.1.1-rc.2","@deepseek-ai/dsh-spill":"0.1.1-rc.2","@deepseek-ai/dsh-storage":"0.1.1-rc.2","@deepseek-ai/dsh-storage-domain":"0.1.1-rc.2","@deepseek-ai/dsh-subagent":"0.1.1-rc.2","@deepseek-ai/dsh-subagent-in-process-driver":"0.1.1-rc.2","@deepseek-ai/dsh-subagent-spawn-in-process":"0.1.1-rc.2","@deepseek-ai/dsh-subprocess":"0.1.1-rc.2","@deepseek-ai/dsh-subprocess-local":"0.1.1-rc.2","@deepseek-ai/dsh-system-prompt":"0.1.1-rc.2","@deepseek-ai/dsh-time-context":"0.1.1-rc.2","@deepseek-ai/dsh-timeout":"0.1.1-rc.2","@deepseek-ai/dsh-token-meter":"0.1.1-rc.2","@deepseek-ai/dsh-tool-bash":"0.1.1-rc.2","@deepseek-ai/dsh-tool-fs":"0.1.1-rc.2","@deepseek-ai/dsh-tool-fs-search":"0.1.1-rc.2","@deepseek-ai/dsh-tool-goal":"0.1.1-rc.2","@deepseek-ai/dsh-tool-jobs":"0.1.1-rc.2","@deepseek-ai/dsh-tool-skill":"0.1.1-rc.2","@deepseek-ai/dsh-tool-subagent":"0.1.1-rc.2","@deepseek-ai/dsh-tool-subagent-control":"0.1.1-rc.2","@deepseek-ai/dsh-tools":"0.1.1-rc.2","@deepseek-ai/dsh-typert-protocol":"0.1.1-rc.2","@deepseek-ai/dsh-typert-registry":"0.1.1-rc.2","@deepseek-ai/dsh-user-approval":"0.1.1-rc.2","@deepseek-ai/schemastery":"3.18.1","ali-oss":"6.23.0","js-yaml":"4.3.1"},"engines":{"node":">=24"},"devDependencies":{"@deepseek-ai/dsh":"0.1.1-rc.2","@deepseek-ai/dsh-sdk-client":"0.1.1-rc.2","@types/js-yaml":"4.0.9","@types/node":"24.13.3","react":"18.3.1","react-dom":"18.3.1","typescript":"7.0.2","yaml":"2.8.1"},"_id":"@apollo-music/dsh-agent-school-expert@0.3.1","_integrity":"sha512-QDARNTc/QzF6VQLEv5PivGhxjTM+9UGgmyzOIgUqkZzAHL5O9QS+gefZMGxn89kLZ6g4Z0w5aeDeHBnr2gE0UA==","_resolved":"/private/tmp/apollo-expert-0.3.1-terms015-packs.7jtIeQ/a/apollo-music-dsh-agent-school-expert-0.3.1.tgz","_from":"file:/private/tmp/apollo-expert-0.3.1-terms015-packs.7jtIeQ/a/apollo-music-dsh-agent-school-expert-0.3.1.tgz","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-QDARNTc/QzF6VQLEv5PivGhxjTM+9UGgmyzOIgUqkZzAHL5O9QS+gefZMGxn89kLZ6g4Z0w5aeDeHBnr2gE0UA==","shasum":"6881ca7969f4cdabf3296f33f5be3d8c3b4ed201","tarball":"https://registry.npmjs.org/@apollo-music/dsh-agent-school-expert/-/dsh-agent-school-expert-0.3.1.tgz","fileCount":37,"unpackedSize":256191,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD1VXb1spjEbnCDS7o8UFPgHIKYxiSty5hBNrGyB0qibAIhANAjBHQdsfu9Qe/b+W1rtOVJ8FDme02BVVLFFTciA1jt"}]},"_npmUser":{"name":"djagger","email":"634750802@qq.com"},"directories":{},"maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-agent-school-expert_0.3.1_1787591154094_0.05199485486284017"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T08:50:57.908Z","modified":"2026-08-24T17:05:54.442Z","0.1.0":"2026-08-21T08:50:58.222Z","0.2.0":"2026-08-22T18:00:55.998Z","0.2.1":"2026-08-23T06:38:22.540Z","0.2.2":"2026-08-23T07:48:21.430Z","0.2.3":"2026-08-23T07:56:05.133Z","0.3.0":"2026-08-23T10:12:22.565Z","0.3.1":"2026-08-24T17:05:54.262Z"},"description":"Standalone Apollo school policy Expert Agent SDK runtime for DeepSeek Harness","maintainers":[{"name":"djagger","email":"634750802@qq.com"}],"readme":"# Apollo School Expert — DeepSeek Harness\n\n这是可由其他 DeepSeek Harness 进程按需启动的独立政策解读与事实核验 Agent。它通过 stdio JSON-RPC 运行，只读消费已验证知识索引与按需物化的官网原文，不参与爬取和数据生成。\n\n企业微信 Bridge、Worker/session、进度与上线方案见 [DESIGN.md](./DESIGN.md)。\n\n发布包：`@apollo-music/dsh-agent-school-expert`。它是普通 npm 包和完整 SDK child composition，不是 DSH Web Profile Bundle，也没有 `dsh.bundle` 安装元数据。固定入口为 `apollo-school-expert-jsonrpc`；消费方不需要源码仓库、Preset 物化或兄弟目录。当前完整依赖闭包精确兼容 `@deepseek-ai/dsh@0.1.1-rc.2`；不得与旧预发布版本混装。\n\n## 结构\n\n```text\n父 DSH：@deepseek-ai/dsh-subagent-dsh-sdk\n  -> apollo-school-expert-jsonrpc（每次调用一个新进程和新 session）\n     -> SDK JSON-RPC server（stdout 仅 JSON 帧）\n     -> Agent spine + 显式模型适配器\n     -> JSONL/zstd session persistence + checkpoint policy\n     -> read-only sandbox + sandboxed Bash/filesystem\n     -> Apollo School Expert persona\n     -> apollo_school_resolve 院校路由与简要可用状态\n     -> apollo_schema       按问题主题加载相关 SQL schema\n     -> apollo_sql          单校只读 SQLite\n     -> apollo_archive      evidence_id 存档物化/解压，返回本地路径\n     -> bash/read/grep/glob 在只读 sandbox 中检查已物化文件\n     -> apollo_memory_lookup  已验证检索路径（按 resolve 广告的 topic 调用）\n     -> apollo_memory_update  受控学习/反馈（可禁用写入）\n     -> progress_report     长任务里程碑\n     -> terminology sidecar 生命周期插件（不暴露 Tool）\n        -> 命中词条的 canonical term delta + rule delta\n     -> school_subagent     单校前台子代理（SDK 多校任务，同轮并行等待）\n        -> Apollo 四个只读事实工具 + 只读文件工具 + 可选检索路径记忆\n     -> list_agents / send_message / interrupt_agent\n     -> JSONL session / memory / archive cache 独立持久目录\n\nsealed 知识库与归档缓存\n  <- 只读访问；不加载 Web、终端 UI、console logger、企微 Bridge 或交互审批 UI\n```\n\n工具是 TypeScript 编写的 Harness 原生 Cordis/`defineTool` 插件，不使用 MCP；发布包先编译成 `dist/*.js` 与类型声明，SDK 子进程不直接执行 `node_modules` 中的 TypeScript。本 Agent 的仓库调试 bootstrap、A/B 基准和测试仍使用 `.ts`；Shell 只保留为仓库 Web 启动入口。四个只读事实工具可以安全并行；进度工具保持顺序执行。`apollo_school_resolve` 只返回匹配院校和 validation 计数摘要，`apollo_schema` 按 topic 返回约 5–8 KB 的相关 schema，避免一次返回整份上下文。`apollo_archive` 从每校 `knowledge.sqlite` 定位证据，把本地或远端归档透明物化到只读缓存并负责 gzip 解压，只向 Agent 返回 `local_path` 和页面元数据；Agent 不感知 OSS、对象键、缓存命中或原始 `artifact_path`。\n\n检索路径 memory 存在本 Agent 目录的 `memory/common.json` 与 `memory/schools/<school_id>.json`。它只记录“先查什么表、如何过滤、失败后走哪条 fallback”，不保存日期、费用、师资招生状态、官网原文或用户数据。默认只广告 `verified` 路径：`apollo_school_resolve.memory_topics` 没有当前 topic 时，Agent 不调用 memory，避免空 lookup 的固定延迟；通用 seed 先处于 `candidate`，需在至少两个学校验证后才晋级。写入可用 `APOLLO_HARNESS_MEMORY_WRITES=0` 完全关闭。\n\n仓库中的长驻 Web/企微运行面使用 Harness 原生 `spawn + continuable`：父代理为每校创建或复用一个 `school_subagent`，子代理以空对话开始但继承 preset，只能看到 `apollo_school_resolve / apollo_schema / apollo_sql / apollo_archive`、只读 `bash/read/grep/glob` 和可选 memory Tool；`maxDepth: 1` 再次禁止递归委托。Agent Loop 的并行 Tool 池固定为 8。Web 子代理默认后台启动并立即返回 id，结果通过 settlement notice 回到父代理；当前通用 subagent Tool 不支持 `outputSchema`，因此由子 persona 约束 JSON、父代理负责归一化。\n\n术语能力不是模型主动调用的 Tool。Host 级 Cordis 插件监听用户消息、工具结果、已提交的完整 thinking/reasoning 与候选回答，在 `agent/pre-step` 前从术语 API 取得尚未投递的 compact `term_delta + rule_delta`，再通过 `inject/steer` 放入模型上下文。流式 `reasoning-delta` 不参与匹配；完整 reasoning 会发送给只读 Resolver 做瞬时匹配，但不会作为术语上下文回注模型。插件维护独立的 `delivered_term_ids` / `delivered_rule_ids`，不会把 102 条术语整库常驻提示词，也不会把术语来源和管理字段送入模型。\n\nSDK composition 由包内 `sdk-runtime` 导出和 `config/sdk.cordis.yml` 共同组成；长 Persona 仍只维护在 `config/agent-presets/apollo-school-expert/agent.cordis.yml`，SDK 与仓库里的 Web 调试部署从同一个导出读取，避免两份 Prompt 漂移。SDK 子进程包含 in-process `spawn` provider、control tools 和同轮前台等待的 `school_subagent`。多个 Tool call 仍由 Agent Loop 并行执行，但必须在本次 SDK 调用结束前返回结果并形成自包含汇总；只有长驻 Web 运行面使用 continuable 后台语义。\n\nnpm 包不携带 SQLite/index 数据。sealed release 必须在第一次运行前独立下载；SDK 启动时会复核 release manifest、33 校精确集合、全部摘要和 SQLite 完整性，失败则在 stderr 明确报错并在输出任何 JSON-RPC 帧前退出。术语与 file-reader 是 opt-in；企微 Bridge 只属于仓库 Web/渠道部署，不进入 SDK composition。\n\n## 安装与验证\n\n在消费项目中安装普通 npm 依赖：\n\n```sh\nnpm install @apollo-music/dsh-agent-school-expert@0.3.1\n```\n\n独立 SDK child 所需的 DSH `0.1.1-rc.2` 递归 peer 闭包全部由本包以固定版本的普通 `dependencies` 持有；`0.3.0` 起只接受 release v2，逐校复验 `policy-manifest` 声明的全部专业、教授、索引及引用文件，并核对策略树摘要；`0.3.1` 同步 File Reader `0.3.1`、术语 Sidecar `0.1.5` 与 WeCom Bridge `0.5.3`。只读 SQL executor 仍只执行 npm 包内副本；release 中的 audit 副本只用于确认包内字节与封版审计字节一致。即使消费项目设置 `autoInstallPeers: false`，也不需要再手工补装 DSH runtime 包。父端的 `@deepseek-ai/dsh-subagent-dsh-sdk` 和模型可见 Tool 仍由父 DSH 自行安装。pnpm 的依赖构建审批不能由 node_modules 中的包代替宿主声明；消费项目使用以下配置批准 Bash/subprocess 必需构建，并显式拒绝不需要的生成脚本：\n\n```yaml\nautoInstallPeers: false\nallowBuilds:\n  '@deepseek-ai/dsh-subprocess-local': true\n  '@google/genai': false\n  koffi: true\n  node-pty: true\n  protobufjs: false\n```\n\n安装后、第一次启动前显式下载 sealed release：\n\n```sh\nexport APOLLO_EXPERT_RELEASE_BASE_URL='oss://<bucket>/<prefix>/school-expert'\nexport APOLLO_EXPERT_RELEASE_OSS_REGION='cn-beijing'\nexport APOLLO_EXPERT_RELEASE_OSS_ENDPOINT_TYPE='vpc'\nexport APOLLO_EXPERT_RELEASE_OSS_ECS_ROLE_NAME='<READ_ONLY_RAM_ROLE>'\n\nnpx apollo-school-expert data download --channel stable --root /var/lib/apollo/school-expert\nnpx apollo-school-expert data verify --root /var/lib/apollo/school-expert\nnpx apollo-school-expert data status --root /var/lib/apollo/school-expert\n```\n\n`data download` 依次校验 v2 channel、压缩包 SHA-256、tar 路径/条目类型、release v2 manifest、查询执行器审计摘要、每校策略目录的完整嵌套文件集与树摘要、validation 状态、SQLite `PRAGMA integrity_check` 和烟雾 SQL；release v1 会被明确拒绝。通过后才替换 `<root>/data` 并设为只读；本地已是同一 release 且复验通过时直接退出。原始官网存档的物化缓存按 release manifest SHA-256 隔离，每次 cache hit 都复验内容摘要、字节数和缓存元数据。PoC 不保留本地旧数据版本，失败时删除无效缓存后重新下载。release 下载凭据与 `APOLLO_ARCHIVE_OSS_*` 原始存档凭据分离。\n\n### SDK 启动契约\n\n所有部署参数都通过父 provider 的 `env` 显式传给子进程；不能依赖父进程环境中会被 `dsh-subagent-dsh-sdk` 清理的 `DSH_*` 或疑似凭据变量。\n\n父 provider 推荐使用 `command: node` 加 JSON-RPC 文件绝对路径，避免依赖包管理器生成的 bin symlink 是否保留执行位。父进程通过 `APOLLO_SCHOOL_EXPERT_JSONRPC_BIN` 提供该路径；npm tarball 同时保证 `dist/cli.js` 和 `dist/jsonrpc-bin.js` 为 `0755`，所以人工调用固定 bin 仍然有效。\n\n| 环境变量 | 要求 | 含义 |\n| --- | --- | --- |\n| `APOLLO_KB_ROOT` | 必需 | 已下载 sealed release 的绝对路径，通常是 `/var/lib/apollo/school-expert/data` |\n| `APOLLO_SCHOOL_EXPERT_SESSION_ROOT` | 必需 | JSONL/zstd session 与 checkpoint 目录 |\n| `APOLLO_HARNESS_MEMORY_ROOT` | 必需 | 受控检索路径 memory 目录；首次使用会写入包内 seed |\n| `APOLLO_HARNESS_MEMORY_ENABLED` | 可选 | `0` 完全关闭 memory Tool，默认启用 |\n| `APOLLO_HARNESS_MEMORY_WRITES` | 可选 | `0` 禁止受控学习写入，默认允许 |\n| `APOLLO_ARCHIVE_CACHE_ROOT` | 必需 | 官网原始存档只读物化缓存 |\n| `APOLLO_ARCHIVE_OSS_*` | 可选 | 私有官网存档的 URL、region、RAM role/profile 与 endpoint；父 provider 必须显式转发 |\n| `ALIBABA_CLOUD_ACCESS_KEY_*` | 可选 | 使用环境 AK/STS 时显式转发的官方凭据链变量；优先使用 RAM role |\n| `APOLLO_SCHOOL_EXPERT_WORKSPACE` | 可选 | Bash/filesystem 默认工作区；省略时使用子进程 cwd |\n| `APOLLO_SCHOOL_EXPERT_MODEL_PROVIDER` | 必需 | SDK initialize 使用的 provider，必须与父 provider 配置一致 |\n| `APOLLO_SCHOOL_EXPERT_MODEL` | 必需 | 模型 ID，必须与父 provider 配置一致 |\n| `APOLLO_SCHOOL_EXPERT_MODEL_API_KEY` | 必需 | 子运行时模型凭据 |\n| `APOLLO_SCHOOL_EXPERT_MODEL_BASE_URL` | 非 DeepSeek 必需 | OpenAI-compatible 或所选 pi-ai API 的基址 |\n| `APOLLO_SCHOOL_EXPERT_MODEL_API` | 可选 | pi-ai API 方言，默认 `openai-completions` |\n| `APOLLO_SCHOOL_EXPERT_CONTEXT_WINDOW` | 可选 | 默认 `262144` |\n| `APOLLO_SCHOOL_EXPERT_MAX_TOKENS` | 可选 | 默认 `32768` |\n| `APOLLO_SCHOOL_EXPERT_MODEL_INPUT_IMAGES` | 可选 | `1` 声明模型支持图片，默认 `0` |\n| `APOLLO_TERMINOLOGY_ENABLED` | 可选 | `1` 启用术语插件；同时必须传只读 Key |\n| `APOLLO_TERMINOLOGY_READ_API_KEY` | 条件必需 | 术语插件只读凭据 |\n| `APOLLO_FILE_READER_ENABLED` | 可选 | `1` 启用同进程 file-reader |\n| `APOLLO_FILE_READER_PYTHON_COMMAND` | 可选 | parser Python，默认 `python3` |\n| `APOLLO_FILE_READER_IMAGE_INPUT_SUPPORTED` | 可选 | `1` 允许 reader 把页面图片交给模型 |\n\n固定启动命令不接受位置参数：\n\n```sh\napollo-school-expert-jsonrpc\n```\n\nstdout 只用于逐行 JSON-RPC，所有启动失败和诊断都写 stderr。`shutdown`、stdin EOF、`SIGTERM` 和 `SIGINT` 都会 dispose Cordis root；官方 SDK Client/provider 负责超时后的 TERM/KILL 梯级回收。无知识库、摘要错误、SQLite 损坏或凭据缺失时不静默降级。\n\n父端完整配置见 [`config/subagent-dsh-sdk.example.yml`](./config/subagent-dsh-sdk.example.yml)。父进程仍自行安装并配置 `@deepseek-ai/dsh-subagent-dsh-sdk` 和模型可见的 `school_expert` Tool；专家包不反向强耦合父运行时。官方 DSH 0.1.1-rc.2 provider 每次 Tool 调用都会启动全新的 SDK 进程和 session，不提供跨调用连续会话；需要连续对话时应另行设计常驻或池化 provider。\n\n```sh\ncd \"/Users/gaolinjie/Documents/阿波罗音乐项目/阿波罗音乐知识库 - 院校政策/agents/school-expert\"\ncorepack pnpm install --frozen-lockfile\npnpm test\npnpm run typecheck\npnpm run test:install\nnpm run benchmark:terminology\nnpm run benchmark:terminology:multiturn\nnpm run benchmark:memory\nnpm run benchmark:memory:multiturn\n```\n\n测试覆盖 JSON-RPC stdout 纯度、SDK Client 完整 turn、Web continuable 与 SDK 同轮前台子代理、嵌套 Bash 回收、filesystem/Bash 只读拒绝、缺数据/凭据 fail-loud、工具注册及白名单、院校路由、只读 SQL、归档本地物化/透明下载/缓存/gzip 解压/后端信息隐藏、memory 检索/晋级/并发写锁/安全拒绝、路径逃逸拒绝，并确认查询前后老 SQLite 文件的大小、mtime 和 mode 不变。A/B 脚本自动只读复用 `~/.dsh` 的 DeepSeek 凭据。术语单轮对照扩展为 20 题，默认 4 路并发且每次运行使用隔离 session，输出到 `benchmarks/terminology/<timestamp>`；术语长对话在同一 live Agent/session 内连续执行 14 个 `followup()`，输出到 `benchmarks/terminology-multiturn/<timestamp>`。两者都从 session 日志断言 treatment 只有隐式插件 context、Tool 调用数为 0，并检查重复词跨轮去重。memory control/treatment 输出保存在 `benchmarks/memory/<timestamp>`；memory 多轮基准位于 `benchmarks/memory-multiturn/<timestamp>`。\n\n## Web 调试\n\n```sh\nnpm run start:web\n```\n\n默认打开 `http://127.0.0.1:3081`，避免与你手工运行的默认 3080 实例冲突。Harness profile、设置和会话日志只写入本目录 `runtime/dsh-home`。\n\n术语插件固定访问线上只读服务 `https://apollomusic-poc1.fde0.com/kb/terminology`，不接受 URL 覆盖或本地 fallback。`start:web` 会从本 Agent 被 Git 忽略的 `.env` 读取 `APOLLO_TERMINOLOGY_READ_API_KEY`，并在启动 Harness 前用该 Key 对 `/api/v1/catalog` 做认证预检。也可通过进程环境直接提供 Key，或用 `APOLLO_TERMINOLOGY_ENV_FILE` 指向包含 `TERMINOLOGY_READ_API_KEY` 的凭据文件。\n\n只需提供线上只读凭据：\n\n```sh\nexport APOLLO_TERMINOLOGY_READ_API_KEY='<READ_ONLY_API_KEY>'\nnpm run start:web\n```\n\n该公网端点已用 20 题单轮 A/B 和同一 session 的 14 轮长对话验证；基准只从进程环境读取 read key，报告和 session trace 不保存 key。\n\n部署到阿里云时，可另外为归档物化层配置内网 OSS。应用进程使用只读 RAM/ECS 角色，Agent 仍只看到本地路径：\n\n```sh\nexport APOLLO_ARCHIVE_OSS_URL='oss://<bucket>/crawler'\nexport APOLLO_ARCHIVE_OSS_REGION='cn-beijing'\nexport APOLLO_ARCHIVE_OSS_ENDPOINT_TYPE='vpc'\nexport APOLLO_ARCHIVE_OSS_ECS_ROLE_NAME='<READ_ONLY_RAM_ROLE>'\nexport APOLLO_ARCHIVE_CACHE_ROOT='/var/cache/apollo/archive'\n```\n\n本地已有完整 `data/raw` 时无需设置 OSS。`start:web` 默认还会从知识库根目录 `.env` 只读加载现有 `APOLLO_BACKUP_OSS_*` 作为 fallback，也可用 `APOLLO_ARCHIVE_ENV_FILE` 指定另一个配置文件；只解析已知键，不执行 shell。远端归档由 `ali-oss` 和 `@alicloud/credentials` SDK 流式下载，不依赖 `aliyun` CLI。凭据优先使用显式 ECS RAM Role/profile，否则使用官方默认链，支持环境 AK/STS、ACK RRSA/OIDC、CLI profile、ECS Metadata 和 credentials URI。归档工具不设文件大小或正文字符截断上限；它以流方式复制/解压并返回本地文件，由只读 Bash/文件工具按需检查。\n\n## Docker 部署\n\nDocker 镜像只包含 School Expert 运行代码、DSH web profile、preset/memory seed 和可选集成依赖；不包含 33 校 SQLite/index、师资/专业 CSV/JSONL、爬虫状态或 `data/raw`。数据在容器首次使用前通过上述 CLI 下载到持久卷。\n\n```sh\ndocker build \\\n  -f agents/school-expert/Dockerfile \\\n  -t apollo-school-expert:local \\\n  .\n```\n\n本地非容器默认使用 `source` 模式，每次 SQL 查询前复核 `_source_files` 中的原始哈希。需要手工生成或验证封版产物时使用：\n\n```sh\nnpm run expert:index:seal\nnpm run expert:index:check-release\n```\n\n生产镜像固定 `APOLLO_EXPERT_INDEX_MODE=sealed` 且 `APOLLO_KB_ROOT=/var/lib/apollo/school-expert/data`。`start-web.sh` 会先调用 `apollo-school-expert data verify`；无数据、缺校、多校、哈希错配或 SQLite 损坏时直接拒绝启动，不把错误扩写成“索引正在重建”。\n\n最小启动需要一个模型 Key；只有开启术语库时才需要术语库只读 Key。`/var/lib/apollo` 保存 sealed data、DSH session、受控 memory 和按需下载的 OSS 归档缓存：\n\n```sh\n# 首次使用或切换 release 时，先停止服务并写入持久卷。\ndocker run --rm \\\n  --env-file /secure/apollo-school-expert.env \\\n  -v apollo-school-expert-state:/var/lib/apollo \\\n  apollo-school-expert:local \\\n  node ./dist/cli.js data download --channel stable --root /var/lib/apollo/school-expert\n\n# 数据验证通过后再启动长驻 Web/企微进程。\ndocker run --rm \\\n  --name apollo-school-expert \\\n  --env-file /secure/apollo-school-expert.env \\\n  -v apollo-school-expert-state:/var/lib/apollo \\\n  apollo-school-expert:local\n```\n\n生产容器以非 root 用户运行，DSH 只监听容器回环地址；企业微信 Bridge 使用出站连接，不需要发布端口。DSH 会主动拒绝 `0.0.0.0`，因为 Web Harness 具备代码执行能力，不能直接放到公网或普通反向代理后。需要远程调试时，在支持 host networking 的可信宿主机上用 `--network host` 运行，再通过 SSH tunnel 访问宿主机的 `127.0.0.1:3081`。\n\nKey 只通过运行环境或 Secret 注入，禁止使用 Docker build argument。阿里云 ECS 可设置 `APOLLO_ARCHIVE_OSS_ECS_ROLE_NAME`，ACK 推荐直接使用 RRSA 标准环境变量。\n\n升级术语插件时先发布新的 npm 版本，再显式更新本目录 `package.json` 和 lockfile 中的精确版本；所有部署与 worktree 使用同一包版本。\n\n- 启动脚本会只读复用普通 `npx dsh web` 保存于 `~/.dsh` 的 DeepSeek 与 DashScope 凭据，并保持其 `dashscope-intl/qwen3.8-max` 默认选择；不会复制、回显或改写密钥。\n- 若共享 Harness 配置不存在，再从现有微信项目 `.env` 只读加载 Qwen 备用端点。\n- 也可以在 Web 的“设置 → 模型”里保存 DeepSeek Key 并选择 DeepSeek 模型；密钥由 Harness 写入隔离的 `runtime/dsh-home/.credentials.yaml`，不会进入 Git 或老知识库。\n- 模型或 preset 的选择只影响之后新建的会话；已开始的会话保持原配置。\n\n建议测试问题：\n\n```text\n魏玛李斯特音乐学院钢琴本科入学考试需要准备什么曲目？\n```\n\n多校并行测试应新建会话后询问，例如：\n\n```text\n比较魏玛、代特莫尔德和柏林三所音乐学院钢琴本科的申请截止时间。\n```\n\nTrajectory 视图可直接检查系统提示词、工具参数、工具结果和进度报告，因此 Web 模式适合调试。\n\n### 企业微信智能机器人（同进程）\n\n`@apollo-music/dsh-wecom-bridge` 作为 Host 级 Cordis 插件与 DSH Web 运行在同一个\n进程。共享包封装企业微信长连接和协议兼容层，并直接调用进程内 `apiProxy`，因此复用\nWeb Host 的 preset 组装、模型选择、持久化、冷会话恢复和 workspace 展示，不经过 HTTP、\nMCP 或 ACP。\n\nBridge `0.5.3` 还会接收企业微信图片、图文混排、官方语音转写、文件、视频和引用消息。\n附件以 `0600` 权限保存到 workspace 下被 Git 忽略的 `.dsh-wecom/inbox`；生产 workspace 位于\n`apollo-school-expert-state` 持久卷中，部署方负责制定保留和清理策略。Bridge 自动注册\n`read_quoted_message`。`@apollo-music/dsh-file-reader@0.3.1` 由 Expert 包作为直接运行时依赖提供\n`file_reader_open / outline / read / search / render / close`，用于 PDF、DOCX、XLSX/XLSM 和\nPPTX。PNG/JPEG 由 Bridge 作为图片附件直接交给已声明 `input: [text, image]` 的模型路由。\n\n```sh\nexport APOLLO_WECOM_ENABLED=1\nexport WECOM_AIBOT_BOT_ID='<企业微信智能机器人 BotID>'\nexport WECOM_AIBOT_SECRET='<企业微信智能机器人 Secret>'\n# 生产部署声明的实际副本数；企业微信启用时必须为 1。\nexport APOLLO_WECOM_REPLICA_COUNT=1\nexport APOLLO_FILE_READER_ENABLED=1\nexport APOLLO_FILE_READER_PYTHON_COMMAND=/opt/file-reader-venv/bin/python\nexport APOLLO_FILE_READER_IMAGE_INPUT_SUPPORTED=1\n# 可选：用于从群消息开头移除精确的 @名称；不设置也不影响路由。\nexport WECOM_AIBOT_MENTION_NAME='Apollo院校助手'\nnpm run start:web\n```\n\n也可以把企业微信和归档配置写入 Agent 目录下被 Git 忽略的 `.env`，或通过\n`APOLLO_WECOM_ENV_FILE=/absolute/path/to/file` 指向另一个本地文件。\n启动脚本只读取已知的 `APOLLO_WECOM_ENABLED`、`WECOM_AIBOT_BOT_ID`、\n`WECOM_AIBOT_SECRET`、`WECOM_AIBOT_MENTION_NAME`、`WECOM_AIBOT_SESSION_EPOCH`\n和 `WECOM_AIBOT_SESSION_RESET_IDS`、`APOLLO_WECOM_INSTANCE_ID`、\n`APOLLO_WECOM_STATUS_FILE`、`APOLLO_WECOM_OUTBOX_FILE`、\n`APOLLO_WECOM_REPLICA_COUNT`、\n`APOLLO_WECOM_UNSUPPORTED_ALLOW_MULTIPLE`、`APOLLO_FILE_READER_ENABLED`、\n`APOLLO_FILE_READER_PYTHON_COMMAND`、`APOLLO_FILE_READER_IMAGE_INPUT_SUPPORTED`，以及 `APOLLO_ARCHIVE_OSS_*`、\n`APOLLO_BACKUP_OSS_*`、`APOLLO_ARCHIVE_CACHE_ROOT`；不会执行文件中的 shell。\n\n#### 生产单连接约束与运行手册\n\n同一个企业微信智能机器人只允许一条活跃长连接。受支持的生产形态因此是\n`APOLLO_WECOM_REPLICA_COUNT=1`，部署清单中的实际副本数也必须为 1；启动脚本会拒绝\n声明为 2 个或更多副本的配置。紧急实验只有显式设置\n`APOLLO_WECOM_UNSUPPORTED_ALLOW_MULTIPLE=1` 才能绕过检查，但这不会提供 HA：新实例认证后\n仍会把旧实例顶下线。不得把该开关写入常规部署配置。\n\n每个进程生成一个不含 BotID 的随机关联标识，也可用 1–64 位安全字符显式设置\n`APOLLO_WECOM_INSTANCE_ID`。状态转换日志只输出该标识及\n`connecting / authenticated / reconnecting / replaced / stopped` 状态和固定原因码；不会输出\nSecret、消息内容、用户 ID 或聊天 ID。状态同时原子写入\n`APOLLO_WECOM_STATUS_FILE`（容器默认 `/var/lib/apollo/wecom-status.json`）。Docker\n`HEALTHCHECK` 只有在 Web 可访问且企微状态为 `authenticated` 时才通过；被新实例替换后，\n旧实例保持终态 `replaced`、readiness 为 false，也不会声称正在等待重连。\n每次启动都会先清除持久卷中上个进程的状态，避免旧的 `authenticated` 被误认为本次就绪。\n\nBridge 把未结束的逻辑任务路由和待发最终答案原子写入\n`APOLLO_WECOM_OUTBOX_FILE`（容器默认 `/var/lib/apollo/wecom-outbox.json`）。\n该文件属于通用渠道可靠投递状态，会保留路由与用户可见内容，权限为\n`0600`，不得输出到日志或打包进镜像。主动发送失败时保留记录，默认每\n30 秒及企微重新认证时重试，因此是 at-least-once 投递。\n\n滚动发布不能让新旧实例重叠连接，应使用 recreate 策略（Kubernetes 等价配置为\n`maxSurge: 0`、`maxUnavailable: 1`）：\n\n1. 停止旧实例，确认日志进入 `stopped`。\n2. 启动唯一的新实例，等待日志进入 `authenticated`，并确认容器 health 为 healthy。\n3. 若旧实例出现 `replaced`，说明另一个实例已抢占连接。先定位并停止意外实例，再重启\n   预期实例；`replaced` 不会在进程内自行恢复。\n\n普通网络中断会进入 `reconnecting` 并由 SDK 自动恢复到 `authenticated`，无需人工重启。\n若长时间无法恢复，先核对网络和凭据；只有 `replaced` 状态才按上面的抢占流程处理。\n\n- 群聊按 `chatid`、单聊按 `userid` 确定性映射到一个 DSH session，重启后继续原会话；\n  群内发言人以不可逆的 8 位短标识进入上下文，模型能区分成员但看不到原始 `userid`。\n- 所有追加消息默认使用 Harness `steer`；空闲时会开启新一轮，运行中在最近的 step\n  边界合入。\n- 企业微信会话使用独立的 `apollo-school-expert-wecom` preset；bootstrap 按固定顺序合成\n  School Expert domain persona、共享包的 channel prompt 和本项目的企微业务 overlay。\n  普通 Web preset 和单校子代理不会收到渠道 prompt；`steer` 只包含真实用户消息，单聊\n  保持原文，群聊只增加匿名成员标识。\n- 跨 turn 跟踪 DSH 后台子代理、保留 session 路由、主动补发、持久化 outbox 和长\n  Markdown 拆分均属于共享 Bridge 的通用能力。Bridge 还会在 `turn/end` 后使用\n  250 ms 静默窗口观察父 Agent inbox，避免最后一个 settlement/wakeup 已排队却被当成结束。\n  School Expert overlay 只定义单校子代理\n  何时算全部完成、多校汇总必须自包含等业务规则。\n- 群聊收到 @ 回调后立即以 `⏳ 处理中｜👀 已收到消息` 打开流式回复；\n  `progress_report.message` 原位更新并始终保留 `⏳ 处理中｜`，最终答案不带活动前缀。\n- 企业微信智能机器人当前没有给原消息添加/删除 reaction 的官方 SDK 接口；上述行为是\n  同一流式气泡内的等效反馈。运行中再次收到补充时，旧气泡保留最后进度正文并只移除\n  活动前缀，最新消息接管状态与最终答案。\n- 单聊收到消息先显示 `⏳ 处理中｜已收到消息`，随后同样由进度或最终答案原位覆盖。\n- 渠道 system persona 要求 URL 使用 Markdown、相同 URL 前缀的相关子页面仍逐条保留\n  完整链接，并要求插件二次生成后的最后一条答案自包含。余额不足的 402/QUOTA 错误会\n  转为明确中文提示。\n- 回调按 `msgid` 做 24 小时进程内排重；流式回复超过安全窗口或刷新失败时自动退化为\n  主动 Markdown 消息。\n\n#### SDK 协议兼容层\n\n官方 SDK 的协议补丁、回调边界和运行时代码由\n`@apollo-music/dsh-wecom-bridge` 在发布阶段完成校验与打包。School Expert 不直接安装\n`@wecom/aibot-node-sdk`、不运行 `patch-package`，也不维护协议副本。共享包会拦截长连接不支持\n的 stream 载荷，修正视频引用、模板卡片/反馈事件层级，对主动发送强制明确的单聊/群聊路由，\n并在上传前校验媒体大小、文件名和格式。\n\nSDK 或协议升级必须在 `fde0-inc/dsh-wecom-bridge` 中完成补丁、bundle 和 golden tests，发布新\n版本后再由 School Expert 精确升级 npm 版本。消费方的 `npm ci`、tarball/profile 安装和 Docker\n构建只验证共享包的公开入口与 CLI，不再修改第三方依赖。\n\n## 安全边界\n\n- 父代理暴露五个基础 Apollo 工具、两个可选 memory 工具、六个 file-reader 工具、原生 `bash/read/grep/glob`，以及限定用途的 `school_subagent / list_agents / send_message / interrupt_agent`；企业微信渠道启用时由 Bridge 额外提供执行绑定的 `read_quoted_message`。无 Web、Skill 或 Workflow。Harness sandbox 固定为 `read-only`，文件写入和破坏性 shell 操作由 Host 拒绝。\n- 子代理只暴露四个 Apollo 只读事实工具、`bash/read/grep/glob` 和可选 memory 工具，`maxDepth: 1` 且 delegation Tool 被 `toolFilter` 移除；单校任务禁止创建子代理，多校每批最多 8 个。\n- `apollo_sql` 复用老项目已验证的只读执行器，禁止写操作、`ATTACH`、`PRAGMA` 和多语句。\n- `apollo_archive` 只接受正式 `evidence_id`（兼容 `school:ev...` 与旧数据的裸 `ev-...`），从该校只读 `knowledge.sqlite` 解析注册 artifact，并校验路径仍位于 `data/raw/<school_id>`。工具负责透明下载、缓存和解压，但不提取/截断正文；返回值隐藏本地/OSS 来源、对象键、缓存状态和原始 artifact 路径，只提供只读 `local_path`、页面 URL、采集时间、HTTP `Last-Modified`（若源站提供）、内容类型、字节数与哈希。\n- memory 文件路径由插件按已注册 `school_id` 决定，不接受模型提供路径；学习只接受同 session trace 中真实成功、非空的只读 SQL，模板必须是单条带 `LIMIT` 的 `SELECT/WITH`。原子替换、文件锁和 `audit.jsonl` 防止并发丢写并保留审计。\n- lookup Tool 的参数 schema 由当前 verified route 动态收紧；当前只允许 `hfm-weimar/audition`。即使模型忽略 persona，未广告的 school/topic 组合也会在 schema 和 runtime 两层被拒绝。\n- 术语 sidecar 只持有只读 API Key，不注册模型可见 Tool；本地/公网均调用相同的 `/catalog` 与 `/resolve` 只读契约。Trajectory 中可审计插件 instruction message，但最终输出禁止泄露 `TERM-*`、`RULE-*` 或内部版本信封。\n- Harness sandbox 固定为 `read-only`，遥测显式关闭。归档缓存由 Tool 创建并把物化文件设为只读；Agent 的 Bash/文件工具只消费路径。\n- file-reader 0.3.1 由同一 Host 插件以 Python isolated mode 启动随包 parser，不依赖 SidecarWorker 或 OCI runner；仅在 `APOLLO_FILE_READER_ENABLED=1` 时启用。启动脚本会校验专用 venv 及解析依赖，失败时拒绝启动。\n- Web continuable 子代理拥有持久 session；同一父会话按学校复用，生产前仍需定义保留期和清理策略，避免目录无限增长。SDK 子进程只在单次调用内使用前台子代理。\n- 运行时数据位于本 Agent 的 `runtime/`，与数据分析 Agent 完全分离。\n\n官方资料：\n\n- https://www.deepseek.com/harness/\n- https://deepseek-harness.github.io/deepseek-harness/guide/quickstart\n- https://deepseek-harness.github.io/deepseek-harness/develop/basic/tool\n","readmeFilename":"README.md"}