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,70 @@
|
|
|
1
|
+
# team-mgmt: manage `.minds/` (prepare-first + single apply)
|
|
2
|
+
|
|
3
|
+
You have read/write access to `.minds/**`, but this toolset **only operates within the `.minds/` subtree** (it should not touch other workspace files).
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- Incremental edits (preferred): use `team_mgmt_prepare_*` to generate reviewable YAML + diff + `hunk_id`, then write via `team_mgmt_apply_file_modification({ "hunk_id": "<hunk_id>" })`.
|
|
8
|
+
- Parallelism constraint: multiple tool calls in one generation step may run in parallel; **prepare → apply must be two steps**.
|
|
9
|
+
- Exception (create): `team_mgmt_create_new_file` only creates a new file (empty content allowed). It does not do incremental edits and does not use prepare/apply; it refuses to overwrite existing files.
|
|
10
|
+
- Exception (overwrite): `team_mgmt_overwrite_entire_file` writes immediately (no prepare/apply). It requires `known_old_total_lines/known_old_total_bytes` guardrails; use `team_mgmt_read_file` to read `total_lines/size_bytes` from the YAML header.
|
|
11
|
+
- Normalization: each line ends with `\\n` (including the last line); the tool may add a trailing newline and report it in `normalized.*`.
|
|
12
|
+
|
|
13
|
+
## read_file output fields (important)
|
|
14
|
+
|
|
15
|
+
The YAML header from `team_mgmt_read_file` includes:
|
|
16
|
+
|
|
17
|
+
- `total_lines`: total line count (empty file is 0); can be used for `team_mgmt_overwrite_entire_file.known_old_total_lines`
|
|
18
|
+
- `size_bytes`: byte size (stat().size); can be used for `team_mgmt_overwrite_entire_file.known_old_total_bytes`
|
|
19
|
+
|
|
20
|
+
## Path rules (important)
|
|
21
|
+
|
|
22
|
+
- This toolset resolves `path` under `.minds/` (e.g. `team.yaml` resolves to `.minds/team.yaml`).
|
|
23
|
+
- Any path that resolves outside `.minds/` after normalization is rejected.
|
|
24
|
+
|
|
25
|
+
## Which tool to use
|
|
26
|
+
|
|
27
|
+
- Read/locate: `team_mgmt_read_file` / `team_mgmt_list_dir` / `team_mgmt_ripgrep_*`
|
|
28
|
+
- Create a new file (empty allowed): `team_mgmt_create_new_file({ path, content })`
|
|
29
|
+
- Small edits (line range): `team_mgmt_prepare_file_range_edit({ path, range, content, existing_hunk_id })`
|
|
30
|
+
- Append to EOF: `team_mgmt_prepare_file_append({ path, content, create, existing_hunk_id })`
|
|
31
|
+
- Anchor insertion: `team_mgmt_prepare_file_insert_after|team_mgmt_prepare_file_insert_before({ path, anchor, content, occurrence, match, existing_hunk_id })`
|
|
32
|
+
- Block replace between anchors: `team_mgmt_prepare_file_block_replace({ path, start_anchor, end_anchor, content, existing_hunk_id, occurrence, include_anchors, match, require_unique, strict })`
|
|
33
|
+
- Apply: `team_mgmt_apply_file_modification({ hunk_id })`
|
|
34
|
+
- After editing `.minds/team.yaml`: always run `team_mgmt_validate_team_cfg({})` and clear all Problems panel errors before proceeding.
|
|
35
|
+
|
|
36
|
+
> Note: some providers (e.g. Codex) require all function-tool parameter fields to be present (schema all required).
|
|
37
|
+
> If you use such a provider but semantically want “unset / default”, use sentinel values; otherwise most providers can omit optional fields:
|
|
38
|
+
>
|
|
39
|
+
> - `existing_hunk_id: ""` means generate a new hunk.
|
|
40
|
+
> - `occurrence: ""` or `0` means occurrence is not specified.
|
|
41
|
+
> - `match: ""` means default `contains` (note: `match` is the match mode).
|
|
42
|
+
|
|
43
|
+
## Apply semantics (context_match)
|
|
44
|
+
|
|
45
|
+
- `exact`: file matches the prepare context exactly.
|
|
46
|
+
- `fuzz`: file drifted but still safe to apply; the output includes `file_changed_since_preview` and digests for review.
|
|
47
|
+
- `rejected`: cannot locate uniquely or unsafe; re-prepare.
|
|
48
|
+
|
|
49
|
+
## Two-step template
|
|
50
|
+
|
|
51
|
+
1. Prepare:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
Call the function tool `team_mgmt_prepare_file_range_edit` with:
|
|
55
|
+
{ "path": "team.yaml", "range": "10~12", "content": "..." }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
2. Apply (must be a separate step):
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Call the function tool `team_mgmt_apply_file_modification` with:
|
|
62
|
+
{ "hunk_id": "<hunk_id>" }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Create an empty file example
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
Call the function tool `team_mgmt_create_new_file` with:
|
|
69
|
+
{ "path": "team/domains/new-domain.md", "content": "" }
|
|
70
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# team-mgmt:管理 `.minds/`(prepare-first + single apply)
|
|
2
|
+
|
|
3
|
+
你拥有对 `.minds/**` 的读写能力,但该 toolset **只允许操作 `.minds/` 子树**(不会也不应触碰工作区其他文件)。
|
|
4
|
+
|
|
5
|
+
## 总原则
|
|
6
|
+
|
|
7
|
+
- 增量编辑(推荐):用 `team_mgmt_prepare_*` 先生成可复核的 YAML + diff + `hunk_id`,再用 `team_mgmt_apply_file_modification({ "hunk_id": "<hunk_id>" })` 显式写入。
|
|
8
|
+
- 并行约束:同一轮生成中的多个工具调用可能并行执行;**prepare → apply 必须分两轮**。
|
|
9
|
+
- 例外(创建):`team_mgmt_create_new_file` 只负责创建新文件(允许空内容),不做增量编辑、不走 prepare/apply;若文件已存在会拒绝(避免误用覆盖写入语义)。
|
|
10
|
+
- 例外(整文件覆盖):`team_mgmt_overwrite_entire_file` 会直接写盘(不走 prepare/apply),必须提供 `known_old_total_lines/known_old_total_bytes` 作为对账护栏;建议先用 `team_mgmt_read_file` 从 YAML header 读取 `total_lines/size_bytes` 再填写。
|
|
11
|
+
- 规范化:写入遵循“每行以 `\\n` 结尾(含最后一行)”;必要时会补齐并通过输出字段呈现(例如 `normalized_trailing_newline_added` / `normalized.*`)。
|
|
12
|
+
|
|
13
|
+
## read_file 输出字段(重要)
|
|
14
|
+
|
|
15
|
+
`team_mgmt_read_file` 的 YAML header 会给出:
|
|
16
|
+
|
|
17
|
+
- `total_lines`:总行数(空文件为 0),可直接填入 `team_mgmt_overwrite_entire_file.known_old_total_lines`
|
|
18
|
+
- `size_bytes`:字节数(等于 stat().size),可直接填入 `team_mgmt_overwrite_entire_file.known_old_total_bytes`
|
|
19
|
+
|
|
20
|
+
## 路径规则(重要)
|
|
21
|
+
|
|
22
|
+
- 该 toolset 会把 `path` 解析到 `.minds/` 下:例如 `team.yaml` 会被解析为 `.minds/team.yaml`。
|
|
23
|
+
- 任何最终解析不在 `.minds/` 内的路径都会被拒绝。
|
|
24
|
+
|
|
25
|
+
## 该用哪个工具
|
|
26
|
+
|
|
27
|
+
- 读取定位:`team_mgmt_read_file` / `team_mgmt_list_dir` / `team_mgmt_ripgrep_*`
|
|
28
|
+
- 创建新文件(允许空内容):`team_mgmt_create_new_file({ path, content })`
|
|
29
|
+
- 小改动(行号范围):`team_mgmt_prepare_file_range_edit({ path, range, content, existing_hunk_id })`
|
|
30
|
+
- 末尾追加:`team_mgmt_prepare_file_append({ path, content, create, existing_hunk_id })`
|
|
31
|
+
- 锚点插入:`team_mgmt_prepare_file_insert_after|team_mgmt_prepare_file_insert_before({ path, anchor, content, occurrence, match, existing_hunk_id })`
|
|
32
|
+
- 双锚点块替换:`team_mgmt_prepare_file_block_replace({ path, start_anchor, end_anchor, content, existing_hunk_id, occurrence, include_anchors, match, require_unique, strict })`
|
|
33
|
+
- 应用写入:`team_mgmt_apply_file_modification({ hunk_id })`
|
|
34
|
+
- 修改完 `.minds/team.yaml`:务必运行 `team_mgmt_validate_team_cfg({})`,并清空 Problems 面板里的 team.yaml 错误后再继续。
|
|
35
|
+
|
|
36
|
+
> 注意:有些 provider(例如 Codex)会要求函数工具参数字段都“必填”(schema 全 required)。
|
|
37
|
+
> 如果你用的是这类 provider,但语义上想表达“未指定/使用默认”,再用哨兵值;否则(大多数 provider)省略可选字段即可:
|
|
38
|
+
>
|
|
39
|
+
> - `existing_hunk_id: ""`:不覆写旧规划(生成新 hunk)。
|
|
40
|
+
> - `occurrence: ""` 或 `0`:不指定 occurrence。
|
|
41
|
+
> - `match: ""`:默认 `contains`(注意:`match` 是 match mode,不是要匹配的文本/正则)。
|
|
42
|
+
|
|
43
|
+
## apply 语义(context_match)
|
|
44
|
+
|
|
45
|
+
- `exact`:文件与 prepare 时一致,或在原位匹配成功。
|
|
46
|
+
- `fuzz`:文件有漂移但仍能安全应用;此时输出会给出 `file_changed_since_preview` 与(planned/current)digest 便于复核。
|
|
47
|
+
- `rejected`:无法唯一定位/不安全,必须重新 prepare。
|
|
48
|
+
|
|
49
|
+
## 两步模板(复制即用)
|
|
50
|
+
|
|
51
|
+
1. Prepare:
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
Call the function tool `team_mgmt_prepare_file_range_edit` with:
|
|
55
|
+
{ "path": "team.yaml", "range": "10~12", "content": "..." }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
2. Apply(必须单独一轮):
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Call the function tool `team_mgmt_apply_file_modification` with:
|
|
62
|
+
{ "hunk_id": "<hunk_id>" }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 创建空文件示例
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
Call the function tool `team_mgmt_create_new_file` with:
|
|
69
|
+
{ "path": "team/domains/new-domain.md", "content": "" }
|
|
70
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# ws_mod: unified text-editing workflow (prepare-first + single apply)
|
|
2
|
+
|
|
3
|
+
You have read/write access to the workspace, but **all incremental text edits must be prepared first, then applied**: generate reviewable diff/evidence + `hunk_id`, then confirm the write.
|
|
4
|
+
|
|
5
|
+
## Principles
|
|
6
|
+
|
|
7
|
+
- Incremental edits: use `prepare_*` to generate an applyable hunk, then write via `apply_file_modification`.
|
|
8
|
+
- Legacy tools are removed (no compatibility layer): `append_file` / `insert_after` / `insert_before` / `replace_block` / `apply_block_replace`.
|
|
9
|
+
- Constraint: paths under `*.tsk/` are encapsulated Taskdocs; file tools cannot access them.
|
|
10
|
+
- Parallelism constraint: multiple tool calls in one generation step may run in parallel; **prepare → apply must be two steps**.
|
|
11
|
+
- Output is YAML + unified diff (scan-friendly) with `summary` + `evidence`/`apply_evidence`.
|
|
12
|
+
- Normalization: all writes follow “each line ends with `\n` (including the last line)”; missing EOF newline will be added and shown in `normalized.*`.
|
|
13
|
+
- Exception: `overwrite_entire_file` overwrites an existing file (writes immediately; does not use prepare/apply). It requires `known_old_total_lines/known_old_total_bytes` guardrails (read `total_lines/size_bytes` from the YAML header of `read_file`). It also rejects diff/patch-like content by default unless `content_format=diff|patch`. Use it only for “small content (<100 lines)” or “intentional reset/generated output”; otherwise prefer prepare/apply.
|
|
14
|
+
- Exception: `create_new_file` only creates a new file (empty content allowed). It does not do incremental edits and does not use prepare/apply; it refuses to overwrite existing files.
|
|
15
|
+
|
|
16
|
+
## Which `prepare_*` to use
|
|
17
|
+
|
|
18
|
+
- Precise range edits: `prepare_file_range_edit({ path, range, content, existing_hunk_id })`
|
|
19
|
+
- Append to EOF: `prepare_file_append({ path, content, create, existing_hunk_id })`
|
|
20
|
+
- Anchor insertion: `prepare_file_insert_after|prepare_file_insert_before({ path, anchor, content, occurrence, match, existing_hunk_id })`
|
|
21
|
+
- Block replace between anchors: `prepare_file_block_replace({ path, start_anchor, end_anchor, content, existing_hunk_id, occurrence, include_anchors, match, require_unique, strict })`
|
|
22
|
+
- Create a new file (empty allowed): `create_new_file({ path, content })`
|
|
23
|
+
|
|
24
|
+
> Note: some providers (e.g. Codex) require all function-tool parameters to be present (schema all required).
|
|
25
|
+
> If you use such a provider but semantically want “unset / default”, use sentinel values; otherwise most providers can omit optional fields:
|
|
26
|
+
>
|
|
27
|
+
> - `existing_hunk_id: ""` means generate a new hunk (do not overwrite an existing plan).
|
|
28
|
+
> - `occurrence: ""` or `0` means occurrence is not specified.
|
|
29
|
+
> - `match: ""` means default `contains` (note: `match` is the match mode, not the text to match).
|
|
30
|
+
|
|
31
|
+
## hunk id rules (important)
|
|
32
|
+
|
|
33
|
+
- `prepare_*` generates `hunk_id` (TTL = 1 hour); apply can only use an unexpired hunk.
|
|
34
|
+
- Expired/unused hunks have no side effects; they are cleaned up automatically.
|
|
35
|
+
- Some prepare tools accept `existing_hunk_id` to overwrite the same prepared hunk; **custom new ids are not supported**.
|
|
36
|
+
|
|
37
|
+
## Apply semantics (context_match)
|
|
38
|
+
|
|
39
|
+
- `exact`: file matches the prepared context exactly.
|
|
40
|
+
- `fuzz`: file drifted but target can still be located safely.
|
|
41
|
+
- `rejected`: target is not unique or unsafe; re-prepare.
|
|
42
|
+
|
|
43
|
+
## Two-step template
|
|
44
|
+
|
|
45
|
+
1. Prepare (returns `hunk_id` + unified diff):
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
Call the function tool `prepare_file_insert_after` with:
|
|
49
|
+
{ "path": "docs/spec.md", "anchor": "## Configuration", "content": "### Defaults\\n- provider: codex\\n" }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
2. Apply (must be a separate step):
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Call the function tool `apply_file_modification` with:
|
|
56
|
+
{ "hunk_id": "<hunk_id>" }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Examples
|
|
60
|
+
|
|
61
|
+
- Append to EOF:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
Call the function tool `prepare_file_append` with:
|
|
65
|
+
{ "path": "notes/prompt.md", "content": "## Tools\\n- Use prepare_* + apply_file_modification for incremental edits.\\n" }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- Line range replacement (`content` can be empty to delete the range):
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Call the function tool `prepare_file_range_edit` with:
|
|
72
|
+
{ "path": "README.md", "range": "10~12", "content": "New line 10\\nNew line 11\\n" }
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- Block replace:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
Call the function tool `prepare_file_block_replace` with:
|
|
79
|
+
{ "path": "docs/spec.md", "start_anchor": "## Start", "end_anchor": "## End", "content": "NEW BLOCK LINE 1\\nNEW BLOCK LINE 2\\n" }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Common failures and next steps
|
|
83
|
+
|
|
84
|
+
- `ANCHOR_AMBIGUOUS`: anchor appears multiple times and occurrence was not specified; set `occurrence` or use a range (`prepare_file_range_edit`).
|
|
85
|
+
- `ANCHOR_NOT_FOUND`: anchor not found; locate via `read_file` / `ripgrep_snippets`.
|
|
86
|
+
- apply `context_match: rejected`: file drift made the target non-unique; re-prepare (narrow range or add more context).
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# ws_mod:文本编辑统一工作流(prepare-first + single apply)
|
|
2
|
+
|
|
3
|
+
你拥有工作区读写能力,但**所有增量文本编辑必须先 prepare,再 apply**:先生成可复核的 diff/evidence + `hunk_id`,再显式确认写入。
|
|
4
|
+
|
|
5
|
+
## 总原则
|
|
6
|
+
|
|
7
|
+
- 增量编辑:通过 `prepare_*` 生成可 apply 的 hunk;然后用 `apply_file_modification` 写入。
|
|
8
|
+
- 旧工具已移除(无兼容层):`append_file` / `insert_after` / `insert_before` / `replace_block` / `apply_block_replace`。
|
|
9
|
+
- 约束:`*.tsk/` 下的路径属于封装差遣牒,文件工具不可访问。
|
|
10
|
+
- 并行约束:同一轮生成中的多个工具调用可能并行执行;**prepare → apply 必须分两轮**(除非未来有顺序编排器)。
|
|
11
|
+
- 输出以 YAML + unified diff 为主:低注意力可复核(`summary` + `evidence`/`apply_evidence`)。
|
|
12
|
+
- 规范化:所有写入遵循“每行以 `\n` 结尾(含最后一行)”;EOF 换行会被补齐并通过 `normalized.*` 字段呈现。
|
|
13
|
+
- 例外:`overwrite_entire_file` 是“整文件覆盖写入”的函数工具(会直接写盘,不走 prepare/apply)。它要求提供 `known_old_total_lines/known_old_total_bytes` 作为对账护栏(建议从 `read_file` 的 YAML header 读取 `total_lines/size_bytes`),并且在正文疑似 diff/patch 且未显式声明 `content_format=diff|patch` 时默认拒绝。仅用于“新内容很小(例如 <100 行)”或“明确为重置/生成物”的场景;其他情况优先 prepare/apply。
|
|
14
|
+
- 复制参数建议:对账参数请直接用 `read_file` 的 `total_lines/size_bytes`。
|
|
15
|
+
- 例外:`create_new_file` 只负责“创建新文件”(允许空内容),不做增量编辑、不走 prepare/apply;若文件已存在会拒绝(避免误用覆盖写入语义)。
|
|
16
|
+
|
|
17
|
+
## 该用哪个 `prepare_*`
|
|
18
|
+
|
|
19
|
+
- 精确范围改动(行号范围):`prepare_file_range_edit({ path, range, content, existing_hunk_id })`
|
|
20
|
+
- 末尾追加:`prepare_file_append({ path, content, create, existing_hunk_id })`
|
|
21
|
+
- 锚点插入:`prepare_file_insert_after|prepare_file_insert_before({ path, anchor, content, occurrence, match, existing_hunk_id })`
|
|
22
|
+
- 双锚点块替换:`prepare_file_block_replace({ path, start_anchor, end_anchor, content, existing_hunk_id, occurrence, include_anchors, match, require_unique, strict })`
|
|
23
|
+
- 创建新文件(允许空内容):`create_new_file({ path, content })`
|
|
24
|
+
|
|
25
|
+
> 注意:有些 provider(例如 Codex)会要求所有函数工具参数字段都“必填”(schema 全 required)。
|
|
26
|
+
> 如果你用的是这类 provider,但语义上想表达“未指定/使用默认”,再用哨兵值;否则(大多数 provider)省略可选字段即可:
|
|
27
|
+
>
|
|
28
|
+
> - `existing_hunk_id: ""` 表示不覆写旧规划(生成新 hunk)。
|
|
29
|
+
> - `occurrence: ""` 或 `0` 表示不指定 occurrence(当候选不唯一时会被要求显式指定)。
|
|
30
|
+
> - `match: ""` 表示默认 `contains`(注意:`match` 是 match mode,不是要匹配的文本/正则)。
|
|
31
|
+
|
|
32
|
+
## hunk id 规则(重要)
|
|
33
|
+
|
|
34
|
+
- `prepare_*` 会生成 `hunk_id`(TTL=1 小时);apply 只能用仍然存在的 hunk。
|
|
35
|
+
- 过期/未使用的 hunk **不会产生任何副作用**,会在运行时自动清理;你只需要关注“自己最后一次想 apply 的那个 hunk_id”。
|
|
36
|
+
- 部分 prepare 工具支持 `existing_hunk_id` 作为“覆写同一 prepare”的方式;**不支持自定义新 id**。
|
|
37
|
+
|
|
38
|
+
## apply 语义(context_match)
|
|
39
|
+
|
|
40
|
+
- `exact`:文件内容与 prepare 时一致或在原位匹配成功。
|
|
41
|
+
- `fuzz`:文件有漂移,但仍能唯一定位目标并安全应用。
|
|
42
|
+
- `rejected`:无法唯一定位或不安全;必须重新 prepare。
|
|
43
|
+
|
|
44
|
+
## 两步模板(复制即用)
|
|
45
|
+
|
|
46
|
+
1. Prepare(返回 `hunk_id` + unified diff):
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
Call the function tool `prepare_file_insert_after` with:
|
|
50
|
+
{ "path": "docs/spec.md", "anchor": "## Configuration", "content": "### Defaults\\n- provider: codex\\n" }
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
2. Apply(必须单独一轮/单独一步):
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
Call the function tool `apply_file_modification` with:
|
|
57
|
+
{ "hunk_id": "<hunk_id>" }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 示例
|
|
61
|
+
|
|
62
|
+
- 末尾追加:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
Call the function tool `prepare_file_append` with:
|
|
66
|
+
{ "path": "notes/prompt.md", "content": "## Tools\\n- Use prepare_* + apply_file_modification for incremental edits.\\n" }
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
- 行号范围替换(`content` 可为空字符串表示删除):
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
Call the function tool `prepare_file_range_edit` with:
|
|
73
|
+
{ "path": "README.md", "range": "10~12", "content": "New line 10\\nNew line 11\\n" }
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- 双锚点块替换:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Call the function tool `prepare_file_block_replace` with:
|
|
80
|
+
{ "path": "docs/spec.md", "start_anchor": "## Start", "end_anchor": "## End", "content": "NEW BLOCK LINE 1\\nNEW BLOCK LINE 2\\n" }
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 常见失败与下一步
|
|
84
|
+
|
|
85
|
+
- `ANCHOR_AMBIGUOUS`:锚点多次出现且未指定 occurrence;请指定 occurrence 或改用行号范围(`prepare_file_range_edit`)。
|
|
86
|
+
- `ANCHOR_NOT_FOUND`:锚点未找到;必要时先 `read_file` 或用 `ripgrep_snippets` 定位。
|
|
87
|
+
- apply `context_match: rejected`:文件变化导致无法唯一定位;请重新 prepare(缩小范围或增加上下文)。
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createToolsRegistrySnapshot = createToolsRegistrySnapshot;
|
|
4
|
+
const time_1 = require("../shared/utils/time");
|
|
5
|
+
const registry_1 = require("./registry");
|
|
6
|
+
function createToolsRegistrySnapshot() {
|
|
7
|
+
const toolsets = [];
|
|
8
|
+
for (const [toolsetName, tools] of registry_1.toolsetsRegistry.entries()) {
|
|
9
|
+
const meta = (0, registry_1.getToolsetMeta)(toolsetName);
|
|
10
|
+
const descriptionI18n = meta ? meta.descriptionI18n : undefined;
|
|
11
|
+
const source = meta?.source ?? 'dominds';
|
|
12
|
+
toolsets.push({
|
|
13
|
+
name: toolsetName,
|
|
14
|
+
source,
|
|
15
|
+
descriptionI18n,
|
|
16
|
+
tools: tools.map(toolToInfo),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
toolsets,
|
|
21
|
+
timestamp: (0, time_1.formatUnifiedTimestamp)(new Date()),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function toolToInfo(tool) {
|
|
25
|
+
return {
|
|
26
|
+
name: tool.name,
|
|
27
|
+
kind: 'func',
|
|
28
|
+
description: tool.description,
|
|
29
|
+
descriptionI18n: tool.descriptionI18n,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.reminderOwnersRegistry = exports.toolsetMetaRegistry = exports.toolsetsRegistry = exports.toolsRegistry = void 0;
|
|
7
|
+
exports.registerTool = registerTool;
|
|
8
|
+
exports.unregisterTool = unregisterTool;
|
|
9
|
+
exports.getTool = getTool;
|
|
10
|
+
exports.listTools = listTools;
|
|
11
|
+
exports.registerToolset = registerToolset;
|
|
12
|
+
exports.unregisterToolset = unregisterToolset;
|
|
13
|
+
exports.setToolsetMeta = setToolsetMeta;
|
|
14
|
+
exports.getToolsetMeta = getToolsetMeta;
|
|
15
|
+
exports.getToolsetPromptI18n = getToolsetPromptI18n;
|
|
16
|
+
exports.getToolset = getToolset;
|
|
17
|
+
exports.listToolsets = listToolsets;
|
|
18
|
+
exports.registerReminderOwner = registerReminderOwner;
|
|
19
|
+
exports.unregisterReminderOwner = unregisterReminderOwner;
|
|
20
|
+
exports.getReminderOwner = getReminderOwner;
|
|
21
|
+
exports.listReminderOwners = listReminderOwners;
|
|
22
|
+
/**
|
|
23
|
+
* Module: tools/registry
|
|
24
|
+
*
|
|
25
|
+
* Global registries for tools and toolsets with helpers and built-in initialization.
|
|
26
|
+
*/
|
|
27
|
+
const fs_1 = __importDefault(require("fs"));
|
|
28
|
+
const path_1 = __importDefault(require("path"));
|
|
29
|
+
// Global public registry of tools, shared across the application
|
|
30
|
+
exports.toolsRegistry = new Map();
|
|
31
|
+
// Global public registry of toolsets, shared across the application
|
|
32
|
+
exports.toolsetsRegistry = new Map();
|
|
33
|
+
exports.toolsetMetaRegistry = new Map();
|
|
34
|
+
// Global public registry of ReminderOwner instances, shared across the application
|
|
35
|
+
exports.reminderOwnersRegistry = new Map();
|
|
36
|
+
// Register a tool object by name
|
|
37
|
+
function registerTool(tool) {
|
|
38
|
+
exports.toolsRegistry.set(tool.name, tool);
|
|
39
|
+
}
|
|
40
|
+
// Unregister a tool by name
|
|
41
|
+
function unregisterTool(name) {
|
|
42
|
+
exports.toolsRegistry.delete(name);
|
|
43
|
+
}
|
|
44
|
+
// Retrieve a tool by name
|
|
45
|
+
function getTool(name) {
|
|
46
|
+
return exports.toolsRegistry.get(name);
|
|
47
|
+
}
|
|
48
|
+
// List all registered tools
|
|
49
|
+
function listTools() {
|
|
50
|
+
return Array.from(exports.toolsRegistry.values());
|
|
51
|
+
}
|
|
52
|
+
// Register a toolset by name with a list of tool objects
|
|
53
|
+
function registerToolset(name, tools) {
|
|
54
|
+
exports.toolsetsRegistry.set(name, tools);
|
|
55
|
+
}
|
|
56
|
+
// Unregister a toolset by name
|
|
57
|
+
function unregisterToolset(name) {
|
|
58
|
+
exports.toolsetsRegistry.delete(name);
|
|
59
|
+
exports.toolsetMetaRegistry.delete(name);
|
|
60
|
+
}
|
|
61
|
+
function setToolsetMeta(name, meta) {
|
|
62
|
+
exports.toolsetMetaRegistry.set(name, meta);
|
|
63
|
+
}
|
|
64
|
+
function getToolsetMeta(name) {
|
|
65
|
+
return exports.toolsetMetaRegistry.get(name);
|
|
66
|
+
}
|
|
67
|
+
function getToolsetPromptI18n(name) {
|
|
68
|
+
const meta = getToolsetMeta(name);
|
|
69
|
+
if (!meta)
|
|
70
|
+
return undefined;
|
|
71
|
+
if (meta.promptI18n)
|
|
72
|
+
return meta.promptI18n;
|
|
73
|
+
if (!meta.promptFilesI18n)
|
|
74
|
+
return undefined;
|
|
75
|
+
const enPath = meta.promptFilesI18n.en;
|
|
76
|
+
const zhPath = meta.promptFilesI18n.zh;
|
|
77
|
+
if (!enPath || !zhPath)
|
|
78
|
+
return undefined;
|
|
79
|
+
const tryRead = (relPath) => {
|
|
80
|
+
const abs = path_1.default.resolve(__dirname, relPath);
|
|
81
|
+
try {
|
|
82
|
+
return fs_1.default.readFileSync(abs, 'utf8');
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return '';
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const en = tryRead(enPath);
|
|
89
|
+
const zh = tryRead(zhPath);
|
|
90
|
+
if (en.trim() === '' || zh.trim() === '')
|
|
91
|
+
return undefined;
|
|
92
|
+
return { en, zh };
|
|
93
|
+
}
|
|
94
|
+
// Retrieve a toolset by name (returns array of tool objects)
|
|
95
|
+
function getToolset(name) {
|
|
96
|
+
return exports.toolsetsRegistry.get(name);
|
|
97
|
+
}
|
|
98
|
+
// List all registered toolsets
|
|
99
|
+
function listToolsets() {
|
|
100
|
+
return Object.fromEntries(exports.toolsetsRegistry.entries());
|
|
101
|
+
}
|
|
102
|
+
// Register a ReminderOwner by unique name
|
|
103
|
+
function registerReminderOwner(owner, name) {
|
|
104
|
+
const ownerName = name || owner.name;
|
|
105
|
+
if (!ownerName) {
|
|
106
|
+
throw new Error('ReminderOwner must have a name property or name must be provided explicitly');
|
|
107
|
+
}
|
|
108
|
+
exports.reminderOwnersRegistry.set(ownerName, owner);
|
|
109
|
+
}
|
|
110
|
+
// Unregister a ReminderOwner by name
|
|
111
|
+
function unregisterReminderOwner(name) {
|
|
112
|
+
exports.reminderOwnersRegistry.delete(name);
|
|
113
|
+
}
|
|
114
|
+
// Retrieve a ReminderOwner by name
|
|
115
|
+
function getReminderOwner(name) {
|
|
116
|
+
return exports.reminderOwnersRegistry.get(name);
|
|
117
|
+
}
|
|
118
|
+
// List all registered ReminderOwners
|
|
119
|
+
function listReminderOwners() {
|
|
120
|
+
return new Map(exports.reminderOwnersRegistry);
|
|
121
|
+
}
|