dominds 1.6.7 → 1.7.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 +1 -1
- package/README.zh.md +1 -1
- package/dist/apps/installed-file.js +207 -0
- package/dist/apps/runtime-port.js +91 -0
- package/dist/course-transition.js +40 -12
- package/dist/dialog-fork.js +10 -6
- package/dist/dialog.js +20 -20
- package/dist/docs/OEC-philosophy.md +11 -11
- package/dist/docs/OEC-philosophy.zh.md +1 -1
- package/dist/docs/context-health.md +20 -4
- package/dist/docs/context-health.zh.md +19 -7
- package/dist/docs/design.zh.md +8 -8
- package/dist/docs/dialog-persistence.zh.md +4 -4
- package/dist/docs/dialog-system.md +19 -14
- package/dist/docs/dialog-system.zh.md +102 -97
- package/dist/docs/encapsulated-taskdoc.md +5 -17
- package/dist/docs/encapsulated-taskdoc.zh.md +11 -11
- package/dist/docs/fbr.zh.md +1 -1
- package/dist/docs/kernel-app-architecture.md +286 -0
- package/dist/docs/kernel-app-architecture.zh.md +285 -0
- package/dist/docs/mcp-support.zh.md +1 -1
- package/dist/docs/memory-system.zh.md +4 -4
- package/dist/docs/mottos.zh.md +7 -7
- package/dist/docs/roadmap.zh.md +1 -1
- package/dist/docs/team_mgmt-toolset.zh.md +1 -1
- package/dist/docs/tellask-collab.md +9 -4
- package/dist/docs/tellask-collab.zh.md +21 -15
- 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 +1 -1
- package/dist/llm/gen/codex.js +1 -0
- package/dist/llm/gen/mock.js +5 -0
- package/dist/llm/gen/openai-compatible.js +1 -0
- package/dist/llm/gen/openai.js +1 -0
- package/dist/llm/kernel-driver/context.js +7 -2
- package/dist/llm/kernel-driver/drive.js +9 -7
- package/dist/llm/kernel-driver/flow.js +6 -5
- package/dist/llm/kernel-driver/subdialog.js +43 -15
- package/dist/llm/kernel-driver/tellask-special.js +11 -11
- package/dist/minds/system-prompt-parts.js +9 -7
- package/dist/minds/system-prompt.js +35 -23
- package/dist/persistence.js +372 -84
- package/dist/priming.js +207 -31
- package/dist/server/websocket-handler.js +1 -1
- package/dist/shared/i18n/driver-messages.js +21 -6
- package/dist/shared/utils/inter-dialog-format.js +106 -9
- package/dist/static/assets/{_basePickBy-B9gw9xu3.js → _basePickBy-DOCpneO0.js} +3 -3
- package/dist/static/assets/{_basePickBy-B9gw9xu3.js.map → _basePickBy-DOCpneO0.js.map} +1 -1
- package/dist/static/assets/{_baseUniq-CdteP2Ad.js → _baseUniq-DBZLqTK1.js} +2 -2
- package/dist/static/assets/{_baseUniq-CdteP2Ad.js.map → _baseUniq-DBZLqTK1.js.map} +1 -1
- package/dist/static/assets/{arc-BaFSInZP.js → arc-Dw9YkyBZ.js} +2 -2
- package/dist/static/assets/{arc-BaFSInZP.js.map → arc-Dw9YkyBZ.js.map} +1 -1
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-kO0ROBqa.js → architectureDiagram-VXUJARFQ-DiXBIlTy.js} +7 -7
- package/dist/static/assets/{architectureDiagram-VXUJARFQ-kO0ROBqa.js.map → architectureDiagram-VXUJARFQ-DiXBIlTy.js.map} +1 -1
- package/dist/static/assets/{blockDiagram-VD42YOAC-D766EIYA.js → blockDiagram-VD42YOAC-CBTqG3TT.js} +7 -7
- package/dist/static/assets/{blockDiagram-VD42YOAC-D766EIYA.js.map → blockDiagram-VD42YOAC-CBTqG3TT.js.map} +1 -1
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DwL98wWS.js → c4Diagram-YG6GDRKO-CKltdqcg.js} +3 -3
- package/dist/static/assets/{c4Diagram-YG6GDRKO-DwL98wWS.js.map → c4Diagram-YG6GDRKO-CKltdqcg.js.map} +1 -1
- package/dist/static/assets/{channel-CcUPWS87.js → channel-CsfA5ddv.js} +2 -2
- package/dist/static/assets/{channel-CcUPWS87.js.map → channel-CsfA5ddv.js.map} +1 -1
- package/dist/static/assets/{chunk-4BX2VUAB-BeTSwCuA.js → chunk-4BX2VUAB-BCdL9ibi.js} +2 -2
- package/dist/static/assets/{chunk-4BX2VUAB-BeTSwCuA.js.map → chunk-4BX2VUAB-BCdL9ibi.js.map} +1 -1
- package/dist/static/assets/{chunk-55IACEB6-C6Tzr8i_.js → chunk-55IACEB6-CcKnxlqS.js} +2 -2
- package/dist/static/assets/{chunk-55IACEB6-C6Tzr8i_.js.map → chunk-55IACEB6-CcKnxlqS.js.map} +1 -1
- package/dist/static/assets/{chunk-B4BG7PRW-DSi9x25j.js → chunk-B4BG7PRW-BnypOYYo.js} +5 -5
- package/dist/static/assets/{chunk-B4BG7PRW-DSi9x25j.js.map → chunk-B4BG7PRW-BnypOYYo.js.map} +1 -1
- package/dist/static/assets/{chunk-DI55MBZ5-CfAPRphL.js → chunk-DI55MBZ5-BGYHpvhR.js} +4 -4
- package/dist/static/assets/{chunk-DI55MBZ5-CfAPRphL.js.map → chunk-DI55MBZ5-BGYHpvhR.js.map} +1 -1
- package/dist/static/assets/{chunk-FMBD7UC4-B-M6vSiI.js → chunk-FMBD7UC4-Crf0Br1R.js} +2 -2
- package/dist/static/assets/{chunk-FMBD7UC4-B-M6vSiI.js.map → chunk-FMBD7UC4-Crf0Br1R.js.map} +1 -1
- package/dist/static/assets/{chunk-QN33PNHL-yU2oNaRc.js → chunk-QN33PNHL-Cg1EQYdQ.js} +2 -2
- package/dist/static/assets/{chunk-QN33PNHL-yU2oNaRc.js.map → chunk-QN33PNHL-Cg1EQYdQ.js.map} +1 -1
- package/dist/static/assets/{chunk-QZHKN3VN-jPTrvtzO.js → chunk-QZHKN3VN-DRH7UNkC.js} +2 -2
- package/dist/static/assets/{chunk-QZHKN3VN-jPTrvtzO.js.map → chunk-QZHKN3VN-DRH7UNkC.js.map} +1 -1
- package/dist/static/assets/{chunk-TZMSLE5B-Bls_D3TM.js → chunk-TZMSLE5B-CaZqBdnu.js} +2 -2
- package/dist/static/assets/{chunk-TZMSLE5B-Bls_D3TM.js.map → chunk-TZMSLE5B-CaZqBdnu.js.map} +1 -1
- package/dist/static/assets/{classDiagram-2ON5EDUG-6HSV8O5b.js → classDiagram-2ON5EDUG-DSsG0iFI.js} +6 -6
- package/dist/static/assets/{classDiagram-2ON5EDUG-6HSV8O5b.js.map → classDiagram-2ON5EDUG-DSsG0iFI.js.map} +1 -1
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-6HSV8O5b.js → classDiagram-v2-WZHVMYZB-DSsG0iFI.js} +6 -6
- package/dist/static/assets/{classDiagram-v2-WZHVMYZB-6HSV8O5b.js.map → classDiagram-v2-WZHVMYZB-DSsG0iFI.js.map} +1 -1
- package/dist/static/assets/{clone-CtKoD5Su.js → clone-xhbAL4G8.js} +2 -2
- package/dist/static/assets/{clone-CtKoD5Su.js.map → clone-xhbAL4G8.js.map} +1 -1
- package/dist/static/assets/{cose-bilkent-S5V4N54A-C8Q_0ZER.js → cose-bilkent-S5V4N54A-B7Rtmhjt.js} +2 -2
- package/dist/static/assets/{cose-bilkent-S5V4N54A-C8Q_0ZER.js.map → cose-bilkent-S5V4N54A-B7Rtmhjt.js.map} +1 -1
- package/dist/static/assets/{dagre-6UL2VRFP-CYIohfVW.js → dagre-6UL2VRFP-BkqhLTnX.js} +7 -7
- package/dist/static/assets/{dagre-6UL2VRFP-CYIohfVW.js.map → dagre-6UL2VRFP-BkqhLTnX.js.map} +1 -1
- package/dist/static/assets/{diagram-PSM6KHXK-BTYKp-4w.js → diagram-PSM6KHXK-CZKtGq3a.js} +8 -8
- package/dist/static/assets/{diagram-PSM6KHXK-BTYKp-4w.js.map → diagram-PSM6KHXK-CZKtGq3a.js.map} +1 -1
- package/dist/static/assets/{diagram-QEK2KX5R-CopAPXBx.js → diagram-QEK2KX5R-CnMVuAHl.js} +7 -7
- package/dist/static/assets/{diagram-QEK2KX5R-CopAPXBx.js.map → diagram-QEK2KX5R-CnMVuAHl.js.map} +1 -1
- package/dist/static/assets/{diagram-S2PKOQOG-BxYzu2CQ.js → diagram-S2PKOQOG-CeSf7JXc.js} +7 -7
- package/dist/static/assets/{diagram-S2PKOQOG-BxYzu2CQ.js.map → diagram-S2PKOQOG-CeSf7JXc.js.map} +1 -1
- package/dist/static/assets/{erDiagram-Q2GNP2WA-8SOoYoCD.js → erDiagram-Q2GNP2WA-CSt8_Jg8.js} +5 -5
- package/dist/static/assets/{erDiagram-Q2GNP2WA-8SOoYoCD.js.map → erDiagram-Q2GNP2WA-CSt8_Jg8.js.map} +1 -1
- package/dist/static/assets/{flowDiagram-NV44I4VS-x3ds9tRp.js → flowDiagram-NV44I4VS-D5Ml-CXN.js} +6 -6
- package/dist/static/assets/{flowDiagram-NV44I4VS-x3ds9tRp.js.map → flowDiagram-NV44I4VS-D5Ml-CXN.js.map} +1 -1
- package/dist/static/assets/{ganttDiagram-JELNMOA3-JJe52R5B.js → ganttDiagram-JELNMOA3-CyMWbWsa.js} +3 -3
- package/dist/static/assets/{ganttDiagram-JELNMOA3-JJe52R5B.js.map → ganttDiagram-JELNMOA3-CyMWbWsa.js.map} +1 -1
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-D5WErFAP.js → gitGraphDiagram-V2S2FVAM-vl516Is8.js} +8 -8
- package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-D5WErFAP.js.map → gitGraphDiagram-V2S2FVAM-vl516Is8.js.map} +1 -1
- package/dist/static/assets/{graph-D2qG911_.js → graph-BGZ_sL_x.js} +3 -3
- package/dist/static/assets/{graph-D2qG911_.js.map → graph-BGZ_sL_x.js.map} +1 -1
- package/dist/static/assets/{index-BRvFzt7r.js → index-C-RsyM0K.js} +274 -82
- package/dist/static/assets/{index-BRvFzt7r.js.map → index-C-RsyM0K.js.map} +1 -1
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CJgZXXei.js → infoDiagram-HS3SLOUP-6wx0LbHY.js} +6 -6
- package/dist/static/assets/{infoDiagram-HS3SLOUP-CJgZXXei.js.map → infoDiagram-HS3SLOUP-6wx0LbHY.js.map} +1 -1
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DsA_9YlY.js → journeyDiagram-XKPGCS4Q-YPjC-r77.js} +5 -5
- package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DsA_9YlY.js.map → journeyDiagram-XKPGCS4Q-YPjC-r77.js.map} +1 -1
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-l0WL_yMI.js → kanban-definition-3W4ZIXB7-DlG-ZWTO.js} +3 -3
- package/dist/static/assets/{kanban-definition-3W4ZIXB7-l0WL_yMI.js.map → kanban-definition-3W4ZIXB7-DlG-ZWTO.js.map} +1 -1
- package/dist/static/assets/{layout-CpX1UYDN.js → layout-BZJKhYY3.js} +5 -5
- package/dist/static/assets/{layout-CpX1UYDN.js.map → layout-BZJKhYY3.js.map} +1 -1
- package/dist/static/assets/{linear-BwAZ1jvU.js → linear-Bau37zh5.js} +2 -2
- package/dist/static/assets/{linear-BwAZ1jvU.js.map → linear-Bau37zh5.js.map} +1 -1
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CbPr4yzk.js → mindmap-definition-VGOIOE7T-n2WXgX4b.js} +4 -4
- package/dist/static/assets/{mindmap-definition-VGOIOE7T-CbPr4yzk.js.map → mindmap-definition-VGOIOE7T-n2WXgX4b.js.map} +1 -1
- package/dist/static/assets/{pieDiagram-ADFJNKIX-Dm1nDIqq.js → pieDiagram-ADFJNKIX-DgW7FkI4.js} +8 -8
- package/dist/static/assets/{pieDiagram-ADFJNKIX-Dm1nDIqq.js.map → pieDiagram-ADFJNKIX-DgW7FkI4.js.map} +1 -1
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-ZsrsqMXx.js → quadrantDiagram-AYHSOK5B-BtsDjIpC.js} +3 -3
- package/dist/static/assets/{quadrantDiagram-AYHSOK5B-ZsrsqMXx.js.map → quadrantDiagram-AYHSOK5B-BtsDjIpC.js.map} +1 -1
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Dcm7em76.js → requirementDiagram-UZGBJVZJ-DPzuPEge.js} +4 -4
- package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Dcm7em76.js.map → requirementDiagram-UZGBJVZJ-DPzuPEge.js.map} +1 -1
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CZaCjU14.js → sankeyDiagram-TZEHDZUN-BJS1ETtL.js} +2 -2
- package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CZaCjU14.js.map → sankeyDiagram-TZEHDZUN-BJS1ETtL.js.map} +1 -1
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CcfoaMSR.js → sequenceDiagram-WL72ISMW-DXEpa4ly.js} +4 -4
- package/dist/static/assets/{sequenceDiagram-WL72ISMW-CcfoaMSR.js.map → sequenceDiagram-WL72ISMW-DXEpa4ly.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BVIDD43e.js → stateDiagram-FKZM4ZOC-CGU6VJY5.js} +9 -9
- package/dist/static/assets/{stateDiagram-FKZM4ZOC-BVIDD43e.js.map → stateDiagram-FKZM4ZOC-CGU6VJY5.js.map} +1 -1
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9GL2xr3.js → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js} +5 -5
- package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9GL2xr3.js.map → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js.map} +1 -1
- package/dist/static/assets/{timeline-definition-IT6M3QCI-8iKDS8Ig.js → timeline-definition-IT6M3QCI-DcWLmdgJ.js} +3 -3
- package/dist/static/assets/{timeline-definition-IT6M3QCI-8iKDS8Ig.js.map → timeline-definition-IT6M3QCI-DcWLmdgJ.js.map} +1 -1
- package/dist/static/assets/{treemap-GDKQZRPO-CbxnTnrn.js → treemap-GDKQZRPO-BhUwKF9C.js} +5 -5
- package/dist/static/assets/{treemap-GDKQZRPO-CbxnTnrn.js.map → treemap-GDKQZRPO-BhUwKF9C.js.map} +1 -1
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C0KMwrOR.js → xychartDiagram-PRI3JC2R-Cr4t0oCq.js} +3 -3
- package/dist/static/assets/{xychartDiagram-PRI3JC2R-C0KMwrOR.js.map → xychartDiagram-PRI3JC2R-Cr4t0oCq.js.map} +1 -1
- package/dist/static/index.html +1 -1
- package/dist/tools/ctrl.js +3 -2
- package/dist/tools/prompts/control/zh/index.md +1 -1
- package/dist/tools/prompts/control/zh/principles.md +1 -1
- 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/package.json +1 -1
package/README.md
CHANGED
package/README.zh.md
CHANGED
|
@@ -185,7 +185,7 @@ Dominds 面向“长期开发运作(DevOps)”场景设计,基于社会化
|
|
|
185
185
|
- **[CLI Usage Guide](docs/cli-usage.zh.md)** — 命令行工具及使用方法
|
|
186
186
|
- **[Q4H](docs/q4h.zh.md)** — 向人类提问(`askHuman`)机制与 WebUI 支持
|
|
187
187
|
- **[MCP Support](docs/mcp-support.zh.md)** — MCP 工具集成指南
|
|
188
|
-
- **[
|
|
188
|
+
- **[封装式差遣牒](docs/encapsulated-taskdoc.zh.md)** — `*.tsk/` 任务包与访问约束
|
|
189
189
|
- **[FBR](docs/fbr.zh.md)** — 扪心自问(`freshBootsReasoning`)机制设计与增强
|
|
190
190
|
- **[Context Health](docs/context-health.zh.md)** — 上下文健康维护
|
|
191
191
|
- **[Diligence Push](docs/diligence-push.zh.md)** — 鞭策机制
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.INSTALLED_APPS_REL_PATH = void 0;
|
|
7
|
+
exports.loadInstalledAppsFile = loadInstalledAppsFile;
|
|
8
|
+
exports.writeInstalledAppsFile = writeInstalledAppsFile;
|
|
9
|
+
exports.upsertInstalledApp = upsertInstalledApp;
|
|
10
|
+
exports.removeInstalledApp = removeInstalledApp;
|
|
11
|
+
exports.setAppEnabled = setAppEnabled;
|
|
12
|
+
exports.setAppRuntimePort = setAppRuntimePort;
|
|
13
|
+
exports.findInstalledApp = findInstalledApp;
|
|
14
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
17
|
+
const time_1 = require("../shared/utils/time");
|
|
18
|
+
exports.INSTALLED_APPS_REL_PATH = path_1.default.join('.apps', 'installed.yaml');
|
|
19
|
+
function isRecord(v) {
|
|
20
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
21
|
+
}
|
|
22
|
+
function asString(v) {
|
|
23
|
+
return typeof v === 'string' ? v : null;
|
|
24
|
+
}
|
|
25
|
+
function asBool(v) {
|
|
26
|
+
return typeof v === 'boolean' ? v : null;
|
|
27
|
+
}
|
|
28
|
+
function asNullableNumber(v) {
|
|
29
|
+
if (v === null)
|
|
30
|
+
return null;
|
|
31
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
32
|
+
return v;
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
function parseSource(v, at) {
|
|
36
|
+
if (!isRecord(v))
|
|
37
|
+
return { ok: false, errorText: `Invalid ${at}: expected object` };
|
|
38
|
+
const kind = asString(v['kind']);
|
|
39
|
+
if (kind !== 'npx' && kind !== 'local') {
|
|
40
|
+
return { ok: false, errorText: `Invalid ${at}.kind: expected 'npx'|'local'` };
|
|
41
|
+
}
|
|
42
|
+
if (kind === 'npx') {
|
|
43
|
+
const spec = asString(v['spec']);
|
|
44
|
+
if (!spec || spec.trim() === '')
|
|
45
|
+
return { ok: false, errorText: `Invalid ${at}.spec: required` };
|
|
46
|
+
return { ok: true, source: { kind, spec } };
|
|
47
|
+
}
|
|
48
|
+
const pathAbs = asString(v['pathAbs']);
|
|
49
|
+
if (!pathAbs || pathAbs.trim() === '')
|
|
50
|
+
return { ok: false, errorText: `Invalid ${at}.pathAbs: required` };
|
|
51
|
+
return { ok: true, source: { kind, pathAbs } };
|
|
52
|
+
}
|
|
53
|
+
function parseRuntime(v, at) {
|
|
54
|
+
if (!isRecord(v))
|
|
55
|
+
return { ok: false, errorText: `Invalid ${at}: expected object` };
|
|
56
|
+
const portRaw = v['port'];
|
|
57
|
+
const port = asNullableNumber(portRaw);
|
|
58
|
+
if (port === null) {
|
|
59
|
+
if (portRaw !== null) {
|
|
60
|
+
return { ok: false, errorText: `Invalid ${at}.port: expected number|null` };
|
|
61
|
+
}
|
|
62
|
+
return { ok: true, runtime: { port: null } };
|
|
63
|
+
}
|
|
64
|
+
if (port < 0 || !Number.isInteger(port))
|
|
65
|
+
return { ok: false, errorText: `Invalid ${at}.port: expected non-negative integer|null` };
|
|
66
|
+
return { ok: true, runtime: { port: port } };
|
|
67
|
+
}
|
|
68
|
+
function parseEntry(v, at) {
|
|
69
|
+
if (!isRecord(v))
|
|
70
|
+
return { ok: false, errorText: `Invalid ${at}: expected object` };
|
|
71
|
+
const id = asString(v['id']);
|
|
72
|
+
if (!id || id.trim() === '')
|
|
73
|
+
return { ok: false, errorText: `Invalid ${at}.id: required` };
|
|
74
|
+
const enabled = asBool(v['enabled']);
|
|
75
|
+
if (enabled === null)
|
|
76
|
+
return { ok: false, errorText: `Invalid ${at}.enabled: boolean required` };
|
|
77
|
+
const installedAt = asString(v['installedAt']);
|
|
78
|
+
const updatedAt = asString(v['updatedAt']);
|
|
79
|
+
if (!installedAt || installedAt.trim() === '')
|
|
80
|
+
return { ok: false, errorText: `Invalid ${at}.installedAt: required` };
|
|
81
|
+
if (!updatedAt || updatedAt.trim() === '')
|
|
82
|
+
return { ok: false, errorText: `Invalid ${at}.updatedAt: required` };
|
|
83
|
+
const sourceParsed = parseSource(v['source'], `${at}.source`);
|
|
84
|
+
if (!sourceParsed.ok)
|
|
85
|
+
return sourceParsed;
|
|
86
|
+
const runtimeParsed = parseRuntime(v['runtime'] ?? { port: null }, `${at}.runtime`);
|
|
87
|
+
if (!runtimeParsed.ok)
|
|
88
|
+
return runtimeParsed;
|
|
89
|
+
// installJson is validated by install/update command on write. On read we keep permissive:
|
|
90
|
+
// kernel will fail fast later if it needs a missing field.
|
|
91
|
+
const installJson = v['installJson'];
|
|
92
|
+
if (!isRecord(installJson))
|
|
93
|
+
return { ok: false, errorText: `Invalid ${at}.installJson: expected object` };
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
entry: {
|
|
97
|
+
id,
|
|
98
|
+
enabled,
|
|
99
|
+
source: sourceParsed.source,
|
|
100
|
+
runtime: runtimeParsed.runtime,
|
|
101
|
+
installJson: installJson,
|
|
102
|
+
installedAt,
|
|
103
|
+
updatedAt,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async function loadInstalledAppsFile(params) {
|
|
108
|
+
const filePathAbs = path_1.default.resolve(params.rtwsRootAbs, exports.INSTALLED_APPS_REL_PATH);
|
|
109
|
+
let raw;
|
|
110
|
+
try {
|
|
111
|
+
raw = await promises_1.default.readFile(filePathAbs, 'utf-8');
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
const isEnoent = typeof err === 'object' &&
|
|
115
|
+
err !== null &&
|
|
116
|
+
'code' in err &&
|
|
117
|
+
err.code === 'ENOENT';
|
|
118
|
+
if (isEnoent) {
|
|
119
|
+
return { kind: 'ok', filePathAbs, file: { schemaVersion: 1, apps: [] } };
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
kind: 'error',
|
|
123
|
+
filePathAbs,
|
|
124
|
+
errorText: err instanceof Error ? err.message : String(err),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
let parsed;
|
|
128
|
+
try {
|
|
129
|
+
parsed = yaml_1.default.parse(raw);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
return {
|
|
133
|
+
kind: 'error',
|
|
134
|
+
filePathAbs,
|
|
135
|
+
errorText: `Failed to parse YAML: ${err instanceof Error ? err.message : String(err)}`,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (!isRecord(parsed)) {
|
|
139
|
+
return { kind: 'error', filePathAbs, errorText: 'Invalid installed.yaml: expected object' };
|
|
140
|
+
}
|
|
141
|
+
const schemaVersion = parsed['schemaVersion'];
|
|
142
|
+
if (schemaVersion !== 1) {
|
|
143
|
+
return {
|
|
144
|
+
kind: 'error',
|
|
145
|
+
filePathAbs,
|
|
146
|
+
errorText: `Unsupported schemaVersion: ${String(schemaVersion)}`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const appsRaw = parsed['apps'];
|
|
150
|
+
if (!Array.isArray(appsRaw)) {
|
|
151
|
+
return {
|
|
152
|
+
kind: 'error',
|
|
153
|
+
filePathAbs,
|
|
154
|
+
errorText: 'Invalid installed.yaml: apps must be an array',
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const apps = [];
|
|
158
|
+
for (let i = 0; i < appsRaw.length; i += 1) {
|
|
159
|
+
const e = parseEntry(appsRaw[i], `apps[${i}]`);
|
|
160
|
+
if (!e.ok)
|
|
161
|
+
return { kind: 'error', filePathAbs, errorText: e.errorText };
|
|
162
|
+
apps.push(e.entry);
|
|
163
|
+
}
|
|
164
|
+
return { kind: 'ok', filePathAbs, file: { schemaVersion: 1, apps } };
|
|
165
|
+
}
|
|
166
|
+
async function writeInstalledAppsFile(params) {
|
|
167
|
+
const dirAbs = path_1.default.resolve(params.rtwsRootAbs, '.apps');
|
|
168
|
+
await promises_1.default.mkdir(dirAbs, { recursive: true });
|
|
169
|
+
const filePathAbs = path_1.default.resolve(params.rtwsRootAbs, exports.INSTALLED_APPS_REL_PATH);
|
|
170
|
+
const yamlText = yaml_1.default.stringify(params.file);
|
|
171
|
+
await promises_1.default.writeFile(filePathAbs, yamlText, 'utf-8');
|
|
172
|
+
}
|
|
173
|
+
function upsertInstalledApp(params) {
|
|
174
|
+
const apps = [...params.existing.apps];
|
|
175
|
+
const idx = apps.findIndex((a) => a.id === params.next.id);
|
|
176
|
+
if (idx >= 0) {
|
|
177
|
+
apps[idx] = params.next;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
apps.push(params.next);
|
|
181
|
+
}
|
|
182
|
+
return { schemaVersion: 1, apps };
|
|
183
|
+
}
|
|
184
|
+
function removeInstalledApp(params) {
|
|
185
|
+
return { schemaVersion: 1, apps: params.existing.apps.filter((a) => a.id !== params.appId) };
|
|
186
|
+
}
|
|
187
|
+
function setAppEnabled(params) {
|
|
188
|
+
const now = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
189
|
+
const apps = params.existing.apps.map((a) => a.id === params.appId ? { ...a, enabled: params.enabled, updatedAt: now } : a);
|
|
190
|
+
return { schemaVersion: 1, apps };
|
|
191
|
+
}
|
|
192
|
+
function setAppRuntimePort(params) {
|
|
193
|
+
const existingApp = findInstalledApp(params.existing, params.appId);
|
|
194
|
+
if (!existingApp)
|
|
195
|
+
return params.existing;
|
|
196
|
+
if (existingApp.runtime.port === params.port)
|
|
197
|
+
return params.existing;
|
|
198
|
+
const now = (0, time_1.formatUnifiedTimestamp)(new Date());
|
|
199
|
+
const apps = params.existing.apps.map((a) => a.id === params.appId
|
|
200
|
+
? { ...a, runtime: { ...a.runtime, port: params.port }, updatedAt: now }
|
|
201
|
+
: a);
|
|
202
|
+
return { schemaVersion: 1, apps };
|
|
203
|
+
}
|
|
204
|
+
function findInstalledApp(file, appId) {
|
|
205
|
+
const found = file.apps.find((a) => a.id === appId);
|
|
206
|
+
return found ?? null;
|
|
207
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveStableAppRuntimePort = resolveStableAppRuntimePort;
|
|
7
|
+
const node_net_1 = __importDefault(require("node:net"));
|
|
8
|
+
const STABLE_PORT_RANGE_START = 43000;
|
|
9
|
+
const STABLE_PORT_RANGE_END = 49999;
|
|
10
|
+
const PORT_MAX = 65535;
|
|
11
|
+
function isPositivePort(value) {
|
|
12
|
+
return (typeof value === 'number' &&
|
|
13
|
+
Number.isInteger(value) &&
|
|
14
|
+
value > 0 &&
|
|
15
|
+
value <= PORT_MAX &&
|
|
16
|
+
Number.isFinite(value));
|
|
17
|
+
}
|
|
18
|
+
function hashAppId(appId) {
|
|
19
|
+
// FNV-1a 32-bit hash for deterministic port probing order.
|
|
20
|
+
let hash = 0x811c9dc5;
|
|
21
|
+
for (let i = 0; i < appId.length; i += 1) {
|
|
22
|
+
hash ^= appId.charCodeAt(i);
|
|
23
|
+
hash = Math.imul(hash, 0x01000193);
|
|
24
|
+
}
|
|
25
|
+
return hash >>> 0;
|
|
26
|
+
}
|
|
27
|
+
function collectReservedPorts(existingApps, appId) {
|
|
28
|
+
const reserved = new Set();
|
|
29
|
+
for (const app of existingApps) {
|
|
30
|
+
if (app.id === appId)
|
|
31
|
+
continue;
|
|
32
|
+
if (isPositivePort(app.runtime.port)) {
|
|
33
|
+
reserved.add(app.runtime.port);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return reserved;
|
|
37
|
+
}
|
|
38
|
+
async function canBindPort(port) {
|
|
39
|
+
return await new Promise((resolve) => {
|
|
40
|
+
const server = node_net_1.default.createServer();
|
|
41
|
+
server.unref();
|
|
42
|
+
const finish = (ok) => {
|
|
43
|
+
server.removeAllListeners('error');
|
|
44
|
+
server.removeAllListeners('listening');
|
|
45
|
+
resolve(ok);
|
|
46
|
+
};
|
|
47
|
+
server.once('error', () => {
|
|
48
|
+
finish(false);
|
|
49
|
+
});
|
|
50
|
+
server.once('listening', () => {
|
|
51
|
+
server.close(() => finish(true));
|
|
52
|
+
});
|
|
53
|
+
server.listen({ host: '127.0.0.1', port, exclusive: true });
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function pickDeterministicAvailablePort(params) {
|
|
57
|
+
const rangeSize = STABLE_PORT_RANGE_END - STABLE_PORT_RANGE_START + 1;
|
|
58
|
+
if (rangeSize <= 0) {
|
|
59
|
+
throw new Error('Invalid stable app runtime port range configuration');
|
|
60
|
+
}
|
|
61
|
+
const baseHash = hashAppId(params.appId);
|
|
62
|
+
for (let i = 0; i < rangeSize; i += 1) {
|
|
63
|
+
const candidate = STABLE_PORT_RANGE_START + ((baseHash + i) % rangeSize);
|
|
64
|
+
if (params.reservedPorts.has(candidate))
|
|
65
|
+
continue;
|
|
66
|
+
if (await canBindPort(candidate))
|
|
67
|
+
return candidate;
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`Failed to allocate stable runtime port for app '${params.appId}': no bindable port in ${STABLE_PORT_RANGE_START}-${STABLE_PORT_RANGE_END}`);
|
|
70
|
+
}
|
|
71
|
+
async function resolveStableAppRuntimePort(params) {
|
|
72
|
+
if (!params.installJson.frontend)
|
|
73
|
+
return null;
|
|
74
|
+
const reservedPorts = collectReservedPorts(params.existingApps, params.appId);
|
|
75
|
+
if (isPositivePort(params.existingRuntimePort)) {
|
|
76
|
+
if (reservedPorts.has(params.existingRuntimePort)) {
|
|
77
|
+
throw new Error(`Invalid installed apps state: runtime port ${params.existingRuntimePort} for '${params.appId}' collides with another installed app`);
|
|
78
|
+
}
|
|
79
|
+
return params.existingRuntimePort;
|
|
80
|
+
}
|
|
81
|
+
const defaultPort = params.installJson.frontend.defaultPort;
|
|
82
|
+
if (isPositivePort(defaultPort) &&
|
|
83
|
+
!reservedPorts.has(defaultPort) &&
|
|
84
|
+
(await canBindPort(defaultPort))) {
|
|
85
|
+
return defaultPort;
|
|
86
|
+
}
|
|
87
|
+
return await pickDeterministicAvailablePort({
|
|
88
|
+
appId: params.appId,
|
|
89
|
+
reservedPorts,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
@@ -150,7 +150,7 @@ async function notifyWaitingDialogsOfClearedMind(dialog) {
|
|
|
150
150
|
}, undefined, ownerDialog.status);
|
|
151
151
|
for (const pendingRecord of owner.pendingRecords) {
|
|
152
152
|
const requesterId = ownerDialog.agentId;
|
|
153
|
-
const response = (0, inter_dialog_format_1.
|
|
153
|
+
const response = (0, inter_dialog_format_1.formatTellaskResponseContent)({
|
|
154
154
|
callName: pendingRecord.callName,
|
|
155
155
|
responderId: dialog.agentId,
|
|
156
156
|
requesterId,
|
|
@@ -161,23 +161,51 @@ async function notifyWaitingDialogsOfClearedMind(dialog) {
|
|
|
161
161
|
status: 'failed',
|
|
162
162
|
language,
|
|
163
163
|
});
|
|
164
|
-
|
|
164
|
+
const carryoverOriginCourse = pendingRecord.callingCourse;
|
|
165
|
+
const carryoverContent = carryoverOriginCourse !== undefined && carryoverOriginCourse !== ownerDialog.currentCourse
|
|
166
|
+
? (0, inter_dialog_format_1.formatTellaskCarryoverResultContent)({
|
|
167
|
+
originCourse: carryoverOriginCourse,
|
|
168
|
+
callName: pendingRecord.callName,
|
|
169
|
+
responderId: dialog.agentId,
|
|
170
|
+
mentionList: pendingRecord.mentionList,
|
|
171
|
+
sessionSlug: pendingRecord.sessionSlug,
|
|
172
|
+
tellaskContent: pendingRecord.tellaskContent,
|
|
173
|
+
responseBody,
|
|
174
|
+
status: 'failed',
|
|
175
|
+
language,
|
|
176
|
+
})
|
|
177
|
+
: undefined;
|
|
178
|
+
await ownerDialog.receiveTellaskResponse(dialog.agentId, pendingRecord.callName, pendingRecord.mentionList, pendingRecord.tellaskContent, 'failed', dialog.id, {
|
|
165
179
|
response,
|
|
166
180
|
agentId: dialog.agentId,
|
|
167
181
|
callId: pendingRecord.callId,
|
|
168
182
|
originMemberId: requesterId,
|
|
183
|
+
originCourse: carryoverOriginCourse,
|
|
184
|
+
carryoverContent,
|
|
169
185
|
sessionSlug: pendingRecord.sessionSlug,
|
|
170
186
|
});
|
|
171
|
-
const immediateMirror =
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
187
|
+
const immediateMirror = carryoverContent !== undefined
|
|
188
|
+
? {
|
|
189
|
+
type: 'tellask_carryover_result_msg',
|
|
190
|
+
role: 'user',
|
|
191
|
+
content: carryoverContent,
|
|
192
|
+
originCourse: carryoverOriginCourse,
|
|
193
|
+
responderId: dialog.agentId,
|
|
194
|
+
callName: pendingRecord.callName,
|
|
195
|
+
tellaskContent: pendingRecord.tellaskContent,
|
|
196
|
+
status: 'failed',
|
|
197
|
+
callId: pendingRecord.callId,
|
|
198
|
+
}
|
|
199
|
+
: {
|
|
200
|
+
type: 'tellask_result_msg',
|
|
201
|
+
role: 'tool',
|
|
202
|
+
responderId: dialog.agentId,
|
|
203
|
+
mentionList: pendingRecord.mentionList,
|
|
204
|
+
tellaskContent: pendingRecord.tellaskContent,
|
|
205
|
+
status: 'failed',
|
|
206
|
+
callId: pendingRecord.callId,
|
|
207
|
+
content: response,
|
|
208
|
+
};
|
|
181
209
|
await ownerDialog.addChatMessages(immediateMirror);
|
|
182
210
|
totalInvalidated += 1;
|
|
183
211
|
}
|
package/dist/dialog-fork.js
CHANGED
|
@@ -100,12 +100,14 @@ function isPersistedMessageRecord(record) {
|
|
|
100
100
|
case 'human_text_record':
|
|
101
101
|
case 'func_call_record':
|
|
102
102
|
case 'func_result_record':
|
|
103
|
-
case '
|
|
104
|
-
case '
|
|
103
|
+
case 'tellask_call_result_record':
|
|
104
|
+
case 'tellask_response_record':
|
|
105
|
+
case 'tellask_carryover_result_record':
|
|
105
106
|
return true;
|
|
106
107
|
case 'web_search_call_record':
|
|
107
108
|
case 'quest_for_sup_record':
|
|
108
|
-
case '
|
|
109
|
+
case 'tellask_call_carryover_record':
|
|
110
|
+
case 'tellask_call_anchor_record':
|
|
109
111
|
case 'gen_start_record':
|
|
110
112
|
case 'gen_finish_record':
|
|
111
113
|
case 'subdialog_created_record':
|
|
@@ -172,9 +174,11 @@ function rewriteRecordForFork(record, newRootId) {
|
|
|
172
174
|
case 'web_search_call_record':
|
|
173
175
|
case 'human_text_record':
|
|
174
176
|
case 'quest_for_sup_record':
|
|
175
|
-
case '
|
|
176
|
-
case '
|
|
177
|
-
case '
|
|
177
|
+
case 'tellask_call_result_record':
|
|
178
|
+
case 'tellask_call_carryover_record':
|
|
179
|
+
case 'tellask_call_anchor_record':
|
|
180
|
+
case 'tellask_response_record':
|
|
181
|
+
case 'tellask_carryover_result_record':
|
|
178
182
|
case 'gen_start_record':
|
|
179
183
|
case 'gen_finish_record':
|
|
180
184
|
return record;
|
package/dist/dialog.js
CHANGED
|
@@ -142,10 +142,10 @@ class Dialog {
|
|
|
142
142
|
// Diligence Push disable switch (persisted via latest.yaml; default = false).
|
|
143
143
|
this.disableDiligencePush = false;
|
|
144
144
|
// Current callId for tellask call correlation
|
|
145
|
-
// - Set
|
|
146
|
-
// - Retrieved during inline call-result emission (for
|
|
145
|
+
// - Set when tellask-special call results are finalized
|
|
146
|
+
// - Retrieved during inline call-result emission (for receiveTellaskCallResult callId parameter)
|
|
147
147
|
// - Enables frontend to attach result INLINE to the calling section
|
|
148
|
-
// - NOT used for
|
|
148
|
+
// - NOT used for sideline-response bubbles (which use calleeDialogId instead)
|
|
149
149
|
this._currentCallId = null;
|
|
150
150
|
// Validate required parameters
|
|
151
151
|
if (!taskDocPath || taskDocPath.trim() === '') {
|
|
@@ -207,7 +207,7 @@ class Dialog {
|
|
|
207
207
|
* Get the current callId for tellask call correlation
|
|
208
208
|
*
|
|
209
209
|
* Call Types:
|
|
210
|
-
* - tellask-special function call: callId is set
|
|
210
|
+
* - tellask-special function call: callId is set when call results are finalized and used for inline result correlation
|
|
211
211
|
* - Subdialog response bubbles: use calleeDialogId instead of callId
|
|
212
212
|
*
|
|
213
213
|
* @returns The current callId for call correlation, or null if no active call
|
|
@@ -216,7 +216,7 @@ class Dialog {
|
|
|
216
216
|
return this._currentCallId;
|
|
217
217
|
}
|
|
218
218
|
/**
|
|
219
|
-
* Set the current callId
|
|
219
|
+
* Set the current callId for tellask-special inline result correlation
|
|
220
220
|
*
|
|
221
221
|
* @param callId - The function-call correlation ID
|
|
222
222
|
*/
|
|
@@ -792,14 +792,14 @@ class Dialog {
|
|
|
792
792
|
/**
|
|
793
793
|
* Receive call result with callId for inline correlation
|
|
794
794
|
*/
|
|
795
|
-
async
|
|
796
|
-
return await this.dlgStore.
|
|
795
|
+
async receiveTellaskCallResult(responderId, callName, mentionList, tellaskContent, result, status, callId) {
|
|
796
|
+
return await this.dlgStore.receiveTellaskCallResult(this, responderId, callName, mentionList, tellaskContent, result, status, callId);
|
|
797
797
|
}
|
|
798
798
|
/**
|
|
799
|
-
* Receive
|
|
799
|
+
* Receive tellask response (separate bubble for tellask sideline replies)
|
|
800
800
|
*/
|
|
801
|
-
async
|
|
802
|
-
return await this.dlgStore.
|
|
801
|
+
async receiveTellaskResponse(responderId, callName, mentionList, tellaskContent, status, subdialogId, options) {
|
|
802
|
+
return await this.dlgStore.receiveTellaskResponse(this, responderId, callName, mentionList, tellaskContent, status, subdialogId, options);
|
|
803
803
|
}
|
|
804
804
|
async updateQuestions4Human(questions) {
|
|
805
805
|
return await this.dlgStore.updateQuestions4Human(this, questions);
|
|
@@ -871,7 +871,7 @@ class Dialog {
|
|
|
871
871
|
// Emit virtual generating_start_evt for subdialog response bubble
|
|
872
872
|
await this.notifyGeneratingStart();
|
|
873
873
|
const rawResponse = response;
|
|
874
|
-
// Emit
|
|
874
|
+
// Emit TellaskResponseEvent
|
|
875
875
|
const evt = (() => {
|
|
876
876
|
switch (callName) {
|
|
877
877
|
case 'tellask':
|
|
@@ -880,7 +880,7 @@ class Dialog {
|
|
|
880
880
|
`(dialogId=${this.id.selfId}, subdialogId=${subdialogId.selfId}, callId=${callId})`);
|
|
881
881
|
}
|
|
882
882
|
return {
|
|
883
|
-
type: '
|
|
883
|
+
type: 'tellask_response_evt',
|
|
884
884
|
responderId,
|
|
885
885
|
calleeDialogId: subdialogId.selfId,
|
|
886
886
|
callName,
|
|
@@ -896,7 +896,7 @@ class Dialog {
|
|
|
896
896
|
};
|
|
897
897
|
case 'tellaskSessionless':
|
|
898
898
|
return {
|
|
899
|
-
type: '
|
|
899
|
+
type: 'tellask_response_evt',
|
|
900
900
|
responderId,
|
|
901
901
|
calleeDialogId: subdialogId.selfId,
|
|
902
902
|
callName,
|
|
@@ -911,7 +911,7 @@ class Dialog {
|
|
|
911
911
|
};
|
|
912
912
|
case 'freshBootsReasoning':
|
|
913
913
|
return {
|
|
914
|
-
type: '
|
|
914
|
+
type: 'tellask_response_evt',
|
|
915
915
|
responderId,
|
|
916
916
|
calleeDialogId: subdialogId.selfId,
|
|
917
917
|
callName,
|
|
@@ -930,7 +930,7 @@ class Dialog {
|
|
|
930
930
|
await this.notifyGeneratingFinish();
|
|
931
931
|
}
|
|
932
932
|
catch (err) {
|
|
933
|
-
log_1.log.warn('Failed to post
|
|
933
|
+
log_1.log.warn('Failed to post tellask_response_evt event', undefined, {
|
|
934
934
|
error: err,
|
|
935
935
|
message: err instanceof Error ? err.message : String(err),
|
|
936
936
|
});
|
|
@@ -939,7 +939,7 @@ class Dialog {
|
|
|
939
939
|
}
|
|
940
940
|
exports.Dialog = Dialog;
|
|
941
941
|
/**
|
|
942
|
-
* SubDialog - A subdialog created by a RootDialog for autonomous
|
|
942
|
+
* SubDialog - A subdialog created by a RootDialog for autonomous tellask sideline work.
|
|
943
943
|
* Stores the root dialog for registry and lookup, and resolves its effective supdialog dynamically.
|
|
944
944
|
*/
|
|
945
945
|
class SubDialog extends Dialog {
|
|
@@ -1064,7 +1064,7 @@ class RootDialog extends Dialog {
|
|
|
1064
1064
|
return Array.from(this._subdialogRegistry.values());
|
|
1065
1065
|
}
|
|
1066
1066
|
/**
|
|
1067
|
-
* Create a new subdialog for autonomous
|
|
1067
|
+
* Create a new subdialog for autonomous tellask sideline work.
|
|
1068
1068
|
*/
|
|
1069
1069
|
async createSubDialog(targetAgentId, mentionList, tellaskContent, options) {
|
|
1070
1070
|
return await this.dlgStore.createSubDialog(this, targetAgentId, mentionList, tellaskContent, options);
|
|
@@ -1144,11 +1144,11 @@ class DialogStore {
|
|
|
1144
1144
|
/**
|
|
1145
1145
|
* Receive call result with callId for inline correlation
|
|
1146
1146
|
*/
|
|
1147
|
-
async
|
|
1147
|
+
async receiveTellaskCallResult(_dialog, _responderId, _callName, _mentionList, _tellaskContent, _result, _status, _callId) { }
|
|
1148
1148
|
/**
|
|
1149
|
-
* Receive
|
|
1149
|
+
* Receive tellask response (separate bubble for tellask sideline replies)
|
|
1150
1150
|
*/
|
|
1151
|
-
async
|
|
1151
|
+
async receiveTellaskResponse(_dialog, _responderId, _callName, _mentionList, _tellaskContent, _status, _subdialogId, _options) { }
|
|
1152
1152
|
async updateQuestions4Human(_dialog, _questions) { }
|
|
1153
1153
|
/**
|
|
1154
1154
|
* Load Questions for Human state from storage
|
|
@@ -4,27 +4,27 @@ Chinese version: [中文版](./OEC-philosophy.zh.md)
|
|
|
4
4
|
|
|
5
5
|
> Haier: Overall Every(thing/one/day) Control/Clear
|
|
6
6
|
|
|
7
|
-
The OEC Management Method is a comprehensive enterprise management framework created by Haier Group in 1989, also known as
|
|
7
|
+
The OEC Management Method is a comprehensive enterprise management framework created by Haier Group in 1989, also known as the Comprehensive Optimization Management Method. This philosophy generated major economic and social benefits for Haier, earning the company the National Enterprise Management Innovation "Golden Horse Award" and the Enterprise Reform "Sail Cup", along with a recommendation from Premier Zhu Rongji to promote the management experience nationwide.
|
|
8
8
|
|
|
9
9
|
## Core Philosophy
|
|
10
10
|
|
|
11
|
-
OEC represents a systematic approach to daily management that emphasizes **"Daily work completion, daily clearance, daily improvement"**
|
|
11
|
+
OEC represents a systematic approach to daily management that emphasizes **"Daily work completion, daily clearance, daily improvement."** The fundamental principle is that every employee must accomplish targeted work every day, with the overall goal being to achieve a 1% improvement over the previous day's performance.
|
|
12
12
|
|
|
13
13
|
## The OEC Components
|
|
14
14
|
|
|
15
|
-
### **O - Overall
|
|
15
|
+
### **O - Overall**
|
|
16
16
|
|
|
17
17
|
- **Global Integration**: All activities, processes, and systems are interconnected
|
|
18
18
|
- **Holistic Thinking**: Every element contributes to the overall organizational success
|
|
19
19
|
- **Strategic Alignment**: Daily activities support long-term strategic objectives
|
|
20
20
|
|
|
21
|
-
### **E - Everyone, Everything, Everyday
|
|
21
|
+
### **E - Everyone, Everything, Everyday**
|
|
22
22
|
|
|
23
23
|
- **Everyone**: Every employee has clear responsibilities and accountability
|
|
24
24
|
- **Everything**: Every task, process, and outcome is managed and controlled
|
|
25
25
|
- **Everyday**: Daily operations, reviews, and improvements are non-negotiable
|
|
26
26
|
|
|
27
|
-
### **C - Control and Clear
|
|
27
|
+
### **C - Control and Clear**
|
|
28
28
|
|
|
29
29
|
- **Clear Standards**: Defined expectations, processes, and quality benchmarks
|
|
30
30
|
- **Controlled Processes**: Systematic monitoring and adjustment mechanisms
|
|
@@ -32,27 +32,27 @@ OEC represents a systematic approach to daily management that emphasizes **"Dail
|
|
|
32
32
|
|
|
33
33
|
## Three Fundamental Principles
|
|
34
34
|
|
|
35
|
-
### 1. **Closed-Loop Management
|
|
35
|
+
### 1. **Closed-Loop Management**
|
|
36
36
|
|
|
37
37
|
- **PDCA Cycle**: Plan-Do-Check-Act continuous improvement
|
|
38
38
|
- **Complete Accountability**: Every task has clear ownership and follow-through
|
|
39
39
|
- **Systematic Follow-up**: No loose ends or unaddressed issues
|
|
40
40
|
|
|
41
|
-
### 2. **Comparative Analysis
|
|
41
|
+
### 2. **Comparative Analysis**
|
|
42
42
|
|
|
43
43
|
- **Internal Benchmarking**: Compare current performance with past achievements
|
|
44
44
|
- **External Benchmarking**: Measure against industry best practices and international standards
|
|
45
45
|
- **Competitive Intelligence**: Use comparison as a driver for improvement
|
|
46
46
|
|
|
47
|
-
### 3. **Continuous Optimization
|
|
47
|
+
### 3. **Continuous Optimization**
|
|
48
48
|
|
|
49
|
-
- **Weakest Link Theory**: Identify and strengthen
|
|
49
|
+
- **Weakest Link Theory**: Identify and strengthen weak areas
|
|
50
50
|
- **Incremental Progress**: 1% daily improvement compounds significantly over time
|
|
51
51
|
- **Systematic Enhancement**: Continuous refinement of all processes
|
|
52
52
|
|
|
53
53
|
## Implementation Framework
|
|
54
54
|
|
|
55
|
-
### Daily Work Completion
|
|
55
|
+
### Daily Work Completion
|
|
56
56
|
|
|
57
57
|
**Core Mechanisms:**
|
|
58
58
|
|
|
@@ -66,7 +66,7 @@ OEC represents a systematic approach to daily management that emphasizes **"Dail
|
|
|
66
66
|
- Mid-day check-ins ensure progress tracking
|
|
67
67
|
- Evening reviews confirm completion and identify issues
|
|
68
68
|
|
|
69
|
-
### Daily Clearance
|
|
69
|
+
### Daily Clearance
|
|
70
70
|
|
|
71
71
|
**The "Three Management Principles":**
|
|
72
72
|
|
|
@@ -169,7 +169,7 @@ OEC 代表了一种系统化的日常管理方法,强调**"日事日毕、日
|
|
|
169
169
|
|
|
170
170
|
### **多程对话**
|
|
171
171
|
|
|
172
|
-
-
|
|
172
|
+
- **每日重置**:使用已写回关键进展的差遣牒(任务实时协调公告板)与空对话历史(主要是大篇幅、过时的工具调用结果)开启新一程对话
|
|
173
173
|
- **清除上下文**:确保所有智能体在最佳清晰度和更新信息下工作
|
|
174
174
|
- **即时解决**:在同一操作周期内解决问题和异常
|
|
175
175
|
|