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.
Files changed (178) hide show
  1. package/README.md +1 -1
  2. package/README.zh.md +1 -1
  3. package/dist/apps/installed-file.js +207 -0
  4. package/dist/apps/runtime-port.js +91 -0
  5. package/dist/course-transition.js +40 -12
  6. package/dist/dialog-fork.js +10 -6
  7. package/dist/dialog.js +20 -20
  8. package/dist/docs/OEC-philosophy.md +11 -11
  9. package/dist/docs/OEC-philosophy.zh.md +1 -1
  10. package/dist/docs/context-health.md +20 -4
  11. package/dist/docs/context-health.zh.md +19 -7
  12. package/dist/docs/design.zh.md +8 -8
  13. package/dist/docs/dialog-persistence.zh.md +4 -4
  14. package/dist/docs/dialog-system.md +19 -14
  15. package/dist/docs/dialog-system.zh.md +102 -97
  16. package/dist/docs/encapsulated-taskdoc.md +5 -17
  17. package/dist/docs/encapsulated-taskdoc.zh.md +11 -11
  18. package/dist/docs/fbr.zh.md +1 -1
  19. package/dist/docs/kernel-app-architecture.md +286 -0
  20. package/dist/docs/kernel-app-architecture.zh.md +285 -0
  21. package/dist/docs/mcp-support.zh.md +1 -1
  22. package/dist/docs/memory-system.zh.md +4 -4
  23. package/dist/docs/mottos.zh.md +7 -7
  24. package/dist/docs/roadmap.zh.md +1 -1
  25. package/dist/docs/team_mgmt-toolset.zh.md +1 -1
  26. package/dist/docs/tellask-collab.md +9 -4
  27. package/dist/docs/tellask-collab.zh.md +21 -15
  28. package/dist/llm/driver-entry.js +28 -0
  29. package/dist/llm/driver-v2/context-health.js +121 -0
  30. package/dist/llm/driver-v2/context.js +56 -0
  31. package/dist/llm/driver-v2/core.js +1545 -0
  32. package/dist/llm/driver-v2/index.js +26 -0
  33. package/dist/llm/driver-v2/orchestrator.js +158 -0
  34. package/dist/llm/driver-v2/policy.js +129 -0
  35. package/dist/llm/driver-v2/restore-dialog-hierarchy.js +73 -0
  36. package/dist/llm/driver-v2/round.js +366 -0
  37. package/dist/llm/driver-v2/runtime-utils.js +365 -0
  38. package/dist/llm/driver-v2/saying-events.js +20 -0
  39. package/dist/llm/driver-v2/subdialog-txn.js +42 -0
  40. package/dist/llm/driver-v2/supdialog-response.js +400 -0
  41. package/dist/llm/driver-v2/tellask-bridge.js +1148 -0
  42. package/dist/llm/driver-v2/types.js +10 -0
  43. package/dist/llm/driver-v2-ref-only/context-health.js +121 -0
  44. package/dist/llm/driver-v2-ref-only/context.js +17 -0
  45. package/dist/llm/driver-v2-ref-only/core.js +1710 -0
  46. package/dist/llm/driver-v2-ref-only/index.js +26 -0
  47. package/dist/llm/driver-v2-ref-only/orchestrator.js +158 -0
  48. package/dist/llm/driver-v2-ref-only/policy.js +129 -0
  49. package/dist/llm/driver-v2-ref-only/restore-dialog-hierarchy.js +73 -0
  50. package/dist/llm/driver-v2-ref-only/round.js +366 -0
  51. package/dist/llm/driver-v2-ref-only/runtime-utils.js +473 -0
  52. package/dist/llm/driver-v2-ref-only/saying-events.js +18 -0
  53. package/dist/llm/driver-v2-ref-only/subdialog-txn.js +42 -0
  54. package/dist/llm/driver-v2-ref-only/supdialog-response.js +453 -0
  55. package/dist/llm/driver-v2-ref-only/tellask-bridge.js +1178 -0
  56. package/dist/llm/driver-v2-ref-only/types.js +10 -0
  57. package/dist/llm/gen/anthropic.js +1 -1
  58. package/dist/llm/gen/codex.js +1 -0
  59. package/dist/llm/gen/mock.js +5 -0
  60. package/dist/llm/gen/openai-compatible.js +1 -0
  61. package/dist/llm/gen/openai.js +1 -0
  62. package/dist/llm/kernel-driver/context.js +7 -2
  63. package/dist/llm/kernel-driver/drive.js +9 -7
  64. package/dist/llm/kernel-driver/flow.js +6 -5
  65. package/dist/llm/kernel-driver/subdialog.js +43 -15
  66. package/dist/llm/kernel-driver/tellask-special.js +11 -11
  67. package/dist/minds/system-prompt-parts.js +9 -7
  68. package/dist/minds/system-prompt.js +35 -23
  69. package/dist/persistence.js +372 -84
  70. package/dist/priming.js +207 -31
  71. package/dist/server/websocket-handler.js +1 -1
  72. package/dist/shared/i18n/driver-messages.js +21 -6
  73. package/dist/shared/utils/inter-dialog-format.js +106 -9
  74. package/dist/static/assets/{_basePickBy-B9gw9xu3.js → _basePickBy-DOCpneO0.js} +3 -3
  75. package/dist/static/assets/{_basePickBy-B9gw9xu3.js.map → _basePickBy-DOCpneO0.js.map} +1 -1
  76. package/dist/static/assets/{_baseUniq-CdteP2Ad.js → _baseUniq-DBZLqTK1.js} +2 -2
  77. package/dist/static/assets/{_baseUniq-CdteP2Ad.js.map → _baseUniq-DBZLqTK1.js.map} +1 -1
  78. package/dist/static/assets/{arc-BaFSInZP.js → arc-Dw9YkyBZ.js} +2 -2
  79. package/dist/static/assets/{arc-BaFSInZP.js.map → arc-Dw9YkyBZ.js.map} +1 -1
  80. package/dist/static/assets/{architectureDiagram-VXUJARFQ-kO0ROBqa.js → architectureDiagram-VXUJARFQ-DiXBIlTy.js} +7 -7
  81. package/dist/static/assets/{architectureDiagram-VXUJARFQ-kO0ROBqa.js.map → architectureDiagram-VXUJARFQ-DiXBIlTy.js.map} +1 -1
  82. package/dist/static/assets/{blockDiagram-VD42YOAC-D766EIYA.js → blockDiagram-VD42YOAC-CBTqG3TT.js} +7 -7
  83. package/dist/static/assets/{blockDiagram-VD42YOAC-D766EIYA.js.map → blockDiagram-VD42YOAC-CBTqG3TT.js.map} +1 -1
  84. package/dist/static/assets/{c4Diagram-YG6GDRKO-DwL98wWS.js → c4Diagram-YG6GDRKO-CKltdqcg.js} +3 -3
  85. package/dist/static/assets/{c4Diagram-YG6GDRKO-DwL98wWS.js.map → c4Diagram-YG6GDRKO-CKltdqcg.js.map} +1 -1
  86. package/dist/static/assets/{channel-CcUPWS87.js → channel-CsfA5ddv.js} +2 -2
  87. package/dist/static/assets/{channel-CcUPWS87.js.map → channel-CsfA5ddv.js.map} +1 -1
  88. package/dist/static/assets/{chunk-4BX2VUAB-BeTSwCuA.js → chunk-4BX2VUAB-BCdL9ibi.js} +2 -2
  89. package/dist/static/assets/{chunk-4BX2VUAB-BeTSwCuA.js.map → chunk-4BX2VUAB-BCdL9ibi.js.map} +1 -1
  90. package/dist/static/assets/{chunk-55IACEB6-C6Tzr8i_.js → chunk-55IACEB6-CcKnxlqS.js} +2 -2
  91. package/dist/static/assets/{chunk-55IACEB6-C6Tzr8i_.js.map → chunk-55IACEB6-CcKnxlqS.js.map} +1 -1
  92. package/dist/static/assets/{chunk-B4BG7PRW-DSi9x25j.js → chunk-B4BG7PRW-BnypOYYo.js} +5 -5
  93. package/dist/static/assets/{chunk-B4BG7PRW-DSi9x25j.js.map → chunk-B4BG7PRW-BnypOYYo.js.map} +1 -1
  94. package/dist/static/assets/{chunk-DI55MBZ5-CfAPRphL.js → chunk-DI55MBZ5-BGYHpvhR.js} +4 -4
  95. package/dist/static/assets/{chunk-DI55MBZ5-CfAPRphL.js.map → chunk-DI55MBZ5-BGYHpvhR.js.map} +1 -1
  96. package/dist/static/assets/{chunk-FMBD7UC4-B-M6vSiI.js → chunk-FMBD7UC4-Crf0Br1R.js} +2 -2
  97. package/dist/static/assets/{chunk-FMBD7UC4-B-M6vSiI.js.map → chunk-FMBD7UC4-Crf0Br1R.js.map} +1 -1
  98. package/dist/static/assets/{chunk-QN33PNHL-yU2oNaRc.js → chunk-QN33PNHL-Cg1EQYdQ.js} +2 -2
  99. package/dist/static/assets/{chunk-QN33PNHL-yU2oNaRc.js.map → chunk-QN33PNHL-Cg1EQYdQ.js.map} +1 -1
  100. package/dist/static/assets/{chunk-QZHKN3VN-jPTrvtzO.js → chunk-QZHKN3VN-DRH7UNkC.js} +2 -2
  101. package/dist/static/assets/{chunk-QZHKN3VN-jPTrvtzO.js.map → chunk-QZHKN3VN-DRH7UNkC.js.map} +1 -1
  102. package/dist/static/assets/{chunk-TZMSLE5B-Bls_D3TM.js → chunk-TZMSLE5B-CaZqBdnu.js} +2 -2
  103. package/dist/static/assets/{chunk-TZMSLE5B-Bls_D3TM.js.map → chunk-TZMSLE5B-CaZqBdnu.js.map} +1 -1
  104. package/dist/static/assets/{classDiagram-2ON5EDUG-6HSV8O5b.js → classDiagram-2ON5EDUG-DSsG0iFI.js} +6 -6
  105. package/dist/static/assets/{classDiagram-2ON5EDUG-6HSV8O5b.js.map → classDiagram-2ON5EDUG-DSsG0iFI.js.map} +1 -1
  106. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-6HSV8O5b.js → classDiagram-v2-WZHVMYZB-DSsG0iFI.js} +6 -6
  107. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-6HSV8O5b.js.map → classDiagram-v2-WZHVMYZB-DSsG0iFI.js.map} +1 -1
  108. package/dist/static/assets/{clone-CtKoD5Su.js → clone-xhbAL4G8.js} +2 -2
  109. package/dist/static/assets/{clone-CtKoD5Su.js.map → clone-xhbAL4G8.js.map} +1 -1
  110. package/dist/static/assets/{cose-bilkent-S5V4N54A-C8Q_0ZER.js → cose-bilkent-S5V4N54A-B7Rtmhjt.js} +2 -2
  111. package/dist/static/assets/{cose-bilkent-S5V4N54A-C8Q_0ZER.js.map → cose-bilkent-S5V4N54A-B7Rtmhjt.js.map} +1 -1
  112. package/dist/static/assets/{dagre-6UL2VRFP-CYIohfVW.js → dagre-6UL2VRFP-BkqhLTnX.js} +7 -7
  113. package/dist/static/assets/{dagre-6UL2VRFP-CYIohfVW.js.map → dagre-6UL2VRFP-BkqhLTnX.js.map} +1 -1
  114. package/dist/static/assets/{diagram-PSM6KHXK-BTYKp-4w.js → diagram-PSM6KHXK-CZKtGq3a.js} +8 -8
  115. package/dist/static/assets/{diagram-PSM6KHXK-BTYKp-4w.js.map → diagram-PSM6KHXK-CZKtGq3a.js.map} +1 -1
  116. package/dist/static/assets/{diagram-QEK2KX5R-CopAPXBx.js → diagram-QEK2KX5R-CnMVuAHl.js} +7 -7
  117. package/dist/static/assets/{diagram-QEK2KX5R-CopAPXBx.js.map → diagram-QEK2KX5R-CnMVuAHl.js.map} +1 -1
  118. package/dist/static/assets/{diagram-S2PKOQOG-BxYzu2CQ.js → diagram-S2PKOQOG-CeSf7JXc.js} +7 -7
  119. package/dist/static/assets/{diagram-S2PKOQOG-BxYzu2CQ.js.map → diagram-S2PKOQOG-CeSf7JXc.js.map} +1 -1
  120. package/dist/static/assets/{erDiagram-Q2GNP2WA-8SOoYoCD.js → erDiagram-Q2GNP2WA-CSt8_Jg8.js} +5 -5
  121. package/dist/static/assets/{erDiagram-Q2GNP2WA-8SOoYoCD.js.map → erDiagram-Q2GNP2WA-CSt8_Jg8.js.map} +1 -1
  122. package/dist/static/assets/{flowDiagram-NV44I4VS-x3ds9tRp.js → flowDiagram-NV44I4VS-D5Ml-CXN.js} +6 -6
  123. package/dist/static/assets/{flowDiagram-NV44I4VS-x3ds9tRp.js.map → flowDiagram-NV44I4VS-D5Ml-CXN.js.map} +1 -1
  124. package/dist/static/assets/{ganttDiagram-JELNMOA3-JJe52R5B.js → ganttDiagram-JELNMOA3-CyMWbWsa.js} +3 -3
  125. package/dist/static/assets/{ganttDiagram-JELNMOA3-JJe52R5B.js.map → ganttDiagram-JELNMOA3-CyMWbWsa.js.map} +1 -1
  126. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-D5WErFAP.js → gitGraphDiagram-V2S2FVAM-vl516Is8.js} +8 -8
  127. package/dist/static/assets/{gitGraphDiagram-V2S2FVAM-D5WErFAP.js.map → gitGraphDiagram-V2S2FVAM-vl516Is8.js.map} +1 -1
  128. package/dist/static/assets/{graph-D2qG911_.js → graph-BGZ_sL_x.js} +3 -3
  129. package/dist/static/assets/{graph-D2qG911_.js.map → graph-BGZ_sL_x.js.map} +1 -1
  130. package/dist/static/assets/{index-BRvFzt7r.js → index-C-RsyM0K.js} +274 -82
  131. package/dist/static/assets/{index-BRvFzt7r.js.map → index-C-RsyM0K.js.map} +1 -1
  132. package/dist/static/assets/{infoDiagram-HS3SLOUP-CJgZXXei.js → infoDiagram-HS3SLOUP-6wx0LbHY.js} +6 -6
  133. package/dist/static/assets/{infoDiagram-HS3SLOUP-CJgZXXei.js.map → infoDiagram-HS3SLOUP-6wx0LbHY.js.map} +1 -1
  134. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DsA_9YlY.js → journeyDiagram-XKPGCS4Q-YPjC-r77.js} +5 -5
  135. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-DsA_9YlY.js.map → journeyDiagram-XKPGCS4Q-YPjC-r77.js.map} +1 -1
  136. package/dist/static/assets/{kanban-definition-3W4ZIXB7-l0WL_yMI.js → kanban-definition-3W4ZIXB7-DlG-ZWTO.js} +3 -3
  137. package/dist/static/assets/{kanban-definition-3W4ZIXB7-l0WL_yMI.js.map → kanban-definition-3W4ZIXB7-DlG-ZWTO.js.map} +1 -1
  138. package/dist/static/assets/{layout-CpX1UYDN.js → layout-BZJKhYY3.js} +5 -5
  139. package/dist/static/assets/{layout-CpX1UYDN.js.map → layout-BZJKhYY3.js.map} +1 -1
  140. package/dist/static/assets/{linear-BwAZ1jvU.js → linear-Bau37zh5.js} +2 -2
  141. package/dist/static/assets/{linear-BwAZ1jvU.js.map → linear-Bau37zh5.js.map} +1 -1
  142. package/dist/static/assets/{mindmap-definition-VGOIOE7T-CbPr4yzk.js → mindmap-definition-VGOIOE7T-n2WXgX4b.js} +4 -4
  143. package/dist/static/assets/{mindmap-definition-VGOIOE7T-CbPr4yzk.js.map → mindmap-definition-VGOIOE7T-n2WXgX4b.js.map} +1 -1
  144. package/dist/static/assets/{pieDiagram-ADFJNKIX-Dm1nDIqq.js → pieDiagram-ADFJNKIX-DgW7FkI4.js} +8 -8
  145. package/dist/static/assets/{pieDiagram-ADFJNKIX-Dm1nDIqq.js.map → pieDiagram-ADFJNKIX-DgW7FkI4.js.map} +1 -1
  146. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-ZsrsqMXx.js → quadrantDiagram-AYHSOK5B-BtsDjIpC.js} +3 -3
  147. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-ZsrsqMXx.js.map → quadrantDiagram-AYHSOK5B-BtsDjIpC.js.map} +1 -1
  148. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Dcm7em76.js → requirementDiagram-UZGBJVZJ-DPzuPEge.js} +4 -4
  149. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-Dcm7em76.js.map → requirementDiagram-UZGBJVZJ-DPzuPEge.js.map} +1 -1
  150. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CZaCjU14.js → sankeyDiagram-TZEHDZUN-BJS1ETtL.js} +2 -2
  151. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-CZaCjU14.js.map → sankeyDiagram-TZEHDZUN-BJS1ETtL.js.map} +1 -1
  152. package/dist/static/assets/{sequenceDiagram-WL72ISMW-CcfoaMSR.js → sequenceDiagram-WL72ISMW-DXEpa4ly.js} +4 -4
  153. package/dist/static/assets/{sequenceDiagram-WL72ISMW-CcfoaMSR.js.map → sequenceDiagram-WL72ISMW-DXEpa4ly.js.map} +1 -1
  154. package/dist/static/assets/{stateDiagram-FKZM4ZOC-BVIDD43e.js → stateDiagram-FKZM4ZOC-CGU6VJY5.js} +9 -9
  155. package/dist/static/assets/{stateDiagram-FKZM4ZOC-BVIDD43e.js.map → stateDiagram-FKZM4ZOC-CGU6VJY5.js.map} +1 -1
  156. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9GL2xr3.js → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js} +5 -5
  157. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-B9GL2xr3.js.map → stateDiagram-v2-4FDKWEC3-Dx_GvlFA.js.map} +1 -1
  158. package/dist/static/assets/{timeline-definition-IT6M3QCI-8iKDS8Ig.js → timeline-definition-IT6M3QCI-DcWLmdgJ.js} +3 -3
  159. package/dist/static/assets/{timeline-definition-IT6M3QCI-8iKDS8Ig.js.map → timeline-definition-IT6M3QCI-DcWLmdgJ.js.map} +1 -1
  160. package/dist/static/assets/{treemap-GDKQZRPO-CbxnTnrn.js → treemap-GDKQZRPO-BhUwKF9C.js} +5 -5
  161. package/dist/static/assets/{treemap-GDKQZRPO-CbxnTnrn.js.map → treemap-GDKQZRPO-BhUwKF9C.js.map} +1 -1
  162. package/dist/static/assets/{xychartDiagram-PRI3JC2R-C0KMwrOR.js → xychartDiagram-PRI3JC2R-Cr4t0oCq.js} +3 -3
  163. package/dist/static/assets/{xychartDiagram-PRI3JC2R-C0KMwrOR.js.map → xychartDiagram-PRI3JC2R-Cr4t0oCq.js.map} +1 -1
  164. package/dist/static/index.html +1 -1
  165. package/dist/tools/ctrl.js +3 -2
  166. package/dist/tools/prompts/control/zh/index.md +1 -1
  167. package/dist/tools/prompts/control/zh/principles.md +1 -1
  168. package/dist/tools/prompts/memory/en/errors.md +155 -0
  169. package/dist/tools/prompts/memory/en/index.md +47 -0
  170. package/dist/tools/prompts/memory/en/principles.md +79 -0
  171. package/dist/tools/prompts/memory/en/scenarios.md +174 -0
  172. package/dist/tools/prompts/memory/en/tools.md +154 -0
  173. package/dist/tools/prompts/memory/zh/errors.md +155 -0
  174. package/dist/tools/prompts/memory/zh/index.md +47 -0
  175. package/dist/tools/prompts/memory/zh/principles.md +79 -0
  176. package/dist/tools/prompts/memory/zh/scenarios.md +174 -0
  177. package/dist/tools/prompts/memory/zh/tools.md +154 -0
  178. package/package.json +1 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > Agents should be sustaining the continuous development of your products, one-shot product creation is hallucination.
