dominds 1.4.2 → 1.5.1
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/README.md +24 -0
- package/README.zh.md +24 -0
- package/dist/apps/app-json.js +38 -3
- package/dist/apps/dialog-run-controls.js +4 -0
- package/dist/apps/enabled-apps.js +8 -1
- package/dist/apps/installed-file.js +207 -0
- package/dist/apps/run-app-json.js +6 -6
- package/dist/apps/runtime-port.js +91 -0
- package/dist/apps/runtime.js +316 -68
- package/dist/apps-host/client.js +153 -3
- package/dist/apps-host/host.js +339 -2
- package/dist/apps-host/ipc-types.js +215 -30
- package/dist/cli/install.js +21 -1
- package/dist/dialog-fork.js +608 -0
- package/dist/dialog.js +2 -2
- package/dist/docs/app-constitution.md +153 -2
- package/dist/docs/app-constitution.zh.md +153 -2
- package/dist/docs/dialog-persistence.md +31 -0
- package/dist/docs/dialog-persistence.zh.md +31 -0
- package/dist/docs/dialog-system.md +29 -0
- package/dist/docs/dialog-system.zh.md +29 -0
- package/dist/docs/kernel-app-architecture.md +286 -0
- package/dist/docs/kernel-app-architecture.zh.md +285 -0
- package/dist/llm/defaults.yaml +16 -0
- package/dist/llm/driver-entry.js +28 -0
- package/dist/llm/driver-v2/context-health.js +121 -0
- package/dist/llm/driver-v2/context.js +56 -0
- package/dist/llm/driver-v2/core.js +1545 -0
- package/dist/llm/driver-v2/index.js +26 -0
- package/dist/llm/driver-v2/orchestrator.js +158 -0
- package/dist/llm/driver-v2/policy.js +129 -0
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2/round.js +366 -0
- package/dist/llm/driver-v2/runtime-utils.js +365 -0
- package/dist/llm/driver-v2/saying-events.js +20 -0
- package/dist/llm/driver-v2/subdialog-txn.js +42 -0
- package/dist/llm/driver-v2/supdialog-response.js +400 -0
- package/dist/llm/driver-v2/tellask-bridge.js +1148 -0
- package/dist/llm/driver-v2/types.js +10 -0
- package/dist/llm/driver-v2-ref-only/context-health.js +121 -0
- package/dist/llm/driver-v2-ref-only/context.js +17 -0
- package/dist/llm/driver-v2-ref-only/core.js +1710 -0
- package/dist/llm/driver-v2-ref-only/index.js +26 -0
- package/dist/llm/driver-v2-ref-only/orchestrator.js +158 -0
- package/dist/llm/driver-v2-ref-only/policy.js +129 -0
- package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +73 -0
- package/dist/llm/driver-v2-ref-only/round.js +366 -0
- package/dist/llm/driver-v2-ref-only/runtime-utils.js +473 -0
- package/dist/llm/driver-v2-ref-only/saying-events.js +18 -0
- package/dist/llm/driver-v2-ref-only/subdialog-txn.js +42 -0
- package/dist/llm/driver-v2-ref-only/supdialog-response.js +453 -0
- package/dist/llm/driver-v2-ref-only/tellask-bridge.js +1178 -0
- package/dist/llm/driver-v2-ref-only/types.js +10 -0
- package/dist/llm/gen/anthropic.js +68 -15
- package/dist/llm/gen/codex.js +59 -10
- package/dist/llm/gen/openai-compatible.js +38 -9
- package/dist/llm/gen/openai.js +58 -11
- package/dist/llm/gen/tool-output-limit.js +50 -0
- package/dist/llm/kernel-driver/subdialog.js +8 -1
- package/dist/llm/kernel-driver/tellask-special.js +18 -3
- package/dist/minds/load.js +7 -0
- package/dist/persistence.js +190 -28
- package/dist/priming.js +20 -1
- package/dist/server/api-routes.js +82 -0
- package/dist/server/setup-routes.js +15 -0
- package/dist/static/assets/{_basePickBy-B2o4z1Hf.js → _basePickBy-C-nynT9f.js} +3 -3
- package/dist/static/assets/{_basePickBy-B2o4z1Hf.js.map → _basePickBy-C-nynT9f.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-CLmcxjdl.js → _baseUniq-CiHd-eVT.js} +2 -2
- package/dist/static/assets/{_baseUniq-CLmcxjdl.js.map → _baseUniq-CiHd-eVT.js.map} +1 -1
- package/dist/static/assets/{arc-CymD_KN7.js → arc-_OJzDWy1.js} +2 -2
- package/dist/static/assets/{arc-CymD_KN7.js.map → arc-_OJzDWy1.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DJQfSJUH.js → architectureDiagram-VXUJARFQ-CDEG85ub.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-DJQfSJUH.js.map → architectureDiagram-VXUJARFQ-CDEG85ub.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-pHVz60D0.js → blockDiagram-VD42YOAC-1LzKVc5t.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-pHVz60D0.js.map → blockDiagram-VD42YOAC-1LzKVc5t.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-B0WnCfAT.js → c4Diagram-YG6GDRKO-BzYnVyvY.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-B0WnCfAT.js.map → c4Diagram-YG6GDRKO-BzYnVyvY.js.map} +1 -1
- package/dist/static/assets/{channel-CX9BlKil.js → channel-VAEDAk9T.js} +2 -2
- package/dist/static/assets/{channel-CX9BlKil.js.map → channel-VAEDAk9T.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-lXArRj3o.js → chunk-4BX2VUAB-D0r2u3mX.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-lXArRj3o.js.map → chunk-4BX2VUAB-D0r2u3mX.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-CdqwynH9.js → chunk-55IACEB6-Dkl8Xw7i.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-CdqwynH9.js.map → chunk-55IACEB6-Dkl8Xw7i.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-Y-uXcJst.js → chunk-B4BG7PRW-9sxsI8ns.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-Y-uXcJst.js.map → chunk-B4BG7PRW-9sxsI8ns.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-C5xSbRST.js → chunk-DI55MBZ5-AHaqkaLl.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-C5xSbRST.js.map → chunk-DI55MBZ5-AHaqkaLl.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-5uefwCjI.js → chunk-FMBD7UC4-NWDLDixD.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-5uefwCjI.js.map → chunk-FMBD7UC4-NWDLDixD.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-DzWVcvpI.js → chunk-QN33PNHL-C2KeUqle.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-DzWVcvpI.js.map → chunk-QN33PNHL-C2KeUqle.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-BrrvAZdP.js → chunk-QZHKN3VN-B6Eoxo5L.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-BrrvAZdP.js.map → chunk-QZHKN3VN-B6Eoxo5L.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-DyKOlPTY.js → chunk-TZMSLE5B-Bc-VyQon.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-DyKOlPTY.js.map → chunk-TZMSLE5B-Bc-VyQon.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-FCrnlCWC.js → classDiagram-2ON5EDUG-DmPfsN1H.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-FCrnlCWC.js.map → classDiagram-2ON5EDUG-DmPfsN1H.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-FCrnlCWC.js → classDiagram-v2-WZHVMYZB-DmPfsN1H.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-FCrnlCWC.js.map → classDiagram-v2-WZHVMYZB-DmPfsN1H.js.map} +1 -1
- package/dist/static/assets/{clone-BlI81KqZ.js → clone-B1R4pLTW.js} +2 -2
- package/dist/static/assets/{clone-BlI81KqZ.js.map → clone-B1R4pLTW.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-yM7S2atz.js → cose-bilkent-S5V4N54A-CxY__sKv.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-yM7S2atz.js.map → cose-bilkent-S5V4N54A-CxY__sKv.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-BcweuZHt.js → dagre-6UL2VRFP-CPkB5tQ0.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-BcweuZHt.js.map → dagre-6UL2VRFP-CPkB5tQ0.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-D4-QwLW1.js → diagram-PSM6KHXK-C6kCVpCz.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-D4-QwLW1.js.map → diagram-PSM6KHXK-C6kCVpCz.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-BVbuejJn.js → diagram-QEK2KX5R-BWF6htf1.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-BVbuejJn.js.map → diagram-QEK2KX5R-BWF6htf1.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-pB6N6Tq_.js → diagram-S2PKOQOG-lKGJH6O9.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-pB6N6Tq_.js.map → diagram-S2PKOQOG-lKGJH6O9.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLKmthuw.js → erDiagram-Q2GNP2WA-DJ3YaFob.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-DLKmthuw.js.map → erDiagram-Q2GNP2WA-DJ3YaFob.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-BsBhWukh.js → flowDiagram-NV44I4VS-h3eQwA3O.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-BsBhWukh.js.map → flowDiagram-NV44I4VS-h3eQwA3O.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-Debz-J-C.js → ganttDiagram-JELNMOA3-BCbsDOF_.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-Debz-J-C.js.map → ganttDiagram-JELNMOA3-BCbsDOF_.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BnAPFBGR.js → gitGraphDiagram-V2S2FVAM-D0kX6h-T.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-BnAPFBGR.js.map → gitGraphDiagram-V2S2FVAM-D0kX6h-T.js.map} +1 -1
- package/dist/static/assets/{graph-DbzWiBNK.js → graph-CZIEXp3A.js} +3 -3
- package/dist/static/assets/{graph-DbzWiBNK.js.map → graph-CZIEXp3A.js.map} +1 -1
- package/dist/static/assets/{index-B-8J28g7.js → index-vIzCTZQE.js} +156 -35
- package/dist/static/assets/index-vIzCTZQE.js.map +1 -0
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CZ5hWoxV.js → infoDiagram-HS3SLOUP-DUNbcXxv.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CZ5hWoxV.js.map → infoDiagram-HS3SLOUP-DUNbcXxv.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CKN3oSxk.js → journeyDiagram-XKPGCS4Q-Cg_VhiqB.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-CKN3oSxk.js.map → journeyDiagram-XKPGCS4Q-Cg_VhiqB.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BQCMklfJ.js → kanban-definition-3W4ZIXB7-DMVCZVFE.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BQCMklfJ.js.map → kanban-definition-3W4ZIXB7-DMVCZVFE.js.map} +1 -1
- package/dist/static/assets/{layout-C5B58szc.js → layout-DoKTmwlM.js} +5 -5
- package/dist/static/assets/{layout-C5B58szc.js.map → layout-DoKTmwlM.js.map} +1 -1
- package/dist/static/assets/{linear-_32fut6G.js → linear-DFVlPfX6.js} +2 -2
- package/dist/static/assets/{linear-_32fut6G.js.map → linear-DFVlPfX6.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C_goMzjx.js → mindmap-definition-VGOIOE7T-l5K7agVV.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-C_goMzjx.js.map → mindmap-definition-VGOIOE7T-l5K7agVV.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BQ2n0cOB.js → pieDiagram-ADFJNKIX-BfQzSE-A.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-BQ2n0cOB.js.map → pieDiagram-ADFJNKIX-BfQzSE-A.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BLg7_neg.js → quadrantDiagram-AYHSOK5B-CJWvA5jc.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-BLg7_neg.js.map → quadrantDiagram-AYHSOK5B-CJWvA5jc.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DwkJt0zi.js → requirementDiagram-UZGBJVZJ-CeBbmqBK.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DwkJt0zi.js.map → requirementDiagram-UZGBJVZJ-CeBbmqBK.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DmxmatUB.js → sankeyDiagram-TZEHDZUN-JeUBTDxx.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-DmxmatUB.js.map → sankeyDiagram-TZEHDZUN-JeUBTDxx.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KHU_eApU.js → sequenceDiagram-WL72ISMW-Bd_7Pgc5.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KHU_eApU.js.map → sequenceDiagram-WL72ISMW-Bd_7Pgc5.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-B3DBCxAL.js → stateDiagram-FKZM4ZOC-D_WyM3K1.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-B3DBCxAL.js.map → stateDiagram-FKZM4ZOC-D_WyM3K1.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-C-uIk7gh.js → stateDiagram-v2-4FDKWEC3-Q_yh26yx.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-C-uIk7gh.js.map → stateDiagram-v2-4FDKWEC3-Q_yh26yx.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-SysEcQCC.js → timeline-definition-IT6M3QCI-Ca8mCFDg.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-SysEcQCC.js.map → timeline-definition-IT6M3QCI-Ca8mCFDg.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-d0AbKEc4.js → treemap-GDKQZRPO-CyBvKC8o.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-d0AbKEc4.js.map → treemap-GDKQZRPO-CyBvKC8o.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CmSQMxUh.js → xychartDiagram-PRI3JC2R-DY0BLEdj.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-CmSQMxUh.js.map → xychartDiagram-PRI3JC2R-DY0BLEdj.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/team.js +33 -4
- package/dist/tools/app-reminders.js +280 -0
- package/dist/tools/prompts/memory/en/errors.md +155 -0
- package/dist/tools/prompts/memory/en/index.md +47 -0
- package/dist/tools/prompts/memory/en/principles.md +79 -0
- package/dist/tools/prompts/memory/en/scenarios.md +174 -0
- package/dist/tools/prompts/memory/en/tools.md +154 -0
- package/dist/tools/prompts/memory/zh/errors.md +155 -0
- package/dist/tools/prompts/memory/zh/index.md +47 -0
- package/dist/tools/prompts/memory/zh/principles.md +79 -0
- package/dist/tools/prompts/memory/zh/scenarios.md +174 -0
- package/dist/tools/prompts/memory/zh/tools.md +154 -0
- package/dist/tools/ripgrep.js +197 -63
- package/package.json +2 -2
- package/dist/static/assets/index-B-8J28g7.js.map +0 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# Kernel–App Architecture (Prototype v0.1)
|
|
2
|
+
|
|
3
|
+
Chinese version: [中文版](./kernel-app-architecture.zh.md)
|
|
4
|
+
|
|
5
|
+
## Scope and Goals
|
|
6
|
+
|
|
7
|
+
This document describes the Kernel–App separation prototype in Dominds, covering:
|
|
8
|
+
|
|
9
|
+
- Two-level namespace (kernel outer / app inner) and resolution rules
|
|
10
|
+
- App install json (`app --json`) extensions
|
|
11
|
+
- Export/import semantics and conflict handling
|
|
12
|
+
- App defunc semantics
|
|
13
|
+
- App integration manual (`app_integration_manual`)
|
|
14
|
+
- App language policy (work/ui language and i18n)
|
|
15
|
+
- Incremental override DSL for `<rtws>/.apps/<app-id>/team.yaml`
|
|
16
|
+
|
|
17
|
+
The prototype code is used for **concept and functional validation**. This document is the main artifact for “driving the integrated plan forward” (stable reference for implementation/migration/review).
|
|
18
|
+
|
|
19
|
+
## Non-goals
|
|
20
|
+
|
|
21
|
+
- No protocol/schema versioning or compatibility strategy before 2.x
|
|
22
|
+
- No sandbox isolation before 2.x
|
|
23
|
+
- Run-control expansion is out of scope (will be specified in a dedicated doc)
|
|
24
|
+
|
|
25
|
+
## Core Concepts
|
|
26
|
+
|
|
27
|
+
- Kernel registry stays in the current Dominds state; built-in capabilities will gradually move out to apps.
|
|
28
|
+
- Each app owns its own registry, **local-first, same-name override allowed**.
|
|
29
|
+
- Apps do not register objects into the kernel registry.
|
|
30
|
+
- Apps are isolated from each other; exchange only via explicit export/import.
|
|
31
|
+
|
|
32
|
+
## Identity and Resolution
|
|
33
|
+
|
|
34
|
+
### Namespaces
|
|
35
|
+
|
|
36
|
+
- Two-level scope: `kernel` and `app`.
|
|
37
|
+
- For runtime resolution, short IDs (e.g. `toolsetId`, `memberId`, `toolName`) follow current kernel conventions.
|
|
38
|
+
- For logs/diagnostics/Problems/docs, we need a stable, source-qualified identifier, so we introduce **Qualified Id** (display/diagnostics only; not forced into the wire protocol):
|
|
39
|
+
- `kernel:<name>`
|
|
40
|
+
- `app:<appId>:<name>`
|
|
41
|
+
|
|
42
|
+
### Resolution order (inside an app)
|
|
43
|
+
|
|
44
|
+
For any resolution request (tool/toolset/member), the order is fixed:
|
|
45
|
+
|
|
46
|
+
1. `local(app)` (app self-registered + imported objects)
|
|
47
|
+
2. `kernel`
|
|
48
|
+
|
|
49
|
+
Notes:
|
|
50
|
+
|
|
51
|
+
- “Same-name override allowed” only applies when `local(app)` overrides `kernel`.
|
|
52
|
+
- Apps never override each other; if imports create same-name conflicts inside `local(app)`, the app becomes defunc.
|
|
53
|
+
|
|
54
|
+
## App install json (`app --json`)
|
|
55
|
+
|
|
56
|
+
Add fields to `DomindsAppInstallJsonV1`:
|
|
57
|
+
|
|
58
|
+
- `depends?: [{ appId: string; versionRange: string }]`
|
|
59
|
+
- `exports?: { members?: string[]; toolsets?: string[] }`
|
|
60
|
+
|
|
61
|
+
Rules:
|
|
62
|
+
|
|
63
|
+
- Empty `exports` means nothing is importable.
|
|
64
|
+
- `exports` only lists **single member / single toolset** IDs (fixed granularity).
|
|
65
|
+
- `exports` may list multiple objects, but the minimal import unit is fixed to **a single member / a single toolset** (each import points to exactly one ID).
|
|
66
|
+
- Exported members must come from `contributes.teammatesYamlRelPath`.
|
|
67
|
+
- Exported toolsets must come from `contributes.toolsets`.
|
|
68
|
+
|
|
69
|
+
## Registry and Resolution
|
|
70
|
+
|
|
71
|
+
- App resolution order: **local(app) → kernel**.
|
|
72
|
+
- Apps do not override each other; import conflicts put the app into defunc.
|
|
73
|
+
- Kernel registry never receives app objects, so there is no removal from kernel registry.
|
|
74
|
+
- A defunc app does not participate in resolution (but its objects are not “removed”, since they never entered the kernel registry).
|
|
75
|
+
|
|
76
|
+
## Export / Import Semantics
|
|
77
|
+
|
|
78
|
+
### Export
|
|
79
|
+
|
|
80
|
+
- Declared by `exports` in app install json.
|
|
81
|
+
- Kernel exposes app exports (API shape can be decided during implementation).
|
|
82
|
+
|
|
83
|
+
### Import
|
|
84
|
+
|
|
85
|
+
- **Members**: declared in app `team.yaml`.
|
|
86
|
+
- **Toolsets**: declared in app `team.yaml`; loaded via dominds API and registered into the app registry.
|
|
87
|
+
|
|
88
|
+
Suggested structure (example):
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
imports:
|
|
92
|
+
members:
|
|
93
|
+
- app: foo_app
|
|
94
|
+
id: npc_foo
|
|
95
|
+
toolsets:
|
|
96
|
+
- app: bar_app
|
|
97
|
+
id: bar_toolset
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Conflicts and Dependency Failures
|
|
101
|
+
|
|
102
|
+
- Import conflicts or dependency failures → app defunc.
|
|
103
|
+
|
|
104
|
+
#### Conflict matrix (minimal rules)
|
|
105
|
+
|
|
106
|
+
| Case | Result |
|
|
107
|
+
| ----------------------------------------------------- | ------------------------------ |
|
|
108
|
+
| Same name in `local(app)` vs `kernel` | Allowed (local shadows kernel) |
|
|
109
|
+
| Imported member/toolset conflicts with app-local name | defunc |
|
|
110
|
+
| Imported member/toolset conflicts with another import | defunc |
|
|
111
|
+
| Import points to a non-exported object | defunc |
|
|
112
|
+
| depends not satisfied (missing/version mismatch) | defunc |
|
|
113
|
+
|
|
114
|
+
## Defunc Semantics
|
|
115
|
+
|
|
116
|
+
- Defunc means the app is unusable.
|
|
117
|
+
- No registry removal is needed (app registry is no longer used; kernel has no app objects).
|
|
118
|
+
- Defunc reason should be recorded for diagnosis.
|
|
119
|
+
|
|
120
|
+
### Defunc triggers (suggested enumeration)
|
|
121
|
+
|
|
122
|
+
- `MANIFEST_INVALID`: missing/invalid install json fields.
|
|
123
|
+
- `DEPENDENCY_MISSING` / `DEPENDENCY_VERSION_MISMATCH`: depends missing or not satisfied.
|
|
124
|
+
- `EXPORTS_INVALID`: exports references missing member/toolset.
|
|
125
|
+
- `IMPORT_NOT_EXPORTED`: import points to an object not declared in exports.
|
|
126
|
+
- `IMPORT_CONFLICT`: same-name conflicts introduced by imports.
|
|
127
|
+
- `TEAM_OVERRIDE_INVALID`: override DSL parse/validation failed for `<rtws>/.apps/<app-id>/team.yaml`.
|
|
128
|
+
- `IMPORT_FETCH_FAILED`: fetching toolset metadata via API failed or returned invalid data.
|
|
129
|
+
|
|
130
|
+
### Retry semantics (suggested)
|
|
131
|
+
|
|
132
|
+
- Defunc is **retryable by default**: once dependencies/config are fixed, kernel retries loading the app on the next refresh cycle.
|
|
133
|
+
- Retry does not mutate existing dialogs/history; it only affects future resolution/new calls.
|
|
134
|
+
|
|
135
|
+
### Observability (suggested)
|
|
136
|
+
|
|
137
|
+
- Defunc must surface in Problems (or equivalent), including at least: `appId`, `reasonKind`, `detail`, `firstSeenAt`, `lastSeenAt`, `retryable`, `suggestedAction`.
|
|
138
|
+
- `app_integration_manual` call failures **must not trigger defunc** (they should be observable but not make the app unusable).
|
|
139
|
+
|
|
140
|
+
## App Integration Manual (`app_integration_manual`)
|
|
141
|
+
|
|
142
|
+
- Kernel-fixed tool: `app_integration_manual`
|
|
143
|
+
- Params: `{ appId: string, language?: string }`
|
|
144
|
+
- If `language` is omitted, default to **work language**.
|
|
145
|
+
- Kernel routes the call to the app host via IPC.
|
|
146
|
+
- App can return static markdown or runtime-generated content.
|
|
147
|
+
- Apps must provide zh/en content.
|
|
148
|
+
- Failure does not trigger defunc (return an error is enough).
|
|
149
|
+
|
|
150
|
+
## Language Policy
|
|
151
|
+
|
|
152
|
+
- **Work language** comes from the `LANG` environment variable; kernel and app host inherit and it is immutable at runtime.
|
|
153
|
+
- Apps must follow kernel work language for reasoning/logic content.
|
|
154
|
+
- Apps may provide their own UI with a user-configurable UI language.
|
|
155
|
+
- All apps must support at least zh/en.
|
|
156
|
+
|
|
157
|
+
## Incremental Override DSL for `team.yaml`
|
|
158
|
+
|
|
159
|
+
Override file: `<rtws>/.apps/<app-id>/team.yaml`
|
|
160
|
+
|
|
161
|
+
- No `actions:` top level.
|
|
162
|
+
- Domain-specific DSL with **add/replace/modify/delete**.
|
|
163
|
+
- Each load applies actions; failures put the app into defunc.
|
|
164
|
+
|
|
165
|
+
Example:
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
version: 1
|
|
169
|
+
|
|
170
|
+
add:
|
|
171
|
+
members:
|
|
172
|
+
- id: npc_new
|
|
173
|
+
value:
|
|
174
|
+
name: New NPC
|
|
175
|
+
toolsets: [trae_toolset]
|
|
176
|
+
|
|
177
|
+
replace:
|
|
178
|
+
members:
|
|
179
|
+
- id: npc_old
|
|
180
|
+
value:
|
|
181
|
+
name: Old NPC
|
|
182
|
+
hidden: true
|
|
183
|
+
|
|
184
|
+
modify:
|
|
185
|
+
members:
|
|
186
|
+
- id: npc_village_head
|
|
187
|
+
set:
|
|
188
|
+
toolsets: [trae_toolset, extra_toolset]
|
|
189
|
+
streaming: true
|
|
190
|
+
unset: [tools]
|
|
191
|
+
merge:
|
|
192
|
+
model_params:
|
|
193
|
+
codex:
|
|
194
|
+
temperature: 0.2
|
|
195
|
+
member_defaults:
|
|
196
|
+
set:
|
|
197
|
+
provider: codex
|
|
198
|
+
|
|
199
|
+
delete:
|
|
200
|
+
members:
|
|
201
|
+
- id: npc_removed
|
|
202
|
+
|
|
203
|
+
set_default_responder: npc_village_head
|
|
204
|
+
|
|
205
|
+
add_shell_specialist:
|
|
206
|
+
- npc_village_head
|
|
207
|
+
|
|
208
|
+
remove_shell_specialist:
|
|
209
|
+
- npc_foo
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Rules:
|
|
213
|
+
|
|
214
|
+
- `modify_member` supports `set`/`unset`/`merge`; `merge` is a deep merge on objects.
|
|
215
|
+
- All changes must pass existing team.yaml validation.
|
|
216
|
+
- Conflicts or parse failures → app defunc.
|
|
217
|
+
|
|
218
|
+
## Suggested Load Flow
|
|
219
|
+
|
|
220
|
+
1. Resolve and register toolsets first (local toolsets + imports.toolsets), **including their tools**
|
|
221
|
+
2. Read app built-in team.yaml
|
|
222
|
+
3. Resolve imports.members
|
|
223
|
+
4. Apply `<rtws>/.apps/<app-id>/team.yaml` overrides
|
|
224
|
+
5. Validate (toolsets/tools are now resolvable)
|
|
225
|
+
6. Success → register members into app registry
|
|
226
|
+
7. Failure → app defunc
|
|
227
|
+
|
|
228
|
+
## Review Packet
|
|
229
|
+
|
|
230
|
+
This section is meant to let a reviewer validate and continue in ~30 minutes (without putting implementation details into Taskdoc progress).
|
|
231
|
+
|
|
232
|
+
### Artifacts
|
|
233
|
+
|
|
234
|
+
- Architecture (semantic source): `dominds/docs/kernel-app-architecture.zh.md`
|
|
235
|
+
- English alignment: `dominds/docs/kernel-app-architecture.md`
|
|
236
|
+
|
|
237
|
+
### Delta (recent changes)
|
|
238
|
+
|
|
239
|
+
- WebSocket driving no longer accepts `runControlId/runControlInput` (run-control expansion is intentionally split into a dedicated doc).
|
|
240
|
+
- apps-host run control result no longer supports `systemPromptPatch/prompt` (collapsed to a minimal continue/reject shape).
|
|
241
|
+
- kernel-driver context-health driving logic is aligned with driver-v2 style (prototype-stage cleanup).
|
|
242
|
+
|
|
243
|
+
### Minimal smoke (suggested)
|
|
244
|
+
|
|
245
|
+
Given this is a prototype for concept/functional validation, this smoke list focuses on ensuring recent cleanups do not break existing paths:
|
|
246
|
+
|
|
247
|
+
1. `pnpm -C dominds run lint:types` passes.
|
|
248
|
+
2. If the current rtws has enabled apps: startup initializes apps-host and registers proxy tools for each app’s `contributes.toolsets` (no name collisions).
|
|
249
|
+
3. WebUI dialog driving + Q4H answering no longer requires/sends `runControlId/runControlInput`.
|
|
250
|
+
|
|
251
|
+
## Prototype Status and Gap List
|
|
252
|
+
|
|
253
|
+
What is already present as a verifiable skeleton (facts only, not a completeness claim):
|
|
254
|
+
|
|
255
|
+
- Apps runtime + apps-host IPC infrastructure exists (forks apps-host and forwards tool calls).
|
|
256
|
+
- Proxy registration for app-declared `contributes.toolsets` exists (concept/functional validation).
|
|
257
|
+
- App-declared dialog run controls can be registered (run-control semantic expansion is out of scope here).
|
|
258
|
+
|
|
259
|
+
What is not yet closed / needs implementation-level landing points (the “status & issues” deliverable):
|
|
260
|
+
|
|
261
|
+
- `depends/exports/imports` loading/validation/conflict handling is currently mostly at the spec level; needs implementation + end-to-end verification.
|
|
262
|
+
- Defunc lifecycle state machine, Problems surfacing, retry/reload entrypoints need an implementation-closed loop (including logging/error taxonomy).
|
|
263
|
+
- `<rtws>/.apps/<app-id>/team.yaml` override DSL: read/apply/validate landing points + regression.
|
|
264
|
+
- Kernel-fixed `app_integration_manual(appId, language?)` tool + IPC routing needs implementation + regression.
|
|
265
|
+
- Migration playbook (which built-ins to migrate first, rollback strategy, dogfooding gates) should be produced in the implementation phase.
|
|
266
|
+
|
|
267
|
+
## Completion Criteria (Acceptance)
|
|
268
|
+
|
|
269
|
+
This prototype-stage “integrated plan” document can be considered complete when:
|
|
270
|
+
|
|
271
|
+
- It explicitly specifies: Identity/Resolution, defunc triggers + retry, imports/exports granularity + conflict matrix, team.yaml override DSL, and the `app_integration_manual` contract.
|
|
272
|
+
- Key rules are written as “when X happens → the system does Y”, without requiring readers to infer behavior from source.
|
|
273
|
+
- `kernel-app-architecture.zh.md` and this English version are kept consistent (zh is the semantic source of truth).
|
|
274
|
+
|
|
275
|
+
## Key Anchors (existing code)
|
|
276
|
+
|
|
277
|
+
- install json parsing: `dominds/main/apps/app-json.ts`
|
|
278
|
+
- apps runtime: `dominds/main/apps/runtime.ts`
|
|
279
|
+
- apps host contract: `dominds/main/apps-host/app-host-contract.ts`
|
|
280
|
+
- apps host IPC: `dominds/main/apps-host/ipc-types.ts`
|
|
281
|
+
- team.yaml parsing: `dominds/main/team.ts`
|
|
282
|
+
- app teammates loader: `dominds/main/apps/teammates.ts`
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
This document is a prototype-stage design draft; details may evolve during implementation.
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# Kernel–App 架构(原型 v0.1)
|
|
2
|
+
|
|
3
|
+
English version: [English](./kernel-app-architecture.md)
|
|
4
|
+
|
|
5
|
+
## 范围与目标
|
|
6
|
+
|
|
7
|
+
本文件描述 Dominds 的 Kernel–App 分离原型设计,覆盖:
|
|
8
|
+
|
|
9
|
+
- 两级 namespace(kernel 外层 / app 内层)与解析规则
|
|
10
|
+
- app install json(`app --json`)扩展字段
|
|
11
|
+
- export/import 语义与冲突处理
|
|
12
|
+
- app defunc 语义
|
|
13
|
+
- app 集成手册(`app_integration_manual`)
|
|
14
|
+
- app 语言约束(work/ui language 与 i18n)
|
|
15
|
+
- `<rtws>/.apps/<app-id>/team.yaml` 增量覆盖 DSL
|
|
16
|
+
|
|
17
|
+
本原型的代码实现用于 **概念与功能验证**;本文件是“综合方案推进”的主载体(可被后续实现/迁移/评审稳定引用)。
|
|
18
|
+
|
|
19
|
+
## 非目标
|
|
20
|
+
|
|
21
|
+
- 2.x 前不引入协议/schema 版本与兼容策略
|
|
22
|
+
- 2.x 前不引入 sandbox 隔离
|
|
23
|
+
- run control 大幅扩展不在本文讨论(将单独出专项文档)
|
|
24
|
+
|
|
25
|
+
## 核心概念
|
|
26
|
+
|
|
27
|
+
- Kernel registry 维持当前 dominds 状态,内置能力将逐步迁出为独立 app。
|
|
28
|
+
- 每个 app 维护独立 registry,**app 本地优先、允许同名覆盖**。
|
|
29
|
+
- app 不会把对象注册到 kernel registry。
|
|
30
|
+
- app 之间互相隔离,只有通过 export/import 显式交换对象。
|
|
31
|
+
|
|
32
|
+
## Identity 与解析(Resolution)
|
|
33
|
+
|
|
34
|
+
### 名称空间
|
|
35
|
+
|
|
36
|
+
- 两级 scope:`kernel` 与 `app`。
|
|
37
|
+
- 在“运行时解析”中,对象的 **短 ID**(例如 `toolsetId`、`memberId`、`toolName`)仍然以当前 kernel 的习惯用法为主。
|
|
38
|
+
- 在“日志/诊断/Problems/文档”中,需要可唯一指认来源,因此引入 **Qualified Id**(仅用于诊断/显示,不强制写入 wire 协议):
|
|
39
|
+
- `kernel:<name>`
|
|
40
|
+
- `app:<appId>:<name>`
|
|
41
|
+
|
|
42
|
+
### 解析顺序(app 内)
|
|
43
|
+
|
|
44
|
+
对任意解析请求(tool/toolset/member),在 app 内的解析顺序固定为:
|
|
45
|
+
|
|
46
|
+
1. `local(app)`(含:app 自身注册 + import 进来的对象)
|
|
47
|
+
2. `kernel`
|
|
48
|
+
|
|
49
|
+
说明:
|
|
50
|
+
|
|
51
|
+
- **允许同名覆盖**仅发生在 `local(app)` 覆盖 `kernel` 的场景。
|
|
52
|
+
- App 之间互不覆盖;若 import 导致 `local(app)` 内部同名冲突,则 app 置为 defunc。
|
|
53
|
+
|
|
54
|
+
## App install json(`app --json`)
|
|
55
|
+
|
|
56
|
+
在现有 `DomindsAppInstallJsonV1` 基础上新增:
|
|
57
|
+
|
|
58
|
+
- `depends?: [{ appId: string; versionRange: string }]`
|
|
59
|
+
- `exports?: { members?: string[]; toolsets?: string[] }`
|
|
60
|
+
|
|
61
|
+
约定:
|
|
62
|
+
|
|
63
|
+
- `exports` 为空表示不允许被 import。
|
|
64
|
+
- `exports` 可以列出多个对象,但 import 的最小单元固定为 **单个成员 / 单个工具集**(一次 import 指向一个 ID)。
|
|
65
|
+
- `exports` 中的成员必须来自 `contributes.teammatesYamlRelPath` 的成员定义。
|
|
66
|
+
- `exports` 中的工具集必须来自 `contributes.toolsets`。
|
|
67
|
+
|
|
68
|
+
## Registry 与解析规则
|
|
69
|
+
|
|
70
|
+
- App 内对象解析顺序:**local(app) → kernel**。
|
|
71
|
+
- App 之间互不覆盖;若 import 后发生同名冲突,app 置为 defunc。
|
|
72
|
+
- Kernel registry 不接收 app 注册对象,因此不存在“从 kernel registry 移除”这一操作。
|
|
73
|
+
- defunc 的 app 不参与解析(但其对象也不会被“移除”——因为它们从未进入 kernel registry)。
|
|
74
|
+
|
|
75
|
+
## Export / Import 语义
|
|
76
|
+
|
|
77
|
+
### Export
|
|
78
|
+
|
|
79
|
+
- 由 app install json 的 `exports` 声明。
|
|
80
|
+
- Kernel 对外提供 app exports 查询(API 形态可在实现阶段确定)。
|
|
81
|
+
|
|
82
|
+
### Import
|
|
83
|
+
|
|
84
|
+
- **成员 import**:在 app 的 `team.yaml` 中声明。
|
|
85
|
+
- **工具集 import**:在 app 的 `team.yaml` 中声明;运行时通过 dominds API 拉取工具集元信息,并注册到 app registry。
|
|
86
|
+
|
|
87
|
+
推荐结构(示意):
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
imports:
|
|
91
|
+
members:
|
|
92
|
+
- app: foo_app
|
|
93
|
+
id: npc_foo
|
|
94
|
+
toolsets:
|
|
95
|
+
- app: bar_app
|
|
96
|
+
id: bar_toolset
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 冲突与依赖失败
|
|
100
|
+
|
|
101
|
+
- import 冲突或依赖不满足 → app 置为 defunc。
|
|
102
|
+
|
|
103
|
+
#### 冲突矩阵(最小规则集)
|
|
104
|
+
|
|
105
|
+
| 场景 | 结果 |
|
|
106
|
+
| ------------------------------------------- | ------------------------- |
|
|
107
|
+
| `local(app)` 与 `kernel` 同名 | 允许(local 覆盖 kernel) |
|
|
108
|
+
| import 的 member/toolset 与 app 本地同名 | defunc |
|
|
109
|
+
| import 的 member/toolset 与其它 import 同名 | defunc |
|
|
110
|
+
| import 指向未 export 的对象 | defunc |
|
|
111
|
+
| depends 不满足(缺失/版本不匹配) | defunc |
|
|
112
|
+
|
|
113
|
+
## Defunc 语义
|
|
114
|
+
|
|
115
|
+
- defunc 后 app 功能不可用。
|
|
116
|
+
- 不会从 registry 移除(app registry 不再被使用;kernel registry 没有 app 对象)。
|
|
117
|
+
- defunc 原因应被记录并可被诊断。
|
|
118
|
+
|
|
119
|
+
### Defunc 触发条件(建议枚举)
|
|
120
|
+
|
|
121
|
+
- `MANIFEST_INVALID`:install json 字段缺失/格式错误。
|
|
122
|
+
- `DEPENDENCY_MISSING` / `DEPENDENCY_VERSION_MISMATCH`:depends 缺失或不满足。
|
|
123
|
+
- `EXPORTS_INVALID`:exports 声明引用不存在的 member/toolset。
|
|
124
|
+
- `IMPORT_NOT_EXPORTED`:import 指向的对象未在对方 exports 声明。
|
|
125
|
+
- `IMPORT_CONFLICT`:import 引入同名冲突。
|
|
126
|
+
- `TEAM_OVERRIDE_INVALID`:`<rtws>/.apps/<app-id>/team.yaml` 覆盖 DSL 解析或校验失败。
|
|
127
|
+
- `IMPORT_FETCH_FAILED`:通过 API 拉取 toolset 元信息失败或返回无效。
|
|
128
|
+
|
|
129
|
+
### 重试语义(建议)
|
|
130
|
+
|
|
131
|
+
- defunc 默认 **可重试**:当依赖/配置问题被修复后,kernel 在下一次 app 刷新周期重新加载该 app。
|
|
132
|
+
- 重试不会自动修改已有对话/历史 round;仅影响后续解析与新调用。
|
|
133
|
+
|
|
134
|
+
### 可观测性(建议)
|
|
135
|
+
|
|
136
|
+
- defunc 必须进入 Problems(或等价的可见面),至少包含:`appId`、`reasonKind`、`detail`、`firstSeenAt`、`lastSeenAt`、`retryable`、`suggestedAction`。
|
|
137
|
+
- `app_integration_manual` 调用失败 **不触发 defunc**(失败应被记录,但不应让 app 进入不可用)。
|
|
138
|
+
|
|
139
|
+
## App 集成手册(`app_integration_manual`)
|
|
140
|
+
|
|
141
|
+
- kernel 固定工具:`app_integration_manual`
|
|
142
|
+
- 参数:`{ appId: string, language?: string }`
|
|
143
|
+
- 未指定 `language` 时默认 **work language**。
|
|
144
|
+
- kernel 通过 IPC 路由到 app host,由 app 返回内容。
|
|
145
|
+
- app 可以静态输出 markdown,或运行时动态生成。
|
|
146
|
+
- app 必须提供 zh/en 双语内容。
|
|
147
|
+
- 调用失败不触发 defunc(返回错误即可)。
|
|
148
|
+
|
|
149
|
+
## 语言约束
|
|
150
|
+
|
|
151
|
+
- **work language** 来自 `LANG` 环境变量,kernel 与 app host 继承并且运行期不可变。
|
|
152
|
+
- app 必须遵守 kernel 的 work language。
|
|
153
|
+
- app UI 可以独立设置 ui language。
|
|
154
|
+
- 所有 app 必须至少支持 zh/en 双语。
|
|
155
|
+
|
|
156
|
+
## `team.yaml` 增量覆盖 DSL
|
|
157
|
+
|
|
158
|
+
覆盖文件:`<rtws>/.apps/<app-id>/team.yaml`
|
|
159
|
+
|
|
160
|
+
- 无需 `actions:` 顶层。
|
|
161
|
+
- 使用领域特定语法,支持 **add/replace/modify/delete**。
|
|
162
|
+
- 每次读取磁盘时执行动作,失败则 app 置为 defunc。
|
|
163
|
+
|
|
164
|
+
示意:
|
|
165
|
+
|
|
166
|
+
```yaml
|
|
167
|
+
version: 1
|
|
168
|
+
|
|
169
|
+
add:
|
|
170
|
+
members:
|
|
171
|
+
- id: npc_new
|
|
172
|
+
value:
|
|
173
|
+
name: 新NPC
|
|
174
|
+
toolsets: [trae_toolset]
|
|
175
|
+
|
|
176
|
+
replace:
|
|
177
|
+
members:
|
|
178
|
+
- id: npc_old
|
|
179
|
+
value:
|
|
180
|
+
name: 旧NPC
|
|
181
|
+
hidden: true
|
|
182
|
+
|
|
183
|
+
modify:
|
|
184
|
+
members:
|
|
185
|
+
- id: npc_village_head
|
|
186
|
+
set:
|
|
187
|
+
toolsets: [trae_toolset, extra_toolset]
|
|
188
|
+
streaming: true
|
|
189
|
+
unset: [tools]
|
|
190
|
+
merge:
|
|
191
|
+
model_params:
|
|
192
|
+
codex:
|
|
193
|
+
temperature: 0.2
|
|
194
|
+
member_defaults:
|
|
195
|
+
set:
|
|
196
|
+
provider: codex
|
|
197
|
+
|
|
198
|
+
delete:
|
|
199
|
+
members:
|
|
200
|
+
- id: npc_removed
|
|
201
|
+
|
|
202
|
+
set_default_responder: npc_village_head
|
|
203
|
+
|
|
204
|
+
add_shell_specialist:
|
|
205
|
+
- npc_village_head
|
|
206
|
+
|
|
207
|
+
remove_shell_specialist:
|
|
208
|
+
- npc_foo
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
语义约束:
|
|
212
|
+
|
|
213
|
+
- `modify_member` 支持 `set`/`unset`/`merge`,其中 `merge` 对对象执行深合并。
|
|
214
|
+
- 所有新增/替换/修改需经过现有 team.yaml 校验逻辑。
|
|
215
|
+
- 出现冲突或解析失败,app 置 defunc。
|
|
216
|
+
|
|
217
|
+
## 加载流程(建议)
|
|
218
|
+
|
|
219
|
+
1. 解析并落实工具集(本地 toolsets + imports.toolsets),**先注册工具集与内含工具**
|
|
220
|
+
2. 读取 app 内置 team.yaml
|
|
221
|
+
3. 解析 imports.members
|
|
222
|
+
4. 应用 `<rtws>/.apps/<app-id>/team.yaml` 覆盖
|
|
223
|
+
5. 执行校验(此时工具/工具集已可解析)
|
|
224
|
+
6. 成功 → 注册成员到 app registry
|
|
225
|
+
7. 失败 → app defunc
|
|
226
|
+
|
|
227
|
+
## 复核包(Review Packet)
|
|
228
|
+
|
|
229
|
+
本节用于让 reviewer 在 30 分钟内完成复核并继续推进(不把实现细节写进差遣牒 progress)。
|
|
230
|
+
|
|
231
|
+
### 产物索引(Artifacts)
|
|
232
|
+
|
|
233
|
+
- 架构文档(语义源):`dominds/docs/kernel-app-architecture.zh.md`
|
|
234
|
+
- 英文对齐:`dominds/docs/kernel-app-architecture.md`
|
|
235
|
+
|
|
236
|
+
### 近期变更影响面(Delta)
|
|
237
|
+
|
|
238
|
+
- WebSocket 驱动不再接收 `runControlId/runControlInput`(run control 的大幅扩展另起专项文档)。
|
|
239
|
+
- apps-host 的 run control 结果不再支持 `systemPromptPatch/prompt`(收敛为最小的 continue/reject 形态)。
|
|
240
|
+
- kernel-driver 的 context-health 驱动逻辑对齐 driver-v2 的实现方式(仅作为原型期收敛/清理)。
|
|
241
|
+
|
|
242
|
+
### 最小行为复核(Smoke,建议)
|
|
243
|
+
|
|
244
|
+
以下 smoke 以“原型仅概念/功能验证”为前提,重点验证系统未因近期清理而破坏既有路径:
|
|
245
|
+
|
|
246
|
+
1. `pnpm -C dominds run lint:types` 通过。
|
|
247
|
+
2. 若当前 rtws 存在已启用 app:启动后 apps runtime 能启动 apps-host,并将 app 的 `contributes.toolsets` 注册为 proxy tools(不发生 name collision)。
|
|
248
|
+
3. 在 WebUI 驱动对话与 Q4H 回答时,不再需要/不再发送 `runControlId/runControlInput`。
|
|
249
|
+
|
|
250
|
+
## 原型现状与问题清单(Gap List)
|
|
251
|
+
|
|
252
|
+
本原型当前已具备的“可验证骨架”(仅陈述事实,不承诺完备):
|
|
253
|
+
|
|
254
|
+
- 已有 apps runtime + apps-host IPC 基础设施,可启动 apps-host 子进程并转发 tool 调用。
|
|
255
|
+
- 已支持按 app 的 `contributes.toolsets` 注册 proxy toolset/tool(用于概念/功能验证)。
|
|
256
|
+
- 已支持 app 声明 dialog run controls 的注册(但 run control 语义扩展另起专项文档)。
|
|
257
|
+
|
|
258
|
+
本原型尚未闭环/需要后续实现明确落点的事项(作为“现状与问题”产物):
|
|
259
|
+
|
|
260
|
+
- `depends/exports/imports` 的加载、校验与冲突处理目前主要停留在架构规格层,尚需落地实现与端到端验证。
|
|
261
|
+
- defunc 的生命周期状态机、Problems 可观测面、可重试/重载入口需要实现级闭包(含日志/错误分类)。
|
|
262
|
+
- `<rtws>/.apps/<app-id>/team.yaml` override DSL 的实际读取/动作执行/校验落点需要实现与回归。
|
|
263
|
+
- `app_integration_manual(appId, language?)` 的 kernel 固定工具与 IPC 路由需要实现与回归。
|
|
264
|
+
- 迁移路线图(内置能力迁出顺序、回滚策略、dogfooding gate)需在后续实现阶段形成可执行清单。
|
|
265
|
+
|
|
266
|
+
## 完成定义(验收口径)
|
|
267
|
+
|
|
268
|
+
当以下条件满足时,可认为本原型的“综合方案推进”文档交付完成:
|
|
269
|
+
|
|
270
|
+
- 本文覆盖并明确:Identity/Resolution、defunc 触发与可重试、imports/exports 粒度与冲突矩阵、team.yaml override DSL、`app_integration_manual` 契约。
|
|
271
|
+
- 关键规则使用“发生 X → 系统做 Y”的句式,且没有依赖读源码才能理解的隐式前提。
|
|
272
|
+
- `kernel-app-architecture.zh.md` 与英文版 `kernel-app-architecture.md` 同步一致(zh 为语义基准)。
|
|
273
|
+
|
|
274
|
+
## 关键落点(现有代码)
|
|
275
|
+
|
|
276
|
+
- install json 解析:`dominds/main/apps/app-json.ts`
|
|
277
|
+
- apps runtime:`dominds/main/apps/runtime.ts`
|
|
278
|
+
- apps host contract:`dominds/main/apps-host/app-host-contract.ts`
|
|
279
|
+
- apps host IPC:`dominds/main/apps-host/ipc-types.ts`
|
|
280
|
+
- team.yaml 解析:`dominds/main/team.ts`
|
|
281
|
+
- app teammates loader:`dominds/main/apps/teammates.ts`
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
本文件为原型阶段设计草案,后续实现细节会跟随代码落地更新。
|
package/dist/llm/defaults.yaml
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
# - llm_retry_initial_delay_ms: delay before the 1st retry (default 1000).
|
|
4
4
|
# - llm_retry_backoff_multiplier: exponential factor between retries (default 2; e.g. 1.5).
|
|
5
5
|
# - llm_retry_max_delay_ms: upper bound for retry delay (default 30000).
|
|
6
|
+
# - tool_result_max_chars: optional transport-level cap for a single tool-result text payload
|
|
7
|
+
# before Dominds projects it into the provider request. Use this when a provider/gateway enforces
|
|
8
|
+
# a stricter per-item string limit than Dominds' built-in defaults.
|
|
6
9
|
providers:
|
|
7
10
|
codex:
|
|
8
11
|
name: Codex (ChatGPT)
|
|
@@ -31,6 +34,19 @@ providers:
|
|
|
31
34
|
type: enum
|
|
32
35
|
values: [none, minimal, low, medium, high, xhigh]
|
|
33
36
|
description: Reasoning effort level (when supported by the model).
|
|
37
|
+
service_tier:
|
|
38
|
+
prominent: true
|
|
39
|
+
default: default
|
|
40
|
+
type: enum
|
|
41
|
+
# Keep setup/bootstrap aligned with codex-rs current user-facing handling:
|
|
42
|
+
# expose only Standard/Fast here (default/priority), even though the upstream SDK enum
|
|
43
|
+
# also mentions other tiers such as auto/flex/scale. If codex-rs expands its UX to
|
|
44
|
+
# surface additional tiers later, extend this list in lockstep.
|
|
45
|
+
values: [default, priority]
|
|
46
|
+
value_labels:
|
|
47
|
+
default: Standard
|
|
48
|
+
priority: Fast
|
|
49
|
+
description: Processing tier. Set `priority` to emulate Codex `/fast` without changing reasoning effort.
|
|
34
50
|
verbosity:
|
|
35
51
|
prominent: true
|
|
36
52
|
default: medium
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getActiveDriverEngine = getActiveDriverEngine;
|
|
4
|
+
exports.driveDialogStream = driveDialogStream;
|
|
5
|
+
exports.emitSayingEvents = emitSayingEvents;
|
|
6
|
+
exports.supplyResponseToSupdialog = supplyResponseToSupdialog;
|
|
7
|
+
exports.restoreDialogHierarchy = restoreDialogHierarchy;
|
|
8
|
+
exports.runBackendDriver = runBackendDriver;
|
|
9
|
+
const driver_v2_1 = require("./driver-v2");
|
|
10
|
+
const ACTIVE_DRIVER_ENGINE = 'v2';
|
|
11
|
+
function getActiveDriverEngine() {
|
|
12
|
+
return ACTIVE_DRIVER_ENGINE;
|
|
13
|
+
}
|
|
14
|
+
async function driveDialogStream(...args) {
|
|
15
|
+
return await (0, driver_v2_1.driveDialogStream)(...args);
|
|
16
|
+
}
|
|
17
|
+
async function emitSayingEvents(...args) {
|
|
18
|
+
return await (0, driver_v2_1.emitSayingEvents)(...args);
|
|
19
|
+
}
|
|
20
|
+
async function supplyResponseToSupdialog(...args) {
|
|
21
|
+
return await (0, driver_v2_1.supplyResponseToSupdialog)(...args);
|
|
22
|
+
}
|
|
23
|
+
async function restoreDialogHierarchy(...args) {
|
|
24
|
+
return await (0, driver_v2_1.restoreDialogHierarchy)(...args);
|
|
25
|
+
}
|
|
26
|
+
function runBackendDriver() {
|
|
27
|
+
return (0, driver_v2_1.runBackendDriver)();
|
|
28
|
+
}
|