@xdxer/dingtalk-agent 0.1.4-beta.11 → 0.1.4-beta.13
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 +29 -0
- package/README.en.md +1 -1
- package/README.md +15 -16
- package/dist/bin/dingtalk-agent.js +43 -10
- package/dist/bin/dingtalk-agent.js.map +1 -1
- package/dist/src/agent-audit.js +3 -2
- package/dist/src/agent-audit.js.map +1 -1
- package/dist/src/agent-enhance.js +3 -2
- package/dist/src/agent-enhance.js.map +1 -1
- package/dist/src/agent-platform.js +82 -4
- package/dist/src/agent-platform.js.map +1 -1
- package/dist/src/development-workspace.js +3 -1
- package/dist/src/development-workspace.js.map +1 -1
- package/dist/src/multica-deploy.js +2 -1
- package/dist/src/multica-deploy.js.map +1 -1
- package/dist/src/opencode-evals.js +2 -1
- package/dist/src/opencode-evals.js.map +1 -1
- package/dist/src/remote-state-evals.js +2 -1
- package/dist/src/remote-state-evals.js.map +1 -1
- package/dist/src/robot-evals.js +2 -1
- package/dist/src/robot-evals.js.map +1 -1
- package/dist/src/skill-manager.js +18 -3
- package/dist/src/skill-manager.js.map +1 -1
- package/dist/src/skills.js +2 -1
- package/dist/src/skills.js.map +1 -1
- package/docs/INSTALLATION.md +2 -2
- package/lab/agent-eval/completion-gate-regression.json +6 -6
- package/package.json +7 -6
- package/skills/README.md +23 -0
- package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/SKILL.md +33 -7
- package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/SKILL.md +1 -1
- package/skills/platforms/multica-dingtalk/multica-external/SKILL.md +280 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/bootstrap.sh +78 -0
- package/skills/platforms/multica-dingtalk/multica-external/scripts/multica_ext.py +1178 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/AGENTS.template.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.dingtalk-doc.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/agent.bindings.local.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/opencode.template.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/assets/role-skill.template.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/evals/evals.json +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/agent-definition-contract.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/opencode-host-contract.md +0 -0
- /package/skills/{dingtalk-agent-compose → core/dingtalk-agent-compose}/references/storage-routing.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/SKILL.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/assets/eval-catalog.template.json +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/evals/evals.json +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/eval-topology.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/evidence-contract.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/scenario-taxonomy.md +0 -0
- /package/skills/{dingtalk-agent-eval → core/dingtalk-agent-eval}/references/storage-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/SKILL.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/memory-candidate-proposal.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/assets/task-checkpoint.json +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/action-contract.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/event-to-behavior.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/memory-and-evolution.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/perception-and-gates.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/runtime-modes.md +0 -0
- /package/skills/{dingtalk-basic-behavior → core/dingtalk-basic-behavior}/references/task-lifecycle.md +0 -0
- /package/skills/{dingtalk-agent-boot-multica → platforms/multica-dingtalk/dingtalk-agent-boot-multica}/SKILL.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/multica-deployment-contract.md +0 -0
- /package/skills/{dingtalk-agent-deploy → platforms/multica-dingtalk/dingtalk-agent-deploy-multica}/references/promotion-observation-contract.md +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-enhance.js","sourceRoot":"","sources":["../../src/agent-enhance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EACL,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EACjF,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAC5C,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAsB,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,MAAM,IAAI,GAAG,0CAA0C,CAAA;AACvD,MAAM,KAAK,GAAG,yBAAyB,CAAA;AACvC,MAAM,iBAAiB,GAAG,iDAAiD,CAAA;AAC3E,MAAM,cAAc,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAA;AAC3D,MAAM,eAAe,GAAG,2KAA2K,CAAA;AAwFnM,MAAM,UAAU,oBAAoB,CAClC,IAAY,EAAE,UAA+B,EAAE;IAE/C,OAAO,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAY,EAAE,OAA4B;IAE1C,IAAI,CAAC,OAAO,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IACtB,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvF,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,iBAAiB,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IAC7E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;QAChE,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzE,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,KAAoC,CAAA;IAExC,IAAI,CAAC;QACH,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBACtE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACpD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;gBACvD,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;gBAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC5D,OAAO,EAAE,2CAA2C;gBACpD,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;gBAChC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI;oBACJ,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC7C,CAAC,CAAC;aACJ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;YACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACpD,IAAI,SAAS,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBAC1C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACxC,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,IAAI,SAAS,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChF,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAA;YACvD,CAAC;iBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAClD,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAChD,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,CAAA;YACrD,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,KAAK,kBAAkB;gBAClD,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE;oBAC7F,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;YACrB,IAAI,MAAM,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,gBAAgB,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACzD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;QAC9E,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YAC5B,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;YAClD,cAAc,EAAE,IAAI,CAAC,UAAU;SAChC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1E,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO;QACL,OAAO,EAAE,4CAA4C;QACrD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnD,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK;QACnF,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;QACnF,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;QAChC,OAAO;QACP,KAAK,EAAE;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;YAChE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,QAAQ;SACtC;KACF,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAA4B;IAClE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5C,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvD,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,qBAAqB,EAAE,UAAU,CAAC,CAAA;IACvF,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;IACjE,MAAM,eAAe,GAAG,UAAU,CAAC,mBAAmB,CAAC;QACrD,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACnE,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,eAAe,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/F,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC/F,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,wBAAwB,WAAW,IAAI,WAAW,EAAE,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACvF,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAA;IACxF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,CAAA;IACrF,IAAI,YAAY,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACxF,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,MAAM,aAAa,GAAa,EAAE,CAAA;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAChD,MAAM,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAC;QAC/C,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACzD,MAAM,sBAAsB,GAAG,eAAe,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;IACjF,IAAI,sBAAsB,IAAI,sBAAsB,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QACnF,QAAQ,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,aAAa,GAAkB;QACnC,OAAO,EAAE,iCAAiC;QAC1C,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,aAAa;QAC/C,MAAM,EAAE,gBAAgB,EAAE,MAAM,IAAI,kBAAkB;QACtD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,gBAAgB,EAAE,MAAM;YAChD,sBAAsB,EAAE,OAAO,EAAE,MAAM,IAAI,oBAAoB;QACjE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,SAAS;YACzD,sBAAsB,EAAE,OAAO,EAAE,SAAS,IAAI,6BAA6B;QAC7E,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,gBAAgB,EAAE,SAAS;YACzD,sBAAsB,EAAE,OAAO,EAAE,SAAS,IAAI,qCAAqC;QACrF,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,gBAAgB,EAAE,QAAQ,IAAI,iBAAiB;QAC7E,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB,EAAE,SAAS,CAAC,OAAO,IAAI,EAAE;YACrE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,gBAAgB,EAAE,SAAS,CAAC,cAAc,IAAI,EAAE;SAC3F;KACF,CAAA;IACD,yBAAyB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC;SAC3D,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAA;IACnD,IAAI,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAAC;aACtD,OAAO,CAAC,YAAY,EAAE,WAAW,IAAI,YAAY,CAAC;aAClD,OAAO,CAAC,oBAAoB,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAA;QAC/E,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC5B,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC7C,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC5B,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjE,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,UAAU,IAAI,EAAE,CAAA;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACvC,IAAI,IAAiB,CAAA;QACrB,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC,CAAA;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;YACpE,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAA;YAC7C,IAAI,UAAU,KAAK,IAAI;gBAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,IAAI,qBAAqB,UAAU,IAAI,WAAW,EAAE,CAAC,CAAA;YAC1G,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;gBAAE,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAA;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,wBAAwB,CAAC;iBAC1D,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC;iBACrC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;YACnC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAChE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACzB,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,WAAW,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,EAAE,QAAQ,CAC3C,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC,CAAA;IAC/D,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAErE,MAAM,OAAO,GAAG,cAAc,CAAC,eAAe,EAAE;QAC9C,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,wBAAwB;QACzE,aAAa,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa;KAC9D,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACzE,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACjG,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;IAE3E,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1C,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS;KACjE,CAAC,EAAE,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAQ;QAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,CAAA;QACxE,CAAC;;YAAM,iBAAiB,CAAC,IAAI,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IACrF,IAAI,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;IAC1D,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5B,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAEjE,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IACvE,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU;KAC7C,CAAC,CAAC,CAAC,CAAC,CAAA;IACL,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS;KAC3C,CAAC,CAAC,CAAC,CAAC,CAAA;IACL,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,yCAAyC,EAAE,YAAY,EAAE,WAAW;QAC5E,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;QACtE,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,wBAAwB;YAChD,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS;YAChE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ;YACpE,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC;YAC3D,sBAAsB,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC;SACxE;KACF,CAAA;IACD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACtE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,cAAc,CAAA;IAC3D,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS;YACtC,CAAC,CAAC,CAAC,oBAAoB,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,WAAW,KAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,MAAM,YAAY,GAAG,qBAAqB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,MAAM,eAAe,CAAA;IACtG,MAAM,IAAI,GAAqB;QAC7B,OAAO,EAAE,yCAAyC,EAAE,MAAM;QAC1D,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QAC3E,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK;QACtE,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;QACtD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ;QACzD,cAAc,EAAE;YACd,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;YAClC,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;YACzC,GAAG,EAAE,aAAa,CAAC,MAAM;gBACvB,CAAC,CAAC,2DAA2D;gBAC7D,CAAC,CAAC,4BAA4B;SACjC;QACD,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE;QAC7D,YAAY,EAAE,EAAE,QAAQ,EAAE;gBACxB,4BAA4B,QAAQ,CAAC,WAAW,CAAC,SAAS;gBAC1D,8BAA8B,QAAQ,CAAC,WAAW,CAAC,oBAAoB,QAAQ,CAAC,YAAY,CAAC,SAAS;gBACtG,iDAAiD;aAClD,EAAE;KACJ,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,QAAoC,EAAE,KAG7D;IACC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC9D,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,aAAa;gBAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YAC3D,KAAK,CAAC,OAAO,GAAG;gBACd,GAAG,KAAK,CAAC,OAAO;gBAChB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;gBAC7B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;gBACnC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;aACpC,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;iBAClD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,SAAS,GAAG;oBAChB,cAAc,EAAE,qBAAqB;oBACrC,kBAAkB,EAAE,0BAA0B;iBAC/C,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC,SAAS,CAAA;YACxB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAA;IAC1E,OAAO;QACL,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW;QAC5D,UAAU,EAAE,IAAI,OAAO,EAAE;QACzB,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE;QACxE,UAAU,EAAE,EAAE,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE;KAC3D,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAG/B;IACC,MAAM,SAAS,GAAwB;QACrC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QAChE,OAAO,EAAE;YACP,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;YAClE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;SACpC;KACF,CAAA;IACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;SAClD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACpD,SAAS,CAAC,SAAS,GAAG;YACpB,cAAc,EAAE,qBAAqB;YACrC,kBAAkB,EAAE,0BAA0B;SAC/C,CAAA;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAe;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IACxC,IAAI,KAAK,GAAwB,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAA;IAC/E,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QACxC,IAAI,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAAC,CAAC;QACtD,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;IAClE,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAa,CAAA;IAC3D,KAAK,CAAC,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,KAAK,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,CAAA;IAC9G,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAA;IACzE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAA;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;IACD,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE;YACzC,GAAG,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SACxF,EAAE,CAAA;IACH,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EAAE,KAA0B,EAAE,KAA+B,EAAE,WAAwB;IAEnG,MAAM,UAAU,GAA4B,EAAE,CAAA;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9D,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ,IAAI,EAAE;YAClB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa;YACjG,IAAI,EAAE,UAAU,EAAE,SAAS;YAC3B,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,SAAS;YAC9D,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;SACzB,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QACpC,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,QAAQ,IAAI,EAAE;YAClB,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB;YACjE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI;YACtC,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,KAAK,IAAI,CAAC,IAAI;YAC9D,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,qBAAqB;SAC7F,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QACzC,CAAC;QACD,UAAU,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,aAAa,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB;YACnF,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,cAAc;YACrF,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC;SACnE,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,UAAkB;IAC5D,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC/C,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5G,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,SAAQ;QACpF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC/B,iBAAiB,CAAC,IAAI,EAAE,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,IAAI,GAAG,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAA;QACrH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAA;AAClB,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAoB;IACnE,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;QAC1C,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;QAC9D,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;KACvD,CAAC,EAAE,CAAC;QACH,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAA;QAC7F,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAQ;QACzC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAA;IAC5D,CAAC;IACD,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACxC,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;AACxF,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACpC,IAAI,KAAK,KAAK,iBAAiB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvD,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACrC,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAAE,SAAQ;QAClD,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;QACrE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACnE,IAAI,YAAY,GAAG,GAAG,CAAA;IACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3E,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;QACvD,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxF,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAC/C,CAAC;IACD,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvD,IAAI,CAAC,GAAG;YAAE,QAAQ,GAAG,SAAS,CAAA;aACzB,CAAC;YACJ,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YACrD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC;gBACzC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;YACpF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;YACpC,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;iBACnE,CAAC;gBACJ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;gBAC7C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvB,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;yBACnD,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA;AAC3C,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,oBAAoB,CAAA;IACrD,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,oBAAoB,CAAA;IAC/D,IAAI,IAAI,KAAK,qBAAqB;QAAE,OAAO,+BAA+B,CAAA;IAC1E,IAAI,IAAI,KAAK,eAAe;QAAE,OAAO,gDAAgD,CAAA;IACrF,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,gCAAgC,CAAA;IAClE,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,WAAmB,EAAE,IAAY;IAClD,OAAO,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;AACpG,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,aAAa,IAAI,EAAE,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,EAAE;QAClC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,SAAS,EAAE,CAAC,CAAA;YACjF,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAA;iBACpC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,CAAC,CAAA;IACnE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,aAAa,CAAC,KAA0B;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,IAAiB;IAClD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;QAC1E,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,WAAmB;IACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;IAC7D,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE;QAC1B,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI;QAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;YAC9E,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,IAAY,EAAE,UAAmC,EAAE,UAAkB,EACrE,QAAqB,EAAE,OAAoB;IAE3C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;aAC5E,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAChD,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAA;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,IAAI,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAA;IACtE,IAAI,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,EAAE;QAClC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC7C,IAAI,KAAK,CAAC,cAAc,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAA;YAC5E,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,SAAS,CAAC,CAAA;iBACpC,IAAI,KAAK,CAAC,MAAM,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAC9G,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAA;AAClC,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IAC5D,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9C,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,CAAC,CAAA;AAC9F,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAa;IACpD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,IAAY;IAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAA;IAC1E,IAAI,OAAO,GAAG,IAAI,CAAA;IAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC7B,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,KAAK,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa;IACpE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,QAAQ,EAAE,CAAC,CAAA;IACnF,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;AAC9D,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7E,OAAO,KAAK,CAAC,KAAK,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAC/E,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAA;AAC9F,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACrC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC1G,CAAC","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\nimport { auditAgent } from './agent-audit.js'\nimport { loadAgentBindings, type AgentBindings } from './agent-bindings.js'\nimport { inspectAgentProject } from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\n\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst BASIC = 'dingtalk-basic-behavior'\nconst BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\nconst DIRECTORY_HASH = digest('dingtalk-agent/directory@1')\nconst TEMPLATE_MARKER = /<(?:Agent 名称|岗位\\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|领域输入|领域方法\\/SOP|可观察结果 [12]|route)>/u\n\nexport interface AgentEnhanceOptions {\n bindings?: string\n projectName?: string\n roleSkills?: string[]\n model?: string\n memory?: string\n knowledge?: string\n artifacts?: string\n stateDir?: string\n profile?: string\n expectedUserId?: string\n cliVersion?: string\n planId?: string\n yes?: boolean\n}\n\nexport interface AgentEnhanceOperation {\n id: string\n kind: 'create-file' | 'update-file' | 'create-directory' | 'replace-directory' | 'preserve'\n path: string\n beforeHash: string\n afterHash: string\n backupRequired: boolean\n reason: string\n}\n\nexport interface AgentEnhancePlan {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1'\n planId: string\n ready: boolean\n status: 'ready' | 'blocked'\n sideEffect: false\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n source: { kind: 'git-checkout' | 'local-folder'; revision: string }\n projectName: string\n roleSkills: string[]\n bindings: string\n baselineHash: string\n desiredHash: string\n operations: AgentEnhanceOperation[]\n blockers: string[]\n warnings: string[]\n semanticReview: {\n required: boolean\n files: string[]\n why: string\n }\n apply: { command: string; requiresCurrentPlanId: true }\n verification: { commands: string[] }\n}\n\nexport interface AgentEnhanceReceipt {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1'\n status: 'applied'\n operationId: string\n planId: string\n sideEffect: 'local-files-only'\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n backupRoot: string\n idempotent: boolean\n changes: AgentEnhanceOperation[]\n audit: {\n status: 'ready' | 'partial'\n ready: boolean\n missing: string[]\n commands: string[]\n }\n}\n\ninterface TreePayload {\n files: Map<string, Buffer>\n hash: string\n}\n\ninterface BuiltEnhancement {\n plan: AgentEnhancePlan\n files: Map<string, string>\n trees: Map<string, TreePayload>\n directories: Set<string>\n bindingsValue: AgentBindings\n}\n\nexport function planAgentEnhancement(\n root: string, options: AgentEnhanceOptions = {},\n): AgentEnhancePlan {\n return buildEnhancement(root, options).plan\n}\n\nexport function applyAgentEnhancement(\n root: string, options: AgentEnhanceOptions,\n): AgentEnhanceReceipt {\n if (!options.yes) throw new Error('agent enhance apply 必须显式传 --yes')\n if (!String(options.planId || '').trim()) {\n throw new Error('agent enhance apply 必须传当前 dry-run 返回的 --plan-id')\n }\n const built = buildEnhancement(root, options)\n const { plan } = built\n if (!plan.ready) throw new Error(`agent enhance plan 被阻塞: ${plan.blockers.join('; ')}`)\n if (options.planId !== plan.planId) {\n throw new Error(`agent enhance planId 已过期或不匹配: expected=${plan.planId}`)\n }\n const changes = plan.operations.filter((item) => item.kind !== 'preserve')\n const operationId = `agent_enhance_${Date.now()}_${randomUUID().slice(0, 8)}`\n const backupRelative = changes.some((item) => item.backupRequired)\n ? join('.dingtalk-agent', 'backups', 'agent-enhance', operationId) : ''\n const backupRoot = backupRelative ? resolve(plan.root, backupRelative) : ''\n const backedUp = new Set<string>()\n const created = new Set<string>()\n let audit: ReturnType<typeof auditAgent>\n\n try {\n if (backupRoot) {\n for (const operation of changes.filter((item) => item.backupRequired)) {\n const source = safeTarget(plan.root, operation.path)\n const destination = resolve(backupRoot, operation.path)\n copyEntry(source, destination)\n backedUp.add(operation.path)\n }\n writeAtomic(join(backupRoot, 'manifest.json'), JSON.stringify({\n $schema: 'dingtalk-agent/agent-enhancement-backup@1',\n operationId, planId: plan.planId,\n entries: [...backedUp].sort().map((path) => ({\n path,\n hash: stateHash(safeTarget(plan.root, path)),\n })),\n }, null, 2) + '\\n')\n }\n for (const operation of changes) {\n const target = safeTarget(plan.root, operation.path)\n if (!existsSync(target)) created.add(operation.path)\n if (operation.kind === 'create-directory') {\n mkdirSync(target, { recursive: true })\n } else if (operation.kind === 'create-file' || operation.kind === 'update-file') {\n writeAtomic(target, built.files.get(operation.path)!)\n } else if (operation.kind === 'replace-directory') {\n rmSync(target, { recursive: true, force: true })\n writeTree(target, built.trees.get(operation.path)!)\n }\n const actual = operation.kind === 'create-directory'\n ? (existsSync(target) && lstatSync(target).isDirectory() && !lstatSync(target).isSymbolicLink()\n ? DIRECTORY_HASH : '')\n : stateHash(target)\n if (actual !== operation.afterHash) {\n throw new Error(`写后 hash 不一致: ${operation.path}`)\n }\n }\n const bindingsPath = safeTarget(plan.root, plan.bindings)\n const loaded = loadAgentBindings(plan.root, relative(plan.root, bindingsPath))\n audit = auditAgent(plan.root, {\n bootstrap: { context: loaded.context },\n bindings: { path: loaded.path, hash: loaded.hash },\n requiredSkills: plan.roleSkills,\n })\n } catch (error) {\n rollback(plan.root, [...changes].reverse(), backupRoot, backedUp, created)\n throw new Error(`agent enhance 失败,已按备份回滚: ${error.message}`)\n }\n return {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1',\n status: 'applied', operationId, planId: plan.planId,\n sideEffect: 'local-files-only', dingtalkSideEffect: false, triggerSideEffect: false,\n root: plan.root,\n backupRoot: backupRoot ? relative(plan.root, backupRoot).split('\\\\').join('/') : '',\n idempotent: changes.length === 0,\n changes,\n audit: {\n status: audit.status, ready: audit.ready, missing: audit.missing,\n commands: audit.verification.commands,\n },\n }\n}\n\nfunction buildEnhancement(root: string, options: AgentEnhanceOptions): BuiltEnhancement {\n const rootReal = realpathSync(resolve(root))\n assertDirectory(rootReal, 'Agent root')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const bindingsRef = safeRelative(options.bindings || 'agent.bindings.json', 'bindings')\n const existingProjectPath = join(rootReal, 'dingtalk-agent.json')\n const existingProject = existsSync(existingProjectPath)\n ? readValidatedProject(rootReal, options.cliVersion || '') : null\n const inferredName = normalizeName(basename(rootReal))\n const projectName = String(options.projectName || existingProject?.name || inferredName).trim()\n const blockers: string[] = []\n const warnings: string[] = []\n if (!NAME.test(projectName)) blockers.push('缺少合法 project name;请传 --project-name <stable-name>')\n if (!options.projectName && !existingProject) {\n warnings.push(`project name 由目录名推导为 ${projectName || '(invalid)'}`)\n }\n\n const discovered = discoverRoleSkills(rootReal)\n const requested = (options.roleSkills || []).map((item) => item.trim()).filter(Boolean)\n const roleCandidates = [...new Set([...discovered.names, ...requested])].sort()\n const invalidRoles = roleCandidates.filter((name) => !NAME.test(name) || name === BASIC)\n const roleSkills = roleCandidates.filter((name) => NAME.test(name) && name !== BASIC)\n if (invalidRoles.length) blockers.push(`Role Skill name 非法: ${invalidRoles.join(', ')}`)\n if (!roleSkills.length && !invalidRoles.length) {\n blockers.push('没有发现 Role Skill;请传 --role-skill <name>')\n }\n\n const files = new Map<string, string>()\n const trees = new Map<string, TreePayload>()\n const directories = new Set<string>()\n const semanticFiles: string[] = []\n const bindingsPath = join(rootReal, bindingsRef)\n const existingBindings = existsSync(bindingsPath)\n ? loadAgentBindings(rootReal, bindingsRef).value : null\n const existingLocalWorkspace = existingProject?.workspaces?.['local-dev'] || null\n if (existingLocalWorkspace && existingLocalWorkspace.provider?.kind !== 'opencode') {\n blockers.push('现有 local-dev 不是 OpenCode workspace;拒绝覆盖其 Provider')\n }\n const bindingsValue: AgentBindings = {\n $schema: 'dingtalk-agent/agent-bindings@1',\n agent: existingBindings?.agent || 'local-dir:.',\n skills: existingBindings?.skills || 'local-dir:skills',\n memory: options.memory || existingBindings?.memory ||\n existingLocalWorkspace?.storage?.memory || 'local-md:MEMORY.md',\n knowledge: options.knowledge || existingBindings?.knowledge ||\n existingLocalWorkspace?.storage?.knowledge || 'local-md:knowledge/INDEX.md',\n artifacts: options.artifacts || existingBindings?.artifacts ||\n existingLocalWorkspace?.storage?.artifacts || 'local-dir:.dingtalk-agent/artifacts',\n stateDir: options.stateDir || existingBindings?.stateDir || '.dingtalk-agent',\n authority: {\n profile: options.profile ?? existingBindings?.authority.profile ?? '',\n expectedUserId: options.expectedUserId ?? existingBindings?.authority.expectedUserId ?? '',\n },\n }\n validateBindingsCandidate(rootReal, bindingsValue)\n const remote = [bindingsValue.memory, bindingsValue.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))\n if (remote && (!bindingsValue.authority.profile || !bindingsValue.authority.expectedUserId)) {\n blockers.push('远端 memory/knowledge 需要同时提供 --profile 与 --expected-user-id')\n }\n\n const agentsPath = join(rootReal, 'AGENTS.md')\n if (!existsSync(agentsPath)) {\n const body = readAsset(packageRoot, 'AGENTS.template.md')\n .replace('<Agent 名称>', projectName || '<Agent 名称>')\n .replace('<Role Skill names>', roleSkills.join(', ') || '<Role Skill names>')\n files.set('AGENTS.md', body)\n semanticFiles.push('AGENTS.md')\n } else {\n assertRegularFile(agentsPath, 'AGENTS.md')\n const body = readFileSync(agentsPath, 'utf8')\n files.set('AGENTS.md', body)\n if (TEMPLATE_MARKER.test(body)) semanticFiles.push('AGENTS.md')\n }\n\n for (const name of roleSkills) {\n const rolePath = `skills/${name}`\n const source = join(rootReal, rolePath)\n let tree: TreePayload\n if (existsSync(source)) {\n tree = readTree(source, `Role Skill ${name}`)\n const skillBody = tree.files.get('SKILL.md')?.toString('utf8') || ''\n const actualName = frontmatterName(skillBody)\n if (actualName !== name) blockers.push(`Role Skill ${name} frontmatter name=${actualName || '(missing)'}`)\n if (TEMPLATE_MARKER.test(skillBody)) semanticFiles.push(`${rolePath}/SKILL.md`)\n } else {\n const body = readAsset(packageRoot, 'role-skill.template.md')\n .replaceAll('<role-skill-name>', name)\n .replace('<Role Skill 名称>', name)\n tree = treeFromFiles(new Map([['SKILL.md', Buffer.from(body)]]))\n trees.set(rolePath, tree)\n semanticFiles.push(`${rolePath}/SKILL.md`)\n }\n trees.set(`.agents/skills/${name}`, tree)\n }\n\n trees.set(`.agents/skills/${BASIC}`, readTree(\n join(packageRoot, 'skills', BASIC), 'Canonical Basic Skill'))\n files.set(bindingsRef, JSON.stringify(bindingsValue, null, 2) + '\\n')\n\n const project = desiredProject(existingProject, {\n projectName, roleSkills, model: options.model || 'deepseek/deepseek-chat',\n modelExplicit: options.model !== undefined,\n cliVersion: options.cliVersion || '', bindings: bindingsValue,\n })\n files.set('dingtalk-agent.json', JSON.stringify(project, null, 2) + '\\n')\n files.set('opencode.json', JSON.stringify(desiredOpenCode(rootReal, roleSkills), null, 2) + '\\n')\n files.set('.gitignore', desiredGitignore(rootReal, bindingsValue.stateDir))\n\n for (const [label, route] of Object.entries({\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n })) {\n if (!route.startsWith('local-md:')) continue\n const ref = safeRelative(route.slice('local-md:'.length), `${label} route`)\n const path = join(rootReal, ref)\n if (!existsSync(path)) {\n files.set(ref, `# ${label === 'memory' ? 'Memory' : 'Knowledge'}\\n\\n`)\n } else assertRegularFile(path, `${label} route`)\n }\n const artifactRef = safeLocalRoute(bindingsValue.artifacts, 'local-dir', 'artifacts')\n if (resolve(rootReal, artifactRef) === rootReal) {\n throw new Error('artifacts 必须是 Agent 根目录内的独立目录,不能等于根目录')\n }\n directories.add(artifactRef)\n directories.add(safeRelative(bindingsValue.stateDir, 'stateDir'))\n\n const operations = buildOperations(rootReal, files, trees, directories)\n const baselineHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, beforeHash: item.beforeHash,\n }))))\n const desiredHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, afterHash: item.afterHash,\n }))))\n const source = sourceIdentity(rootReal)\n const planSeed = {\n schema: 'dingtalk-agent/agent-enhancement-plan@1', baselineHash, desiredHash,\n root: rootReal, source, projectName, roleSkills, bindings: bindingsRef,\n options: {\n model: options.model || 'deepseek/deepseek-chat',\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n artifacts: bindingsValue.artifacts, stateDir: bindingsValue.stateDir,\n profileConfigured: Boolean(bindingsValue.authority.profile),\n expectedUserConfigured: Boolean(bindingsValue.authority.expectedUserId),\n },\n }\n const planId = `aep_${digest(stableStringify(planSeed)).slice(0, 32)}`\n const roleArgument = roleSkills.join(',') || '<role-skill>'\n const common = [\n ...(options.projectName ? ['--project-name', shellArg(options.projectName)] : []),\n ...(roleSkills.length ? ['--role-skill', shellArg(roleSkills.join(','))] : []),\n ...(options.model ? ['--model', shellArg(options.model)] : []),\n ...(options.memory ? ['--memory', shellArg(options.memory)] : []),\n ...(options.knowledge ? ['--knowledge', shellArg(options.knowledge)] : []),\n ...(options.artifacts ? ['--artifacts', shellArg(options.artifacts)] : []),\n ...(options.stateDir ? ['--state-dir', shellArg(options.stateDir)] : []),\n ...(options.profile !== undefined ? ['--profile', '\"$DTA_DWS_PROFILE\"'] : []),\n ...(options.expectedUserId !== undefined\n ? ['--expected-user-id', '\"$DTA_EXPECTED_USER_ID\"'] : []),\n ...(bindingsRef !== 'agent.bindings.json' ? ['--bindings', shellArg(bindingsRef)] : []),\n ].join(' ')\n const applyCommand = `dta agent enhance ${common}${common ? ' ' : ''}--plan-id ${planId} --yes --json`\n const plan: AgentEnhancePlan = {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1', planId,\n ready: blockers.length === 0, status: blockers.length ? 'blocked' : 'ready',\n sideEffect: false, dingtalkSideEffect: false, triggerSideEffect: false,\n root: rootReal,\n source, projectName, roleSkills, bindings: bindingsRef,\n baselineHash, desiredHash, operations, blockers, warnings,\n semanticReview: {\n required: semanticFiles.length > 0,\n files: [...new Set(semanticFiles)].sort(),\n why: semanticFiles.length\n ? 'CLI 只补结构,不替开发者虚构身份、职责、交付物或领域 SOP;请由 compose Skill 完成语义评审。'\n : '现有本体与 Role Skill 未命中模板占位符。',\n },\n apply: { command: applyCommand, requiresCurrentPlanId: true },\n verification: { commands: [\n `dta bootstrap --bindings ${shellArg(bindingsRef)} --json`,\n `dta agent audit --bindings ${shellArg(bindingsRef)} --require-skill ${shellArg(roleArgument)} --json`,\n `dta workspace create local-dev --dry-run --json`,\n ] },\n }\n return { plan, files, trees, directories, bindingsValue }\n}\n\nfunction desiredProject(existing: Record<string, any> | null, input: {\n projectName: string; roleSkills: string[]; model: string; modelExplicit: boolean\n cliVersion: string; bindings: AgentBindings\n}): Record<string, any> {\n if (existing) {\n const next = structuredClone(existing)\n next.name = input.projectName\n next.agent.skills = [...new Set([BASIC, ...(next.agent.skills || []), ...input.roleSkills])]\n const local = next.workspaces['local-dev']\n if (!local) {\n next.workspaces['local-dev'] = localOpenCodeWorkspace(input)\n } else if (local.provider?.kind === 'opencode') {\n if (input.modelExplicit) local.provider.model = input.model\n local.storage = {\n ...local.storage,\n memory: input.bindings.memory,\n knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n local.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n } else {\n delete local.authority\n }\n }\n return next\n }\n const version = input.cliVersion.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] || '0.1.0'\n return {\n $schema: 'dingtalk-agent/project@1', name: input.projectName,\n dtaVersion: `^${version}`,\n agent: { definition: 'AGENTS.md', skills: [BASIC, ...input.roleSkills] },\n workspaces: { 'local-dev': localOpenCodeWorkspace(input) },\n }\n}\n\nfunction localOpenCodeWorkspace(input: {\n model: string\n bindings: AgentBindings\n}): Record<string, any> {\n const workspace: Record<string, any> = {\n stage: 'dev', provider: { kind: 'opencode', model: input.model },\n storage: {\n memory: input.bindings.memory, knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n },\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n workspace.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n }\n return workspace\n}\n\nfunction desiredOpenCode(root: string, roles: string[]): Record<string, any> {\n const path = join(root, 'opencode.json')\n let value: Record<string, any> = { $schema: 'https://opencode.ai/config.json' }\n if (existsSync(path)) {\n assertRegularFile(path, 'opencode.json')\n try { value = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`opencode.json 不是合法 JSON: ${error.message}`) }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n }\n if (value.instructions !== undefined && !Array.isArray(value.instructions)) {\n throw new Error('opencode.json#instructions 必须是 array;拒绝覆盖未知结构')\n }\n if ((value.instructions || []).some((item: unknown) => typeof item !== 'string')) {\n throw new Error('opencode.json#instructions 只能包含字符串;拒绝静默删除未知条目')\n }\n const instructions = (value.instructions || []) as string[]\n value.instructions = [...instructions.filter((item: string) => item !== BASIC_INSTRUCTION), BASIC_INSTRUCTION]\n const permission = value.permission === undefined ? {} : value.permission\n if (!permission || typeof permission !== 'object' || Array.isArray(permission)) {\n throw new Error('opencode.json#permission 必须是 object;拒绝覆盖未知结构')\n }\n const skill = permission.skill === undefined ? {} : permission.skill\n if (!skill || typeof skill !== 'object' || Array.isArray(skill)) {\n throw new Error('opencode.json#permission.skill 必须是 object;拒绝覆盖未知结构')\n }\n value.permission = { ...permission, skill: {\n ...skill, [BASIC]: 'allow', ...Object.fromEntries(roles.map((name) => [name, 'allow'])),\n } }\n return value\n}\n\nfunction buildOperations(\n root: string, files: Map<string, string>, trees: Map<string, TreePayload>, directories: Set<string>,\n): AgentEnhanceOperation[] {\n const operations: AgentEnhanceOperation[] = []\n for (const [path, body] of [...files.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n const beforeHash = stateHash(target)\n const afterHash = digest(Buffer.from(body).toString('base64'))\n operations.push({\n id: `file:${path}`,\n kind: !existsSync(target) ? 'create-file' : beforeHash === afterHash ? 'preserve' : 'update-file',\n path, beforeHash, afterHash,\n backupRequired: existsSync(target) && beforeHash !== afterHash,\n reason: fileReason(path),\n })\n }\n for (const [path, tree] of [...trees.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`受管 Skill exposure 必须是普通目录,拒绝覆盖: ${path}`)\n }\n const beforeHash = stateHash(target)\n operations.push({\n id: `tree:${path}`,\n kind: beforeHash === tree.hash ? 'preserve' : 'replace-directory',\n path, beforeHash, afterHash: tree.hash,\n backupRequired: existsSync(target) && beforeHash !== tree.hash,\n reason: path.startsWith('.agents/') ? '物化目标 Host 的精确 Skill exposure' : '补齐缺失的 Role Skill 模板',\n })\n }\n for (const path of [...directories].sort()) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`本地路由必须是普通目录: ${path}`)\n }\n operations.push({\n id: `directory:${path}`, kind: existsSync(target) ? 'preserve' : 'create-directory',\n path, beforeHash: existsSync(target) ? DIRECTORY_HASH : '', afterHash: DIRECTORY_HASH,\n backupRequired: false, reason: '建立本地 state/artifact 路由,不投影控制状态到远端',\n })\n }\n return operations.sort((a, b) => a.path.localeCompare(b.path))\n}\n\nfunction readValidatedProject(root: string, cliVersion: string): Record<string, any> {\n inspectAgentProject(root, cliVersion)\n return JSON.parse(readFileSync(join(root, 'dingtalk-agent.json'), 'utf8'))\n}\n\nfunction discoverRoleSkills(root: string): { names: string[] } {\n const base = join(root, 'skills')\n if (!existsSync(base)) return { names: [] }\n if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {\n throw new Error('skills 必须是 Agent 根目录内的普通目录')\n }\n const names: string[] = []\n for (const entry of readdirSync(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || entry.name === BASIC) continue\n const file = join(base, entry.name, 'SKILL.md')\n if (!existsSync(file)) continue\n assertRegularFile(file, `Role Skill ${entry.name}`)\n const name = frontmatterName(readFileSync(file, 'utf8'))\n if (name !== entry.name) throw new Error(`Role Skill 目录与 frontmatter name 不一致: ${entry.name}/${name || '(missing)'}`)\n names.push(name)\n }\n return { names }\n}\n\nfunction validateBindingsCandidate(root: string, value: AgentBindings): void {\n for (const [label, route] of Object.entries({\n agent: value.agent, skills: value.skills, memory: value.memory,\n knowledge: value.knowledge, artifacts: value.artifacts,\n })) {\n const separator = route.indexOf(':')\n if (separator < 1 || !route.slice(separator + 1).trim()) throw new Error(`${label} route 非法`)\n if (!route.startsWith('local-')) continue\n safeRelative(route.slice(separator + 1), `${label} route`)\n }\n safeRelative(value.stateDir, 'stateDir')\n if (resolve(root, value.stateDir) === root) throw new Error('stateDir 不能等于 Agent 根目录')\n}\n\nfunction desiredGitignore(root: string, stateDir: string): string {\n const path = join(root, '.gitignore')\n const state = safeRelative(stateDir, 'stateDir')\n const entries = ['.dingtalk-agent/']\n if (state !== '.dingtalk-agent' && !state.startsWith('.dingtalk-agent/')) {\n entries.push(`${state.replace(/\\/+$/, '')}/`)\n }\n if (!existsSync(path)) return `${entries.join('\\n')}\\n`\n assertRegularFile(path, '.gitignore')\n let body = readFileSync(path, 'utf8')\n const lines = new Set(body.split(/\\r?\\n/).map((line) => line.trim().replace(/\\/+$/, '')))\n for (const entry of entries) {\n if (lines.has(entry.replace(/\\/+$/, ''))) continue\n body = `${body}${body && !body.endsWith('\\n') ? '\\n' : ''}${entry}\\n`\n lines.add(entry.replace(/\\/+$/, ''))\n }\n return body\n}\n\nfunction sourceIdentity(root: string): AgentEnhancePlan['source'] {\n const git = join(root, '.git')\n if (!existsSync(git)) return { kind: 'local-folder', revision: '' }\n let gitDirectory = git\n if (!lstatSync(git).isDirectory()) {\n const ref = readFileSync(git, 'utf8').trim().match(/^gitdir:\\s*(.+)$/)?.[1]\n if (!ref) return { kind: 'git-checkout', revision: '' }\n gitDirectory = resolve(root, ref)\n }\n if (!gitDirectory || !existsSync(gitDirectory) || !statSync(gitDirectory).isDirectory()) {\n return { kind: 'git-checkout', revision: '' }\n }\n let revision = ''\n const head = join(gitDirectory, 'HEAD')\n if (existsSync(head) && statSync(head).isFile()) {\n const headValue = readFileSync(head, 'utf8').trim()\n const ref = headValue.match(/^ref:\\s*(.+)$/)?.[1] || ''\n if (!ref) revision = headValue\n else {\n const commonDirFile = join(gitDirectory, 'commondir')\n const commonDir = existsSync(commonDirFile)\n ? resolve(gitDirectory, readFileSync(commonDirFile, 'utf8').trim()) : gitDirectory\n const refPath = join(commonDir, ref)\n if (existsSync(refPath)) revision = readFileSync(refPath, 'utf8').trim()\n else {\n const packed = join(commonDir, 'packed-refs')\n if (existsSync(packed)) {\n revision = readFileSync(packed, 'utf8').split(/\\r?\\n/)\n .find((line) => line.endsWith(` ${ref}`))?.split(' ')[0] || ''\n }\n }\n }\n }\n return { kind: 'git-checkout', revision }\n}\n\nfunction fileReason(path: string): string {\n if (path === 'AGENTS.md') return '补齐本体结构;语义内容仍需开发者评审'\n if (path === 'agent.bindings.json') return '固化本体、语义存储与宿主私有状态路由'\n if (path === 'dingtalk-agent.json') return '把目录升级为可发现、可版本化的 Agent Project'\n if (path === 'opencode.json') return '合并唯一 Basic instruction 与 Role Skill permission'\n if (path === '.gitignore') return '防止私有 state、Receipt 与原始证据进入 Git'\n return '补齐本地语义介质入口'\n}\n\nfunction readAsset(packageRoot: string, name: string): string {\n return readFileSync(join(packageRoot, 'skills', 'dingtalk-agent-compose', 'assets', name), 'utf8')\n}\n\nfunction readTree(path: string, label: string): TreePayload {\n if (!existsSync(path) || !lstatSync(path).isDirectory() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通目录: ${path}`)\n }\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`${label} 不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n if (!files.has('SKILL.md')) throw new Error(`${label} 缺少 SKILL.md`)\n return treeFromFiles(files)\n}\n\nfunction treeFromFiles(files: Map<string, Buffer>): TreePayload {\n const index = [...files.entries()].sort(([a], [b]) => a.localeCompare(b))\n .map(([path, body]) => ({ path, hash: digest(body.toString('base64')) }))\n return { files, hash: digest(stableStringify(index)) }\n}\n\nfunction writeTree(target: string, tree: TreePayload): void {\n mkdirSync(target, { recursive: true })\n for (const [path, body] of tree.files) {\n const out = resolve(target, path)\n if (!isInside(target, out)) throw new Error(`Skill tree path 越界: ${path}`)\n mkdirSync(dirname(out), { recursive: true })\n writeFileSync(out, body, { flag: 'wx' })\n }\n}\n\nfunction copyEntry(source: string, destination: string): void {\n if (!existsSync(source)) throw new Error(`备份源不存在: ${source}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: lstatSync(source).isDirectory(), errorOnExist: true,\n filter: (path) => {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`备份拒绝 symlink: ${path}`)\n return true\n },\n })\n}\n\nfunction rollback(\n root: string, operations: AgentEnhanceOperation[], backupRoot: string,\n backedUp: Set<string>, created: Set<string>,\n): void {\n for (const operation of operations) {\n const target = safeTarget(root, operation.path)\n if (created.has(operation.path)) rmSync(target, { recursive: true, force: true })\n else if (backedUp.has(operation.path)) {\n rmSync(target, { recursive: true, force: true })\n copyEntry(resolve(backupRoot, operation.path), target)\n }\n }\n}\n\nfunction stateHash(path: string): string {\n if (!existsSync(path)) return ''\n const stat = lstatSync(path)\n if (stat.isSymbolicLink()) throw new Error(`受管路径不允许 symlink: ${path}`)\n if (stat.isFile()) return digest(readFileSync(path).toString('base64'))\n if (!stat.isDirectory()) throw new Error(`受管路径类型不支持: ${path}`)\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`受管目录不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n return treeFromFiles(files).hash\n}\n\nfunction writeAtomic(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction assertDirectory(path: string, label: string): void {\n if (!existsSync(path) || !statSync(path).isDirectory()) throw new Error(`${label} 不存在或不是目录`)\n}\n\nfunction assertRegularFile(path: string, label: string): void {\n if (!existsSync(path) || !lstatSync(path).isFile() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通文件`)\n }\n}\n\nfunction safeTarget(root: string, path: string): string {\n const ref = safeRelative(path, 'managed path')\n const target = resolve(root, ref)\n if (!isInside(root, target)) throw new Error(`受管路径越出 Agent root: ${path}`)\n let current = root\n for (const part of ref.split('/').slice(0, -1)) {\n current = join(current, part)\n if (existsSync(current) && lstatSync(current).isSymbolicLink()) {\n throw new Error(`受管路径不能穿过 symlink: ${path}`)\n }\n }\n return target\n}\n\nfunction safeRelative(value: string, label: string): string {\n const text = String(value || '').trim().split('\\\\').join('/')\n if (!text || text.startsWith('/') || text.split('/').some((item) => !item || item === '..')) {\n throw new Error(`${label} 必须是 Agent 根目录内的相对路径: ${value}`)\n }\n return text.replace(/^\\.\\//, '')\n}\n\nfunction safeLocalRoute(route: string, provider: string, label: string): string {\n if (!route.startsWith(`${provider}:`)) throw new Error(`${label} 必须使用 ${provider}`)\n return safeRelative(route.slice(provider.length + 1), label)\n}\n\nfunction frontmatterName(body: string): string {\n const block = body.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/)?.[1] || ''\n return block.match(/^name:\\s*[\"']?([^\"'\\r\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n}\n\nfunction normalizeName(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 64)\n}\n\nfunction shellArg(value: string): string {\n return /^[A-Za-z0-9_./:=@^+-]+$/.test(value) ? value : `'${value.replaceAll(\"'\", `'\"'\"'`)}'`\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n const rel = relative(root, candidate)\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-enhance.js","sourceRoot":"","sources":["../../src/agent-enhance.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from 'node:crypto'\nimport {\n cpSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync,\n renameSync, rmSync, statSync, writeFileSync,\n} from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\nimport { auditAgent } from './agent-audit.js'\nimport { loadAgentBindings, type AgentBindings } from './agent-bindings.js'\nimport { inspectAgentProject } from './development-workspace.js'\nimport { digest, stableStringify } from './events.js'\nimport { resolvePackageRoot } from './package-root.js'\nimport { bundledSkillPath } from './skill-manager.js'\n\nconst NAME = /^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$/\nconst BASIC = 'dingtalk-basic-behavior'\nconst BASIC_INSTRUCTION = '.agents/skills/dingtalk-basic-behavior/SKILL.md'\nconst DIRECTORY_HASH = digest('dingtalk-agent/directory@1')\nconst TEMPLATE_MARKER = /<(?:Agent 名称|岗位\\/角色|人群、团队或工作场域|长期目标|主动负责的事项|可观察的交付物|明确不做或必须升级确认的事项|Role Skill names|role-skill-name|Role Skill 名称|岗位职责或工作流|领域判断、输入与交付物|领域输入|领域方法\\/SOP|可观察结果 [12]|route)>/u\n\nexport interface AgentEnhanceOptions {\n bindings?: string\n projectName?: string\n roleSkills?: string[]\n model?: string\n memory?: string\n knowledge?: string\n artifacts?: string\n stateDir?: string\n profile?: string\n expectedUserId?: string\n cliVersion?: string\n planId?: string\n yes?: boolean\n}\n\nexport interface AgentEnhanceOperation {\n id: string\n kind: 'create-file' | 'update-file' | 'create-directory' | 'replace-directory' | 'preserve'\n path: string\n beforeHash: string\n afterHash: string\n backupRequired: boolean\n reason: string\n}\n\nexport interface AgentEnhancePlan {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1'\n planId: string\n ready: boolean\n status: 'ready' | 'blocked'\n sideEffect: false\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n source: { kind: 'git-checkout' | 'local-folder'; revision: string }\n projectName: string\n roleSkills: string[]\n bindings: string\n baselineHash: string\n desiredHash: string\n operations: AgentEnhanceOperation[]\n blockers: string[]\n warnings: string[]\n semanticReview: {\n required: boolean\n files: string[]\n why: string\n }\n apply: { command: string; requiresCurrentPlanId: true }\n verification: { commands: string[] }\n}\n\nexport interface AgentEnhanceReceipt {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1'\n status: 'applied'\n operationId: string\n planId: string\n sideEffect: 'local-files-only'\n dingtalkSideEffect: false\n triggerSideEffect: false\n root: string\n backupRoot: string\n idempotent: boolean\n changes: AgentEnhanceOperation[]\n audit: {\n status: 'ready' | 'partial'\n ready: boolean\n missing: string[]\n commands: string[]\n }\n}\n\ninterface TreePayload {\n files: Map<string, Buffer>\n hash: string\n}\n\ninterface BuiltEnhancement {\n plan: AgentEnhancePlan\n files: Map<string, string>\n trees: Map<string, TreePayload>\n directories: Set<string>\n bindingsValue: AgentBindings\n}\n\nexport function planAgentEnhancement(\n root: string, options: AgentEnhanceOptions = {},\n): AgentEnhancePlan {\n return buildEnhancement(root, options).plan\n}\n\nexport function applyAgentEnhancement(\n root: string, options: AgentEnhanceOptions,\n): AgentEnhanceReceipt {\n if (!options.yes) throw new Error('agent enhance apply 必须显式传 --yes')\n if (!String(options.planId || '').trim()) {\n throw new Error('agent enhance apply 必须传当前 dry-run 返回的 --plan-id')\n }\n const built = buildEnhancement(root, options)\n const { plan } = built\n if (!plan.ready) throw new Error(`agent enhance plan 被阻塞: ${plan.blockers.join('; ')}`)\n if (options.planId !== plan.planId) {\n throw new Error(`agent enhance planId 已过期或不匹配: expected=${plan.planId}`)\n }\n const changes = plan.operations.filter((item) => item.kind !== 'preserve')\n const operationId = `agent_enhance_${Date.now()}_${randomUUID().slice(0, 8)}`\n const backupRelative = changes.some((item) => item.backupRequired)\n ? join('.dingtalk-agent', 'backups', 'agent-enhance', operationId) : ''\n const backupRoot = backupRelative ? resolve(plan.root, backupRelative) : ''\n const backedUp = new Set<string>()\n const created = new Set<string>()\n let audit: ReturnType<typeof auditAgent>\n\n try {\n if (backupRoot) {\n for (const operation of changes.filter((item) => item.backupRequired)) {\n const source = safeTarget(plan.root, operation.path)\n const destination = resolve(backupRoot, operation.path)\n copyEntry(source, destination)\n backedUp.add(operation.path)\n }\n writeAtomic(join(backupRoot, 'manifest.json'), JSON.stringify({\n $schema: 'dingtalk-agent/agent-enhancement-backup@1',\n operationId, planId: plan.planId,\n entries: [...backedUp].sort().map((path) => ({\n path,\n hash: stateHash(safeTarget(plan.root, path)),\n })),\n }, null, 2) + '\\n')\n }\n for (const operation of changes) {\n const target = safeTarget(plan.root, operation.path)\n if (!existsSync(target)) created.add(operation.path)\n if (operation.kind === 'create-directory') {\n mkdirSync(target, { recursive: true })\n } else if (operation.kind === 'create-file' || operation.kind === 'update-file') {\n writeAtomic(target, built.files.get(operation.path)!)\n } else if (operation.kind === 'replace-directory') {\n rmSync(target, { recursive: true, force: true })\n writeTree(target, built.trees.get(operation.path)!)\n }\n const actual = operation.kind === 'create-directory'\n ? (existsSync(target) && lstatSync(target).isDirectory() && !lstatSync(target).isSymbolicLink()\n ? DIRECTORY_HASH : '')\n : stateHash(target)\n if (actual !== operation.afterHash) {\n throw new Error(`写后 hash 不一致: ${operation.path}`)\n }\n }\n const bindingsPath = safeTarget(plan.root, plan.bindings)\n const loaded = loadAgentBindings(plan.root, relative(plan.root, bindingsPath))\n audit = auditAgent(plan.root, {\n bootstrap: { context: loaded.context },\n bindings: { path: loaded.path, hash: loaded.hash },\n requiredSkills: plan.roleSkills,\n })\n } catch (error) {\n rollback(plan.root, [...changes].reverse(), backupRoot, backedUp, created)\n throw new Error(`agent enhance 失败,已按备份回滚: ${error.message}`)\n }\n return {\n $schema: 'dingtalk-agent/agent-enhancement-receipt@1',\n status: 'applied', operationId, planId: plan.planId,\n sideEffect: 'local-files-only', dingtalkSideEffect: false, triggerSideEffect: false,\n root: plan.root,\n backupRoot: backupRoot ? relative(plan.root, backupRoot).split('\\\\').join('/') : '',\n idempotent: changes.length === 0,\n changes,\n audit: {\n status: audit.status, ready: audit.ready, missing: audit.missing,\n commands: audit.verification.commands,\n },\n }\n}\n\nfunction buildEnhancement(root: string, options: AgentEnhanceOptions): BuiltEnhancement {\n const rootReal = realpathSync(resolve(root))\n assertDirectory(rootReal, 'Agent root')\n const packageRoot = resolvePackageRoot(import.meta.url)\n const bindingsRef = safeRelative(options.bindings || 'agent.bindings.json', 'bindings')\n const existingProjectPath = join(rootReal, 'dingtalk-agent.json')\n const existingProject = existsSync(existingProjectPath)\n ? readValidatedProject(rootReal, options.cliVersion || '') : null\n const inferredName = normalizeName(basename(rootReal))\n const projectName = String(options.projectName || existingProject?.name || inferredName).trim()\n const blockers: string[] = []\n const warnings: string[] = []\n if (!NAME.test(projectName)) blockers.push('缺少合法 project name;请传 --project-name <stable-name>')\n if (!options.projectName && !existingProject) {\n warnings.push(`project name 由目录名推导为 ${projectName || '(invalid)'}`)\n }\n\n const discovered = discoverRoleSkills(rootReal)\n const requested = (options.roleSkills || []).map((item) => item.trim()).filter(Boolean)\n const roleCandidates = [...new Set([...discovered.names, ...requested])].sort()\n const invalidRoles = roleCandidates.filter((name) => !NAME.test(name) || name === BASIC)\n const roleSkills = roleCandidates.filter((name) => NAME.test(name) && name !== BASIC)\n if (invalidRoles.length) blockers.push(`Role Skill name 非法: ${invalidRoles.join(', ')}`)\n if (!roleSkills.length && !invalidRoles.length) {\n blockers.push('没有发现 Role Skill;请传 --role-skill <name>')\n }\n\n const files = new Map<string, string>()\n const trees = new Map<string, TreePayload>()\n const directories = new Set<string>()\n const semanticFiles: string[] = []\n const bindingsPath = join(rootReal, bindingsRef)\n const existingBindings = existsSync(bindingsPath)\n ? loadAgentBindings(rootReal, bindingsRef).value : null\n const existingLocalWorkspace = existingProject?.workspaces?.['local-dev'] || null\n if (existingLocalWorkspace && existingLocalWorkspace.provider?.kind !== 'opencode') {\n blockers.push('现有 local-dev 不是 OpenCode workspace;拒绝覆盖其 Provider')\n }\n const bindingsValue: AgentBindings = {\n $schema: 'dingtalk-agent/agent-bindings@1',\n agent: existingBindings?.agent || 'local-dir:.',\n skills: existingBindings?.skills || 'local-dir:skills',\n memory: options.memory || existingBindings?.memory ||\n existingLocalWorkspace?.storage?.memory || 'local-md:MEMORY.md',\n knowledge: options.knowledge || existingBindings?.knowledge ||\n existingLocalWorkspace?.storage?.knowledge || 'local-md:knowledge/INDEX.md',\n artifacts: options.artifacts || existingBindings?.artifacts ||\n existingLocalWorkspace?.storage?.artifacts || 'local-dir:.dingtalk-agent/artifacts',\n stateDir: options.stateDir || existingBindings?.stateDir || '.dingtalk-agent',\n authority: {\n profile: options.profile ?? existingBindings?.authority.profile ?? '',\n expectedUserId: options.expectedUserId ?? existingBindings?.authority.expectedUserId ?? '',\n },\n }\n validateBindingsCandidate(rootReal, bindingsValue)\n const remote = [bindingsValue.memory, bindingsValue.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))\n if (remote && (!bindingsValue.authority.profile || !bindingsValue.authority.expectedUserId)) {\n blockers.push('远端 memory/knowledge 需要同时提供 --profile 与 --expected-user-id')\n }\n\n const agentsPath = join(rootReal, 'AGENTS.md')\n if (!existsSync(agentsPath)) {\n const body = readAsset(packageRoot, 'AGENTS.template.md')\n .replace('<Agent 名称>', projectName || '<Agent 名称>')\n .replace('<Role Skill names>', roleSkills.join(', ') || '<Role Skill names>')\n files.set('AGENTS.md', body)\n semanticFiles.push('AGENTS.md')\n } else {\n assertRegularFile(agentsPath, 'AGENTS.md')\n const body = readFileSync(agentsPath, 'utf8')\n files.set('AGENTS.md', body)\n if (TEMPLATE_MARKER.test(body)) semanticFiles.push('AGENTS.md')\n }\n\n for (const name of roleSkills) {\n const rolePath = `skills/${name}`\n const source = join(rootReal, rolePath)\n let tree: TreePayload\n if (existsSync(source)) {\n tree = readTree(source, `Role Skill ${name}`)\n const skillBody = tree.files.get('SKILL.md')?.toString('utf8') || ''\n const actualName = frontmatterName(skillBody)\n if (actualName !== name) blockers.push(`Role Skill ${name} frontmatter name=${actualName || '(missing)'}`)\n if (TEMPLATE_MARKER.test(skillBody)) semanticFiles.push(`${rolePath}/SKILL.md`)\n } else {\n const body = readAsset(packageRoot, 'role-skill.template.md')\n .replaceAll('<role-skill-name>', name)\n .replace('<Role Skill 名称>', name)\n tree = treeFromFiles(new Map([['SKILL.md', Buffer.from(body)]]))\n trees.set(rolePath, tree)\n semanticFiles.push(`${rolePath}/SKILL.md`)\n }\n trees.set(`.agents/skills/${name}`, tree)\n }\n\n trees.set(`.agents/skills/${BASIC}`, readTree(\n bundledSkillPath(packageRoot, BASIC), 'Canonical Basic Skill'))\n files.set(bindingsRef, JSON.stringify(bindingsValue, null, 2) + '\\n')\n\n const project = desiredProject(existingProject, {\n projectName, roleSkills, model: options.model || 'deepseek/deepseek-chat',\n modelExplicit: options.model !== undefined,\n cliVersion: options.cliVersion || '', bindings: bindingsValue,\n })\n files.set('dingtalk-agent.json', JSON.stringify(project, null, 2) + '\\n')\n files.set('opencode.json', JSON.stringify(desiredOpenCode(rootReal, roleSkills), null, 2) + '\\n')\n files.set('.gitignore', desiredGitignore(rootReal, bindingsValue.stateDir))\n\n for (const [label, route] of Object.entries({\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n })) {\n if (!route.startsWith('local-md:')) continue\n const ref = safeRelative(route.slice('local-md:'.length), `${label} route`)\n const path = join(rootReal, ref)\n if (!existsSync(path)) {\n files.set(ref, `# ${label === 'memory' ? 'Memory' : 'Knowledge'}\\n\\n`)\n } else assertRegularFile(path, `${label} route`)\n }\n const artifactRef = safeLocalRoute(bindingsValue.artifacts, 'local-dir', 'artifacts')\n if (resolve(rootReal, artifactRef) === rootReal) {\n throw new Error('artifacts 必须是 Agent 根目录内的独立目录,不能等于根目录')\n }\n directories.add(artifactRef)\n directories.add(safeRelative(bindingsValue.stateDir, 'stateDir'))\n\n const operations = buildOperations(rootReal, files, trees, directories)\n const baselineHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, beforeHash: item.beforeHash,\n }))))\n const desiredHash = digest(stableStringify(operations.map((item) => ({\n path: item.path, afterHash: item.afterHash,\n }))))\n const source = sourceIdentity(rootReal)\n const planSeed = {\n schema: 'dingtalk-agent/agent-enhancement-plan@1', baselineHash, desiredHash,\n root: rootReal, source, projectName, roleSkills, bindings: bindingsRef,\n options: {\n model: options.model || 'deepseek/deepseek-chat',\n memory: bindingsValue.memory, knowledge: bindingsValue.knowledge,\n artifacts: bindingsValue.artifacts, stateDir: bindingsValue.stateDir,\n profileConfigured: Boolean(bindingsValue.authority.profile),\n expectedUserConfigured: Boolean(bindingsValue.authority.expectedUserId),\n },\n }\n const planId = `aep_${digest(stableStringify(planSeed)).slice(0, 32)}`\n const roleArgument = roleSkills.join(',') || '<role-skill>'\n const common = [\n ...(options.projectName ? ['--project-name', shellArg(options.projectName)] : []),\n ...(roleSkills.length ? ['--role-skill', shellArg(roleSkills.join(','))] : []),\n ...(options.model ? ['--model', shellArg(options.model)] : []),\n ...(options.memory ? ['--memory', shellArg(options.memory)] : []),\n ...(options.knowledge ? ['--knowledge', shellArg(options.knowledge)] : []),\n ...(options.artifacts ? ['--artifacts', shellArg(options.artifacts)] : []),\n ...(options.stateDir ? ['--state-dir', shellArg(options.stateDir)] : []),\n ...(options.profile !== undefined ? ['--profile', '\"$DTA_DWS_PROFILE\"'] : []),\n ...(options.expectedUserId !== undefined\n ? ['--expected-user-id', '\"$DTA_EXPECTED_USER_ID\"'] : []),\n ...(bindingsRef !== 'agent.bindings.json' ? ['--bindings', shellArg(bindingsRef)] : []),\n ].join(' ')\n const applyCommand = `dta agent enhance ${common}${common ? ' ' : ''}--plan-id ${planId} --yes --json`\n const plan: AgentEnhancePlan = {\n $schema: 'dingtalk-agent/agent-enhancement-plan@1', planId,\n ready: blockers.length === 0, status: blockers.length ? 'blocked' : 'ready',\n sideEffect: false, dingtalkSideEffect: false, triggerSideEffect: false,\n root: rootReal,\n source, projectName, roleSkills, bindings: bindingsRef,\n baselineHash, desiredHash, operations, blockers, warnings,\n semanticReview: {\n required: semanticFiles.length > 0,\n files: [...new Set(semanticFiles)].sort(),\n why: semanticFiles.length\n ? 'CLI 只补结构,不替开发者虚构身份、职责、交付物或领域 SOP;请由 compose Skill 完成语义评审。'\n : '现有本体与 Role Skill 未命中模板占位符。',\n },\n apply: { command: applyCommand, requiresCurrentPlanId: true },\n verification: { commands: [\n `dta bootstrap --bindings ${shellArg(bindingsRef)} --json`,\n `dta agent audit --bindings ${shellArg(bindingsRef)} --require-skill ${shellArg(roleArgument)} --json`,\n `dta workspace create local-dev --dry-run --json`,\n ] },\n }\n return { plan, files, trees, directories, bindingsValue }\n}\n\nfunction desiredProject(existing: Record<string, any> | null, input: {\n projectName: string; roleSkills: string[]; model: string; modelExplicit: boolean\n cliVersion: string; bindings: AgentBindings\n}): Record<string, any> {\n if (existing) {\n const next = structuredClone(existing)\n next.name = input.projectName\n next.agent.skills = [...new Set([BASIC, ...(next.agent.skills || []), ...input.roleSkills])]\n const local = next.workspaces['local-dev']\n if (!local) {\n next.workspaces['local-dev'] = localOpenCodeWorkspace(input)\n } else if (local.provider?.kind === 'opencode') {\n if (input.modelExplicit) local.provider.model = input.model\n local.storage = {\n ...local.storage,\n memory: input.bindings.memory,\n knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n local.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n } else {\n delete local.authority\n }\n }\n return next\n }\n const version = input.cliVersion.match(/^(\\d+\\.\\d+\\.\\d+)/)?.[1] || '0.1.0'\n return {\n $schema: 'dingtalk-agent/project@1', name: input.projectName,\n dtaVersion: `^${version}`,\n agent: { definition: 'AGENTS.md', skills: [BASIC, ...input.roleSkills] },\n workspaces: { 'local-dev': localOpenCodeWorkspace(input) },\n }\n}\n\nfunction localOpenCodeWorkspace(input: {\n model: string\n bindings: AgentBindings\n}): Record<string, any> {\n const workspace: Record<string, any> = {\n stage: 'dev', provider: { kind: 'opencode', model: input.model },\n storage: {\n memory: input.bindings.memory, knowledge: input.bindings.knowledge,\n artifacts: input.bindings.artifacts,\n },\n }\n if ([input.bindings.memory, input.bindings.knowledge]\n .some((item) => item.startsWith('dingtalk-doc:'))) {\n workspace.authority = {\n dwsProfileFrom: 'env:DTA_DWS_PROFILE',\n expectedUserIdFrom: 'env:DTA_EXPECTED_USER_ID',\n }\n }\n return workspace\n}\n\nfunction desiredOpenCode(root: string, roles: string[]): Record<string, any> {\n const path = join(root, 'opencode.json')\n let value: Record<string, any> = { $schema: 'https://opencode.ai/config.json' }\n if (existsSync(path)) {\n assertRegularFile(path, 'opencode.json')\n try { value = JSON.parse(readFileSync(path, 'utf8')) }\n catch (error) { throw new Error(`opencode.json 不是合法 JSON: ${error.message}`) }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('opencode.json 必须是 JSON object')\n }\n }\n if (value.instructions !== undefined && !Array.isArray(value.instructions)) {\n throw new Error('opencode.json#instructions 必须是 array;拒绝覆盖未知结构')\n }\n if ((value.instructions || []).some((item: unknown) => typeof item !== 'string')) {\n throw new Error('opencode.json#instructions 只能包含字符串;拒绝静默删除未知条目')\n }\n const instructions = (value.instructions || []) as string[]\n value.instructions = [...instructions.filter((item: string) => item !== BASIC_INSTRUCTION), BASIC_INSTRUCTION]\n const permission = value.permission === undefined ? {} : value.permission\n if (!permission || typeof permission !== 'object' || Array.isArray(permission)) {\n throw new Error('opencode.json#permission 必须是 object;拒绝覆盖未知结构')\n }\n const skill = permission.skill === undefined ? {} : permission.skill\n if (!skill || typeof skill !== 'object' || Array.isArray(skill)) {\n throw new Error('opencode.json#permission.skill 必须是 object;拒绝覆盖未知结构')\n }\n value.permission = { ...permission, skill: {\n ...skill, [BASIC]: 'allow', ...Object.fromEntries(roles.map((name) => [name, 'allow'])),\n } }\n return value\n}\n\nfunction buildOperations(\n root: string, files: Map<string, string>, trees: Map<string, TreePayload>, directories: Set<string>,\n): AgentEnhanceOperation[] {\n const operations: AgentEnhanceOperation[] = []\n for (const [path, body] of [...files.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n const beforeHash = stateHash(target)\n const afterHash = digest(Buffer.from(body).toString('base64'))\n operations.push({\n id: `file:${path}`,\n kind: !existsSync(target) ? 'create-file' : beforeHash === afterHash ? 'preserve' : 'update-file',\n path, beforeHash, afterHash,\n backupRequired: existsSync(target) && beforeHash !== afterHash,\n reason: fileReason(path),\n })\n }\n for (const [path, tree] of [...trees.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`受管 Skill exposure 必须是普通目录,拒绝覆盖: ${path}`)\n }\n const beforeHash = stateHash(target)\n operations.push({\n id: `tree:${path}`,\n kind: beforeHash === tree.hash ? 'preserve' : 'replace-directory',\n path, beforeHash, afterHash: tree.hash,\n backupRequired: existsSync(target) && beforeHash !== tree.hash,\n reason: path.startsWith('.agents/') ? '物化目标 Host 的精确 Skill exposure' : '补齐缺失的 Role Skill 模板',\n })\n }\n for (const path of [...directories].sort()) {\n const target = safeTarget(root, path)\n if (existsSync(target) && (!lstatSync(target).isDirectory() || lstatSync(target).isSymbolicLink())) {\n throw new Error(`本地路由必须是普通目录: ${path}`)\n }\n operations.push({\n id: `directory:${path}`, kind: existsSync(target) ? 'preserve' : 'create-directory',\n path, beforeHash: existsSync(target) ? DIRECTORY_HASH : '', afterHash: DIRECTORY_HASH,\n backupRequired: false, reason: '建立本地 state/artifact 路由,不投影控制状态到远端',\n })\n }\n return operations.sort((a, b) => a.path.localeCompare(b.path))\n}\n\nfunction readValidatedProject(root: string, cliVersion: string): Record<string, any> {\n inspectAgentProject(root, cliVersion)\n return JSON.parse(readFileSync(join(root, 'dingtalk-agent.json'), 'utf8'))\n}\n\nfunction discoverRoleSkills(root: string): { names: string[] } {\n const base = join(root, 'skills')\n if (!existsSync(base)) return { names: [] }\n if (!lstatSync(base).isDirectory() || lstatSync(base).isSymbolicLink()) {\n throw new Error('skills 必须是 Agent 根目录内的普通目录')\n }\n const names: string[] = []\n for (const entry of readdirSync(base, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n if (!entry.isDirectory() || entry.isSymbolicLink() || entry.name === BASIC) continue\n const file = join(base, entry.name, 'SKILL.md')\n if (!existsSync(file)) continue\n assertRegularFile(file, `Role Skill ${entry.name}`)\n const name = frontmatterName(readFileSync(file, 'utf8'))\n if (name !== entry.name) throw new Error(`Role Skill 目录与 frontmatter name 不一致: ${entry.name}/${name || '(missing)'}`)\n names.push(name)\n }\n return { names }\n}\n\nfunction validateBindingsCandidate(root: string, value: AgentBindings): void {\n for (const [label, route] of Object.entries({\n agent: value.agent, skills: value.skills, memory: value.memory,\n knowledge: value.knowledge, artifacts: value.artifacts,\n })) {\n const separator = route.indexOf(':')\n if (separator < 1 || !route.slice(separator + 1).trim()) throw new Error(`${label} route 非法`)\n if (!route.startsWith('local-')) continue\n safeRelative(route.slice(separator + 1), `${label} route`)\n }\n safeRelative(value.stateDir, 'stateDir')\n if (resolve(root, value.stateDir) === root) throw new Error('stateDir 不能等于 Agent 根目录')\n}\n\nfunction desiredGitignore(root: string, stateDir: string): string {\n const path = join(root, '.gitignore')\n const state = safeRelative(stateDir, 'stateDir')\n const entries = ['.dingtalk-agent/']\n if (state !== '.dingtalk-agent' && !state.startsWith('.dingtalk-agent/')) {\n entries.push(`${state.replace(/\\/+$/, '')}/`)\n }\n if (!existsSync(path)) return `${entries.join('\\n')}\\n`\n assertRegularFile(path, '.gitignore')\n let body = readFileSync(path, 'utf8')\n const lines = new Set(body.split(/\\r?\\n/).map((line) => line.trim().replace(/\\/+$/, '')))\n for (const entry of entries) {\n if (lines.has(entry.replace(/\\/+$/, ''))) continue\n body = `${body}${body && !body.endsWith('\\n') ? '\\n' : ''}${entry}\\n`\n lines.add(entry.replace(/\\/+$/, ''))\n }\n return body\n}\n\nfunction sourceIdentity(root: string): AgentEnhancePlan['source'] {\n const git = join(root, '.git')\n if (!existsSync(git)) return { kind: 'local-folder', revision: '' }\n let gitDirectory = git\n if (!lstatSync(git).isDirectory()) {\n const ref = readFileSync(git, 'utf8').trim().match(/^gitdir:\\s*(.+)$/)?.[1]\n if (!ref) return { kind: 'git-checkout', revision: '' }\n gitDirectory = resolve(root, ref)\n }\n if (!gitDirectory || !existsSync(gitDirectory) || !statSync(gitDirectory).isDirectory()) {\n return { kind: 'git-checkout', revision: '' }\n }\n let revision = ''\n const head = join(gitDirectory, 'HEAD')\n if (existsSync(head) && statSync(head).isFile()) {\n const headValue = readFileSync(head, 'utf8').trim()\n const ref = headValue.match(/^ref:\\s*(.+)$/)?.[1] || ''\n if (!ref) revision = headValue\n else {\n const commonDirFile = join(gitDirectory, 'commondir')\n const commonDir = existsSync(commonDirFile)\n ? resolve(gitDirectory, readFileSync(commonDirFile, 'utf8').trim()) : gitDirectory\n const refPath = join(commonDir, ref)\n if (existsSync(refPath)) revision = readFileSync(refPath, 'utf8').trim()\n else {\n const packed = join(commonDir, 'packed-refs')\n if (existsSync(packed)) {\n revision = readFileSync(packed, 'utf8').split(/\\r?\\n/)\n .find((line) => line.endsWith(` ${ref}`))?.split(' ')[0] || ''\n }\n }\n }\n }\n return { kind: 'git-checkout', revision }\n}\n\nfunction fileReason(path: string): string {\n if (path === 'AGENTS.md') return '补齐本体结构;语义内容仍需开发者评审'\n if (path === 'agent.bindings.json') return '固化本体、语义存储与宿主私有状态路由'\n if (path === 'dingtalk-agent.json') return '把目录升级为可发现、可版本化的 Agent Project'\n if (path === 'opencode.json') return '合并唯一 Basic instruction 与 Role Skill permission'\n if (path === '.gitignore') return '防止私有 state、Receipt 与原始证据进入 Git'\n return '补齐本地语义介质入口'\n}\n\nfunction readAsset(packageRoot: string, name: string): string {\n return readFileSync(join(bundledSkillPath(packageRoot, 'dingtalk-agent-compose'), 'assets', name), 'utf8')\n}\n\nfunction readTree(path: string, label: string): TreePayload {\n if (!existsSync(path) || !lstatSync(path).isDirectory() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通目录: ${path}`)\n }\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`${label} 不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n if (!files.has('SKILL.md')) throw new Error(`${label} 缺少 SKILL.md`)\n return treeFromFiles(files)\n}\n\nfunction treeFromFiles(files: Map<string, Buffer>): TreePayload {\n const index = [...files.entries()].sort(([a], [b]) => a.localeCompare(b))\n .map(([path, body]) => ({ path, hash: digest(body.toString('base64')) }))\n return { files, hash: digest(stableStringify(index)) }\n}\n\nfunction writeTree(target: string, tree: TreePayload): void {\n mkdirSync(target, { recursive: true })\n for (const [path, body] of tree.files) {\n const out = resolve(target, path)\n if (!isInside(target, out)) throw new Error(`Skill tree path 越界: ${path}`)\n mkdirSync(dirname(out), { recursive: true })\n writeFileSync(out, body, { flag: 'wx' })\n }\n}\n\nfunction copyEntry(source: string, destination: string): void {\n if (!existsSync(source)) throw new Error(`备份源不存在: ${source}`)\n mkdirSync(dirname(destination), { recursive: true })\n cpSync(source, destination, {\n recursive: lstatSync(source).isDirectory(), errorOnExist: true,\n filter: (path) => {\n if (lstatSync(path).isSymbolicLink()) throw new Error(`备份拒绝 symlink: ${path}`)\n return true\n },\n })\n}\n\nfunction rollback(\n root: string, operations: AgentEnhanceOperation[], backupRoot: string,\n backedUp: Set<string>, created: Set<string>,\n): void {\n for (const operation of operations) {\n const target = safeTarget(root, operation.path)\n if (created.has(operation.path)) rmSync(target, { recursive: true, force: true })\n else if (backedUp.has(operation.path)) {\n rmSync(target, { recursive: true, force: true })\n copyEntry(resolve(backupRoot, operation.path), target)\n }\n }\n}\n\nfunction stateHash(path: string): string {\n if (!existsSync(path)) return ''\n const stat = lstatSync(path)\n if (stat.isSymbolicLink()) throw new Error(`受管路径不允许 symlink: ${path}`)\n if (stat.isFile()) return digest(readFileSync(path).toString('base64'))\n if (!stat.isDirectory()) throw new Error(`受管路径类型不支持: ${path}`)\n const files = new Map<string, Buffer>()\n const visit = (directory: string) => {\n for (const entry of readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {\n const candidate = join(directory, entry.name)\n if (entry.isSymbolicLink()) throw new Error(`受管目录不允许 symlink: ${candidate}`)\n if (entry.isDirectory()) visit(candidate)\n else if (entry.isFile()) files.set(relative(path, candidate).split('\\\\').join('/'), readFileSync(candidate))\n }\n }\n visit(path)\n return treeFromFiles(files).hash\n}\n\nfunction writeAtomic(path: string, body: string): void {\n mkdirSync(dirname(path), { recursive: true })\n const temporary = `${path}.${process.pid}.${Date.now()}.tmp`\n writeFileSync(temporary, body, { flag: 'wx' })\n renameSync(temporary, path)\n}\n\nfunction assertDirectory(path: string, label: string): void {\n if (!existsSync(path) || !statSync(path).isDirectory()) throw new Error(`${label} 不存在或不是目录`)\n}\n\nfunction assertRegularFile(path: string, label: string): void {\n if (!existsSync(path) || !lstatSync(path).isFile() || lstatSync(path).isSymbolicLink()) {\n throw new Error(`${label} 必须是普通文件`)\n }\n}\n\nfunction safeTarget(root: string, path: string): string {\n const ref = safeRelative(path, 'managed path')\n const target = resolve(root, ref)\n if (!isInside(root, target)) throw new Error(`受管路径越出 Agent root: ${path}`)\n let current = root\n for (const part of ref.split('/').slice(0, -1)) {\n current = join(current, part)\n if (existsSync(current) && lstatSync(current).isSymbolicLink()) {\n throw new Error(`受管路径不能穿过 symlink: ${path}`)\n }\n }\n return target\n}\n\nfunction safeRelative(value: string, label: string): string {\n const text = String(value || '').trim().split('\\\\').join('/')\n if (!text || text.startsWith('/') || text.split('/').some((item) => !item || item === '..')) {\n throw new Error(`${label} 必须是 Agent 根目录内的相对路径: ${value}`)\n }\n return text.replace(/^\\.\\//, '')\n}\n\nfunction safeLocalRoute(route: string, provider: string, label: string): string {\n if (!route.startsWith(`${provider}:`)) throw new Error(`${label} 必须使用 ${provider}`)\n return safeRelative(route.slice(provider.length + 1), label)\n}\n\nfunction frontmatterName(body: string): string {\n const block = body.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---(?:\\r?\\n|$)/)?.[1] || ''\n return block.match(/^name:\\s*[\"']?([^\"'\\r\\n]+)[\"']?\\s*$/m)?.[1]?.trim() || ''\n}\n\nfunction normalizeName(value: string): string {\n return value.toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '').slice(0, 64)\n}\n\nfunction shellArg(value: string): string {\n return /^[A-Za-z0-9_./:=@^+-]+$/.test(value) ? value : `'${value.replaceAll(\"'\", `'\"'\"'`)}'`\n}\n\nfunction isInside(root: string, candidate: string): boolean {\n const rel = relative(root, candidate)\n return rel === '' || (rel !== '..' && !rel.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n"]}
|
|
@@ -5,17 +5,23 @@
|
|
|
5
5
|
// > .dingtalk-agent/agent-platform.json > 按 Provider 声明推断。
|
|
6
6
|
// 平台相关的方法学不写进 CLI——它们随对应平台的 Skill 包分发,只在用户选择该平台时安装。
|
|
7
7
|
// 平台命令(如 deploy/promote/observe)必须先通过归属门禁;coming-soon 平台一律 fail-closed。
|
|
8
|
-
import { existsSync, lstatSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
9
10
|
import { dirname, join, parse, resolve } from 'node:path';
|
|
10
11
|
import { findAgentProjectRoot } from './development-workspace.js';
|
|
12
|
+
import { findExecutable } from './doctor.js';
|
|
11
13
|
import { installGlobalSkill } from './skill-manager.js';
|
|
12
14
|
export const MANAGED_AGENT_PLATFORMS = [
|
|
13
15
|
{
|
|
14
16
|
name: 'multica-dingtalk',
|
|
15
17
|
label: 'Multica (DingTalk)',
|
|
16
18
|
status: 'supported',
|
|
17
|
-
description: '钉钉 Multica
|
|
18
|
-
skills: [
|
|
19
|
+
description: '钉钉 Multica 托管平台:供给、部署、钉钉机器人绑定、观测与调度。',
|
|
20
|
+
skills: [
|
|
21
|
+
{ role: 'deploy', name: 'dingtalk-agent-deploy-multica' },
|
|
22
|
+
{ role: 'boot', name: 'dingtalk-agent-boot-multica' },
|
|
23
|
+
{ role: 'ops', name: 'multica-external' },
|
|
24
|
+
],
|
|
19
25
|
commands: ['deploy', 'promote', 'observe'],
|
|
20
26
|
},
|
|
21
27
|
{
|
|
@@ -97,7 +103,7 @@ export function useAgentPlatform(start, name, options) {
|
|
|
97
103
|
if (options.installSkills !== false) {
|
|
98
104
|
for (const skill of definition.skills) {
|
|
99
105
|
skillInstalls.push(installGlobalSkill(options.packageRoot, {
|
|
100
|
-
name: skill, home: options.home, env: options.env,
|
|
106
|
+
name: skill.name, home: options.home, env: options.env,
|
|
101
107
|
}));
|
|
102
108
|
}
|
|
103
109
|
}
|
|
@@ -122,9 +128,81 @@ export function requireSupportedAgentPlatform(command, start = process.cwd(), en
|
|
|
122
128
|
}
|
|
123
129
|
return resolved;
|
|
124
130
|
}
|
|
131
|
+
/** dta 层的平台命令/角色(deploy、boot、ops…)关联到该平台内确切的 Skill 名。 */
|
|
132
|
+
export function platformSkillForRole(platformName, role) {
|
|
133
|
+
const definition = agentPlatformDefinition(platformName);
|
|
134
|
+
return definition?.skills.find((item) => item.role === role)?.name || null;
|
|
135
|
+
}
|
|
125
136
|
export function statusLabel(status) {
|
|
126
137
|
return status === 'supported' ? '已支持' : '敬请期待';
|
|
127
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* 平台工具链就绪检查(只读,不阻断):选择/查看平台归属时提示用户缺什么、怎么补。
|
|
141
|
+
* 强制门禁仍由 requireSupportedAgentPlatform 与各平台命令自身承担。
|
|
142
|
+
*/
|
|
143
|
+
export function agentPlatformReadiness(name, env = process.env, home = homedir()) {
|
|
144
|
+
if (name !== 'multica-dingtalk')
|
|
145
|
+
return [];
|
|
146
|
+
const checks = [];
|
|
147
|
+
const cli = findExecutable('multica', env);
|
|
148
|
+
checks.push(cli
|
|
149
|
+
? { id: 'multica-cli', ok: true, summary: `multica CLI 已安装(${cli})` }
|
|
150
|
+
: {
|
|
151
|
+
id: 'multica-cli', ok: false, summary: '未找到 multica CLI',
|
|
152
|
+
hint: '安装:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash',
|
|
153
|
+
});
|
|
154
|
+
checks.push(hasMulticaToken(home)
|
|
155
|
+
? { id: 'multica-login', ok: true, summary: 'Multica 已登录(本地存在 token)' }
|
|
156
|
+
: {
|
|
157
|
+
id: 'multica-login', ok: false, summary: 'Multica 尚未登录',
|
|
158
|
+
hint: '登录:multica login --server-url <endpoint>(预发环境为 https://pre-fde-workbench.dingtalk.com)',
|
|
159
|
+
});
|
|
160
|
+
if (['HTTPS_PROXY', 'https_proxy', 'ALL_PROXY', 'all_proxy'].some((key) => env[key])) {
|
|
161
|
+
checks.push({
|
|
162
|
+
id: 'proxy-env', ok: false, summary: '检测到代理环境变量,可能阻断 Multica 直连',
|
|
163
|
+
hint: '连接失败时用 env -u HTTPS_PROXY -u https_proxy -u ALL_PROXY -u all_proxy 运行 multica 与平台脚本',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return checks;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 本机已登录的 Multica 目标清单(default 配置 + 各 profile)。只暴露 endpoint 与
|
|
170
|
+
* workspace 标识,不读取 token 内容。发布前必须把候选交给用户选择,绝不默默用默认配置。
|
|
171
|
+
*/
|
|
172
|
+
export function multicaTargets(home = homedir()) {
|
|
173
|
+
const targets = [];
|
|
174
|
+
const push = (profile, path) => {
|
|
175
|
+
const config = readJsonOrNull(path);
|
|
176
|
+
if (typeof config?.token === 'string' && config.token.trim()) {
|
|
177
|
+
targets.push({
|
|
178
|
+
profile,
|
|
179
|
+
serverUrl: String(config.server_url || ''),
|
|
180
|
+
workspaceId: String(config.workspace_id || ''),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
push('default', join(home, '.multica', 'config.json'));
|
|
185
|
+
try {
|
|
186
|
+
for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {
|
|
187
|
+
push(entry, join(home, '.multica', 'profiles', entry, 'config.json'));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch { /* profiles 目录不存在 */ }
|
|
191
|
+
return targets;
|
|
192
|
+
}
|
|
193
|
+
function hasMulticaToken(home) {
|
|
194
|
+
const candidates = [join(home, '.multica', 'config.json')];
|
|
195
|
+
try {
|
|
196
|
+
for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {
|
|
197
|
+
candidates.push(join(home, '.multica', 'profiles', entry, 'config.json'));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch { /* profiles 目录不存在 */ }
|
|
201
|
+
return candidates.some((path) => {
|
|
202
|
+
const config = readJsonOrNull(path);
|
|
203
|
+
return typeof config?.token === 'string' && config.token.trim().length > 0;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
128
206
|
function resolution(name, source, file) {
|
|
129
207
|
return {
|
|
130
208
|
$schema: 'dingtalk-agent/agent-platform-resolution@1',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-platform.js","sourceRoot":"","sources":["../../src/agent-platform.ts"],"names":[],"mappings":"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","sourcesContent":["// Managed Agent Platform 注册表与工作区归属解析。\n//\n// 一个 Agent 工作区归属于至多一个托管平台;归属解析顺序固定:\n// DTA_AGENT_PLATFORM 环境变量 > dingtalk-agent.json#agentPlatform\n// > .dingtalk-agent/agent-platform.json > 按 Provider 声明推断。\n// 平台相关的方法学不写进 CLI——它们随对应平台的 Skill 包分发,只在用户选择该平台时安装。\n// 平台命令(如 deploy/promote/observe)必须先通过归属门禁;coming-soon 平台一律 fail-closed。\n\nimport { existsSync, lstatSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join, parse, resolve } from 'node:path'\n\nimport { findAgentProjectRoot } from './development-workspace.js'\nimport { installGlobalSkill, type GlobalSkillStatus } from './skill-manager.js'\n\nexport type AgentPlatformStatus = 'supported' | 'coming-soon'\n\nexport interface AgentPlatformDefinition {\n name: string\n label: string\n status: AgentPlatformStatus\n description: string\n skills: string[]\n commands: string[]\n}\n\nexport const MANAGED_AGENT_PLATFORMS: AgentPlatformDefinition[] = [\n {\n name: 'multica-dingtalk',\n label: 'Multica (DingTalk)',\n status: 'supported',\n description: '钉钉 Multica 托管平台:受控部署、晋级与观测回流。',\n skills: ['dingtalk-agent-deploy', 'dingtalk-agent-boot-multica'],\n commands: ['deploy', 'promote', 'observe'],\n },\n {\n name: 'deap',\n label: 'DEAP',\n status: 'coming-soon',\n description: '敬请期待。',\n skills: [],\n commands: [],\n },\n]\n\nexport const AGENT_PLATFORM_FILE = '.dingtalk-agent/agent-platform.json'\nconst PROJECT_FILE = 'dingtalk-agent.json'\n\nexport type AgentPlatformSource = 'env' | 'project-manifest' | 'platform-file' | 'inferred' | 'none'\n\nexport interface AgentPlatformResolution {\n $schema: 'dingtalk-agent/agent-platform-resolution@1'\n platform: string | null\n source: AgentPlatformSource\n file: string\n definition: AgentPlatformDefinition | null\n platforms: AgentPlatformDefinition[]\n}\n\nexport interface AgentPlatformUseResult extends AgentPlatformResolution {\n written: string\n skillInstalls: GlobalSkillStatus[]\n}\n\nexport function agentPlatformDefinition(name: string): AgentPlatformDefinition | null {\n return MANAGED_AGENT_PLATFORMS.find((item) => item.name === name) || null\n}\n\nexport function resolveAgentPlatform(\n start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const fromEnv = String(env.DTA_AGENT_PLATFORM || '').trim()\n if (fromEnv) return resolution(fromEnv, 'env', '')\n\n const projectRoot = findAgentProjectRoot(start)\n if (projectRoot) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (existsSync(manifestPath) && !lstatSync(manifestPath).isSymbolicLink()) {\n const manifest = readJsonOrNull(manifestPath)\n const declared = typeof manifest?.agentPlatform === 'string' ? manifest.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'project-manifest', manifestPath)\n }\n }\n\n const platformPath = findUp(start, AGENT_PLATFORM_FILE)\n if (platformPath) {\n const stored = readJsonOrNull(platformPath)\n const declared = typeof stored?.agentPlatform === 'string' ? stored.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'platform-file', platformPath)\n }\n\n if (projectRoot) {\n const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE))\n const providers = Object.values(manifest?.workspaces || {})\n .map((workspace: any) => workspace?.provider?.kind)\n if (providers.includes('multica')) {\n return resolution('multica-dingtalk', 'inferred', join(projectRoot, PROJECT_FILE))\n }\n }\n\n return resolution(null, 'none', '')\n}\n\nexport interface AgentPlatformUseOptions {\n packageRoot: string\n home?: string\n env?: NodeJS.ProcessEnv\n installSkills?: boolean\n}\n\nexport function useAgentPlatform(\n start: string, name: string, options: AgentPlatformUseOptions,\n): AgentPlatformUseResult {\n const definition = agentPlatformDefinition(name)\n if (!definition) {\n throw new Error(\n `未知 managed agent platform: ${name}\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => `${item.name}(${statusLabel(item.status)})`).join('、')}`,\n )\n }\n if (definition.status !== 'supported') {\n throw new Error(`${definition.label} 敬请期待——当前版本尚未开放该平台。`)\n }\n\n const projectRoot = findAgentProjectRoot(start)\n let written: string\n if (projectRoot && existsSync(join(projectRoot, PROJECT_FILE))) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n const manifest = readJsonOrNull(manifestPath)\n if (!manifest || typeof manifest !== 'object') {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON,无法写入 agentPlatform 归属`)\n }\n manifest.agentPlatform = definition.name\n writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\\n')\n written = manifestPath\n } else {\n const target = join(resolve(start), AGENT_PLATFORM_FILE)\n mkdirSync(dirname(target), { recursive: true })\n writeFileSync(target, JSON.stringify(\n { $schema: 'dingtalk-agent/agent-platform@1', agentPlatform: definition.name }, null, 2,\n ) + '\\n')\n written = target\n }\n\n const skillInstalls: GlobalSkillStatus[] = []\n if (options.installSkills !== false) {\n for (const skill of definition.skills) {\n skillInstalls.push(installGlobalSkill(options.packageRoot, {\n name: skill, home: options.home, env: options.env,\n }))\n }\n }\n\n return { ...resolveAgentPlatform(start, options.env || process.env), written, skillInstalls }\n}\n\n/** deploy/promote/observe 等平台命令的归属门禁:未归属、未知或 coming-soon 一律 fail-closed。 */\nexport function requireSupportedAgentPlatform(\n command: string, start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const resolved = resolveAgentPlatform(start, env)\n if (!resolved.platform) {\n throw new Error(\n `当前工作区未声明 managed agent platform,无法执行 \\`${command}\\`。\\n` +\n '先运行 `dta agent-platform use multica-dingtalk`,或设置 DTA_AGENT_PLATFORM 环境变量。',\n )\n }\n if (!resolved.definition) {\n throw new Error(\n `工作区声明了未知 platform: ${resolved.platform}(来源 ${resolved.source})。\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => item.name).join('、')}`,\n )\n }\n if (resolved.definition.status !== 'supported') {\n throw new Error(`${resolved.definition.label} 敬请期待——\\`${command}\\` 尚未在该平台开放。`)\n }\n if (!resolved.definition.commands.includes(command)) {\n throw new Error(`${resolved.definition.label} 不承接命令 \\`${command}\\`。`)\n }\n return resolved\n}\n\nexport function statusLabel(status: AgentPlatformStatus): string {\n return status === 'supported' ? '已支持' : '敬请期待'\n}\n\nfunction resolution(\n name: string | null, source: AgentPlatformSource, file: string,\n): AgentPlatformResolution {\n return {\n $schema: 'dingtalk-agent/agent-platform-resolution@1',\n platform: name,\n source,\n file,\n definition: name ? agentPlatformDefinition(name) : null,\n platforms: MANAGED_AGENT_PLATFORMS,\n }\n}\n\nfunction readJsonOrNull(path: string): any {\n try { return JSON.parse(readFileSync(path, 'utf8')) } catch { return null }\n}\n\nfunction findUp(start: string, relativePath: string): string | null {\n let dir = resolve(start)\n while (true) {\n const candidate = join(dir, relativePath)\n if (existsSync(candidate) && !lstatSync(candidate).isSymbolicLink()) return candidate\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) return null\n dir = parent\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-platform.js","sourceRoot":"","sources":["../../src/agent-platform.ts"],"names":[],"mappings":"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","sourcesContent":["// Managed Agent Platform 注册表与工作区归属解析。\n//\n// 一个 Agent 工作区归属于至多一个托管平台;归属解析顺序固定:\n// DTA_AGENT_PLATFORM 环境变量 > dingtalk-agent.json#agentPlatform\n// > .dingtalk-agent/agent-platform.json > 按 Provider 声明推断。\n// 平台相关的方法学不写进 CLI——它们随对应平台的 Skill 包分发,只在用户选择该平台时安装。\n// 平台命令(如 deploy/promote/observe)必须先通过归属门禁;coming-soon 平台一律 fail-closed。\n\nimport { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, parse, resolve } from 'node:path'\n\nimport { findAgentProjectRoot } from './development-workspace.js'\nimport { findExecutable } from './doctor.js'\nimport { installGlobalSkill, type GlobalSkillStatus } from './skill-manager.js'\n\nexport type AgentPlatformStatus = 'supported' | 'coming-soon'\n\nexport interface AgentPlatformSkillBinding {\n role: string\n name: string\n}\n\nexport interface AgentPlatformDefinition {\n name: string\n label: string\n status: AgentPlatformStatus\n description: string\n skills: AgentPlatformSkillBinding[]\n commands: string[]\n}\n\nexport const MANAGED_AGENT_PLATFORMS: AgentPlatformDefinition[] = [\n {\n name: 'multica-dingtalk',\n label: 'Multica (DingTalk)',\n status: 'supported',\n description: '钉钉 Multica 托管平台:供给、部署、钉钉机器人绑定、观测与调度。',\n skills: [\n { role: 'deploy', name: 'dingtalk-agent-deploy-multica' },\n { role: 'boot', name: 'dingtalk-agent-boot-multica' },\n { role: 'ops', name: 'multica-external' },\n ],\n commands: ['deploy', 'promote', 'observe'],\n },\n {\n name: 'deap',\n label: 'DEAP',\n status: 'coming-soon',\n description: '敬请期待。',\n skills: [],\n commands: [],\n },\n]\n\nexport const AGENT_PLATFORM_FILE = '.dingtalk-agent/agent-platform.json'\nconst PROJECT_FILE = 'dingtalk-agent.json'\n\nexport type AgentPlatformSource = 'env' | 'project-manifest' | 'platform-file' | 'inferred' | 'none'\n\nexport interface AgentPlatformResolution {\n $schema: 'dingtalk-agent/agent-platform-resolution@1'\n platform: string | null\n source: AgentPlatformSource\n file: string\n definition: AgentPlatformDefinition | null\n platforms: AgentPlatformDefinition[]\n}\n\nexport interface AgentPlatformUseResult extends AgentPlatformResolution {\n written: string\n skillInstalls: GlobalSkillStatus[]\n}\n\nexport function agentPlatformDefinition(name: string): AgentPlatformDefinition | null {\n return MANAGED_AGENT_PLATFORMS.find((item) => item.name === name) || null\n}\n\nexport function resolveAgentPlatform(\n start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const fromEnv = String(env.DTA_AGENT_PLATFORM || '').trim()\n if (fromEnv) return resolution(fromEnv, 'env', '')\n\n const projectRoot = findAgentProjectRoot(start)\n if (projectRoot) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (existsSync(manifestPath) && !lstatSync(manifestPath).isSymbolicLink()) {\n const manifest = readJsonOrNull(manifestPath)\n const declared = typeof manifest?.agentPlatform === 'string' ? manifest.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'project-manifest', manifestPath)\n }\n }\n\n const platformPath = findUp(start, AGENT_PLATFORM_FILE)\n if (platformPath) {\n const stored = readJsonOrNull(platformPath)\n const declared = typeof stored?.agentPlatform === 'string' ? stored.agentPlatform.trim() : ''\n if (declared) return resolution(declared, 'platform-file', platformPath)\n }\n\n if (projectRoot) {\n const manifest = readJsonOrNull(join(projectRoot, PROJECT_FILE))\n const providers = Object.values(manifest?.workspaces || {})\n .map((workspace: any) => workspace?.provider?.kind)\n if (providers.includes('multica')) {\n return resolution('multica-dingtalk', 'inferred', join(projectRoot, PROJECT_FILE))\n }\n }\n\n return resolution(null, 'none', '')\n}\n\nexport interface AgentPlatformUseOptions {\n packageRoot: string\n home?: string\n env?: NodeJS.ProcessEnv\n installSkills?: boolean\n}\n\nexport function useAgentPlatform(\n start: string, name: string, options: AgentPlatformUseOptions,\n): AgentPlatformUseResult {\n const definition = agentPlatformDefinition(name)\n if (!definition) {\n throw new Error(\n `未知 managed agent platform: ${name}\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => `${item.name}(${statusLabel(item.status)})`).join('、')}`,\n )\n }\n if (definition.status !== 'supported') {\n throw new Error(`${definition.label} 敬请期待——当前版本尚未开放该平台。`)\n }\n\n const projectRoot = findAgentProjectRoot(start)\n let written: string\n if (projectRoot && existsSync(join(projectRoot, PROJECT_FILE))) {\n const manifestPath = join(projectRoot, PROJECT_FILE)\n if (lstatSync(manifestPath).isSymbolicLink()) {\n throw new Error(`${PROJECT_FILE} 不能是符号链接`)\n }\n const manifest = readJsonOrNull(manifestPath)\n if (!manifest || typeof manifest !== 'object') {\n throw new Error(`${PROJECT_FILE} 不是合法 JSON,无法写入 agentPlatform 归属`)\n }\n manifest.agentPlatform = definition.name\n writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\\n')\n written = manifestPath\n } else {\n const target = join(resolve(start), AGENT_PLATFORM_FILE)\n mkdirSync(dirname(target), { recursive: true })\n writeFileSync(target, JSON.stringify(\n { $schema: 'dingtalk-agent/agent-platform@1', agentPlatform: definition.name }, null, 2,\n ) + '\\n')\n written = target\n }\n\n const skillInstalls: GlobalSkillStatus[] = []\n if (options.installSkills !== false) {\n for (const skill of definition.skills) {\n skillInstalls.push(installGlobalSkill(options.packageRoot, {\n name: skill.name, home: options.home, env: options.env,\n }))\n }\n }\n\n return { ...resolveAgentPlatform(start, options.env || process.env), written, skillInstalls }\n}\n\n/** deploy/promote/observe 等平台命令的归属门禁:未归属、未知或 coming-soon 一律 fail-closed。 */\nexport function requireSupportedAgentPlatform(\n command: string, start = process.cwd(), env: NodeJS.ProcessEnv = process.env,\n): AgentPlatformResolution {\n const resolved = resolveAgentPlatform(start, env)\n if (!resolved.platform) {\n throw new Error(\n `当前工作区未声明 managed agent platform,无法执行 \\`${command}\\`。\\n` +\n '先运行 `dta agent-platform use multica-dingtalk`,或设置 DTA_AGENT_PLATFORM 环境变量。',\n )\n }\n if (!resolved.definition) {\n throw new Error(\n `工作区声明了未知 platform: ${resolved.platform}(来源 ${resolved.source})。\\n` +\n `可用: ${MANAGED_AGENT_PLATFORMS.map((item) => item.name).join('、')}`,\n )\n }\n if (resolved.definition.status !== 'supported') {\n throw new Error(`${resolved.definition.label} 敬请期待——\\`${command}\\` 尚未在该平台开放。`)\n }\n if (!resolved.definition.commands.includes(command)) {\n throw new Error(`${resolved.definition.label} 不承接命令 \\`${command}\\`。`)\n }\n return resolved\n}\n\n/** dta 层的平台命令/角色(deploy、boot、ops…)关联到该平台内确切的 Skill 名。 */\nexport function platformSkillForRole(platformName: string, role: string): string | null {\n const definition = agentPlatformDefinition(platformName)\n return definition?.skills.find((item) => item.role === role)?.name || null\n}\n\nexport function statusLabel(status: AgentPlatformStatus): string {\n return status === 'supported' ? '已支持' : '敬请期待'\n}\n\nexport interface AgentPlatformReadinessCheck {\n id: string\n ok: boolean\n summary: string\n hint?: string\n}\n\n/**\n * 平台工具链就绪检查(只读,不阻断):选择/查看平台归属时提示用户缺什么、怎么补。\n * 强制门禁仍由 requireSupportedAgentPlatform 与各平台命令自身承担。\n */\nexport function agentPlatformReadiness(\n name: string, env: NodeJS.ProcessEnv = process.env, home = homedir(),\n): AgentPlatformReadinessCheck[] {\n if (name !== 'multica-dingtalk') return []\n const checks: AgentPlatformReadinessCheck[] = []\n const cli = findExecutable('multica', env)\n checks.push(cli\n ? { id: 'multica-cli', ok: true, summary: `multica CLI 已安装(${cli})` }\n : {\n id: 'multica-cli', ok: false, summary: '未找到 multica CLI',\n hint: '安装:curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash',\n })\n checks.push(hasMulticaToken(home)\n ? { id: 'multica-login', ok: true, summary: 'Multica 已登录(本地存在 token)' }\n : {\n id: 'multica-login', ok: false, summary: 'Multica 尚未登录',\n hint: '登录:multica login --server-url <endpoint>(预发环境为 https://pre-fde-workbench.dingtalk.com)',\n })\n if (['HTTPS_PROXY', 'https_proxy', 'ALL_PROXY', 'all_proxy'].some((key) => env[key])) {\n checks.push({\n id: 'proxy-env', ok: false, summary: '检测到代理环境变量,可能阻断 Multica 直连',\n hint: '连接失败时用 env -u HTTPS_PROXY -u https_proxy -u ALL_PROXY -u all_proxy 运行 multica 与平台脚本',\n })\n }\n return checks\n}\n\nexport interface MulticaTarget {\n profile: string\n serverUrl: string\n workspaceId: string\n}\n\n/**\n * 本机已登录的 Multica 目标清单(default 配置 + 各 profile)。只暴露 endpoint 与\n * workspace 标识,不读取 token 内容。发布前必须把候选交给用户选择,绝不默默用默认配置。\n */\nexport function multicaTargets(home = homedir()): MulticaTarget[] {\n const targets: MulticaTarget[] = []\n const push = (profile: string, path: string) => {\n const config = readJsonOrNull(path)\n if (typeof config?.token === 'string' && config.token.trim()) {\n targets.push({\n profile,\n serverUrl: String(config.server_url || ''),\n workspaceId: String(config.workspace_id || ''),\n })\n }\n }\n push('default', join(home, '.multica', 'config.json'))\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n push(entry, join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return targets\n}\n\nfunction hasMulticaToken(home: string): boolean {\n const candidates = [join(home, '.multica', 'config.json')]\n try {\n for (const entry of readdirSync(join(home, '.multica', 'profiles'))) {\n candidates.push(join(home, '.multica', 'profiles', entry, 'config.json'))\n }\n } catch { /* profiles 目录不存在 */ }\n return candidates.some((path) => {\n const config = readJsonOrNull(path)\n return typeof config?.token === 'string' && config.token.trim().length > 0\n })\n}\n\nfunction resolution(\n name: string | null, source: AgentPlatformSource, file: string,\n): AgentPlatformResolution {\n return {\n $schema: 'dingtalk-agent/agent-platform-resolution@1',\n platform: name,\n source,\n file,\n definition: name ? agentPlatformDefinition(name) : null,\n platforms: MANAGED_AGENT_PLATFORMS,\n }\n}\n\nfunction readJsonOrNull(path: string): any {\n try { return JSON.parse(readFileSync(path, 'utf8')) } catch { return null }\n}\n\nfunction findUp(start: string, relativePath: string): string | null {\n let dir = resolve(start)\n while (true) {\n const candidate = join(dir, relativePath)\n if (existsSync(candidate) && !lstatSync(candidate).isSymbolicLink()) return candidate\n const parent = dirname(dir)\n if (parent === dir || dir === parse(dir).root) return null\n dir = parent\n }\n}\n"]}
|
|
@@ -5,6 +5,7 @@ import { findExecutable } from './doctor.js';
|
|
|
5
5
|
import { digest, stableStringify } from './events.js';
|
|
6
6
|
import { resolvePackageRoot } from './package-root.js';
|
|
7
7
|
import { loadWorkspace, workspacePath } from './workspace.js';
|
|
8
|
+
import { bundledSkillPath } from './skill-manager.js';
|
|
8
9
|
export const PROJECT_FILE = 'dingtalk-agent.json';
|
|
9
10
|
export const CURRENT_WORKSPACE_FILE = '.dingtalk-agent/current-workspace';
|
|
10
11
|
export const WORKSPACE_STATE_ROOT = '.dingtalk-agent/state/workspaces';
|
|
@@ -454,7 +455,8 @@ function inspectOpenCodeWorkspace(info, workspace, env, add) {
|
|
|
454
455
|
add('provider.opencode-model', 'provider', workspace.provider.model ? 'pass' : 'fail', true, workspace.provider.model ? 'OpenCode model 已显式声明' : 'OpenCode model 缺失', { model: workspace.provider.model || '' });
|
|
455
456
|
const basicPath = '.agents/skills/dingtalk-basic-behavior/SKILL.md';
|
|
456
457
|
const basic = inspectLocalFile(info.root, basicPath);
|
|
457
|
-
const
|
|
458
|
+
const canonicalPackageRoot = resolvePackageRoot(import.meta.url);
|
|
459
|
+
const canonicalBasic = inspectLocalFile(canonicalPackageRoot, relative(canonicalPackageRoot, join(bundledSkillPath(canonicalPackageRoot, 'dingtalk-basic-behavior'), 'SKILL.md')));
|
|
458
460
|
const basicMatched = basic.valid && canonicalBasic.valid && basic.hash === canonicalBasic.hash;
|
|
459
461
|
add('skills.basic-exposure', 'skills', basicMatched ? 'pass' : 'fail', true, basicMatched ? 'Basic Skill exposure 与当前 canonical source 一致'
|
|
460
462
|
: 'Basic Skill exposure 缺失、越界或 hash 漂移', { exposure: basic, canonicalHash: canonicalBasic.hash || '' }, `重新物化 ${basicPath}`);
|