dominds 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +157 -0
- package/README.md +250 -0
- package/README.zh.md +161 -0
- package/dist/access-control.js +253 -0
- package/dist/cli/create.js +263 -0
- package/dist/cli/read.js +84 -0
- package/dist/cli/tui.js +199 -0
- package/dist/cli/webui.js +169 -0
- package/dist/cli.js +227 -0
- package/dist/dialog-factory.js +53 -0
- package/dist/dialog-global-registry.js +68 -0
- package/dist/dialog-instance-registry.js +78 -0
- package/dist/dialog-run-state.js +198 -0
- package/dist/dialog.js +1024 -0
- package/dist/evt-registry.js +103 -0
- package/dist/index.js +8 -0
- package/dist/llm/client.js +69 -0
- package/dist/llm/defaults.yaml +386 -0
- package/dist/llm/driver.js +3214 -0
- package/dist/llm/gen/anthropic.js +611 -0
- package/dist/llm/gen/codex.js +375 -0
- package/dist/llm/gen/mock.js +326 -0
- package/dist/llm/gen/openai.js +470 -0
- package/dist/llm/gen/registry.js +26 -0
- package/dist/llm/gen.js +2 -0
- package/dist/llm/tools-projection.js +37 -0
- package/dist/log.js +228 -0
- package/dist/mcp/config.js +230 -0
- package/dist/mcp/sdk-client.js +129 -0
- package/dist/mcp/server-runtime.js +57 -0
- package/dist/mcp/stdio-client.js +280 -0
- package/dist/mcp/supervisor.js +979 -0
- package/dist/mcp/tool-names.js +109 -0
- package/dist/minds/builtin/cmdr/persona.md +3 -0
- package/dist/minds/builtin/dijiang/knowledge.md +287 -0
- package/dist/minds/builtin/dijiang/persona.md +7 -0
- package/dist/minds/builtin/fuxi/persona.en.md +59 -0
- package/dist/minds/builtin/fuxi/persona.zh.md +49 -0
- package/dist/minds/builtin/pangu/persona.en.md +78 -0
- package/dist/minds/builtin/pangu/persona.zh.md +71 -0
- package/dist/minds/load.js +617 -0
- package/dist/minds/minds-i18n.js +131 -0
- package/dist/minds/system-prompt.js +281 -0
- package/dist/persistence.js +3128 -0
- package/dist/problems.js +109 -0
- package/dist/server/api-routes.js +1031 -0
- package/dist/server/auth.js +180 -0
- package/dist/server/mime-types.js +32 -0
- package/dist/server/prompts-routes.js +543 -0
- package/dist/server/server-core.js +235 -0
- package/dist/server/setup-routes.js +697 -0
- package/dist/server/static-server.js +132 -0
- package/dist/server/websocket-handler.js +1011 -0
- package/dist/server.js +164 -0
- package/dist/shared/async-fifo-mutex.js +36 -0
- package/dist/shared/diligence.js +20 -0
- package/dist/shared/dotenv.js +144 -0
- package/dist/shared/evt.js +195 -0
- package/dist/shared/i18n/driver-messages.js +267 -0
- package/dist/shared/i18n/text.js +9 -0
- package/dist/shared/i18n/tool-result-messages.js +51 -0
- package/dist/shared/rtws-cli.js +73 -0
- package/dist/shared/runtime-language.js +47 -0
- package/dist/shared/team-mgmt-manual.js +116 -0
- package/dist/shared/types/context-health.js +2 -0
- package/dist/shared/types/dialog.js +11 -0
- package/dist/shared/types/i18n.js +2 -0
- package/dist/shared/types/index.js +26 -0
- package/dist/shared/types/language.js +40 -0
- package/dist/shared/types/problems.js +2 -0
- package/dist/shared/types/prompts.js +2 -0
- package/dist/shared/types/q4h.js +7 -0
- package/dist/shared/types/run-state.js +8 -0
- package/dist/shared/types/setup.js +2 -0
- package/dist/shared/types/storage.js +10 -0
- package/dist/shared/types/tellask.js +8 -0
- package/dist/shared/types/tools-registry.js +2 -0
- package/dist/shared/types/wire.js +12 -0
- package/dist/shared/utils/fmt.js +9 -0
- package/dist/shared/utils/html.js +20 -0
- package/dist/shared/utils/id.js +18 -0
- package/dist/shared/utils/inter-dialog-format.js +101 -0
- package/dist/shared/utils/time.js +13 -0
- package/dist/static/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/static/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/static/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/static/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/static/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/static/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/static/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/static/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/static/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/static/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/static/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/static/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/static/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/static/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/static/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/static/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/static/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/static/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/static/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/static/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/static/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/static/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/static/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/static/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/static/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/static/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/static/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/static/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/static/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/static/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/static/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/static/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/static/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/static/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/static/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/static/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/static/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/static/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/static/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/static/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/static/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/static/assets/_baseUniq-Crfl3d5Y.js +661 -0
- package/dist/static/assets/_baseUniq-Crfl3d5Y.js.map +1 -0
- package/dist/static/assets/arc-CbA_x9GD.js +132 -0
- package/dist/static/assets/arc-CbA_x9GD.js.map +1 -0
- package/dist/static/assets/architectureDiagram-VXUJARFQ-lcFS8ZQJ.js +8685 -0
- package/dist/static/assets/architectureDiagram-VXUJARFQ-lcFS8ZQJ.js.map +1 -0
- package/dist/static/assets/blockDiagram-VD42YOAC-B3Q36qRc.js +3608 -0
- package/dist/static/assets/blockDiagram-VD42YOAC-B3Q36qRc.js.map +1 -0
- package/dist/static/assets/c4Diagram-YG6GDRKO-Mt-aq3VH.js +2482 -0
- package/dist/static/assets/c4Diagram-YG6GDRKO-Mt-aq3VH.js.map +1 -0
- package/dist/static/assets/channel-BVr1Yke-.js +8 -0
- package/dist/static/assets/channel-BVr1Yke-.js.map +1 -0
- package/dist/static/assets/chunk-4BX2VUAB-qCIn5Iic.js +17 -0
- package/dist/static/assets/chunk-4BX2VUAB-qCIn5Iic.js.map +1 -0
- package/dist/static/assets/chunk-55IACEB6-q172NeCV.js +14 -0
- package/dist/static/assets/chunk-55IACEB6-q172NeCV.js.map +1 -0
- package/dist/static/assets/chunk-B4BG7PRW-CMJmtYzq.js +1827 -0
- package/dist/static/assets/chunk-B4BG7PRW-CMJmtYzq.js.map +1 -0
- package/dist/static/assets/chunk-DI55MBZ5-DiuwwZPL.js +1916 -0
- package/dist/static/assets/chunk-DI55MBZ5-DiuwwZPL.js.map +1 -0
- package/dist/static/assets/chunk-FMBD7UC4-06sqZTTn.js +20 -0
- package/dist/static/assets/chunk-FMBD7UC4-06sqZTTn.js.map +1 -0
- package/dist/static/assets/chunk-QN33PNHL-CnpBNkpP.js +25 -0
- package/dist/static/assets/chunk-QN33PNHL-CnpBNkpP.js.map +1 -0
- package/dist/static/assets/chunk-QZHKN3VN-CNgjMR-e.js +18 -0
- package/dist/static/assets/chunk-QZHKN3VN-CNgjMR-e.js.map +1 -0
- package/dist/static/assets/chunk-TZMSLE5B-BxtzW6--.js +109 -0
- package/dist/static/assets/chunk-TZMSLE5B-BxtzW6--.js.map +1 -0
- package/dist/static/assets/classDiagram-2ON5EDUG-29huvmn-.js +23 -0
- package/dist/static/assets/classDiagram-2ON5EDUG-29huvmn-.js.map +1 -0
- package/dist/static/assets/classDiagram-v2-WZHVMYZB-29huvmn-.js +23 -0
- package/dist/static/assets/classDiagram-v2-WZHVMYZB-29huvmn-.js.map +1 -0
- package/dist/static/assets/clone-D2OgLSSn.js +9 -0
- package/dist/static/assets/clone-D2OgLSSn.js.map +1 -0
- package/dist/static/assets/cose-bilkent-S5V4N54A-BNegDCxl.js +4943 -0
- package/dist/static/assets/cose-bilkent-S5V4N54A-BNegDCxl.js.map +1 -0
- package/dist/static/assets/cytoscape.esm-Bm8DJGmZ.js +30240 -0
- package/dist/static/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -0
- package/dist/static/assets/dagre-6UL2VRFP-f1XrTRSn.js +695 -0
- package/dist/static/assets/dagre-6UL2VRFP-f1XrTRSn.js.map +1 -0
- package/dist/static/assets/defaultLocale-DVr69WTU.js +207 -0
- package/dist/static/assets/defaultLocale-DVr69WTU.js.map +1 -0
- package/dist/static/assets/diagram-PSM6KHXK-8w1WbeDi.js +849 -0
- package/dist/static/assets/diagram-PSM6KHXK-8w1WbeDi.js.map +1 -0
- package/dist/static/assets/diagram-QEK2KX5R-CF4wtMmR.js +303 -0
- package/dist/static/assets/diagram-QEK2KX5R-CF4wtMmR.js.map +1 -0
- package/dist/static/assets/diagram-S2PKOQOG-8p3Avgn2.js +213 -0
- package/dist/static/assets/diagram-S2PKOQOG-8p3Avgn2.js.map +1 -0
- package/dist/static/assets/erDiagram-Q2GNP2WA-BMKLxlM9.js +1159 -0
- package/dist/static/assets/erDiagram-Q2GNP2WA-BMKLxlM9.js.map +1 -0
- package/dist/static/assets/favicon-Cmg5RbCj.svg +8 -0
- package/dist/static/assets/flowDiagram-NV44I4VS-CgEuPNK2.js +2332 -0
- package/dist/static/assets/flowDiagram-NV44I4VS-CgEuPNK2.js.map +1 -0
- package/dist/static/assets/ganttDiagram-JELNMOA3-bJkDCf-9.js +3681 -0
- package/dist/static/assets/ganttDiagram-JELNMOA3-bJkDCf-9.js.map +1 -0
- package/dist/static/assets/gitGraphDiagram-NY62KEGX-4QE9kesp.js +1206 -0
- package/dist/static/assets/gitGraphDiagram-NY62KEGX-4QE9kesp.js.map +1 -0
- package/dist/static/assets/graph-CS0Pmm7c.js +597 -0
- package/dist/static/assets/graph-CS0Pmm7c.js.map +1 -0
- package/dist/static/assets/index-BS6HnGzC.js +112303 -0
- package/dist/static/assets/index-BS6HnGzC.js.map +1 -0
- package/dist/static/assets/index-DaIsSzC_.css +483 -0
- package/dist/static/assets/infoDiagram-WHAUD3N6-ypBcKfUs.js +34 -0
- package/dist/static/assets/infoDiagram-WHAUD3N6-ypBcKfUs.js.map +1 -0
- package/dist/static/assets/init-ZxktEp_H.js +17 -0
- package/dist/static/assets/init-ZxktEp_H.js.map +1 -0
- package/dist/static/assets/journeyDiagram-XKPGCS4Q-QnrxDowJ.js +1255 -0
- package/dist/static/assets/journeyDiagram-XKPGCS4Q-QnrxDowJ.js.map +1 -0
- package/dist/static/assets/kanban-definition-3W4ZIXB7-CfvEc4z5.js +1048 -0
- package/dist/static/assets/kanban-definition-3W4ZIXB7-CfvEc4z5.js.map +1 -0
- package/dist/static/assets/layout-8TGxpm23.js +2218 -0
- package/dist/static/assets/layout-8TGxpm23.js.map +1 -0
- package/dist/static/assets/linear-BATBPQQv.js +341 -0
- package/dist/static/assets/linear-BATBPQQv.js.map +1 -0
- package/dist/static/assets/min-B3oVH3AC.js +42 -0
- package/dist/static/assets/min-B3oVH3AC.js.map +1 -0
- package/dist/static/assets/mindmap-definition-VGOIOE7T-L7VLwwF8.js +1127 -0
- package/dist/static/assets/mindmap-definition-VGOIOE7T-L7VLwwF8.js.map +1 -0
- package/dist/static/assets/ordinal-CxptdPJm.js +77 -0
- package/dist/static/assets/ordinal-CxptdPJm.js.map +1 -0
- package/dist/static/assets/pieDiagram-ADFJNKIX-CFW3zIhM.js +241 -0
- package/dist/static/assets/pieDiagram-ADFJNKIX-CFW3zIhM.js.map +1 -0
- package/dist/static/assets/quadrantDiagram-AYHSOK5B-B7ssen3E.js +1338 -0
- package/dist/static/assets/quadrantDiagram-AYHSOK5B-B7ssen3E.js.map +1 -0
- package/dist/static/assets/requirementDiagram-UZGBJVZJ-D0v5BArv.js +1162 -0
- package/dist/static/assets/requirementDiagram-UZGBJVZJ-D0v5BArv.js.map +1 -0
- package/dist/static/assets/sankeyDiagram-TZEHDZUN-B7slncJe.js +1195 -0
- package/dist/static/assets/sankeyDiagram-TZEHDZUN-B7slncJe.js.map +1 -0
- package/dist/static/assets/sequenceDiagram-WL72ISMW-oXU2lRh_.js +3875 -0
- package/dist/static/assets/sequenceDiagram-WL72ISMW-oXU2lRh_.js.map +1 -0
- package/dist/static/assets/stateDiagram-FKZM4ZOC-CFYsEd0x.js +452 -0
- package/dist/static/assets/stateDiagram-FKZM4ZOC-CFYsEd0x.js.map +1 -0
- package/dist/static/assets/stateDiagram-v2-4FDKWEC3-C0UWaNA7.js +22 -0
- package/dist/static/assets/stateDiagram-v2-4FDKWEC3-C0UWaNA7.js.map +1 -0
- package/dist/static/assets/timeline-definition-IT6M3QCI-C3KODUrh.js +1223 -0
- package/dist/static/assets/timeline-definition-IT6M3QCI-C3KODUrh.js.map +1 -0
- package/dist/static/assets/treemap-KMMF4GRG-DAGDLhj2.js +18753 -0
- package/dist/static/assets/treemap-KMMF4GRG-DAGDLhj2.js.map +1 -0
- package/dist/static/assets/xychartDiagram-PRI3JC2R-C0J9iwTO.js +1888 -0
- package/dist/static/assets/xychartDiagram-PRI3JC2R-C0J9iwTO.js.map +1 -0
- package/dist/static/index.html +71 -0
- package/dist/static/testing/dom-observation-utils.js +425 -0
- package/dist/static/testing/e2e-test-helper.js +3119 -0
- package/dist/team.js +1160 -0
- package/dist/tellask.js +431 -0
- package/dist/tool.js +150 -0
- package/dist/tools/apply-patch.js +542 -0
- package/dist/tools/builtins.js +196 -0
- package/dist/tools/context-health.js +177 -0
- package/dist/tools/ctrl.js +478 -0
- package/dist/tools/diag.js +583 -0
- package/dist/tools/env.js +184 -0
- package/dist/tools/fs.js +818 -0
- package/dist/tools/mcp.js +138 -0
- package/dist/tools/mem.js +349 -0
- package/dist/tools/os.js +751 -0
- package/dist/tools/prompts/team_mgmt.en.md +70 -0
- package/dist/tools/prompts/team_mgmt.zh.md +70 -0
- package/dist/tools/prompts/ws_mod.en.md +86 -0
- package/dist/tools/prompts/ws_mod.zh.md +87 -0
- package/dist/tools/registry-snapshot.js +31 -0
- package/dist/tools/registry.js +121 -0
- package/dist/tools/ripgrep.js +678 -0
- package/dist/tools/team-mgmt.js +3300 -0
- package/dist/tools/txt.js +3178 -0
- package/dist/utils/id.js +72 -0
- package/dist/utils/task-doc.js +236 -0
- package/dist/utils/task-package.js +522 -0
- package/dist/utils/taskdoc-search.js +280 -0
- package/dist/utils/taskdoc.js +400 -0
- package/package.json +69 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.formatTaskDocContent = formatTaskDocContent;
|
|
37
|
+
/**
|
|
38
|
+
* Module: utils/taskdoc
|
|
39
|
+
*
|
|
40
|
+
* Utilities for formatting Taskdoc content for display in LLM context.
|
|
41
|
+
*/
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const dialog_1 = require("../dialog");
|
|
45
|
+
const runtime_language_1 = require("../shared/runtime-language");
|
|
46
|
+
const task_package_1 = require("./task-package");
|
|
47
|
+
/**
|
|
48
|
+
* Format task document content for display in the LLM context.
|
|
49
|
+
* Task Docs are encapsulated `*.tsk/` directories.
|
|
50
|
+
*/
|
|
51
|
+
async function formatTaskDocContent(dlg) {
|
|
52
|
+
const language = (0, runtime_language_1.getWorkLanguage)();
|
|
53
|
+
const taskDocPath = dlg.taskDocPath;
|
|
54
|
+
if (!taskDocPath) {
|
|
55
|
+
const head = language === 'zh' ? `**差遣牒:**` : `**Taskdoc:**`;
|
|
56
|
+
const err = language === 'zh'
|
|
57
|
+
? '❌ **错误:** 此对话未配置差遣牒路径(taskDocPath)。'
|
|
58
|
+
: '❌ **Error:** No Taskdoc path configured for this dialog (taskDocPath).';
|
|
59
|
+
return {
|
|
60
|
+
type: 'environment_msg',
|
|
61
|
+
role: 'user',
|
|
62
|
+
content: `${head}\n${err}`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const isSubdialog = dlg instanceof dialog_1.SubDialog;
|
|
66
|
+
const taskdocMaintainerId = isSubdialog ? dlg.rootDialog.agentId : dlg.agentId;
|
|
67
|
+
const workspaceRoot = path.resolve(process.cwd());
|
|
68
|
+
const fullPath = path.resolve(workspaceRoot, taskDocPath);
|
|
69
|
+
// Security check - ensure path is within workspace
|
|
70
|
+
if (!fullPath.startsWith(workspaceRoot)) {
|
|
71
|
+
const head = language === 'zh' ? `**差遣牒:** \`${taskDocPath}\`` : `**Taskdoc:** \`${taskDocPath}\``;
|
|
72
|
+
const err = language === 'zh'
|
|
73
|
+
? '❌ **错误:** 路径必须在 workspace 内'
|
|
74
|
+
: '❌ **Error:** Path must be within workspace';
|
|
75
|
+
return {
|
|
76
|
+
type: 'environment_msg',
|
|
77
|
+
role: 'user',
|
|
78
|
+
content: `${head}
|
|
79
|
+
${err}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
if (!(0, task_package_1.isTaskPackagePath)(taskDocPath)) {
|
|
84
|
+
if (language === 'zh') {
|
|
85
|
+
return {
|
|
86
|
+
type: 'environment_msg',
|
|
87
|
+
role: 'user',
|
|
88
|
+
content: `**差遣牒:** \`${taskDocPath}\`
|
|
89
|
+
❌ **错误:** 无效的差遣牒路径:差遣牒必须是一个以 \`.tsk\` 结尾的目录(\`*.tsk/\`)。
|
|
90
|
+
|
|
91
|
+
如果你提供的是一个普通文件路径(例如 \`.md\`),这是不符合预期的。请改为指向一个 \`.tsk/\` 目录。`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
type: 'environment_msg',
|
|
96
|
+
role: 'user',
|
|
97
|
+
content: `**Taskdoc:** \`${taskDocPath}\`
|
|
98
|
+
❌ **Error:** Invalid Taskdoc path: Taskdoc must be a directory ending with \`.tsk\` (\`*.tsk/\`).
|
|
99
|
+
|
|
100
|
+
If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please point to a \`.tsk/\` directory instead.`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Task Docs (`*.tsk/`) are directory-based, but the content is still injected deterministically.
|
|
104
|
+
// General file tools must NOT be used to access anything under `*.tsk/`.
|
|
105
|
+
const pkg = await (async () => {
|
|
106
|
+
try {
|
|
107
|
+
const st = await fs.promises.stat(fullPath);
|
|
108
|
+
if (!st.isDirectory()) {
|
|
109
|
+
throw new Error(`Task Doc path exists but is not a directory: '${taskDocPath}'`);
|
|
110
|
+
}
|
|
111
|
+
return await (0, task_package_1.readTaskPackageForInjection)(fullPath);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
if (typeof err === 'object' &&
|
|
115
|
+
err !== null &&
|
|
116
|
+
'code' in err &&
|
|
117
|
+
err.code === 'ENOENT') {
|
|
118
|
+
return {
|
|
119
|
+
sections: {
|
|
120
|
+
goals: { kind: 'missing' },
|
|
121
|
+
constraints: { kind: 'missing' },
|
|
122
|
+
progress: { kind: 'missing' },
|
|
123
|
+
},
|
|
124
|
+
bearInMind: { kind: 'absent' },
|
|
125
|
+
extraSections: { kind: 'present', categories: [], truncated: false },
|
|
126
|
+
violations: [],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
})();
|
|
132
|
+
const goalsStatus = pkg.sections.goals.kind === 'present' ? 'present' : 'missing';
|
|
133
|
+
const constraintsStatus = pkg.sections.constraints.kind === 'present' ? 'present' : 'missing';
|
|
134
|
+
const progressStatus = pkg.sections.progress.kind === 'present' ? 'present' : 'missing';
|
|
135
|
+
const bearInMindStatus = pkg.bearInMind.kind === 'absent'
|
|
136
|
+
? 'absent'
|
|
137
|
+
: pkg.bearInMind.kind === 'invalid'
|
|
138
|
+
? 'invalid'
|
|
139
|
+
: 'present';
|
|
140
|
+
const formatViolation = (v) => {
|
|
141
|
+
if (language === 'zh') {
|
|
142
|
+
switch (v.kind) {
|
|
143
|
+
case 'top_level_file_under_subdir':
|
|
144
|
+
return `- 违规:顶层文件 \`${v.filename}\` 不得出现在子目录下(发现于:\`${v.foundAt}\`)`;
|
|
145
|
+
case 'bearinmind_file_outside_bearinmind':
|
|
146
|
+
return `- 违规:\`${v.filename}\` 只能出现在 \`bearinmind/\` 下(发现于:\`${v.foundAt}\`)`;
|
|
147
|
+
case 'bearinmind_extra_entry':
|
|
148
|
+
return `- 违规:\`bearinmind/\` 下不允许额外条目(发现于:\`${v.foundAt}\`)`;
|
|
149
|
+
case 'bearinmind_not_directory':
|
|
150
|
+
return `- 违规:\`bearinmind\` 必须是目录(发现:\`${v.foundAt}\`)`;
|
|
151
|
+
case 'scan_limit_exceeded':
|
|
152
|
+
return `- 警告:差遣牒包过大,结构检查提前中止(max_entries=${v.maxEntries})`;
|
|
153
|
+
default: {
|
|
154
|
+
const _exhaustive = v;
|
|
155
|
+
return String(_exhaustive);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
switch (v.kind) {
|
|
160
|
+
case 'top_level_file_under_subdir':
|
|
161
|
+
return `- Violation: top-level file \`${v.filename}\` must not appear under any subdirectory (found at: \`${v.foundAt}\`)`;
|
|
162
|
+
case 'bearinmind_file_outside_bearinmind':
|
|
163
|
+
return `- Violation: \`${v.filename}\` must only appear under \`bearinmind/\` (found at: \`${v.foundAt}\`)`;
|
|
164
|
+
case 'bearinmind_extra_entry':
|
|
165
|
+
return `- Violation: extra entries are not allowed under \`bearinmind/\` (found at: \`${v.foundAt}\`)`;
|
|
166
|
+
case 'bearinmind_not_directory':
|
|
167
|
+
return `- Violation: \`bearinmind\` must be a directory (found: \`${v.foundAt}\`)`;
|
|
168
|
+
case 'scan_limit_exceeded':
|
|
169
|
+
return `- Warning: task package too large; layout validation stopped early (max_entries=${v.maxEntries})`;
|
|
170
|
+
default: {
|
|
171
|
+
const _exhaustive = v;
|
|
172
|
+
return String(_exhaustive);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const violationsBlock = (() => {
|
|
177
|
+
if (pkg.violations.length === 0)
|
|
178
|
+
return '';
|
|
179
|
+
const title = language === 'zh'
|
|
180
|
+
? `**结构违规(需要人工修复):**`
|
|
181
|
+
: `**Layout violations (fix manually):**`;
|
|
182
|
+
return [title, ...pkg.violations.map(formatViolation)].join('\n');
|
|
183
|
+
})();
|
|
184
|
+
const statusBlock = (() => {
|
|
185
|
+
const extraSectionsBlock = (() => {
|
|
186
|
+
const extra = pkg.extraSections;
|
|
187
|
+
if (language === 'zh') {
|
|
188
|
+
if (extra.kind === 'unavailable') {
|
|
189
|
+
return [
|
|
190
|
+
`**额外章节索引(不会自动注入):**`,
|
|
191
|
+
`- ⚠️ 暂不可用:无法扫描差遣牒包的额外章节目录(reason=${extra.reason})。`,
|
|
192
|
+
`- 若你确定存在额外章节,请直接尝试:\`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\``,
|
|
193
|
+
].join('\n');
|
|
194
|
+
}
|
|
195
|
+
const entries = [];
|
|
196
|
+
for (const cat of extra.categories) {
|
|
197
|
+
for (const selector of cat.selectors) {
|
|
198
|
+
entries.push(`- \`${cat.category}/${selector}.md\`(读:\`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`;写:\`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const header = `**额外章节索引(不会自动注入;需要时用 \`recall_taskdoc\` 显式读取):**`;
|
|
202
|
+
const body = entries.length > 0 ? entries : ['- (无)'];
|
|
203
|
+
const truncatedLine = extra.truncated
|
|
204
|
+
? `- ⚠️ 已截断:目录条目过多,仅展示前 64 项。`
|
|
205
|
+
: '';
|
|
206
|
+
return [header, ...body, ...(truncatedLine ? [truncatedLine] : [])].join('\n');
|
|
207
|
+
}
|
|
208
|
+
if (extra.kind === 'unavailable') {
|
|
209
|
+
return [
|
|
210
|
+
`**Extra sections index (NOT auto-injected):**`,
|
|
211
|
+
`- ⚠️ Unavailable: failed to scan extra section directories (reason=${extra.reason}).`,
|
|
212
|
+
`- If you believe an extra section exists, try: \`recall_taskdoc({\"category\":\"<category>\",\"selector\":\"<selector>\"})\``,
|
|
213
|
+
].join('\n');
|
|
214
|
+
}
|
|
215
|
+
const entries = [];
|
|
216
|
+
for (const cat of extra.categories) {
|
|
217
|
+
for (const selector of cat.selectors) {
|
|
218
|
+
entries.push(`- \`${cat.category}/${selector}.md\` (read: \`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`; update: \`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
const header = `**Extra sections index (NOT auto-injected; use \`recall_taskdoc\` when needed):**`;
|
|
222
|
+
const body = entries.length > 0 ? entries : ['- (none)'];
|
|
223
|
+
const truncatedLine = extra.truncated
|
|
224
|
+
? `- ⚠️ Truncated: too many entries; showing first 64.`
|
|
225
|
+
: '';
|
|
226
|
+
return [header, ...body, ...(truncatedLine ? [truncatedLine] : [])].join('\n');
|
|
227
|
+
})();
|
|
228
|
+
if (language === 'zh') {
|
|
229
|
+
const goalsZh = goalsStatus === 'present' ? '存在' : '缺失';
|
|
230
|
+
const constraintsZh = constraintsStatus === 'present' ? '存在' : '缺失';
|
|
231
|
+
const progressZh = progressStatus === 'present' ? '存在' : '缺失';
|
|
232
|
+
const bearZh = bearInMindStatus === 'absent' ? '无' : bearInMindStatus === 'invalid' ? '无效' : '存在';
|
|
233
|
+
const bearExtrasLine = pkg.bearInMind.kind === 'present' && pkg.bearInMind.extraEntries.length > 0
|
|
234
|
+
? `- \`bearinmind/\` 发现额外条目(不会被注入):${pkg.bearInMind.extraEntries
|
|
235
|
+
.map((n) => `\`${n}\``)
|
|
236
|
+
.join(', ')}`
|
|
237
|
+
: '';
|
|
238
|
+
const maintenanceLine = isSubdialog
|
|
239
|
+
? `- 子对话中不允许 \`change_mind\`:需要更新时请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供你已合并好的“分段全文替换稿”(用于替换对应分段全文;禁止覆盖/抹掉他人条目)。`
|
|
240
|
+
: `- 维护方式:用函数工具 \`change_mind\` 指定分段(顶层 selector: \`goals\` / \`constraints\` / \`progress\`;或 category+selector 指定额外章节)。每次调用会替换该章节全文:必须先对照上下文中注入的当前内容并做合并/压缩;可在同一轮中多次调用来一次更新多个章节(禁止覆盖/抹掉他人条目)。`;
|
|
241
|
+
return [
|
|
242
|
+
`**差遣牒结构(封装差遣牒 \`*.tsk/\`):**`,
|
|
243
|
+
`- 我们的差遣牒是一个 \`*.tsk/\` 目录:顶层 3 个分段(\`goals\` / \`constraints\` / \`progress\`)一定会自动注入;\`bearinmind/\`(固定白名单)可选自动注入;其他章节不会自动注入,仅以“目录索引”形式提示并需用 \`recall_taskdoc\` 显式读取。`,
|
|
244
|
+
`- 全队共享:三个分段对所有队友与子对话可见。更新时禁止覆盖/抹掉他人条目;建议为自己维护的条目标注责任人(如 \`- [owner:@<id>] ...\`)。`,
|
|
245
|
+
`- 差遣牒维护人(负责执行 \`change_mind\`):@${taskdocMaintainerId}`,
|
|
246
|
+
`- 重要:差遣牒内容已被系统以内联形式注入到上下文中(本轮生成视角下即为最新)。请直接基于上下文里的差遣牒回顾与决策,不要试图用通用文件工具读取 \`*.tsk/\` 下的文件(会被拒绝)。`,
|
|
247
|
+
maintenanceLine,
|
|
248
|
+
``,
|
|
249
|
+
`**分段状态:**`,
|
|
250
|
+
`- \`goals.md\`:${goalsZh}`,
|
|
251
|
+
`- \`constraints.md\`:${constraintsZh}`,
|
|
252
|
+
`- \`progress.md\`:${progressZh}`,
|
|
253
|
+
`- \`bearinmind/\`(可选注入):${bearZh}`,
|
|
254
|
+
...(bearExtrasLine ? [bearExtrasLine] : []),
|
|
255
|
+
``,
|
|
256
|
+
extraSectionsBlock,
|
|
257
|
+
``,
|
|
258
|
+
`若某个分段缺失,请用函数工具 \`change_mind\` 创建(不要用通用文件工具):`,
|
|
259
|
+
`- \`change_mind({\"selector\":\"goals\",\"content\":\"...\"})\``,
|
|
260
|
+
`- \`change_mind({\"selector\":\"constraints\",\"content\":\"...\"})\``,
|
|
261
|
+
`- \`change_mind({\"selector\":\"progress\",\"content\":\"...\"})\``,
|
|
262
|
+
...(violationsBlock ? ['', violationsBlock] : []),
|
|
263
|
+
].join('\n');
|
|
264
|
+
}
|
|
265
|
+
const maintenanceLine = isSubdialog
|
|
266
|
+
? `- Subdialogs cannot call \`change_mind\`: ask the Taskdoc maintainer @${taskdocMaintainerId} to apply updates, and provide a fully merged full-section replacement draft (do not overwrite/delete other contributors).`
|
|
267
|
+
: `- Maintenance: in this dialog, use the function tool \`change_mind\` to target one section (top-level selector: \`goals\` / \`constraints\` / \`progress\`, or category+selector for extra sections). Each call replaces the entire section, so always start from the current injected content and merge/compress. You may call \`change_mind\` multiple times in a single turn to update multiple sections (do not overwrite/delete other contributors).`;
|
|
268
|
+
const bearEn = bearInMindStatus === 'absent'
|
|
269
|
+
? 'absent'
|
|
270
|
+
: bearInMindStatus === 'invalid'
|
|
271
|
+
? 'invalid'
|
|
272
|
+
: 'present';
|
|
273
|
+
const bearExtrasLine = pkg.bearInMind.kind === 'present' && pkg.bearInMind.extraEntries.length > 0
|
|
274
|
+
? `- Extra entries detected under \`bearinmind/\` (NOT injected): ${pkg.bearInMind.extraEntries
|
|
275
|
+
.map((n) => `\`${n}\``)
|
|
276
|
+
.join(', ')}`
|
|
277
|
+
: '';
|
|
278
|
+
return [
|
|
279
|
+
`**Taskdoc Constitution (Encapsulated \`*.tsk/\`):**`,
|
|
280
|
+
`- Our Taskdoc is a \`*.tsk/\` directory: it always auto-injects the 3 top-level sections (\`goals\` / \`constraints\` / \`progress\`); it may auto-inject \`bearinmind/\` (fixed whitelist); any other sections are NOT auto-injected and must be read via \`recall_taskdoc\` (only an index is shown).`,
|
|
281
|
+
`- Team-shared: all 3 sections are visible to teammates and subdialogs. Do not overwrite/delete other contributors; add an owner marker for entries you maintain (e.g. \`- [owner:@<id>] ...\`).`,
|
|
282
|
+
`- Taskdoc maintainer (runs \`change_mind\`): @${taskdocMaintainerId}`,
|
|
283
|
+
`- Important: Taskdoc content is injected inline into the context (the latest as of this generation). Review the injected Taskdoc; do not try to read files under \`*.tsk/\` via general file tools (they will be rejected).`,
|
|
284
|
+
maintenanceLine,
|
|
285
|
+
``,
|
|
286
|
+
`**Sections:**`,
|
|
287
|
+
`- \`goals.md\`: ${goalsStatus}`,
|
|
288
|
+
`- \`constraints.md\`: ${constraintsStatus}`,
|
|
289
|
+
`- \`progress.md\`: ${progressStatus}`,
|
|
290
|
+
`- \`bearinmind/\` (optional injection): ${bearEn}`,
|
|
291
|
+
...(bearExtrasLine ? [bearExtrasLine] : []),
|
|
292
|
+
``,
|
|
293
|
+
extraSectionsBlock,
|
|
294
|
+
``,
|
|
295
|
+
`If any section is missing, create it with the function tool \`change_mind\` (never via general file tools):`,
|
|
296
|
+
`- \`change_mind({\"selector\":\"goals\",\"content\":\"...\"})\``,
|
|
297
|
+
`- \`change_mind({\"selector\":\"constraints\",\"content\":\"...\"})\``,
|
|
298
|
+
`- \`change_mind({\"selector\":\"progress\",\"content\":\"...\"})\``,
|
|
299
|
+
...(violationsBlock ? ['', violationsBlock] : []),
|
|
300
|
+
].join('\n');
|
|
301
|
+
})();
|
|
302
|
+
const effectiveDoc = (0, task_package_1.formatEffectiveTaskDocFromSections)(language, pkg.sections, pkg.bearInMind);
|
|
303
|
+
const bytes = Buffer.byteLength(effectiveDoc, 'utf8');
|
|
304
|
+
const maxSize = 100 * 1024; // 100KB
|
|
305
|
+
if (bytes > maxSize) {
|
|
306
|
+
if (language === 'zh') {
|
|
307
|
+
const howToUpdate = isSubdialog
|
|
308
|
+
? `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n子对话中不允许 \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供合并好的“分段全文替换稿”(禁止覆盖/抹掉他人条目)。`
|
|
309
|
+
: `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n请在当前对话中用函数工具 \`change_mind\` 来更新(每次调用会替换一个分段全文;你可以在同一轮中多次调用来批量更新;禁止覆盖/抹掉他人条目)。`;
|
|
310
|
+
return {
|
|
311
|
+
type: 'environment_msg',
|
|
312
|
+
role: 'user',
|
|
313
|
+
content: `**差遣牒:** \`${taskDocPath}\`
|
|
314
|
+
📦 **类型:** 封装差遣牒(\`*.tsk/\`)
|
|
315
|
+
📊 **大小:** ${(bytes / 1024).toFixed(1)} KB(过大,无法内联)
|
|
316
|
+
|
|
317
|
+
${statusBlock}
|
|
318
|
+
|
|
319
|
+
${howToUpdate}`,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
const howToUpdate = isSubdialog
|
|
323
|
+
? `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nSubdialogs cannot call \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with a fully merged full-section replacement draft (do not overwrite/delete other contributors).`
|
|
324
|
+
: `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nIn this dialog, use the function tool \`change_mind\` to update (each call replaces one section; you may call it multiple times in a single turn to batch updates; do not overwrite/delete other contributors).`;
|
|
325
|
+
return {
|
|
326
|
+
type: 'environment_msg',
|
|
327
|
+
role: 'user',
|
|
328
|
+
content: `**Taskdoc:** \`${taskDocPath}\`
|
|
329
|
+
📦 **Type:** Encapsulated Taskdoc (\`*.tsk/\`)
|
|
330
|
+
📊 **Size:** ${(bytes / 1024).toFixed(1)} KB (too large to inline)
|
|
331
|
+
|
|
332
|
+
${statusBlock}
|
|
333
|
+
|
|
334
|
+
${howToUpdate}`,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
if (language === 'zh') {
|
|
338
|
+
const footerLine = isSubdialog
|
|
339
|
+
? `*子对话中不允许 \`change_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供合并好的“分段全文替换稿”(禁止覆盖/抹掉他人条目)。*`
|
|
340
|
+
: `*在当前对话中用函数工具 \`change_mind\` 来替换分段(每次调用会替换一个分段全文;你可以在同一轮中多次调用来批量替换;更新时禁止覆盖他人条目)。*`;
|
|
341
|
+
return {
|
|
342
|
+
type: 'environment_msg',
|
|
343
|
+
role: 'user',
|
|
344
|
+
content: `**差遣牒:** \`${taskDocPath}\`
|
|
345
|
+
📦 **类型:** 封装差遣牒(\`*.tsk/\`)
|
|
346
|
+
📄 **大小:** ${bytes} bytes
|
|
347
|
+
|
|
348
|
+
${statusBlock}
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
${effectiveDoc}
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
${footerLine}
|
|
355
|
+
|
|
356
|
+
指令:不要对 \`*.tsk/\` 下的任何路径调用通用文件工具(\`read_file\`, \`overwrite_entire_file\`, \`prepare_file_range_edit\`, \`apply_file_modification\`, \`list_dir\`, \`rm_file\`, \`rm_dir\`)。差遣牒状态只能通过显式的差遣牒操作进行管理。
|
|
357
|
+
|
|
358
|
+
提示:以上“封装/禁用通用文件工具”的规则由系统强制执行,通常无需在差遣牒的 \`constraints\` 里重复书写(除非你要强调给人类读者)。`,
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
const footerLine = isSubdialog
|
|
362
|
+
? `*Subdialogs cannot call \`change_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with a fully merged full-section replacement draft (do not overwrite/delete other contributors).*`
|
|
363
|
+
: `*In this dialog, use the function tool \`change_mind\` to replace sections (each call replaces one entire section; you may call it multiple times in a single turn to batch replacements; do not overwrite other contributors).*`;
|
|
364
|
+
return {
|
|
365
|
+
type: 'environment_msg',
|
|
366
|
+
role: 'user',
|
|
367
|
+
content: `**Taskdoc:** \`${taskDocPath}\`
|
|
368
|
+
📦 **Type:** Encapsulated Taskdoc (\`*.tsk/\`)
|
|
369
|
+
📄 **Size:** ${bytes} bytes
|
|
370
|
+
|
|
371
|
+
${statusBlock}
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
${effectiveDoc}
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
${footerLine}
|
|
378
|
+
|
|
379
|
+
Directive: Do not invoke any general file tools (\`read_file\`, \`overwrite_entire_file\`, \`prepare_file_range_edit\`, \`apply_file_modification\`, \`list_dir\`, \`rm_file\`, \`rm_dir\`) on any path under \`*.tsk/\`. Task package state is managed only through explicit task-doc actions.
|
|
380
|
+
|
|
381
|
+
Note: This encapsulation rule is system-enforced and usually does not need to be duplicated in Taskdoc \`constraints\` (unless you want to emphasize it for human readers).`,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
if (language === 'zh') {
|
|
386
|
+
return {
|
|
387
|
+
type: 'environment_msg',
|
|
388
|
+
role: 'user',
|
|
389
|
+
content: `**差遣牒:** \`${taskDocPath}\`
|
|
390
|
+
❌ **错误:** ${error instanceof Error ? error.message : String(error)}`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
type: 'environment_msg',
|
|
395
|
+
role: 'user',
|
|
396
|
+
content: `**Taskdoc:** \`${taskDocPath}\`
|
|
397
|
+
❌ **Error:** ${error instanceof Error ? error.message : String(error)}`,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dominds",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "in-tree developer team with self-improving mindsets",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"private": false,
|
|
7
|
+
"bin": {
|
|
8
|
+
"dominds": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "dist/cli.js",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**/*",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"start": "echo 'Dominds backend runs via outer rtws dev-server.' && echo 'Dev: cd .. && ./dev-server.sh'",
|
|
18
|
+
"dev": "echo 'Dominds backend runs via outer rtws dev-server.' && echo 'Dev: cd .. && ./dev-server.sh'",
|
|
19
|
+
"test": "echo 'Dominds backend: Use lint:types for type checking.'",
|
|
20
|
+
"serve": "echo 'Dominds backend runs via outer rtws dev-server.' && echo 'Dev: cd .. && ./dev-server.sh'",
|
|
21
|
+
"prepare": "pnpm run build:deps",
|
|
22
|
+
"build": "pnpm run build:deps && pnpm run build:backend && pnpm run build:frontend",
|
|
23
|
+
"clean": "rm -rf ./dist",
|
|
24
|
+
"lint": "pnpm run lint:types && pnpm run format:check",
|
|
25
|
+
"lint:types": "tsc -p main/tsconfig.json --noEmit && tsc -p webapp/src/tsconfig.json --noEmit",
|
|
26
|
+
"format": "prettier --write \"{main,webapp/src,docs,tests}/**/*.{js,jsx,ts,tsx}\" && prettier --write \"{main,webapp/src,docs,tests}/**/*.{css,md,json,html}\"",
|
|
27
|
+
"format:check": "prettier --check \"{main,webapp/src,docs,tests}/**/*.{js,jsx,ts,tsx}\" && prettier --check \"{main,webapp/src,docs,tests}/**/*.{css,md,json,html}\"",
|
|
28
|
+
"build:deps": "pnpm -C codex-auth build",
|
|
29
|
+
"build:backend": "tsc -p main/tsconfig.json && mkdir -p dist/llm dist/minds && cp main/llm/defaults.yaml dist/llm/ && cp -r main/minds/builtin dist/minds/ && mkdir -p dist/tools && cp -r main/tools/prompts dist/tools/ && chmod +x ./dist/cli.js ./dist/cli/*.js 2>/dev/null",
|
|
30
|
+
"build:frontend": "pnpm -C webapp exec vite build"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/longrun-ai/dominds.git"
|
|
35
|
+
},
|
|
36
|
+
"keywords": [
|
|
37
|
+
"agentic",
|
|
38
|
+
"devops"
|
|
39
|
+
],
|
|
40
|
+
"author": "Compl Yue",
|
|
41
|
+
"license": "LGPL-3.0-or-later",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/longrun-ai/dominds/issues"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://github.com/longrun-ai/dominds#readme",
|
|
46
|
+
"packageManager": "pnpm@9.15.5",
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22 <23"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@anthropic-ai/sdk": "^0.67.0",
|
|
52
|
+
"@longrun-ai/codex-auth": "workspace:*",
|
|
53
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
54
|
+
"async-mutex": "^0.5.0",
|
|
55
|
+
"openai": "^6.4.0",
|
|
56
|
+
"ws": "^8.18.3",
|
|
57
|
+
"yaml": "^2.8.2",
|
|
58
|
+
"zod": "^4.3.5"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/node": "^22.0.0",
|
|
62
|
+
"@types/ws": "^8.18.1",
|
|
63
|
+
"esbuild": "^0.25.11",
|
|
64
|
+
"prettier": "^3.6.2",
|
|
65
|
+
"prettier-plugin-organize-imports": "^4.3.0",
|
|
66
|
+
"tsx": "^4.20.6",
|
|
67
|
+
"typescript": "^5.9.3"
|
|
68
|
+
}
|
|
69
|
+
}
|