6
6
 
7
- - 中文版:[README.zh.md](./README.zh.md)
7
+ - Chinese version: [中文版](./README.zh.md)
8
8
 
9
9
  ## CAVEATS
10
10
 
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
- - **[Encapsulated Taskdocs](docs/encapsulated-taskdoc.zh.md)** — 差遣牒(Taskdoc)封装
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.formatTeammateResponseContent)({
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
- await ownerDialog.receiveTeammateResponse(dialog.agentId, pendingRecord.callName, pendingRecord.mentionList, pendingRecord.tellaskContent, 'failed', dialog.id, {
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
- type: 'tellask_result_msg',
173
- role: 'tool',
174
- responderId: dialog.agentId,
175
- mentionList: pendingRecord.mentionList,
176
- tellaskContent: pendingRecord.tellaskContent,
177
- status: 'failed',
178
- callId: pendingRecord.callId,
179
- content: response,
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
  }
@@ -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 'teammate_call_result_record':
104
- case 'teammate_response_record':
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 'teammate_call_anchor_record':
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 'teammate_call_result_record':
176
- case 'teammate_call_anchor_record':
177
- case 'teammate_response_record':
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 during teammate_call_finish_evt (from tellask-special function calls)
146
- // - Retrieved during inline call-result emission (for receiveTeammateCallResult callId parameter)
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 teammate tellasks (which use calleeDialogId instead)
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 during teammate_call_finish_evt and used for inline result correlation
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 (called during teammate_call_finish_evt for tellask-special calls)
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 receiveTeammateCallResult(responderId, callName, mentionList, tellaskContent, result, status, callId) {
796
- return await this.dlgStore.receiveTeammateCallResult(this, responderId, callName, mentionList, tellaskContent, result, status, callId);
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 teammate response (separate bubble for @teammate tellasks)
799
+ * Receive tellask response (separate bubble for tellask sideline replies)
800
800
  */
801
- async receiveTeammateResponse(responderId, callName, mentionList, tellaskContent, status, subdialogId, options) {
802
- return await this.dlgStore.receiveTeammateResponse(this, responderId, callName, mentionList, tellaskContent, status, subdialogId, options);
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 TeammateResponseEvent
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: 'teammate_response_evt',
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: 'teammate_response_evt',
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: 'teammate_response_evt',
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 teammate_response_evt event', undefined, {
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 teammate tellasks.
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 teammate tellasks.
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 receiveTeammateCallResult(_dialog, _responderId, _callName, _mentionList, _tellaskContent, _result, _status, _callId) { }
1147
+ async receiveTellaskCallResult(_dialog, _responderId, _callName, _mentionList, _tellaskContent, _result, _status, _callId) { }
1148
1148
  /**
1149
- * Receive teammate response (separate bubble for @teammate tellasks)
1149
+ * Receive tellask response (separate bubble for tellask sideline replies)
1150
1150
  */
1151
- async receiveTeammateResponse(_dialog, _responderId, _callName, _mentionList, _tellaskContent, _status, _subdialogId, _options) { }
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 "全方位优化管理法" (Comprehensive Optimization Management Method). This philosophy has generated tremendous economic and social benefits for Haier, earning them the National Enterprise Management Innovation "Golden Horse Award" and the Enterprise Reform "Sail Cup", with Premier Zhu Rongji批示 recommending nationwide promotion of this management experience.
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"** (日事日毕、日清日高). 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.
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薄弱环节 (weak areas)
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
- - **每日重置**:使用已写回关键进展的差遣牒(Taskdoc,任务实时协调公告板)与空对话历史(主要是大篇幅、过时的工具调用结果)开启新一程对话
172
+ - **每日重置**:使用已写回关键进展的差遣牒(任务实时协调公告板)与空对话历史(主要是大篇幅、过时的工具调用结果)开启新一程对话
173
173
  - **清除上下文**:确保所有智能体在最佳清晰度和更新信息下工作
174
174
  - **即时解决**:在同一操作周期内解决问题和异常
175
175