dominds 1.3.1 → 1.4.2
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 +9 -2
- package/README.zh.md +9 -2
- package/dist/apps/app-lock-file.js +33 -57
- package/dist/apps/configuration-file.js +267 -0
- package/dist/apps/enabled-apps.js +217 -252
- package/dist/apps/manifest.js +132 -0
- package/dist/apps/resolution-file.js +80 -192
- package/dist/apps/workspace-app-state.js +8 -0
- package/dist/cli/disable.js +18 -22
- package/dist/cli/enable.js +20 -58
- package/dist/cli/install.js +74 -80
- package/dist/cli/uninstall.js +48 -25
- package/dist/cli/update.js +36 -80
- package/dist/docs/app-constitution.md +12 -7
- package/dist/docs/app-constitution.zh.md +13 -8
- package/dist/llm/kernel-driver/engine.js +10 -4
- package/dist/llm/kernel-driver/flow.js +93 -0
- package/dist/llm/kernel-driver/loop.js +4 -1
- package/dist/llm/kernel-driver/subdialog.js +5 -1
- package/dist/llm/kernel-driver/tellask-special.js +48 -6
- package/dist/server/server-core.js +19 -4
- package/dist/server/websocket-handler.js +26 -6
- package/dist/static/assets/{_basePickBy-CmziIRM9.js → _basePickBy-B2o4z1Hf.js} +3 -3
- package/dist/static/assets/{_basePickBy-CmziIRM9.js.map → _basePickBy-B2o4z1Hf.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-CgDZxcD0.js → _baseUniq-CLmcxjdl.js} +2 -2
- package/dist/static/assets/{_baseUniq-CgDZxcD0.js.map → _baseUniq-CLmcxjdl.js.map} +1 -1
- package/dist/static/assets/{arc-Df9rjNNk.js → arc-CymD_KN7.js} +2 -2
- package/dist/static/assets/{arc-Df9rjNNk.js.map → arc-CymD_KN7.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-Bif8topC.js → architectureDiagram-VXUJARFQ-DJQfSJUH.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-Bif8topC.js.map → architectureDiagram-VXUJARFQ-DJQfSJUH.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-D9Egoflr.js → blockDiagram-VD42YOAC-pHVz60D0.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-D9Egoflr.js.map → blockDiagram-VD42YOAC-pHVz60D0.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DBf1NeBf.js → c4Diagram-YG6GDRKO-B0WnCfAT.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DBf1NeBf.js.map → c4Diagram-YG6GDRKO-B0WnCfAT.js.map} +1 -1
- package/dist/static/assets/{channel-Dc34yAJl.js → channel-CX9BlKil.js} +2 -2
- package/dist/static/assets/{channel-Dc34yAJl.js.map → channel-CX9BlKil.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-B65G1dJI.js → chunk-4BX2VUAB-lXArRj3o.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-B65G1dJI.js.map → chunk-4BX2VUAB-lXArRj3o.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-CSDEOGl2.js → chunk-55IACEB6-CdqwynH9.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-CSDEOGl2.js.map → chunk-55IACEB6-CdqwynH9.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-Cb6W3QWJ.js → chunk-B4BG7PRW-Y-uXcJst.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-Cb6W3QWJ.js.map → chunk-B4BG7PRW-Y-uXcJst.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-ZAJWeVWH.js → chunk-DI55MBZ5-C5xSbRST.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-ZAJWeVWH.js.map → chunk-DI55MBZ5-C5xSbRST.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-DiwRlImb.js → chunk-FMBD7UC4-5uefwCjI.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-DiwRlImb.js.map → chunk-FMBD7UC4-5uefwCjI.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-wilj7fb5.js → chunk-QN33PNHL-DzWVcvpI.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-wilj7fb5.js.map → chunk-QN33PNHL-DzWVcvpI.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-DGmviJfR.js → chunk-QZHKN3VN-BrrvAZdP.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-DGmviJfR.js.map → chunk-QZHKN3VN-BrrvAZdP.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-Nm5wTXa_.js → chunk-TZMSLE5B-DyKOlPTY.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-Nm5wTXa_.js.map → chunk-TZMSLE5B-DyKOlPTY.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-BvUbXD6H.js → classDiagram-2ON5EDUG-FCrnlCWC.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-BvUbXD6H.js.map → classDiagram-2ON5EDUG-FCrnlCWC.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BvUbXD6H.js → classDiagram-v2-WZHVMYZB-FCrnlCWC.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BvUbXD6H.js.map → classDiagram-v2-WZHVMYZB-FCrnlCWC.js.map} +1 -1
- package/dist/static/assets/{clone-0VLS7GaA.js → clone-BlI81KqZ.js} +2 -2
- package/dist/static/assets/{clone-0VLS7GaA.js.map → clone-BlI81KqZ.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-anaPs-75.js → cose-bilkent-S5V4N54A-yM7S2atz.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-anaPs-75.js.map → cose-bilkent-S5V4N54A-yM7S2atz.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-YwdsZ11r.js → dagre-6UL2VRFP-BcweuZHt.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-YwdsZ11r.js.map → dagre-6UL2VRFP-BcweuZHt.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-5KQCf3h2.js → diagram-PSM6KHXK-D4-QwLW1.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-5KQCf3h2.js.map → diagram-PSM6KHXK-D4-QwLW1.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-Mf24XxZL.js → diagram-QEK2KX5R-BVbuejJn.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-Mf24XxZL.js.map → diagram-QEK2KX5R-BVbuejJn.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-DyQjD4D5.js → diagram-S2PKOQOG-pB6N6Tq_.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-DyQjD4D5.js.map → diagram-S2PKOQOG-pB6N6Tq_.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CEzTKw1u.js → erDiagram-Q2GNP2WA-DLKmthuw.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-CEzTKw1u.js.map → erDiagram-Q2GNP2WA-DLKmthuw.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-DT821XSz.js → flowDiagram-NV44I4VS-BsBhWukh.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-DT821XSz.js.map → flowDiagram-NV44I4VS-BsBhWukh.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DlmeVsGg.js → ganttDiagram-JELNMOA3-Debz-J-C.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-DlmeVsGg.js.map → ganttDiagram-JELNMOA3-Debz-J-C.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yAfyBG_d.js → gitGraphDiagram-V2S2FVAM-BnAPFBGR.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-yAfyBG_d.js.map → gitGraphDiagram-V2S2FVAM-BnAPFBGR.js.map} +1 -1
- package/dist/static/assets/{graph-BYv8vyWe.js → graph-DbzWiBNK.js} +3 -3
- package/dist/static/assets/{graph-BYv8vyWe.js.map → graph-DbzWiBNK.js.map} +1 -1
- package/dist/static/assets/{index-DMbwqOm6.js → index-B-8J28g7.js} +987 -1049
- package/dist/static/assets/index-B-8J28g7.js.map +1 -0
- package/dist/static/assets/{index-BiNcBn_U.css → index-CD5wtC_i.css} +1 -1
- package/dist/static/assets/{infoDiagram-HS3SLOUP-DaadramQ.js → infoDiagram-HS3SLOUP-CZ5hWoxV.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-DaadramQ.js.map → infoDiagram-HS3SLOUP-CZ5hWoxV.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ftN8hxu3.js → journeyDiagram-XKPGCS4Q-CKN3oSxk.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-ftN8hxu3.js.map → journeyDiagram-XKPGCS4Q-CKN3oSxk.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BIXETQ-C.js → kanban-definition-3W4ZIXB7-BQCMklfJ.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-BIXETQ-C.js.map → kanban-definition-3W4ZIXB7-BQCMklfJ.js.map} +1 -1
- package/dist/static/assets/{layout-OTbrj0Ye.js → layout-C5B58szc.js} +5 -5
- package/dist/static/assets/{layout-OTbrj0Ye.js.map → layout-C5B58szc.js.map} +1 -1
- package/dist/static/assets/{linear-CVfOC669.js → linear-_32fut6G.js} +2 -2
- package/dist/static/assets/{linear-CVfOC669.js.map → linear-_32fut6G.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-D2zv5uI9.js → mindmap-definition-VGOIOE7T-C_goMzjx.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-D2zv5uI9.js.map → mindmap-definition-VGOIOE7T-C_goMzjx.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DaUXTsv7.js → pieDiagram-ADFJNKIX-BQ2n0cOB.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-DaUXTsv7.js.map → pieDiagram-ADFJNKIX-BQ2n0cOB.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-B7O2wPX9.js → quadrantDiagram-AYHSOK5B-BLg7_neg.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-B7O2wPX9.js.map → quadrantDiagram-AYHSOK5B-BLg7_neg.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DpauVPY1.js → requirementDiagram-UZGBJVZJ-DwkJt0zi.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-DpauVPY1.js.map → requirementDiagram-UZGBJVZJ-DwkJt0zi.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B3Hbfvad.js → sankeyDiagram-TZEHDZUN-DmxmatUB.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B3Hbfvad.js.map → sankeyDiagram-TZEHDZUN-DmxmatUB.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KdbWByWT.js → sequenceDiagram-WL72ISMW-KHU_eApU.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-KdbWByWT.js.map → sequenceDiagram-WL72ISMW-KHU_eApU.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-yDOCVezC.js → stateDiagram-FKZM4ZOC-B3DBCxAL.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-yDOCVezC.js.map → stateDiagram-FKZM4ZOC-B3DBCxAL.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CpCJhvQO.js → stateDiagram-v2-4FDKWEC3-C-uIk7gh.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CpCJhvQO.js.map → stateDiagram-v2-4FDKWEC3-C-uIk7gh.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-CHxuEjhV.js → timeline-definition-IT6M3QCI-SysEcQCC.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-CHxuEjhV.js.map → timeline-definition-IT6M3QCI-SysEcQCC.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-Bsqu3wIy.js → treemap-GDKQZRPO-d0AbKEc4.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-Bsqu3wIy.js.map → treemap-GDKQZRPO-d0AbKEc4.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-RZy33lFF.js → xychartDiagram-PRI3JC2R-CmSQMxUh.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-RZy33lFF.js.map → xychartDiagram-PRI3JC2R-CmSQMxUh.js.map} +1 -1
- package/dist/static/index.html +2 -2
- package/dist/tools/fs.js +1 -1
- package/package.json +9 -7
- package/dist/agent-priming.js +0 -2051
- package/dist/apps/installed-file.js +0 -207
- package/dist/apps/runtime-port.js +0 -91
- package/dist/docs/dominds-agent-priming.md +0 -218
- package/dist/docs/dominds-agent-priming.zh.md +0 -196
- package/dist/docs/drive-logic-context-refactor-plan.zh.md +0 -338
- package/dist/docs/keep-going.md +0 -176
- package/dist/docs/keep-going.zh.md +0 -162
- package/dist/docs/kernel-app-architecture.md +0 -286
- package/dist/docs/kernel-app-architecture.zh.md +0 -285
- package/dist/docs/showing-by-doing.md +0 -208
- package/dist/docs/showing-by-doing.zh.md +0 -177
- package/dist/docs/team-mgmt-toolset.md +0 -482
- package/dist/docs/team-mgmt-toolset.zh.md +0 -426
- package/dist/llm/driver-entry.js +0 -28
- package/dist/llm/driver-v2/context-health.js +0 -121
- package/dist/llm/driver-v2/context.js +0 -56
- package/dist/llm/driver-v2/core.js +0 -1545
- package/dist/llm/driver-v2/index.js +0 -26
- package/dist/llm/driver-v2/orchestrator.js +0 -158
- package/dist/llm/driver-v2/policy.js +0 -129
- package/dist/llm/driver-v2/restore-dialog-hierarchy.js +0 -73
- package/dist/llm/driver-v2/round.js +0 -366
- package/dist/llm/driver-v2/runtime-utils.js +0 -365
- package/dist/llm/driver-v2/saying-events.js +0 -20
- package/dist/llm/driver-v2/subdialog-txn.js +0 -42
- package/dist/llm/driver-v2/supdialog-response.js +0 -400
- package/dist/llm/driver-v2/tellask-bridge.js +0 -1148
- package/dist/llm/driver-v2/types.js +0 -10
- package/dist/llm/driver-v2-ref-only/context-health.js +0 -121
- package/dist/llm/driver-v2-ref-only/context.js +0 -17
- package/dist/llm/driver-v2-ref-only/core.js +0 -1710
- package/dist/llm/driver-v2-ref-only/index.js +0 -26
- package/dist/llm/driver-v2-ref-only/orchestrator.js +0 -158
- package/dist/llm/driver-v2-ref-only/policy.js +0 -129
- package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +0 -73
- package/dist/llm/driver-v2-ref-only/round.js +0 -366
- package/dist/llm/driver-v2-ref-only/runtime-utils.js +0 -473
- package/dist/llm/driver-v2-ref-only/saying-events.js +0 -18
- package/dist/llm/driver-v2-ref-only/subdialog-txn.js +0 -42
- package/dist/llm/driver-v2-ref-only/supdialog-response.js +0 -453
- package/dist/llm/driver-v2-ref-only/tellask-bridge.js +0 -1178
- package/dist/llm/driver-v2-ref-only/types.js +0 -10
- package/dist/llm/driver.js +0 -4093
- package/dist/minds/promptdocs.js +0 -263
- package/dist/server/prompts-routes.js +0 -545
- package/dist/shared/team-mgmt-manual.js +0 -120
- package/dist/shared/types/prompts.js +0 -2
- package/dist/shared/types/tellask.js +0 -8
- package/dist/showing-by-doing.js +0 -1091
- package/dist/snippets/README.en.md +0 -3
- package/dist/snippets/README.md +0 -4
- package/dist/static/assets/index-DMbwqOm6.js.map +0 -1
- package/dist/tellask.js +0 -439
- package/dist/tools/context-health.js +0 -177
- package/dist/tools/diag.js +0 -583
- package/dist/tools/prompts/memory/en/errors.md +0 -155
- package/dist/tools/prompts/memory/en/index.md +0 -47
- package/dist/tools/prompts/memory/en/principles.md +0 -87
- package/dist/tools/prompts/memory/en/scenarios.md +0 -174
- package/dist/tools/prompts/memory/en/tools.md +0 -129
- package/dist/tools/prompts/memory/zh/errors.md +0 -155
- package/dist/tools/prompts/memory/zh/index.md +0 -47
- package/dist/tools/prompts/memory/zh/principles.md +0 -89
- package/dist/tools/prompts/memory/zh/scenarios.md +0 -174
- package/dist/tools/prompts/memory/zh/tools.md +0 -129
- package/dist/tools/team-mgmt.js +0 -3487
- package/dist/utils/task-doc.js +0 -236
package/dist/cli/enable.js
CHANGED
|
@@ -1,51 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* enable subcommand for dominds CLI (Apps)
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* dominds enable <appId> [--port <port>]
|
|
8
|
-
*/
|
|
9
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
4
|
exports.main = main;
|
|
11
|
-
const
|
|
12
|
-
const
|
|
5
|
+
const configuration_file_1 = require("../apps/configuration-file");
|
|
6
|
+
const manifest_1 = require("../apps/manifest");
|
|
7
|
+
const workspace_app_state_1 = require("../apps/workspace-app-state");
|
|
13
8
|
function printHelp() {
|
|
14
9
|
console.log(`Usage:
|
|
15
|
-
dominds enable <appId>
|
|
16
|
-
|
|
17
|
-
Options:
|
|
18
|
-
--port <port> Set frontend port (stored in ${resolution_file_1.APPS_RESOLUTION_REL_PATH}); use 0 to clear
|
|
10
|
+
dominds enable <appId>
|
|
19
11
|
`);
|
|
20
12
|
}
|
|
21
13
|
function parseArgs(argv) {
|
|
22
14
|
const positional = [];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const a = argv[i];
|
|
26
|
-
if (a === '--help' || a === '-h') {
|
|
15
|
+
for (const arg of argv) {
|
|
16
|
+
if (arg === '--help' || arg === '-h') {
|
|
27
17
|
printHelp();
|
|
28
18
|
process.exit(0);
|
|
29
19
|
}
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
throw new Error('Missing value for --port');
|
|
34
|
-
const n = Number(v);
|
|
35
|
-
if (!Number.isFinite(n) || n < 0 || !Number.isInteger(n)) {
|
|
36
|
-
throw new Error(`Invalid --port value: ${v}`);
|
|
37
|
-
}
|
|
38
|
-
port = n;
|
|
39
|
-
i += 1;
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (a.startsWith('-'))
|
|
43
|
-
throw new Error(`Unknown option: ${a}`);
|
|
44
|
-
positional.push(a);
|
|
20
|
+
if (arg.startsWith('-'))
|
|
21
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
22
|
+
positional.push(arg);
|
|
45
23
|
}
|
|
46
24
|
if (positional.length !== 1)
|
|
47
25
|
throw new Error('enable requires exactly one <appId>');
|
|
48
|
-
return { appId: positional[0]
|
|
26
|
+
return { appId: positional[0] };
|
|
49
27
|
}
|
|
50
28
|
async function main() {
|
|
51
29
|
let args;
|
|
@@ -59,40 +37,24 @@ async function main() {
|
|
|
59
37
|
return;
|
|
60
38
|
}
|
|
61
39
|
const rtwsRootAbs = process.cwd();
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
console.error(`Error: failed to read ${resolution_file_1.APPS_RESOLUTION_REL_PATH}: ${loaded.errorText}`);
|
|
40
|
+
if (!(await (0, manifest_1.hasRtwsDeclaredAppDependency)({ rtwsRootAbs, appId: args.appId }))) {
|
|
41
|
+
console.error(`Error: app '${args.appId}' is not declared in .minds/app.yaml dependencies`);
|
|
65
42
|
process.exit(1);
|
|
66
43
|
return;
|
|
67
44
|
}
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
console.error(`Error:
|
|
45
|
+
const loadedConfig = await (0, configuration_file_1.loadAppsConfigurationFile)({ rtwsRootAbs });
|
|
46
|
+
if (loadedConfig.kind === 'error') {
|
|
47
|
+
console.error(`Error: failed to read .apps/configuration.yaml: ${loadedConfig.errorText}`);
|
|
71
48
|
process.exit(1);
|
|
72
49
|
return;
|
|
73
50
|
}
|
|
74
|
-
|
|
75
|
-
existing:
|
|
51
|
+
const nextConfig = (0, configuration_file_1.setAppDisabledInConfiguration)({
|
|
52
|
+
existing: loadedConfig.file,
|
|
76
53
|
appId: args.appId,
|
|
77
|
-
|
|
54
|
+
disabled: false,
|
|
78
55
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
existing: next,
|
|
82
|
-
appId: args.appId,
|
|
83
|
-
assignedPort: args.port === 0 ? null : args.port,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
const assignedPort = await (0, assigned_port_1.resolveStableAssignedPort)({
|
|
88
|
-
appId: found.id,
|
|
89
|
-
installJson: found.installJson,
|
|
90
|
-
existingApps: next.apps,
|
|
91
|
-
existingAssignedPort: found.assignedPort,
|
|
92
|
-
});
|
|
93
|
-
next = (0, resolution_file_1.setResolvedAppAssignedPort)({ existing: next, appId: args.appId, assignedPort });
|
|
94
|
-
}
|
|
95
|
-
await (0, resolution_file_1.writeAppsResolutionFile)({ rtwsRootAbs, file: next });
|
|
56
|
+
await (0, configuration_file_1.writeAppsConfigurationFileIfChanged)({ rtwsRootAbs, file: nextConfig });
|
|
57
|
+
await (0, workspace_app_state_1.refreshAppsDerivedState)({ rtwsRootAbs });
|
|
96
58
|
console.log(`Enabled app '${args.appId}'`);
|
|
97
59
|
}
|
|
98
60
|
if (require.main === module) {
|
package/dist/cli/install.js
CHANGED
|
@@ -11,12 +11,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.main = main;
|
|
14
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
15
|
-
const
|
|
14
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
16
|
const app_lock_file_1 = require("../apps/app-lock-file");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
17
|
+
const configuration_file_1 = require("../apps/configuration-file");
|
|
18
|
+
const manifest_1 = require("../apps/manifest");
|
|
19
19
|
const run_app_json_1 = require("../apps/run-app-json");
|
|
20
|
+
const workspace_app_state_1 = require("../apps/workspace-app-state");
|
|
20
21
|
function printHelp() {
|
|
21
22
|
console.log(`Usage:
|
|
22
23
|
dominds install <spec|path> [--local] [--id <appId>] [--enable] [--force]
|
|
@@ -24,12 +25,12 @@ function printHelp() {
|
|
|
24
25
|
Options:
|
|
25
26
|
--local Treat <spec|path> as a local package directory (dev package)
|
|
26
27
|
--id <appId> Require app id (must match app --json appId)
|
|
27
|
-
--enable
|
|
28
|
-
--force
|
|
28
|
+
--enable Remove the app from disabledApps after install
|
|
29
|
+
--force Reserved for future use; currently ignored
|
|
29
30
|
|
|
30
31
|
Notes:
|
|
31
|
-
-
|
|
32
|
-
-
|
|
32
|
+
- install adds the app to .minds/app.yaml dependencies.
|
|
33
|
+
- app resolution source is determined dynamically via .apps/configuration.yaml resolutionStrategy.
|
|
33
34
|
`);
|
|
34
35
|
}
|
|
35
36
|
function parseArgs(argv) {
|
|
@@ -39,45 +40,43 @@ function parseArgs(argv) {
|
|
|
39
40
|
let local = false;
|
|
40
41
|
let idOverride = null;
|
|
41
42
|
for (let i = 0; i < argv.length; i += 1) {
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
43
|
+
const arg = argv[i];
|
|
44
|
+
if (arg === '--help' || arg === '-h') {
|
|
44
45
|
printHelp();
|
|
45
46
|
process.exit(0);
|
|
46
47
|
}
|
|
47
|
-
if (
|
|
48
|
+
if (arg === '--force') {
|
|
48
49
|
force = true;
|
|
49
50
|
continue;
|
|
50
51
|
}
|
|
51
|
-
if (
|
|
52
|
+
if (arg === '--enable') {
|
|
52
53
|
enable = true;
|
|
53
54
|
continue;
|
|
54
55
|
}
|
|
55
|
-
if (
|
|
56
|
+
if (arg === '--local') {
|
|
56
57
|
local = true;
|
|
57
58
|
continue;
|
|
58
59
|
}
|
|
59
|
-
if (
|
|
60
|
-
const
|
|
61
|
-
if (!
|
|
60
|
+
if (arg === '--id') {
|
|
61
|
+
const value = argv[i + 1];
|
|
62
|
+
if (!value)
|
|
62
63
|
throw new Error('Missing value for --id');
|
|
63
|
-
idOverride =
|
|
64
|
+
idOverride = value.trim() || null;
|
|
64
65
|
i += 1;
|
|
65
66
|
continue;
|
|
66
67
|
}
|
|
67
|
-
if (
|
|
68
|
-
throw new Error(`Unknown option: ${
|
|
69
|
-
|
|
70
|
-
positional.push(a);
|
|
68
|
+
if (arg.startsWith('-'))
|
|
69
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
70
|
+
positional.push(arg);
|
|
71
71
|
}
|
|
72
|
-
if (positional.length !== 1)
|
|
72
|
+
if (positional.length !== 1)
|
|
73
73
|
throw new Error('install requires exactly one <spec|path>');
|
|
74
|
-
}
|
|
75
74
|
return { specOrPath: positional[0], force, enable, local, idOverride };
|
|
76
75
|
}
|
|
77
|
-
async function pathIsDirectory(
|
|
76
|
+
async function pathIsDirectory(pathAbs) {
|
|
78
77
|
try {
|
|
79
|
-
const
|
|
80
|
-
return
|
|
78
|
+
const stat = await promises_1.default.stat(pathAbs);
|
|
79
|
+
return stat.isDirectory();
|
|
81
80
|
}
|
|
82
81
|
catch {
|
|
83
82
|
return false;
|
|
@@ -101,14 +100,8 @@ async function main() {
|
|
|
101
100
|
process.exit(1);
|
|
102
101
|
return;
|
|
103
102
|
}
|
|
104
|
-
const localAbs =
|
|
103
|
+
const localAbs = node_path_1.default.resolve(rtwsRootAbs, specOrPath);
|
|
105
104
|
const shouldUseLocal = args.local || (await pathIsDirectory(localAbs));
|
|
106
|
-
const loadedResolution = await (0, resolution_file_1.loadAppsResolutionFile)({ rtwsRootAbs });
|
|
107
|
-
if (loadedResolution.kind === 'error') {
|
|
108
|
-
console.error(`Error: failed to read ${resolution_file_1.APPS_RESOLUTION_REL_PATH}: ${loadedResolution.errorText}`);
|
|
109
|
-
process.exit(1);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
105
|
const installJson = shouldUseLocal
|
|
113
106
|
? await (0, run_app_json_1.runDomindsAppJsonViaLocalPackage)({ packageRootAbs: localAbs })
|
|
114
107
|
: await (0, run_app_json_1.runDomindsAppJsonViaNpx)({ spec: specOrPath, cwdAbs: rtwsRootAbs });
|
|
@@ -117,62 +110,63 @@ async function main() {
|
|
|
117
110
|
process.exit(1);
|
|
118
111
|
return;
|
|
119
112
|
}
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
113
|
+
const loadedManifest = await (0, manifest_1.loadDomindsAppManifest)({
|
|
114
|
+
packageRootAbs: rtwsRootAbs,
|
|
115
|
+
manifestRelPath: manifest_1.DEFAULT_DOMINDS_APP_MANIFEST_REL_PATH,
|
|
116
|
+
});
|
|
117
|
+
const manifest = loadedManifest.kind === 'ok' ? loadedManifest.manifest : (0, manifest_1.makeDefaultRtwsAppManifest)();
|
|
118
|
+
const nextManifest = (0, manifest_1.upsertManifestDependency)({
|
|
119
|
+
manifest,
|
|
120
|
+
dependency: { id: installJson.appId },
|
|
121
|
+
});
|
|
122
|
+
await (0, manifest_1.writeDomindsAppManifestIfChanged)({
|
|
123
|
+
packageRootAbs: rtwsRootAbs,
|
|
124
|
+
manifestRelPath: manifest_1.DEFAULT_DOMINDS_APP_MANIFEST_REL_PATH,
|
|
125
|
+
manifest: nextManifest,
|
|
126
|
+
});
|
|
127
|
+
const loadedConfig = await (0, configuration_file_1.loadAppsConfigurationFile)({ rtwsRootAbs });
|
|
128
|
+
if (loadedConfig.kind === 'error') {
|
|
129
|
+
console.error(`Error: failed to read .apps/configuration.yaml: ${loadedConfig.errorText}`);
|
|
123
130
|
process.exit(1);
|
|
124
131
|
return;
|
|
125
132
|
}
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
const assignedPort = await (0, assigned_port_1.resolveStableAssignedPort)({
|
|
133
|
+
const nextConfig = (0, configuration_file_1.setAppDisabledInConfiguration)({
|
|
134
|
+
existing: loadedConfig.file,
|
|
129
135
|
appId: installJson.appId,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
disabled: args.enable
|
|
137
|
+
? false
|
|
138
|
+
: isAppCurrentlyDisabled(loadedConfig.file.disabledApps, installJson.appId),
|
|
133
139
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
: { kind: 'npx', spec: specOrPath },
|
|
141
|
-
assignedPort,
|
|
142
|
-
installJson,
|
|
143
|
-
};
|
|
144
|
-
const nextFile = (0, resolution_file_1.upsertResolvedApp)({ existing: loadedResolution.file, next: entry });
|
|
145
|
-
await (0, resolution_file_1.writeAppsResolutionFile)({ rtwsRootAbs, file: nextFile });
|
|
146
|
-
try {
|
|
147
|
-
const loadedLock = await (0, app_lock_file_1.loadAppLockFile)({ rtwsRootAbs });
|
|
148
|
-
if (loadedLock.kind === 'error') {
|
|
149
|
-
console.error(`Warning: failed to read .minds/app-lock.yaml: ${loadedLock.errorText}`);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
const nextLock = (0, app_lock_file_1.upsertLockedApp)({
|
|
153
|
-
existing: loadedLock.file,
|
|
154
|
-
next: {
|
|
155
|
-
id: entry.id,
|
|
156
|
-
source: entry.source,
|
|
157
|
-
package: {
|
|
158
|
-
name: entry.installJson.package.name,
|
|
159
|
-
version: entry.installJson.package.version,
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
await (0, app_lock_file_1.writeAppLockFileIfChanged)({ rtwsRootAbs, file: nextLock });
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
catch (err) {
|
|
167
|
-
console.error(`Warning: failed to update .minds/app-lock.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
140
|
+
await (0, configuration_file_1.writeAppsConfigurationFileIfChanged)({ rtwsRootAbs, file: nextConfig });
|
|
141
|
+
const loadedLock = await (0, app_lock_file_1.loadAppLockFile)({ rtwsRootAbs });
|
|
142
|
+
if (loadedLock.kind === 'error') {
|
|
143
|
+
console.error(`Error: failed to read .minds/app-lock.yaml: ${loadedLock.errorText}`);
|
|
144
|
+
process.exit(1);
|
|
145
|
+
return;
|
|
168
146
|
}
|
|
147
|
+
const nextLock = (0, app_lock_file_1.upsertLockedApp)({
|
|
148
|
+
existing: loadedLock.file,
|
|
149
|
+
next: {
|
|
150
|
+
id: installJson.appId,
|
|
151
|
+
package: {
|
|
152
|
+
name: installJson.package.name,
|
|
153
|
+
version: installJson.package.version,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
await (0, app_lock_file_1.writeAppLockFileIfChanged)({ rtwsRootAbs, file: nextLock });
|
|
158
|
+
await (0, workspace_app_state_1.refreshAppsDerivedState)({ rtwsRootAbs });
|
|
159
|
+
void args.force;
|
|
169
160
|
console.log(shouldUseLocal
|
|
170
|
-
? `Installed app '${
|
|
171
|
-
: `Installed app '${
|
|
172
|
-
if (
|
|
173
|
-
console.log(`Enabled app '${
|
|
161
|
+
? `Installed app '${installJson.appId}' from local package: ${localAbs}`
|
|
162
|
+
: `Installed app '${installJson.appId}' via resolver strategy seed: ${specOrPath}`);
|
|
163
|
+
if (args.enable) {
|
|
164
|
+
console.log(`Enabled app '${installJson.appId}'`);
|
|
174
165
|
}
|
|
175
166
|
}
|
|
167
|
+
function isAppCurrentlyDisabled(disabledApps, appId) {
|
|
168
|
+
return (disabledApps ?? []).includes(appId);
|
|
169
|
+
}
|
|
176
170
|
if (require.main === module) {
|
|
177
171
|
main().catch((err) => {
|
|
178
172
|
console.error('Unhandled error:', err);
|
package/dist/cli/uninstall.js
CHANGED
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* uninstall subcommand for dominds CLI (Apps)
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* dominds uninstall <appId> [--purge]
|
|
8
|
-
*/
|
|
9
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
5
|
};
|
|
12
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
7
|
exports.main = main;
|
|
14
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
|
15
|
-
const
|
|
16
|
-
const
|
|
8
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const app_lock_file_1 = require("../apps/app-lock-file");
|
|
11
|
+
const configuration_file_1 = require("../apps/configuration-file");
|
|
12
|
+
const manifest_1 = require("../apps/manifest");
|
|
13
|
+
const workspace_app_state_1 = require("../apps/workspace-app-state");
|
|
17
14
|
function printHelp() {
|
|
18
15
|
console.log(`Usage:
|
|
19
16
|
dominds uninstall <appId> [--purge]
|
|
@@ -25,18 +22,18 @@ Options:
|
|
|
25
22
|
function parseArgs(argv) {
|
|
26
23
|
const positional = [];
|
|
27
24
|
let purge = false;
|
|
28
|
-
for (const
|
|
29
|
-
if (
|
|
25
|
+
for (const arg of argv) {
|
|
26
|
+
if (arg === '--help' || arg === '-h') {
|
|
30
27
|
printHelp();
|
|
31
28
|
process.exit(0);
|
|
32
29
|
}
|
|
33
|
-
if (
|
|
30
|
+
if (arg === '--purge') {
|
|
34
31
|
purge = true;
|
|
35
32
|
continue;
|
|
36
33
|
}
|
|
37
|
-
if (
|
|
38
|
-
throw new Error(`Unknown option: ${
|
|
39
|
-
positional.push(
|
|
34
|
+
if (arg.startsWith('-'))
|
|
35
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
36
|
+
positional.push(arg);
|
|
40
37
|
}
|
|
41
38
|
if (positional.length !== 1)
|
|
42
39
|
throw new Error('uninstall requires exactly one <appId>');
|
|
@@ -54,23 +51,49 @@ async function main() {
|
|
|
54
51
|
return;
|
|
55
52
|
}
|
|
56
53
|
const rtwsRootAbs = process.cwd();
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
const loadedManifest = await (0, manifest_1.loadDomindsAppManifest)({
|
|
55
|
+
packageRootAbs: rtwsRootAbs,
|
|
56
|
+
manifestRelPath: manifest_1.DEFAULT_DOMINDS_APP_MANIFEST_REL_PATH,
|
|
57
|
+
});
|
|
58
|
+
const manifest = loadedManifest.kind === 'ok' ? loadedManifest.manifest : (0, manifest_1.makeDefaultRtwsAppManifest)();
|
|
59
|
+
const nextManifest = (0, manifest_1.removeManifestDependency)({
|
|
60
|
+
manifest,
|
|
61
|
+
dependencyId: args.appId,
|
|
62
|
+
});
|
|
63
|
+
if (nextManifest === manifest) {
|
|
64
|
+
console.error(`Error: app '${args.appId}' is not declared in .minds/app.yaml dependencies`);
|
|
60
65
|
process.exit(1);
|
|
61
66
|
return;
|
|
62
67
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
await (0, manifest_1.writeDomindsAppManifestIfChanged)({
|
|
69
|
+
packageRootAbs: rtwsRootAbs,
|
|
70
|
+
manifestRelPath: manifest_1.DEFAULT_DOMINDS_APP_MANIFEST_REL_PATH,
|
|
71
|
+
manifest: nextManifest,
|
|
72
|
+
});
|
|
73
|
+
const loadedConfig = await (0, configuration_file_1.loadAppsConfigurationFile)({ rtwsRootAbs });
|
|
74
|
+
if (loadedConfig.kind === 'error') {
|
|
75
|
+
console.error(`Error: failed to read .apps/configuration.yaml: ${loadedConfig.errorText}`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const nextConfig = (0, configuration_file_1.setAppDisabledInConfiguration)({
|
|
80
|
+
existing: loadedConfig.file,
|
|
81
|
+
appId: args.appId,
|
|
82
|
+
disabled: false,
|
|
83
|
+
});
|
|
84
|
+
await (0, configuration_file_1.writeAppsConfigurationFileIfChanged)({ rtwsRootAbs, file: nextConfig });
|
|
85
|
+
const loadedLock = await (0, app_lock_file_1.loadAppLockFile)({ rtwsRootAbs });
|
|
86
|
+
if (loadedLock.kind === 'error') {
|
|
87
|
+
console.error(`Error: failed to read .minds/app-lock.yaml: ${loadedLock.errorText}`);
|
|
66
88
|
process.exit(1);
|
|
67
89
|
return;
|
|
68
90
|
}
|
|
69
|
-
const
|
|
70
|
-
await (0,
|
|
91
|
+
const nextLock = (0, app_lock_file_1.removeLockedApp)({ existing: loadedLock.file, appId: args.appId });
|
|
92
|
+
await (0, app_lock_file_1.writeAppLockFileIfChanged)({ rtwsRootAbs, file: nextLock });
|
|
93
|
+
await (0, workspace_app_state_1.refreshAppsDerivedState)({ rtwsRootAbs });
|
|
71
94
|
if (args.purge) {
|
|
72
|
-
const
|
|
73
|
-
await promises_1.default.rm(
|
|
95
|
+
const appDirAbs = node_path_1.default.resolve(rtwsRootAbs, '.apps', args.appId);
|
|
96
|
+
await promises_1.default.rm(appDirAbs, { recursive: true, force: true });
|
|
74
97
|
console.log(`Uninstalled app '${args.appId}' (purged rtws state: .apps/${args.appId}/)`);
|
|
75
98
|
}
|
|
76
99
|
else {
|
package/dist/cli/update.js
CHANGED
|
@@ -1,44 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
-
/**
|
|
4
|
-
* update subcommand for dominds CLI (Apps)
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* dominds update [<appId>]
|
|
8
|
-
*/
|
|
9
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
-
};
|
|
12
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
4
|
exports.main = main;
|
|
14
|
-
const path_1 = __importDefault(require("path"));
|
|
15
5
|
const app_lock_file_1 = require("../apps/app-lock-file");
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const run_app_json_1 = require("../apps/run-app-json");
|
|
6
|
+
const manifest_1 = require("../apps/manifest");
|
|
7
|
+
const workspace_app_state_1 = require("../apps/workspace-app-state");
|
|
19
8
|
function printHelp() {
|
|
20
9
|
console.log(`Usage:
|
|
21
10
|
dominds update [<appId>]
|
|
22
11
|
|
|
23
12
|
Notes:
|
|
24
|
-
-
|
|
25
|
-
-
|
|
13
|
+
- Re-runs dynamic app resolution using .minds/app.yaml + .apps/configuration.yaml.
|
|
14
|
+
- Refreshes .apps/resolution.yaml and .minds/app-lock.yaml.
|
|
26
15
|
`);
|
|
27
16
|
}
|
|
28
17
|
function parseArgs(argv) {
|
|
29
18
|
const positional = [];
|
|
30
|
-
for (const
|
|
31
|
-
if (
|
|
19
|
+
for (const arg of argv) {
|
|
20
|
+
if (arg === '--help' || arg === '-h') {
|
|
32
21
|
printHelp();
|
|
33
22
|
process.exit(0);
|
|
34
23
|
}
|
|
35
|
-
if (
|
|
36
|
-
throw new Error(`Unknown option: ${
|
|
37
|
-
positional.push(
|
|
24
|
+
if (arg.startsWith('-'))
|
|
25
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
26
|
+
positional.push(arg);
|
|
38
27
|
}
|
|
39
28
|
if (positional.length > 1)
|
|
40
29
|
throw new Error('update accepts at most one <appId>');
|
|
41
|
-
return { appId: positional
|
|
30
|
+
return { appId: positional[0] ?? null };
|
|
42
31
|
}
|
|
43
32
|
async function main() {
|
|
44
33
|
let args;
|
|
@@ -52,75 +41,42 @@ async function main() {
|
|
|
52
41
|
return;
|
|
53
42
|
}
|
|
54
43
|
const rtwsRootAbs = process.cwd();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
console.error(`Error:
|
|
44
|
+
if (args.appId !== null &&
|
|
45
|
+
!(await (0, manifest_1.hasRtwsDeclaredAppDependency)({ rtwsRootAbs, appId: args.appId }))) {
|
|
46
|
+
console.error(`Error: app '${args.appId}' is not declared in .minds/app.yaml dependencies`);
|
|
58
47
|
process.exit(1);
|
|
59
48
|
return;
|
|
60
49
|
}
|
|
50
|
+
const resolution = await (0, workspace_app_state_1.refreshAppsDerivedState)({ rtwsRootAbs });
|
|
61
51
|
const loadedLock = await (0, app_lock_file_1.loadAppLockFile)({ rtwsRootAbs });
|
|
62
|
-
const shouldUpdateLock = loadedLock.kind === 'ok';
|
|
63
52
|
if (loadedLock.kind === 'error') {
|
|
64
|
-
console.error(`
|
|
53
|
+
console.error(`Error: failed to read .minds/app-lock.yaml: ${loadedLock.errorText}`);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
return;
|
|
65
56
|
}
|
|
66
|
-
let nextLock = loadedLock.
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
})();
|
|
78
|
-
let nextFile = loaded.file;
|
|
79
|
-
for (const entry of targets) {
|
|
80
|
-
const installJson = entry.source.kind === 'npx'
|
|
81
|
-
? await (0, run_app_json_1.runDomindsAppJsonViaNpx)({ spec: entry.source.spec, cwdAbs: rtwsRootAbs })
|
|
82
|
-
: await (0, run_app_json_1.runDomindsAppJsonViaLocalPackage)({
|
|
83
|
-
packageRootAbs: path_1.default.resolve(entry.source.pathAbs),
|
|
84
|
-
});
|
|
85
|
-
if (installJson.appId !== entry.id) {
|
|
86
|
-
throw new Error(`Update failed: appId mismatch for '${entry.id}': got '${installJson.appId}' from --json handshake`);
|
|
87
|
-
}
|
|
88
|
-
const assignedPort = await (0, assigned_port_1.resolveStableAssignedPort)({
|
|
89
|
-
appId: entry.id,
|
|
90
|
-
installJson,
|
|
91
|
-
existingApps: nextFile.apps,
|
|
92
|
-
existingAssignedPort: entry.assignedPort,
|
|
93
|
-
});
|
|
94
|
-
const updated = {
|
|
95
|
-
...entry,
|
|
96
|
-
assignedPort,
|
|
97
|
-
installJson,
|
|
98
|
-
};
|
|
99
|
-
nextFile = (0, resolution_file_1.upsertResolvedApp)({ existing: nextFile, next: updated });
|
|
100
|
-
if (shouldUpdateLock && nextLock) {
|
|
101
|
-
nextLock = (0, app_lock_file_1.upsertLockedApp)({
|
|
102
|
-
existing: nextLock,
|
|
103
|
-
next: {
|
|
104
|
-
id: updated.id,
|
|
105
|
-
source: updated.source,
|
|
106
|
-
package: {
|
|
107
|
-
name: updated.installJson.package.name,
|
|
108
|
-
version: updated.installJson.package.version,
|
|
109
|
-
},
|
|
57
|
+
let nextLock = loadedLock.file;
|
|
58
|
+
for (const app of resolution.apps) {
|
|
59
|
+
if (args.appId !== null && app.id !== args.appId)
|
|
60
|
+
continue;
|
|
61
|
+
nextLock = (0, app_lock_file_1.upsertLockedApp)({
|
|
62
|
+
existing: nextLock,
|
|
63
|
+
next: {
|
|
64
|
+
id: app.id,
|
|
65
|
+
package: {
|
|
66
|
+
name: app.installJson.package.name,
|
|
67
|
+
version: app.installJson.package.version,
|
|
110
68
|
},
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
console.log(`Updated app '${entry.id}'`);
|
|
69
|
+
},
|
|
70
|
+
});
|
|
114
71
|
}
|
|
115
|
-
await (0,
|
|
116
|
-
if (
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
catch (err) {
|
|
121
|
-
console.error(`Warning: failed to update .minds/app-lock.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
72
|
+
await (0, app_lock_file_1.writeAppLockFileIfChanged)({ rtwsRootAbs, file: nextLock });
|
|
73
|
+
if (args.appId === null) {
|
|
74
|
+
for (const app of resolution.apps) {
|
|
75
|
+
console.log(`Updated app '${app.id}'`);
|
|
122
76
|
}
|
|
77
|
+
return;
|
|
123
78
|
}
|
|
79
|
+
console.log(`Updated app '${args.appId}'`);
|
|
124
80
|
}
|
|
125
81
|
if (require.main === module) {
|
|
126
82
|
main().catch((err) => {
|
|
@@ -56,7 +56,8 @@ Goal: close the loop for “dependency resolution + observability + regressabili
|
|
|
56
56
|
- optional missing/disabled: silently skipped (must not block startup; Problems not required; debug logs allowed).
|
|
57
57
|
- required missing/disabled: must not block startup; must be observable in WebUI Problems; related capability enters defunc/unavailable.
|
|
58
58
|
- required disable propagation:
|
|
59
|
-
- `<rtws>/.apps/
|
|
59
|
+
- `<rtws>/.apps/configuration.yaml` must represent explicit user disables (`disabledApps`).
|
|
60
|
+
- `<rtws>/.apps/resolution.yaml` must only record the resolved effective enabled state.
|
|
60
61
|
- when dependencies recover, propagated disables must auto-recover (without overriding explicit user disables).
|
|
61
62
|
- Override precedence (documented contract): `rtws override > app override > app defaults`.
|
|
62
63
|
- Lock semantics (design contract): `.minds/app-lock.yaml` freezes dependency versions only; enable/disable must not jitter the lock.
|
|
@@ -153,11 +154,12 @@ Analogy (intuition only):
|
|
|
153
154
|
|
|
154
155
|
- `.minds/app.yaml`: like `package.json` (declares the dependency graph + app default config such as `frontend.defaultPort`).
|
|
155
156
|
- `.minds/app-lock.yaml`: like `pnpm-lock.yaml` (freezes dependency versions; should not jitter due to enable/disable).
|
|
156
|
-
- `<rtws>/.apps/
|
|
157
|
+
- `<rtws>/.apps/configuration.yaml`: workspace user config (resolution strategy + explicit `disabledApps`).
|
|
158
|
+
- `<rtws>/.apps/resolution.yaml`: per-rtws resolution snapshot (“where each app resolved from / whether it is effectively enabled / whether its port is already pinned”).
|
|
157
159
|
|
|
158
160
|
Key semantics:
|
|
159
161
|
|
|
160
|
-
- enable/disable operations must only affect `<rtws>/.apps/
|
|
162
|
+
- enable/disable operations must only affect `<rtws>/.apps/configuration.yaml.disabledApps`.
|
|
161
163
|
- dependencies can be declared as `required` vs `optional`:
|
|
162
164
|
- disabling a `required` dependency must transitively make dependents _effectively disabled_ (at minimum observable via UI/Problems).
|
|
163
165
|
- disabling an `optional` dependency must not disable dependents.
|
|
@@ -180,14 +182,17 @@ Recommended principles:
|
|
|
180
182
|
(Current: implemented) existing anchors:
|
|
181
183
|
|
|
182
184
|
- JSON schema: `dominds/main/apps/app-json.ts` (`DomindsAppInstallJsonV1`).
|
|
185
|
+
- Apps configuration file: `dominds/main/apps/configuration-file.ts`.
|
|
183
186
|
- Apps resolution file: `dominds/main/apps/resolution-file.ts`.
|
|
184
187
|
|
|
185
|
-
(Current: implemented) the kernel
|
|
188
|
+
(Current: implemented) the kernel now splits `<rtws>/.apps/configuration.yaml` from `<rtws>/.apps/resolution.yaml`:
|
|
186
189
|
|
|
187
|
-
-
|
|
188
|
-
-
|
|
190
|
+
- `configuration.yaml` carries user config: `resolutionStrategy?` (if present) overrides the default strategy, and `disabledApps` records explicit disables.
|
|
191
|
+
- `resolution.yaml` carries derived state only: `apps[]` stores `enabled` / `assignedPort` / `source` / `installJson`.
|
|
192
|
+
- If `configuration.yaml` is missing, strategy falls back to defaults (`order=['local']`, `localRoots=['dominds-apps']`) and no explicit disables apply.
|
|
193
|
+
- If `resolution.yaml` is missing, the snapshot starts empty and the kernel re-materializes it from the declared dependency graph.
|
|
189
194
|
|
|
190
|
-
So even without `<rtws>/.apps/resolution.yaml`, as long as `.minds/app.yaml` declares dependencies, the kernel still resolves local apps via the default strategy; if the root manifest has no dependencies, the effective enabled apps set is empty.
|
|
195
|
+
So even without `<rtws>/.apps/configuration.yaml` or `<rtws>/.apps/resolution.yaml`, as long as `.minds/app.yaml` declares dependencies, the kernel still resolves local apps via the default strategy; if the root manifest has no dependencies, the effective enabled apps set is empty.
|
|
191
196
|
|
|
192
197
|
## App-provided `.minds/**` assets
|
|
193
198
|
|