dominds 1.15.3 → 1.15.5
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/dist/apps/assigned-port.d.ts +3 -3
- package/dist/apps/resolution-file.d.ts +2 -2
- package/dist/apps/run-app-json.d.ts +3 -3
- package/dist/apps-host/client.d.ts +2 -2
- package/dist/apps-host/host.js +6 -7
- package/dist/apps-host/ipc-types.d.ts +2 -2
- package/dist/docs/app-constitution.md +1 -1
- package/dist/docs/app-constitution.zh.md +1 -1
- package/dist/docs/team_mgmt-toolset.md +7 -9
- package/dist/docs/team_mgmt-toolset.zh.md +3 -9
- package/dist/docs/tellask-result-unification.md +280 -0
- package/dist/llm/kernel-driver/drive.js +52 -29
- package/dist/llm/kernel-driver/fbr.d.ts +1 -1
- package/dist/llm/kernel-driver/fbr.js +2 -1
- package/dist/mcp/supervisor.js +4 -6
- package/dist/runtime/tool-result-messages.d.ts +2 -1
- package/dist/runtime/tool-result-messages.js +13 -12
- package/dist/shared/utils/fbr.js +8 -12
- package/dist/shared/utils/inter-dialog-format.js +4 -6
- package/dist/tool.d.ts +9 -1
- package/dist/tool.js +20 -0
- package/dist/tools/apply-patch.js +2 -1
- package/dist/tools/ctrl.js +53 -50
- package/dist/tools/env.js +7 -6
- package/dist/tools/fs.js +64 -59
- package/dist/tools/mcp.js +6 -5
- package/dist/tools/mem.js +35 -34
- package/dist/tools/os.js +30 -29
- package/dist/tools/plan.js +12 -10
- package/dist/tools/ripgrep.js +17 -10
- package/dist/tools/team_mgmt.js +27 -30
- package/dist/tools/toolset-manual.js +12 -11
- package/dist/tools/txt.d.ts +2 -2
- package/dist/tools/txt.js +61 -77
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-DsirmCgI.js → _basePickBy-QPiPxkcd.js} +3 -3
- package/webapp/dist/assets/_basePickBy-QPiPxkcd.js.map +1 -0
- package/webapp/dist/assets/{_baseUniq-tR6G8loB.js → _baseUniq-Dxi782ML.js} +2 -2
- package/webapp/dist/assets/_baseUniq-Dxi782ML.js.map +1 -0
- package/webapp/dist/assets/{arc-CzxpASkZ.js → arc-CmoWlJCk.js} +2 -2
- package/webapp/dist/assets/arc-CmoWlJCk.js.map +1 -0
- package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-BSH7H5oI.js → architectureDiagram-VXUJARFQ-Cj8eAVGw.js} +8 -26
- package/webapp/dist/assets/architectureDiagram-VXUJARFQ-Cj8eAVGw.js.map +1 -0
- package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-DpLIr7yO.js → blockDiagram-VD42YOAC-DCSpBIH9.js} +170 -187
- package/webapp/dist/assets/blockDiagram-VD42YOAC-DCSpBIH9.js.map +1 -0
- package/webapp/dist/assets/{c4Diagram-IC4MRINW-WuYKgWfY.js → c4Diagram-YG6GDRKO-BLnTx0I5.js} +4 -4
- package/webapp/dist/assets/c4Diagram-YG6GDRKO-BLnTx0I5.js.map +1 -0
- package/webapp/dist/assets/{channel-B-v9dqLN.js → channel-CHTZ0PXJ.js} +2 -2
- package/webapp/dist/assets/channel-CHTZ0PXJ.js.map +1 -0
- package/webapp/dist/assets/{chunk-4BX2VUAB-MtFUfKZy.js → chunk-4BX2VUAB-D9vwOR-u.js} +2 -2
- package/webapp/dist/assets/chunk-4BX2VUAB-D9vwOR-u.js.map +1 -0
- package/webapp/dist/assets/{chunk-55IACEB6-rY9AJdzj.js → chunk-55IACEB6-Bls-7sze.js} +2 -2
- package/webapp/dist/assets/chunk-55IACEB6-Bls-7sze.js.map +1 -0
- package/webapp/dist/assets/{chunk-WL4C6EOR-DDCnEwft.js → chunk-B4BG7PRW-BXRfjHmI.js} +121 -171
- package/webapp/dist/assets/chunk-B4BG7PRW-BXRfjHmI.js.map +1 -0
- package/webapp/dist/assets/{chunk-NQ4KR5QH-CK365lrr.js → chunk-DI55MBZ5-BPJLdjOS.js} +7 -9
- package/webapp/dist/assets/chunk-DI55MBZ5-BPJLdjOS.js.map +1 -0
- package/webapp/dist/assets/{chunk-FMBD7UC4-B-RtOs7e.js → chunk-FMBD7UC4-ETqcFoxP.js} +2 -2
- package/webapp/dist/assets/chunk-FMBD7UC4-ETqcFoxP.js.map +1 -0
- package/webapp/dist/assets/{chunk-KX2RTZJC-DH9UrpuG.js → chunk-QN33PNHL-B-dPkZ9T.js} +2 -2
- package/webapp/dist/assets/chunk-QN33PNHL-B-dPkZ9T.js.map +1 -0
- package/webapp/dist/assets/{chunk-QZHKN3VN-BCaWPGDm.js → chunk-QZHKN3VN-BqX4sv4Q.js} +2 -2
- package/webapp/dist/assets/chunk-QZHKN3VN-BqX4sv4Q.js.map +1 -0
- package/webapp/dist/assets/{chunk-JSJVCQXG-Da1d3uS4.js → chunk-TZMSLE5B-BnfBq8PA.js} +6 -14
- package/webapp/dist/assets/chunk-TZMSLE5B-BnfBq8PA.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-VBA2DB6C-CvMBU4WA.js → classDiagram-2ON5EDUG-w89KWhQq.js} +6 -7
- package/webapp/dist/assets/classDiagram-2ON5EDUG-w89KWhQq.js.map +1 -0
- package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CvMBU4WA.js → classDiagram-v2-WZHVMYZB-w89KWhQq.js} +6 -7
- package/webapp/dist/assets/classDiagram-v2-WZHVMYZB-w89KWhQq.js.map +1 -0
- package/webapp/dist/assets/{clone-r98jR0MC.js → clone-D7jwWk83.js} +2 -2
- package/webapp/dist/assets/clone-D7jwWk83.js.map +1 -0
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-t6J60Ogk.js → cose-bilkent-S5V4N54A-CHdRDUYT.js} +2 -2
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-CHdRDUYT.js.map +1 -0
- package/webapp/dist/assets/cytoscape.esm-Bm8DJGmZ.js.map +1 -1
- package/webapp/dist/assets/{dagre-KLK3FWXG-BlqmY2DV.js → dagre-6UL2VRFP-CfltZHNg.js} +7 -7
- package/webapp/dist/assets/dagre-6UL2VRFP-CfltZHNg.js.map +1 -0
- package/webapp/dist/assets/defaultLocale-B2RvLBDe.js.map +1 -1
- package/webapp/dist/assets/{diagram-E7M64L7V-FwCHeIUD.js → diagram-PSM6KHXK-Bp_jHEhR.js} +10 -10
- package/webapp/dist/assets/diagram-PSM6KHXK-Bp_jHEhR.js.map +1 -0
- package/webapp/dist/assets/{diagram-IFDJBPK2-NhtmkuZG.js → diagram-QEK2KX5R-Cdvy6Ep9.js} +8 -9
- package/webapp/dist/assets/diagram-QEK2KX5R-Cdvy6Ep9.js.map +1 -0
- package/webapp/dist/assets/{diagram-P4PSJMXO-B9FcmokX.js → diagram-S2PKOQOG-BwUE6huD.js} +8 -8
- package/webapp/dist/assets/diagram-S2PKOQOG-BwUE6huD.js.map +1 -0
- package/webapp/dist/assets/{erDiagram-INFDFZHY-DHKmWvtB.js → erDiagram-Q2GNP2WA-_GQN3dnV.js} +75 -96
- package/webapp/dist/assets/erDiagram-Q2GNP2WA-_GQN3dnV.js.map +1 -0
- package/webapp/dist/assets/{flowDiagram-PKNHOUZH-C7Zi8I7T.js → flowDiagram-NV44I4VS-Dhbd5FE4.js} +81 -98
- package/webapp/dist/assets/flowDiagram-NV44I4VS-Dhbd5FE4.js.map +1 -0
- package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-Cv2T8tz_.js → ganttDiagram-JELNMOA3-BKQtJ_t7.js} +3 -28
- package/webapp/dist/assets/ganttDiagram-JELNMOA3-BKQtJ_t7.js.map +1 -0
- package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-DztaipJU.js → gitGraphDiagram-V2S2FVAM-BcW7gX3_.js} +46 -38
- package/webapp/dist/assets/gitGraphDiagram-V2S2FVAM-BcW7gX3_.js.map +1 -0
- package/webapp/dist/assets/graph-CE4HL0aU.js +425 -0
- package/webapp/dist/assets/graph-CE4HL0aU.js.map +1 -0
- package/webapp/dist/assets/{index-hve5MWPs.js → index-JCkFg05X.js} +1111 -1027
- package/webapp/dist/assets/{index-hve5MWPs.js.map → index-JCkFg05X.js.map} +1 -1
- package/webapp/dist/assets/{index-YaxF76or.css → index-xvYYeHuy.css} +1 -1
- package/webapp/dist/assets/{infoDiagram-LFFYTUFH-VgsbBPZP.js → infoDiagram-HS3SLOUP-B9IsDiBf.js} +7 -7
- package/webapp/dist/assets/infoDiagram-HS3SLOUP-B9IsDiBf.js.map +1 -0
- package/webapp/dist/assets/init-ZxktEp_H.js.map +1 -1
- package/webapp/dist/assets/{journeyDiagram-4ABVD52K-OO8sev-Y.js → journeyDiagram-XKPGCS4Q-BpJK6b4f.js} +5 -5
- package/webapp/dist/assets/journeyDiagram-XKPGCS4Q-BpJK6b4f.js.map +1 -0
- package/webapp/dist/assets/{kanban-definition-K7BYSVSG-DiYCC1Ig.js → kanban-definition-3W4ZIXB7-D0vLghpg.js} +3 -5
- package/webapp/dist/assets/kanban-definition-3W4ZIXB7-D0vLghpg.js.map +1 -0
- package/webapp/dist/assets/{layout-DdZSgGdu.js → layout-C9CTTdmU.js} +5 -5
- package/webapp/dist/assets/layout-C9CTTdmU.js.map +1 -0
- package/webapp/dist/assets/{linear-7-aHtaFi.js → linear-DoEKTEMq.js} +2 -2
- package/webapp/dist/assets/linear-DoEKTEMq.js.map +1 -0
- package/webapp/dist/assets/{mindmap-definition-YRQLILUH-IG3I-RdD.js → mindmap-definition-VGOIOE7T-D09DtFPK.js} +5 -7
- package/webapp/dist/assets/mindmap-definition-VGOIOE7T-D09DtFPK.js.map +1 -0
- package/webapp/dist/assets/ordinal-CxptdPJm.js.map +1 -1
- package/webapp/dist/assets/{pieDiagram-SKSYHLDU-z68KJT5r.js → pieDiagram-ADFJNKIX-BcM3GR1l.js} +8 -8
- package/webapp/dist/assets/pieDiagram-ADFJNKIX-BcM3GR1l.js.map +1 -0
- package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-DaENWdO6.js → quadrantDiagram-AYHSOK5B-D8DjF5Pg.js} +3 -3
- package/webapp/dist/assets/quadrantDiagram-AYHSOK5B-D8DjF5Pg.js.map +1 -0
- package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-ROTFv4sa.js → requirementDiagram-UZGBJVZJ-D2J7OgDl.js} +6 -16
- package/webapp/dist/assets/requirementDiagram-UZGBJVZJ-D2J7OgDl.js.map +1 -0
- package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-CK7qtpzw.js → sankeyDiagram-TZEHDZUN-BHweOFUp.js} +2 -2
- package/webapp/dist/assets/sankeyDiagram-TZEHDZUN-BHweOFUp.js.map +1 -0
- package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-R5lDySeI.js → sequenceDiagram-WL72ISMW-BDCBaUSI.js} +201 -601
- package/webapp/dist/assets/sequenceDiagram-WL72ISMW-BDCBaUSI.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-RAJIS63D-sr7msF5U.js → stateDiagram-FKZM4ZOC-jwEbpF4Z.js} +9 -9
- package/webapp/dist/assets/stateDiagram-FKZM4ZOC-jwEbpF4Z.js.map +1 -0
- package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-X663liwS.js → stateDiagram-v2-4FDKWEC3-Blk529CR.js} +5 -5
- package/webapp/dist/assets/stateDiagram-v2-4FDKWEC3-Blk529CR.js.map +1 -0
- package/webapp/dist/assets/{timeline-definition-YZTLITO2-Bw0TdG26.js → timeline-definition-IT6M3QCI-BQO-9msf.js} +3 -3
- package/webapp/dist/assets/timeline-definition-IT6M3QCI-BQO-9msf.js.map +1 -0
- package/webapp/dist/assets/{treemap-KZPCXAKY-D_sjKwI7.js → treemap-GDKQZRPO-Bc2g2vuB.js} +24 -37
- package/webapp/dist/assets/treemap-GDKQZRPO-Bc2g2vuB.js.map +1 -0
- package/webapp/dist/assets/{xychartDiagram-JWTSCODW-C65ESjTc.js → xychartDiagram-PRI3JC2R-DKzNu-Hu.js} +4 -4
- package/webapp/dist/assets/xychartDiagram-PRI3JC2R-DKzNu-Hu.js.map +1 -0
- package/webapp/dist/index.html +2 -2
- package/webapp/dist/assets/_basePickBy-DsirmCgI.js.map +0 -1
- package/webapp/dist/assets/_baseUniq-tR6G8loB.js.map +0 -1
- package/webapp/dist/assets/arc-CzxpASkZ.js.map +0 -1
- package/webapp/dist/assets/architectureDiagram-2XIMDMQ5-BSH7H5oI.js.map +0 -1
- package/webapp/dist/assets/blockDiagram-WCTKOSBZ-DpLIr7yO.js.map +0 -1
- package/webapp/dist/assets/c4Diagram-IC4MRINW-WuYKgWfY.js.map +0 -1
- package/webapp/dist/assets/channel-B-v9dqLN.js.map +0 -1
- package/webapp/dist/assets/chunk-4BX2VUAB-MtFUfKZy.js.map +0 -1
- package/webapp/dist/assets/chunk-55IACEB6-rY9AJdzj.js.map +0 -1
- package/webapp/dist/assets/chunk-FMBD7UC4-B-RtOs7e.js.map +0 -1
- package/webapp/dist/assets/chunk-JSJVCQXG-Da1d3uS4.js.map +0 -1
- package/webapp/dist/assets/chunk-KX2RTZJC-DH9UrpuG.js.map +0 -1
- package/webapp/dist/assets/chunk-NQ4KR5QH-CK365lrr.js.map +0 -1
- package/webapp/dist/assets/chunk-QZHKN3VN-BCaWPGDm.js.map +0 -1
- package/webapp/dist/assets/chunk-WL4C6EOR-DDCnEwft.js.map +0 -1
- package/webapp/dist/assets/classDiagram-VBA2DB6C-CvMBU4WA.js.map +0 -1
- package/webapp/dist/assets/classDiagram-v2-RAHNMMFH-CvMBU4WA.js.map +0 -1
- package/webapp/dist/assets/clone-r98jR0MC.js.map +0 -1
- package/webapp/dist/assets/cose-bilkent-S5V4N54A-t6J60Ogk.js.map +0 -1
- package/webapp/dist/assets/dagre-KLK3FWXG-BlqmY2DV.js.map +0 -1
- package/webapp/dist/assets/diagram-E7M64L7V-FwCHeIUD.js.map +0 -1
- package/webapp/dist/assets/diagram-IFDJBPK2-NhtmkuZG.js.map +0 -1
- package/webapp/dist/assets/diagram-P4PSJMXO-B9FcmokX.js.map +0 -1
- package/webapp/dist/assets/erDiagram-INFDFZHY-DHKmWvtB.js.map +0 -1
- package/webapp/dist/assets/flowDiagram-PKNHOUZH-C7Zi8I7T.js.map +0 -1
- package/webapp/dist/assets/ganttDiagram-A5KZAMGK-Cv2T8tz_.js.map +0 -1
- package/webapp/dist/assets/gitGraphDiagram-K3NZZRJ6-DztaipJU.js.map +0 -1
- package/webapp/dist/assets/graph-C5yf62Vs.js +0 -782
- package/webapp/dist/assets/graph-C5yf62Vs.js.map +0 -1
- package/webapp/dist/assets/infoDiagram-LFFYTUFH-VgsbBPZP.js.map +0 -1
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js +0 -966
- package/webapp/dist/assets/ishikawaDiagram-PHBUUO56-C7j3YWdw.js.map +0 -1
- package/webapp/dist/assets/journeyDiagram-4ABVD52K-OO8sev-Y.js.map +0 -1
- package/webapp/dist/assets/kanban-definition-K7BYSVSG-DiYCC1Ig.js.map +0 -1
- package/webapp/dist/assets/layout-DdZSgGdu.js.map +0 -1
- package/webapp/dist/assets/linear-7-aHtaFi.js.map +0 -1
- package/webapp/dist/assets/mindmap-definition-YRQLILUH-IG3I-RdD.js.map +0 -1
- package/webapp/dist/assets/pieDiagram-SKSYHLDU-z68KJT5r.js.map +0 -1
- package/webapp/dist/assets/quadrantDiagram-337W2JSQ-DaENWdO6.js.map +0 -1
- package/webapp/dist/assets/requirementDiagram-Z7DCOOCP-ROTFv4sa.js.map +0 -1
- package/webapp/dist/assets/sankeyDiagram-WA2Y5GQK-CK7qtpzw.js.map +0 -1
- package/webapp/dist/assets/sequenceDiagram-2WXFIKYE-R5lDySeI.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-RAJIS63D-sr7msF5U.js.map +0 -1
- package/webapp/dist/assets/stateDiagram-v2-FVOUBMTO-X663liwS.js.map +0 -1
- package/webapp/dist/assets/timeline-definition-YZTLITO2-Bw0TdG26.js.map +0 -1
- package/webapp/dist/assets/treemap-KZPCXAKY-D_sjKwI7.js.map +0 -1
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js +0 -2487
- package/webapp/dist/assets/vennDiagram-LZ73GAT5-DhlHIHid.js.map +0 -1
- package/webapp/dist/assets/xychartDiagram-JWTSCODW-C65ESjTc.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
|
|
2
2
|
import type { AppsResolutionEntry } from './resolution-file';
|
|
3
3
|
export type AssignedPortResolutionReason = 'no_frontend' | 'kept_existing' | 'selected_default' | 'allocated_stable_range' | 'reassigned_from_existing_conflict' | 'reassigned_from_existing_unbindable';
|
|
4
4
|
export type AssignedPortResolution = Readonly<{
|
|
@@ -16,13 +16,13 @@ export type AssignedPortResolution = Readonly<{
|
|
|
16
16
|
*/
|
|
17
17
|
export declare function resolveStableAssignedPort(params: {
|
|
18
18
|
appId: string;
|
|
19
|
-
installJson:
|
|
19
|
+
installJson: DomindsAppInstallJson;
|
|
20
20
|
existingApps: ReadonlyArray<AppsResolutionEntry>;
|
|
21
21
|
existingAssignedPort: number | null;
|
|
22
22
|
}): Promise<number | null>;
|
|
23
23
|
export declare function resolveStableAssignedPortWithReason(params: {
|
|
24
24
|
appId: string;
|
|
25
|
-
installJson:
|
|
25
|
+
installJson: DomindsAppInstallJson;
|
|
26
26
|
existingApps: ReadonlyArray<AppsResolutionEntry>;
|
|
27
27
|
existingAssignedPort: number | null;
|
|
28
28
|
}): Promise<AssignedPortResolution>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
|
|
2
2
|
export type AppsResolutionSchemaVersion = 1;
|
|
3
3
|
export type AppsResolutionSource = Readonly<{
|
|
4
4
|
kind: 'npx';
|
|
@@ -12,7 +12,7 @@ export type AppsResolutionEntry = Readonly<{
|
|
|
12
12
|
enabled: boolean;
|
|
13
13
|
source: AppsResolutionSource;
|
|
14
14
|
assignedPort: number | null;
|
|
15
|
-
installJson:
|
|
15
|
+
installJson: DomindsAppInstallJson;
|
|
16
16
|
}>;
|
|
17
17
|
export type AppsResolutionFile = Readonly<{
|
|
18
18
|
schemaVersion: AppsResolutionSchemaVersion;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type DomindsAppInstallJson } from '@longrun-ai/kernel/app-json';
|
|
2
2
|
export declare function runDomindsAppJsonViaNpx(params: {
|
|
3
3
|
spec: string;
|
|
4
4
|
cwdAbs: string;
|
|
5
|
-
}): Promise<
|
|
5
|
+
}): Promise<DomindsAppInstallJson>;
|
|
6
6
|
export declare function runDomindsAppJsonViaLocalPackage(params: {
|
|
7
7
|
packageRootAbs: string;
|
|
8
|
-
}): Promise<
|
|
8
|
+
}): Promise<DomindsAppInstallJson>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { DomindsAppDynamicToolsetsContext, DomindsAppReminderOwnerApplyContext, DomindsAppReminderOwnerRenderContext, DomindsAppReminderOwnerUpdateContext, DomindsAppRunControlContext, DomindsAppRunControlResult } from '@longrun-ai/kernel/app-host-contract';
|
|
2
|
-
import type { DomindsAppHostReminderUpdateResult, DomindsAppHostToolResult,
|
|
2
|
+
import type { DomindsAppHostReminderUpdateResult, DomindsAppHostToolResult, DomindsAppInstallJson, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult } from '@longrun-ai/kernel/app-json';
|
|
3
3
|
import type { ChatMessage } from '../llm/client';
|
|
4
4
|
import type { ToolArguments } from '../tool';
|
|
5
5
|
import type { AppsHostMessageToKernel } from './ipc-types';
|
|
6
6
|
export type EnabledAppForHost = Readonly<{
|
|
7
7
|
appId: string;
|
|
8
8
|
runtimePort: number | null;
|
|
9
|
-
installJson:
|
|
9
|
+
installJson: DomindsAppInstallJson;
|
|
10
10
|
hostSourceVersion: string | null;
|
|
11
11
|
}>;
|
|
12
12
|
export type AppsHostClient = Readonly<{
|
package/dist/apps-host/host.js
CHANGED
|
@@ -33,12 +33,14 @@ function isStringArray(value) {
|
|
|
33
33
|
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
34
34
|
}
|
|
35
35
|
function isToolCallOutput(value) {
|
|
36
|
-
if (typeof value === 'string')
|
|
37
|
-
return true;
|
|
38
36
|
if (!isRecord(value))
|
|
39
37
|
return false;
|
|
40
38
|
if (typeof value['content'] !== 'string')
|
|
41
39
|
return false;
|
|
40
|
+
const outcome = value['outcome'];
|
|
41
|
+
if (outcome !== 'success' && outcome !== 'failure' && outcome !== 'partial_failure') {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
42
44
|
const contentItems = value['contentItems'];
|
|
43
45
|
return contentItems === undefined || Array.isArray(contentItems);
|
|
44
46
|
}
|
|
@@ -183,15 +185,12 @@ function isChatMessage(value) {
|
|
|
183
185
|
return true;
|
|
184
186
|
}
|
|
185
187
|
function normalizeToolResult(value) {
|
|
186
|
-
if (isToolCallOutput(value)) {
|
|
187
|
-
return { output: value };
|
|
188
|
-
}
|
|
189
188
|
if (!isRecord(value)) {
|
|
190
|
-
throw new Error('Invalid app tool result: expected
|
|
189
|
+
throw new Error('Invalid app tool result: expected { output: { content, outcome, contentItems? }, ... }');
|
|
191
190
|
}
|
|
192
191
|
const output = value['output'];
|
|
193
192
|
if (!isToolCallOutput(output)) {
|
|
194
|
-
throw new Error('Invalid app tool result: output must be
|
|
193
|
+
throw new Error('Invalid app tool result: output must be { content, outcome, contentItems? }');
|
|
195
194
|
}
|
|
196
195
|
const reminderRequestsRaw = value['reminderRequests'];
|
|
197
196
|
if (reminderRequestsRaw !== undefined && !Array.isArray(reminderRequestsRaw)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DomindsAppRunControlResult } from '@longrun-ai/kernel/app-host-contract';
|
|
2
|
-
import type { DomindsAppDialogReminderRequestBatch, DomindsAppHostReminderUpdateResult,
|
|
2
|
+
import type { DomindsAppDialogReminderRequestBatch, DomindsAppHostReminderUpdateResult, DomindsAppInstallJson, DomindsAppReminderApplyRequest, DomindsAppReminderApplyResult, DomindsAppReminderState } from '@longrun-ai/kernel/app-json';
|
|
3
3
|
import type { LanguageCode } from '@longrun-ai/kernel/types/language';
|
|
4
4
|
import type { ChatMessage } from '../llm/client';
|
|
5
5
|
import type { ToolArguments, ToolCallOutput } from '../tool';
|
|
@@ -13,7 +13,7 @@ export type AppsHostKernelInitMessage = Readonly<{
|
|
|
13
13
|
apps: ReadonlyArray<Readonly<{
|
|
14
14
|
appId: string;
|
|
15
15
|
runtimePort: number | null;
|
|
16
|
-
installJson:
|
|
16
|
+
installJson: DomindsAppInstallJson;
|
|
17
17
|
}>>;
|
|
18
18
|
}>;
|
|
19
19
|
export type AppsHostKernelToolCallMessage = Readonly<{
|
|
@@ -222,7 +222,7 @@ Recommended user mental model:
|
|
|
222
222
|
|
|
223
223
|
(Current: implemented) existing anchors:
|
|
224
224
|
|
|
225
|
-
- JSON schema: `dominds/main/apps/app-json.ts` (`
|
|
225
|
+
- JSON schema: `dominds/main/apps/app-json.ts` (`DomindsAppInstallJson`).
|
|
226
226
|
- Apps configuration file: `dominds/main/apps/configuration-file.ts`.
|
|
227
227
|
- Apps resolution file: `dominds/main/apps/resolution-file.ts`.
|
|
228
228
|
|
|
@@ -221,7 +221,7 @@ Install JSON 是 app 与 Kernel/CLI 之间的**安装/运行握手载荷**。它
|
|
|
221
221
|
|
|
222
222
|
(现状:已实现)install json schema 与 apps 配置/解析锚点仍可参考:
|
|
223
223
|
|
|
224
|
-
- JSON schema:`dominds/main/apps/app-json.ts`(`
|
|
224
|
+
- JSON schema:`dominds/main/apps/app-json.ts`(`DomindsAppInstallJson`)。
|
|
225
225
|
- `.apps/configuration.yaml`:`dominds/main/apps/configuration-file.ts`。
|
|
226
226
|
- `.apps/resolution.yaml`:`dominds/main/apps/resolution-file.ts`。
|
|
227
227
|
|
|
@@ -133,6 +133,9 @@ Notes:
|
|
|
133
133
|
- For `team_mgmt`, that explicit allowlist is `.minds/**` (including `.minds/memory/**`) so the
|
|
134
134
|
team manager can repair accidental corruptions made by other tools (even though `.minds/memory/**`
|
|
135
135
|
already has dedicated `personal_memory` / `team_memory` tools for normal use).
|
|
136
|
+
- Conversely, the denial of `.minds/**` / `*.tsk/**` for general file tools is a **built-in hard runtime
|
|
137
|
+
rule**, not a standard deny stanza you should keep repeating in `team.yaml`. Only additional
|
|
138
|
+
business-specific constraints belong in explicit `no_read_dirs` / `no_write_dirs`.
|
|
136
139
|
- Require explicit `.minds/...` paths and validate them; do not support “implicitly scoped” paths
|
|
137
140
|
like `team.yaml`.
|
|
138
141
|
|
|
@@ -444,19 +447,14 @@ member_defaults:
|
|
|
444
447
|
toolsets:
|
|
445
448
|
- ws_read
|
|
446
449
|
- personal_memory
|
|
447
|
-
# Default posture: deny `.minds/` edits for normal members.
|
|
448
|
-
# (Team management should be done via `team_mgmt` tools, not general file tools.)
|
|
449
|
-
no_read_dirs:
|
|
450
|
-
- .minds/team.yaml
|
|
451
|
-
- .minds/llm.yaml
|
|
452
|
-
- .minds/mcp.yaml
|
|
453
|
-
- .minds/team/**
|
|
454
|
-
no_write_dirs:
|
|
455
|
-
- .minds/**
|
|
456
450
|
|
|
457
451
|
default_responder: fuxi
|
|
458
452
|
|
|
459
453
|
members:
|
|
454
|
+
|
|
455
|
+
Note: in the normal-member example above, do **not** add `no_read_dirs` / `no_write_dirs` merely to
|
|
456
|
+
restate that `.minds/**` is blocked. That boundary is already enforced by the runtime for general
|
|
457
|
+
file tools; explicit deny entries should be reserved for extra constraints beyond the built-ins.
|
|
460
458
|
# Example visible teammate (recommended): define at least one non-hidden responder for daily work.
|
|
461
459
|
dev:
|
|
462
460
|
name: Dev
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
- 拒绝规范化后解析到 `.minds/` 之外的任何路径
|
|
111
111
|
- 优先使用显式白名单而非" rtws 中的任何内容"
|
|
112
112
|
- 对于 `team_mgmt`,该显式白名单是 `.minds/**`(包括 `.minds/memory/**`),以便团队管理者可以修复其他工具造成的意外损坏(即使 `.minds/memory/**` 已有专用的 `personal_memory` / `team_memory` 工具供正常使用)
|
|
113
|
+
- 反过来,普通通用文件工具对 `.minds/**` / `*.tsk/**` 的拒绝是**系统内置硬约束**,不是需要在 `team.yaml` 里重复书写的常规 deny 项。只有额外业务约束才需要显式写入 `no_read_dirs` / `no_write_dirs`
|
|
113
114
|
- 需要显式的 `.minds/...` 路径并验证它们;不支持像 `team.yaml` 这样的"隐式作用域"路径
|
|
114
115
|
|
|
115
116
|
### 为什么需要专用工具集(而不是仅 `read_dirs` / `write_dirs`)?
|
|
@@ -383,19 +384,12 @@ member_defaults:
|
|
|
383
384
|
toolsets:
|
|
384
385
|
- ws_read
|
|
385
386
|
- personal_memory
|
|
386
|
-
# 默认姿态:拒绝普通成员的 `.minds/` 编辑
|
|
387
|
-
#(团队管理应通过 `team_mgmt` 工具完成,而非通用文件工具)
|
|
388
|
-
no_read_dirs:
|
|
389
|
-
- .minds/team.yaml
|
|
390
|
-
- .minds/llm.yaml
|
|
391
|
-
- .minds/mcp.yaml
|
|
392
|
-
- .minds/team/**
|
|
393
|
-
no_write_dirs:
|
|
394
|
-
- .minds/**
|
|
395
387
|
|
|
396
388
|
default_responder: fuxi
|
|
397
389
|
|
|
398
390
|
members:
|
|
391
|
+
|
|
392
|
+
说明:上面的普通成员默认示例**不要**再额外写 `no_read_dirs` / `no_write_dirs` 去重复声明 `.minds/**` 拒绝。那是运行时内置边界,不是常规样板;只有要表达超出内置边界的额外 deny 规则时,才应显式写这些字段。
|
|
399
393
|
# 示例显在成员(推荐):至少定义一个非隐藏的响应者用于日常工作
|
|
400
394
|
dev:
|
|
401
395
|
name: Dev
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Tellask Result Unification
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
This document captures the agreed direction for the current tellask refactor so the
|
|
6
|
+
implementation can stay aligned while multiple storage, runtime, provider, and frontend
|
|
7
|
+
paths are being simplified at the same time.
|
|
8
|
+
|
|
9
|
+
The goal is not to preserve old technical symmetry for its own sake. The goal is to make
|
|
10
|
+
tellask behave as one coherent business feature with fewer special cases.
|
|
11
|
+
|
|
12
|
+
## Agreed Direction
|
|
13
|
+
|
|
14
|
+
- Keep `tellask_call_record` as the tellask-family call record.
|
|
15
|
+
- Keep one unified tellask business result type:
|
|
16
|
+
- `tellask_result_record`
|
|
17
|
+
- `tellask_result_msg`
|
|
18
|
+
- `tellask_result_evt`
|
|
19
|
+
- Keep carryover special and separate:
|
|
20
|
+
- rename `tellask_carryover_result_record` to `tellask_carryover_record`
|
|
21
|
+
- rename `tellask_carryover_result_msg` to `tellask_carryover_msg`
|
|
22
|
+
- rename `tellask_call_carryover_evt` / `tellask_carryover_result_evt` style names into a single
|
|
23
|
+
`tellask_carryover_evt`
|
|
24
|
+
- Inline tellask result rendering is no longer the target model.
|
|
25
|
+
- Tellask results should render as separate bubbles.
|
|
26
|
+
- Call-site UI may still exist for pending / settled state, but result body should not depend on
|
|
27
|
+
inline rendering.
|
|
28
|
+
- `replyTellask*` is not a separate business result family to unify on its own.
|
|
29
|
+
`replyTellask*` is a mechanism that produces a tellask result.
|
|
30
|
+
- `askHuman` should move into the tellask result flow instead of being represented as a normal
|
|
31
|
+
user bubble.
|
|
32
|
+
- Q4H answers should not be persisted as `human_text_record` for askHuman result rendering.
|
|
33
|
+
|
|
34
|
+
## Current Problem
|
|
35
|
+
|
|
36
|
+
Tellask business semantics are currently split across too many layers:
|
|
37
|
+
|
|
38
|
+
- `tellask_call_record`
|
|
39
|
+
- call start
|
|
40
|
+
- `tellask_call_result_record`
|
|
41
|
+
- local inline tellask business result
|
|
42
|
+
- `tellask_response_record`
|
|
43
|
+
- sideline / subdialog response bubble
|
|
44
|
+
- `tellask_result_record`
|
|
45
|
+
- thin technical pair record added later for call/result parity
|
|
46
|
+
- `tellask_carryover_result_record`
|
|
47
|
+
- special cross-course carryover
|
|
48
|
+
|
|
49
|
+
This produces several kinds of debt:
|
|
50
|
+
|
|
51
|
+
- one business feature has multiple result record types
|
|
52
|
+
- one business result message name has mixed semantics
|
|
53
|
+
- frontend uses different event families for inline vs separate-bubble tellask results
|
|
54
|
+
- `askHuman` answer flow still re-enters the generic user-message path
|
|
55
|
+
- provider/runtime logic has had to invent technical projection types that are not the real
|
|
56
|
+
business model
|
|
57
|
+
|
|
58
|
+
## Business Model After Refactor
|
|
59
|
+
|
|
60
|
+
### Tellask Call
|
|
61
|
+
|
|
62
|
+
`tellask_call_record` remains the start record for tellask-family tool invocation.
|
|
63
|
+
|
|
64
|
+
It still covers:
|
|
65
|
+
|
|
66
|
+
- `tellask`
|
|
67
|
+
- `tellaskSessionless`
|
|
68
|
+
- `tellaskBack`
|
|
69
|
+
- `askHuman`
|
|
70
|
+
- `freshBootsReasoning`
|
|
71
|
+
- `replyTellask`
|
|
72
|
+
- `replyTellaskSessionless`
|
|
73
|
+
- `replyTellaskBack`
|
|
74
|
+
|
|
75
|
+
### Tellask Result
|
|
76
|
+
|
|
77
|
+
`tellask_result_record` becomes the single business result record for tellask outcomes.
|
|
78
|
+
|
|
79
|
+
It should absorb the business payload currently split across:
|
|
80
|
+
|
|
81
|
+
- `tellask_call_result_record`
|
|
82
|
+
- `tellask_response_record`
|
|
83
|
+
|
|
84
|
+
It should be rich enough to carry the actual tellask business context, not just a thin tool pair.
|
|
85
|
+
|
|
86
|
+
### Tellask Carryover
|
|
87
|
+
|
|
88
|
+
Carryover stays separate because it is not a normal call/result pair outcome.
|
|
89
|
+
|
|
90
|
+
Its essence is:
|
|
91
|
+
|
|
92
|
+
- cross-course continuation
|
|
93
|
+
- special context anchor semantics
|
|
94
|
+
- intentionally not part of standard call/result unification
|
|
95
|
+
|
|
96
|
+
So it should remain independent under shorter names:
|
|
97
|
+
|
|
98
|
+
- `tellask_carryover_record`
|
|
99
|
+
- `tellask_carryover_msg`
|
|
100
|
+
- `tellask_carryover_evt`
|
|
101
|
+
|
|
102
|
+
## Message And Event Model
|
|
103
|
+
|
|
104
|
+
### Result Bubble Direction
|
|
105
|
+
|
|
106
|
+
Tellask business results should render as separate bubbles.
|
|
107
|
+
|
|
108
|
+
That means the frontend event model should converge toward:
|
|
109
|
+
|
|
110
|
+
- `tellask_call_start_evt`
|
|
111
|
+
- call-site lifecycle start
|
|
112
|
+
- `tellask_result_evt`
|
|
113
|
+
- business result bubble creation / replay
|
|
114
|
+
- status updates for the related call site
|
|
115
|
+
- `tellask_carryover_evt`
|
|
116
|
+
- special carryover bubble
|
|
117
|
+
|
|
118
|
+
The old split:
|
|
119
|
+
|
|
120
|
+
- `tellask_call_result_evt`
|
|
121
|
+
- `tellask_response_evt`
|
|
122
|
+
|
|
123
|
+
should be collapsed into `tellask_result_evt`.
|
|
124
|
+
|
|
125
|
+
### Frontend Behavior
|
|
126
|
+
|
|
127
|
+
Frontend call-site handling should become simpler:
|
|
128
|
+
|
|
129
|
+
- call site shows pending / settled / carried-over state
|
|
130
|
+
- tellask result body is shown in a separate bubble
|
|
131
|
+
- no dependency on inline result body rendering
|
|
132
|
+
|
|
133
|
+
This applies to:
|
|
134
|
+
|
|
135
|
+
- local tellask failures
|
|
136
|
+
- sideline/subdialog responses
|
|
137
|
+
- askHuman pending/final result display
|
|
138
|
+
|
|
139
|
+
## AskHuman Direction
|
|
140
|
+
|
|
141
|
+
`askHuman` should behave as part of the tellask family, not as a detour into the generic user
|
|
142
|
+
message path.
|
|
143
|
+
|
|
144
|
+
### Desired Flow
|
|
145
|
+
|
|
146
|
+
1. `askHuman` call starts as a tellask-family call.
|
|
147
|
+
2. A temporary tellask-style result is shown while waiting.
|
|
148
|
+
3. When the human answers, the final askHuman result is represented as a tellask result.
|
|
149
|
+
4. The answer should not be kept as a normal user bubble for this purpose.
|
|
150
|
+
|
|
151
|
+
### Important Clarification
|
|
152
|
+
|
|
153
|
+
The runtime may still need the answer content to continue the next generation round.
|
|
154
|
+
|
|
155
|
+
But that technical need must not force the product model to keep askHuman answers as
|
|
156
|
+
`human_text_record` or ordinary user-style UI bubbles.
|
|
157
|
+
|
|
158
|
+
The tellask business model is the source of truth.
|
|
159
|
+
|
|
160
|
+
## ReplyTellask Direction
|
|
161
|
+
|
|
162
|
+
`replyTellask*` should not be treated as a separate business result family.
|
|
163
|
+
|
|
164
|
+
The correct business interpretation is:
|
|
165
|
+
|
|
166
|
+
- `replyTellask*` is an action that produces a tellask result
|
|
167
|
+
- the tellask result is the business object
|
|
168
|
+
- `replyTellask*` itself does not need another parallel business-unification effort
|
|
169
|
+
|
|
170
|
+
In practice this means the refactor should avoid introducing extra local-only reply result models
|
|
171
|
+
just to satisfy old technical pairing assumptions.
|
|
172
|
+
|
|
173
|
+
## Tellask Result Record Shape
|
|
174
|
+
|
|
175
|
+
The unified `tellask_result_record` should be rich and business-oriented.
|
|
176
|
+
|
|
177
|
+
It should not flatten every field at top level.
|
|
178
|
+
|
|
179
|
+
Preferred shape:
|
|
180
|
+
|
|
181
|
+
- keep truly global result fields at top level
|
|
182
|
+
- move stable field groups into optional nested structures
|
|
183
|
+
- inside a nested structure, fields should be required whenever that structure is present
|
|
184
|
+
|
|
185
|
+
Suggested top-level concerns:
|
|
186
|
+
|
|
187
|
+
- record identity / timestamp / course refs
|
|
188
|
+
- `callId`
|
|
189
|
+
- `callName`
|
|
190
|
+
- `status`
|
|
191
|
+
- `content`
|
|
192
|
+
|
|
193
|
+
Suggested nested groups:
|
|
194
|
+
|
|
195
|
+
- `call`
|
|
196
|
+
- original tellask call context
|
|
197
|
+
- example fields:
|
|
198
|
+
- `tellaskContent`
|
|
199
|
+
- `mentionList`
|
|
200
|
+
- `sessionSlug`
|
|
201
|
+
- `responder`
|
|
202
|
+
- who produced the business result
|
|
203
|
+
- example fields:
|
|
204
|
+
- `responderId`
|
|
205
|
+
- `agentId`
|
|
206
|
+
- `originMemberId`
|
|
207
|
+
- `route`
|
|
208
|
+
- navigation / callee metadata when applicable
|
|
209
|
+
- example fields:
|
|
210
|
+
- `calleeDialogId`
|
|
211
|
+
- `calleeCourse`
|
|
212
|
+
- `calleeGenseq`
|
|
213
|
+
|
|
214
|
+
The exact final union can be refined during implementation, but the important rule is:
|
|
215
|
+
|
|
216
|
+
- business grouping first
|
|
217
|
+
- technical pairing concerns do not get to dictate the field model
|
|
218
|
+
|
|
219
|
+
## Provider / Runtime Interpretation
|
|
220
|
+
|
|
221
|
+
The unified tellask result model is the business truth.
|
|
222
|
+
|
|
223
|
+
Provider/runtime projection must adapt to it, not the other way around.
|
|
224
|
+
|
|
225
|
+
This means:
|
|
226
|
+
|
|
227
|
+
- do not invent thin technical result types as the canonical tellask model
|
|
228
|
+
- if the provider layer needs a particular call/result projection, derive it from the business
|
|
229
|
+
message
|
|
230
|
+
- do not let tool-pair convenience decide what fields are allowed to exist
|
|
231
|
+
|
|
232
|
+
## Files Expected To Change
|
|
233
|
+
|
|
234
|
+
The refactor will likely touch at least these areas:
|
|
235
|
+
|
|
236
|
+
- `packages/kernel/src/types/storage.ts`
|
|
237
|
+
- `packages/kernel/src/types/chat-message.ts`
|
|
238
|
+
- `packages/kernel/src/types/dialog.ts`
|
|
239
|
+
- `main/persistence.ts`
|
|
240
|
+
- `main/dialog.ts`
|
|
241
|
+
- `main/priming.ts`
|
|
242
|
+
- `main/dialog-fork.ts`
|
|
243
|
+
- `main/llm/kernel-driver/tellask-special.ts`
|
|
244
|
+
- `main/llm/kernel-driver/drive.ts`
|
|
245
|
+
- `main/server/websocket-handler.ts`
|
|
246
|
+
- `main/llm/gen/openai.ts`
|
|
247
|
+
- `main/llm/gen/openai-compatible.ts`
|
|
248
|
+
- `main/llm/gen/codex.ts`
|
|
249
|
+
- `main/llm/gen/anthropic.ts`
|
|
250
|
+
- `main/llm/gen/mock.ts`
|
|
251
|
+
- `webapp/src/components/dominds-dialog-container.ts`
|
|
252
|
+
- `webapp/src/components/dominds-app.tsx`
|
|
253
|
+
|
|
254
|
+
Tests will also need a broad update wherever old tellask inline/result/carryover names are asserted.
|
|
255
|
+
|
|
256
|
+
## Implementation Checklist
|
|
257
|
+
|
|
258
|
+
- Redefine `tellask_result_record` as the single business result record.
|
|
259
|
+
- Remove `tellask_call_result_record`.
|
|
260
|
+
- Remove `tellask_response_record`.
|
|
261
|
+
- Rename carryover record/msg/evt to shorter names.
|
|
262
|
+
- Replace old tellask result event split with unified `tellask_result_evt`.
|
|
263
|
+
- Update replay and restore to rebuild unified tellask result messages.
|
|
264
|
+
- Update frontend to render tellask results as separate bubbles.
|
|
265
|
+
- Keep call-site lifecycle status, but stop depending on inline result body.
|
|
266
|
+
- Route askHuman answer flow through tellask result rendering instead of normal user-bubble
|
|
267
|
+
persistence.
|
|
268
|
+
- Revisit provider projection after the business model is in place, not before.
|
|
269
|
+
|
|
270
|
+
## Review Standard For This Refactor
|
|
271
|
+
|
|
272
|
+
Behavior review should focus on current product semantics, not historical storage compatibility.
|
|
273
|
+
|
|
274
|
+
Primary questions:
|
|
275
|
+
|
|
276
|
+
- Does the user now see one coherent tellask result model?
|
|
277
|
+
- Are local tellask failures and sideline tellask responses rendered the same way?
|
|
278
|
+
- Does askHuman now behave like tellask instead of like an unrelated user-message path?
|
|
279
|
+
- Does carryover remain special without polluting the unified tellask result model?
|
|
280
|
+
- Did we remove result-path branching instead of just moving it around?
|