dominds 1.22.1 → 1.23.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 (127) hide show
  1. package/dist/access-control.js +4 -4
  2. package/dist/docs/dialog-system.md +3 -2
  3. package/dist/docs/dialog-system.zh.md +3 -2
  4. package/dist/docs/encapsulated-taskdoc.md +18 -6
  5. package/dist/docs/encapsulated-taskdoc.zh.md +19 -7
  6. package/dist/docs/llm-provider-isolation.md +1 -1
  7. package/dist/docs/llm-provider-isolation.zh.md +1 -1
  8. package/dist/docs/team_mgmt-toolset.md +1 -0
  9. package/dist/docs/team_mgmt-toolset.zh.md +1 -0
  10. package/dist/llm/defaults.yaml +43 -0
  11. package/dist/llm/gen/openai-compatible.d.ts +3 -0
  12. package/dist/llm/gen/openai-compatible.js +294 -11
  13. package/dist/minds/minds-i18n.js +2 -2
  14. package/dist/minds/system-prompt-parts.js +8 -8
  15. package/dist/runtime/driver-messages.js +4 -4
  16. package/dist/team.d.ts +2 -1
  17. package/dist/team.js +11 -1
  18. package/dist/tools/ctrl.d.ts +1 -1
  19. package/dist/tools/ctrl.js +67 -28
  20. package/dist/tools/prompts/control/en/principles.md +3 -3
  21. package/dist/tools/prompts/control/en/scenarios.md +25 -0
  22. package/dist/tools/prompts/control/en/tools.md +18 -6
  23. package/dist/tools/prompts/control/zh/principles.md +3 -3
  24. package/dist/tools/prompts/control/zh/scenarios.md +25 -0
  25. package/dist/tools/prompts/control/zh/tools.md +18 -6
  26. package/dist/tools/team_mgmt-manual.js +2 -2
  27. package/dist/tools/team_mgmt.js +2 -2
  28. package/dist/utils/task-package.d.ts +16 -0
  29. package/dist/utils/task-package.js +131 -55
  30. package/dist/utils/taskdoc.js +12 -12
  31. package/package.json +1 -1
  32. package/webapp/dist/assets/{_basePickBy-DUbW5G8a.js → _basePickBy-C3SVVywm.js} +3 -3
  33. package/webapp/dist/assets/{_basePickBy-DUbW5G8a.js.map → _basePickBy-C3SVVywm.js.map} +1 -1
  34. package/webapp/dist/assets/{_baseUniq-vou1IeXB.js → _baseUniq-egNq6cCa.js} +2 -2
  35. package/webapp/dist/assets/{_baseUniq-vou1IeXB.js.map → _baseUniq-egNq6cCa.js.map} +1 -1
  36. package/webapp/dist/assets/{arc-D_O9oO0B.js → arc-CASAlRvm.js} +2 -2
  37. package/webapp/dist/assets/{arc-D_O9oO0B.js.map → arc-CASAlRvm.js.map} +1 -1
  38. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B7k9SWSL.js → architectureDiagram-2XIMDMQ5-B6n5FQmS.js} +7 -7
  39. package/webapp/dist/assets/{architectureDiagram-2XIMDMQ5-B7k9SWSL.js.map → architectureDiagram-2XIMDMQ5-B6n5FQmS.js.map} +1 -1
  40. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-e3xTmffi.js → blockDiagram-WCTKOSBZ-D2UGGjic.js} +7 -7
  41. package/webapp/dist/assets/{blockDiagram-WCTKOSBZ-e3xTmffi.js.map → blockDiagram-WCTKOSBZ-D2UGGjic.js.map} +1 -1
  42. package/webapp/dist/assets/{c4Diagram-IC4MRINW-DVvi-N2o.js → c4Diagram-IC4MRINW-BOY_bQFP.js} +3 -3
  43. package/webapp/dist/assets/{c4Diagram-IC4MRINW-DVvi-N2o.js.map → c4Diagram-IC4MRINW-BOY_bQFP.js.map} +1 -1
  44. package/webapp/dist/assets/{channel-CH387UD2.js → channel-CZ_X09H1.js} +2 -2
  45. package/webapp/dist/assets/{channel-CH387UD2.js.map → channel-CZ_X09H1.js.map} +1 -1
  46. package/webapp/dist/assets/{chunk-4BX2VUAB-BOo0Xj3m.js → chunk-4BX2VUAB-BIwyAzZQ.js} +2 -2
  47. package/webapp/dist/assets/{chunk-4BX2VUAB-BOo0Xj3m.js.map → chunk-4BX2VUAB-BIwyAzZQ.js.map} +1 -1
  48. package/webapp/dist/assets/{chunk-55IACEB6-CI4uRAx_.js → chunk-55IACEB6-zSjTFoCX.js} +2 -2
  49. package/webapp/dist/assets/{chunk-55IACEB6-CI4uRAx_.js.map → chunk-55IACEB6-zSjTFoCX.js.map} +1 -1
  50. package/webapp/dist/assets/{chunk-FMBD7UC4-C4N1ovxD.js → chunk-FMBD7UC4-CTpuRfdB.js} +2 -2
  51. package/webapp/dist/assets/{chunk-FMBD7UC4-C4N1ovxD.js.map → chunk-FMBD7UC4-CTpuRfdB.js.map} +1 -1
  52. package/webapp/dist/assets/{chunk-JSJVCQXG-5U4Hu7pC.js → chunk-JSJVCQXG-CJ3DM4in.js} +2 -2
  53. package/webapp/dist/assets/{chunk-JSJVCQXG-5U4Hu7pC.js.map → chunk-JSJVCQXG-CJ3DM4in.js.map} +1 -1
  54. package/webapp/dist/assets/{chunk-KX2RTZJC-BXPDNuct.js → chunk-KX2RTZJC-B97EakhO.js} +2 -2
  55. package/webapp/dist/assets/{chunk-KX2RTZJC-BXPDNuct.js.map → chunk-KX2RTZJC-B97EakhO.js.map} +1 -1
  56. package/webapp/dist/assets/{chunk-NQ4KR5QH-oVsExnnn.js → chunk-NQ4KR5QH-5o1o5x0z.js} +4 -4
  57. package/webapp/dist/assets/{chunk-NQ4KR5QH-oVsExnnn.js.map → chunk-NQ4KR5QH-5o1o5x0z.js.map} +1 -1
  58. package/webapp/dist/assets/{chunk-QZHKN3VN-C6FzEv2C.js → chunk-QZHKN3VN-D33FSIEb.js} +2 -2
  59. package/webapp/dist/assets/{chunk-QZHKN3VN-C6FzEv2C.js.map → chunk-QZHKN3VN-D33FSIEb.js.map} +1 -1
  60. package/webapp/dist/assets/{chunk-WL4C6EOR-Ir7e_B7t.js → chunk-WL4C6EOR-C2InqFin.js} +6 -6
  61. package/webapp/dist/assets/{chunk-WL4C6EOR-Ir7e_B7t.js.map → chunk-WL4C6EOR-C2InqFin.js.map} +1 -1
  62. package/webapp/dist/assets/{classDiagram-VBA2DB6C-CPYs_LAr.js → classDiagram-VBA2DB6C-BfLZmK48.js} +7 -7
  63. package/webapp/dist/assets/{classDiagram-VBA2DB6C-CPYs_LAr.js.map → classDiagram-VBA2DB6C-BfLZmK48.js.map} +1 -1
  64. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CPYs_LAr.js → classDiagram-v2-RAHNMMFH-BfLZmK48.js} +7 -7
  65. package/webapp/dist/assets/{classDiagram-v2-RAHNMMFH-CPYs_LAr.js.map → classDiagram-v2-RAHNMMFH-BfLZmK48.js.map} +1 -1
  66. package/webapp/dist/assets/{clone-CToca8rS.js → clone-BSCHnHfl.js} +2 -2
  67. package/webapp/dist/assets/{clone-CToca8rS.js.map → clone-BSCHnHfl.js.map} +1 -1
  68. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DLNtqY7a.js → cose-bilkent-S5V4N54A-CeQ1jAJJ.js} +2 -2
  69. package/webapp/dist/assets/{cose-bilkent-S5V4N54A-DLNtqY7a.js.map → cose-bilkent-S5V4N54A-CeQ1jAJJ.js.map} +1 -1
  70. package/webapp/dist/assets/{dagre-KLK3FWXG-Bkt-O9uW.js → dagre-KLK3FWXG-WUuNYzcK.js} +7 -7
  71. package/webapp/dist/assets/{dagre-KLK3FWXG-Bkt-O9uW.js.map → dagre-KLK3FWXG-WUuNYzcK.js.map} +1 -1
  72. package/webapp/dist/assets/{diagram-E7M64L7V-B4JR_u4V.js → diagram-E7M64L7V-jOVCIExP.js} +8 -8
  73. package/webapp/dist/assets/{diagram-E7M64L7V-B4JR_u4V.js.map → diagram-E7M64L7V-jOVCIExP.js.map} +1 -1
  74. package/webapp/dist/assets/{diagram-IFDJBPK2-D9zRh8b7.js → diagram-IFDJBPK2-cCeQqotA.js} +7 -7
  75. package/webapp/dist/assets/{diagram-IFDJBPK2-D9zRh8b7.js.map → diagram-IFDJBPK2-cCeQqotA.js.map} +1 -1
  76. package/webapp/dist/assets/{diagram-P4PSJMXO-CAaXVWnX.js → diagram-P4PSJMXO-DjAYFRLv.js} +7 -7
  77. package/webapp/dist/assets/{diagram-P4PSJMXO-CAaXVWnX.js.map → diagram-P4PSJMXO-DjAYFRLv.js.map} +1 -1
  78. package/webapp/dist/assets/{erDiagram-INFDFZHY-DDeoaSkJ.js → erDiagram-INFDFZHY-Dl_6U5fV.js} +5 -5
  79. package/webapp/dist/assets/{erDiagram-INFDFZHY-DDeoaSkJ.js.map → erDiagram-INFDFZHY-Dl_6U5fV.js.map} +1 -1
  80. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DEYqzSEJ.js → flowDiagram-PKNHOUZH-D80nrZ3S.js} +7 -7
  81. package/webapp/dist/assets/{flowDiagram-PKNHOUZH-DEYqzSEJ.js.map → flowDiagram-PKNHOUZH-D80nrZ3S.js.map} +1 -1
  82. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BuLOSh0d.js → ganttDiagram-A5KZAMGK-T3WdMrgj.js} +3 -3
  83. package/webapp/dist/assets/{ganttDiagram-A5KZAMGK-BuLOSh0d.js.map → ganttDiagram-A5KZAMGK-T3WdMrgj.js.map} +1 -1
  84. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js → gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js} +8 -8
  85. package/webapp/dist/assets/{gitGraphDiagram-K3NZZRJ6-CBrwZvBf.js.map → gitGraphDiagram-K3NZZRJ6-ifV-jkKL.js.map} +1 -1
  86. package/webapp/dist/assets/{graph-fX6cvjwR.js → graph-D5jmnb35.js} +3 -3
  87. package/webapp/dist/assets/{graph-fX6cvjwR.js.map → graph-D5jmnb35.js.map} +1 -1
  88. package/webapp/dist/assets/{index-B3WzTLcD.js → index-CGbZlct2.js} +622 -160
  89. package/webapp/dist/assets/index-CGbZlct2.js.map +1 -0
  90. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-Ci3XYvve.js → infoDiagram-LFFYTUFH-C340CY5x.js} +6 -6
  91. package/webapp/dist/assets/{infoDiagram-LFFYTUFH-Ci3XYvve.js.map → infoDiagram-LFFYTUFH-C340CY5x.js.map} +1 -1
  92. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DOH5ua9R.js → ishikawaDiagram-PHBUUO56-Bu4RsELK.js} +2 -2
  93. package/webapp/dist/assets/{ishikawaDiagram-PHBUUO56-DOH5ua9R.js.map → ishikawaDiagram-PHBUUO56-Bu4RsELK.js.map} +1 -1
  94. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DM_fiZlj.js → journeyDiagram-4ABVD52K-Dvv3ypKA.js} +5 -5
  95. package/webapp/dist/assets/{journeyDiagram-4ABVD52K-DM_fiZlj.js.map → journeyDiagram-4ABVD52K-Dvv3ypKA.js.map} +1 -1
  96. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CSh2hqc2.js → kanban-definition-K7BYSVSG-D_rsetjW.js} +3 -3
  97. package/webapp/dist/assets/{kanban-definition-K7BYSVSG-CSh2hqc2.js.map → kanban-definition-K7BYSVSG-D_rsetjW.js.map} +1 -1
  98. package/webapp/dist/assets/{layout-yZEK1LgL.js → layout-CLmOfwnS.js} +5 -5
  99. package/webapp/dist/assets/{layout-yZEK1LgL.js.map → layout-CLmOfwnS.js.map} +1 -1
  100. package/webapp/dist/assets/{linear-m76SmdtZ.js → linear-DFAmViqi.js} +2 -2
  101. package/webapp/dist/assets/{linear-m76SmdtZ.js.map → linear-DFAmViqi.js.map} +1 -1
  102. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-NiwP-SLH.js → mindmap-definition-YRQLILUH-Ce3_czeS.js} +4 -4
  103. package/webapp/dist/assets/{mindmap-definition-YRQLILUH-NiwP-SLH.js.map → mindmap-definition-YRQLILUH-Ce3_czeS.js.map} +1 -1
  104. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CSCapDSD.js → pieDiagram-SKSYHLDU-U6_un5Sc.js} +8 -8
  105. package/webapp/dist/assets/{pieDiagram-SKSYHLDU-CSCapDSD.js.map → pieDiagram-SKSYHLDU-U6_un5Sc.js.map} +1 -1
  106. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CbDGQH91.js → quadrantDiagram-337W2JSQ-DmVJQItS.js} +3 -3
  107. package/webapp/dist/assets/{quadrantDiagram-337W2JSQ-CbDGQH91.js.map → quadrantDiagram-337W2JSQ-DmVJQItS.js.map} +1 -1
  108. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CeG2yodp.js → requirementDiagram-Z7DCOOCP-BkNhSY-g.js} +4 -4
  109. package/webapp/dist/assets/{requirementDiagram-Z7DCOOCP-CeG2yodp.js.map → requirementDiagram-Z7DCOOCP-BkNhSY-g.js.map} +1 -1
  110. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-B_l8tKqa.js → sankeyDiagram-WA2Y5GQK-E3UEy5SX.js} +2 -2
  111. package/webapp/dist/assets/{sankeyDiagram-WA2Y5GQK-B_l8tKqa.js.map → sankeyDiagram-WA2Y5GQK-E3UEy5SX.js.map} +1 -1
  112. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-Dc5gBIi5.js → sequenceDiagram-2WXFIKYE-k0w9WKAO.js} +4 -4
  113. package/webapp/dist/assets/{sequenceDiagram-2WXFIKYE-Dc5gBIi5.js.map → sequenceDiagram-2WXFIKYE-k0w9WKAO.js.map} +1 -1
  114. package/webapp/dist/assets/{stateDiagram-RAJIS63D-DMYeNS1r.js → stateDiagram-RAJIS63D-DRgdJrlx.js} +9 -9
  115. package/webapp/dist/assets/{stateDiagram-RAJIS63D-DMYeNS1r.js.map → stateDiagram-RAJIS63D-DRgdJrlx.js.map} +1 -1
  116. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-MfUJuUEe.js → stateDiagram-v2-FVOUBMTO-edtkX9x6.js} +5 -5
  117. package/webapp/dist/assets/{stateDiagram-v2-FVOUBMTO-MfUJuUEe.js.map → stateDiagram-v2-FVOUBMTO-edtkX9x6.js.map} +1 -1
  118. package/webapp/dist/assets/{timeline-definition-YZTLITO2-Ci2CZEky.js → timeline-definition-YZTLITO2-D0zyXyNL.js} +3 -3
  119. package/webapp/dist/assets/{timeline-definition-YZTLITO2-Ci2CZEky.js.map → timeline-definition-YZTLITO2-D0zyXyNL.js.map} +1 -1
  120. package/webapp/dist/assets/{treemap-KZPCXAKY-CNgzp4sT.js → treemap-KZPCXAKY-CglsYqbQ.js} +5 -5
  121. package/webapp/dist/assets/{treemap-KZPCXAKY-CNgzp4sT.js.map → treemap-KZPCXAKY-CglsYqbQ.js.map} +1 -1
  122. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BYxtNx2s.js → vennDiagram-LZ73GAT5-DsUizzvt.js} +2 -2
  123. package/webapp/dist/assets/{vennDiagram-LZ73GAT5-BYxtNx2s.js.map → vennDiagram-LZ73GAT5-DsUizzvt.js.map} +1 -1
  124. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BUS3bn9p.js → xychartDiagram-JWTSCODW-DvYQ4zKY.js} +3 -3
  125. package/webapp/dist/assets/{xychartDiagram-JWTSCODW-BUS3bn9p.js.map → xychartDiagram-JWTSCODW-DvYQ4zKY.js.map} +1 -1
  126. package/webapp/dist/index.html +1 -1
  127. package/webapp/dist/assets/index-B3WzTLcD.js.map +0 -1
@@ -4009,7 +4009,7 @@ async function renderModelParamsManual(language) {
4009
4009
  '想查看某个 provider 的“有效配置” `model_param_options`:优先用 `team_mgmt_list_models({ source: \"effective\", provider_pattern: \"<providerKey>\", model_pattern: \"*\", include_param_options: true })`(会列出该 provider 可用的参数说明)。',
4010
4010
  '常见参数示例(不同 provider 支持不同):例如 `reasoning_effort`、`verbosity`、`temperature` 等。对内置 `codex` provider,这些参数应写在 `model_params.codex.*` 下。',
4011
4011
  '`model_params` 命名空间按 `apiType` 精确区分:官方 OpenAI 用 `openai`,OpenAI 兼容 Chat Completions 用 `openai-compatible`;官方 Anthropic 用 `anthropic`,Anthropic 兼容网关用 `anthropic-compatible`。同一个成员可以同时配置多套 namespace,运行时只读取当前 provider 对应的一套。',
4012
- '`model_params.openai-compatible.thinking` / `reasoning_effort` 属于 OpenAI-compatible Chat Completions 参数:`thinking` 可写 boolean 简写或 provider 自己文档里的 object;运行时会按当前 provider 透传;如果上游模型/网关不支持,对方可能拒绝请求。',
4012
+ '`model_params.openai-compatible.thinking` / `reasoning_effort` 属于 OpenAI-compatible Chat Completions 参数:普通 provider 的 `thinking` 可写 boolean 简写或 provider 自己文档里的 object;内置 `kimi-code` provider 还支持 `auto|off|low|medium|high` 档位并会展开成 Kimi Code 专用请求字段。如果上游模型/网关不支持,对方可能拒绝请求。',
4013
4013
  '`model_params.anthropic.thinking` 使用 Anthropic 官方 object(例如 `{ type: adaptive }`、`{ type: enabled, budget_tokens: 1024 }` 或 `{ type: disabled }`);`model_params.anthropic-compatible.thinking` 使用 boolean(`true` 发送 `thinking.type=enabled`,`false` 发送 `thinking.type=disabled`)。',
4014
4014
  '常见坑:不要把 `reasoning_effort` / `verbosity` 直接写在 `member_defaults` 或 `members.<id>` 根上(会被忽略,并会被 team.yaml 校验提示);应写在 `model_params.codex.*` 下。',
4015
4015
  '`model_param_options.<ns>.<param>.prominent: true`:表示“初始化/团队管理时应显式讨论并选定”的参数。不要依赖 provider/model 的隐含默认值。',
@@ -4041,7 +4041,7 @@ async function renderModelParamsManual(language) {
4041
4041
  'To inspect a provider’s effective `model_param_options`, prefer `team_mgmt_list_models({ source: \"effective\", provider_pattern: \"<providerKey>\", model_pattern: \"*\", include_param_options: true })` (lists the parameters documented for that provider).',
4042
4042
  'Common examples (provider-dependent): e.g. `reasoning_effort`, `verbosity`, `temperature`, etc. For the built-in `codex` provider, these go under `model_params.codex.*`.',
4043
4043
  '`model_params` namespaces are split by exact `apiType`: official OpenAI uses `openai`, OpenAI-compatible Chat Completions uses `openai-compatible`; official Anthropic uses `anthropic`, Anthropic-compatible gateways use `anthropic-compatible`. A member can configure multiple namespaces at once; runtime reads only the namespace matching the selected provider.',
4044
- '`model_params.openai-compatible.thinking` / `reasoning_effort` are OpenAI-compatible Chat Completions params: `thinking` accepts a boolean shorthand or the provider-documented object shape; Dominds passes them through for the current provider; unsupported upstream models/gateways may reject the request.',
4044
+ '`model_params.openai-compatible.thinking` / `reasoning_effort` are OpenAI-compatible Chat Completions params: for ordinary providers, `thinking` accepts a boolean shorthand or the provider-documented object shape; the built-in `kimi-code` provider also accepts `auto|off|low|medium|high` and expands it into Kimi Code request fields. Unsupported upstream models/gateways may reject the request.',
4045
4045
  '`model_params.anthropic.thinking` uses the official Anthropic object shape (for example `{ type: adaptive }`, `{ type: enabled, budget_tokens: 1024 }`, or `{ type: disabled }`); `model_params.anthropic-compatible.thinking` uses a boolean (`true` sends `thinking.type=enabled`, `false` sends `thinking.type=disabled`).',
4046
4046
  'Common pitfall: do not put `reasoning_effort` / `verbosity` directly under `member_defaults` or `members.<id>` (they are ignored and will be flagged by team.yaml validation); put them under `model_params.codex.*`.',
4047
4047
  '`model_param_options.<ns>.<param>.prominent: true` means “discuss and pick explicitly during bootstrap/team management”. Do not rely on implicit provider/model defaults.',
@@ -107,6 +107,7 @@ export type TaskPackageChangeMindTargetParseResult = {
107
107
  kind: 'err';
108
108
  error: TaskPackageChangeMindTargetError;
109
109
  };
110
+ export type TaskPackageContentHash = `crc32:${string}`;
110
111
  export declare function isTaskPackagePath(taskDocPath: string): boolean;
111
112
  export declare function taskPackageSectionFromSelector(selector: string): TaskPackageSection | null;
112
113
  export declare function bearInMindSectionFromSelector(selector: string): BearInMindSection | null;
@@ -120,11 +121,25 @@ export declare function updateTaskPackageByChangeMindTarget(params: {
120
121
  taskPackageDirFullPath: string;
121
122
  target: TaskPackageChangeMindTarget;
122
123
  content: string;
124
+ previousContentHash: string;
123
125
  updatedBy?: string;
124
126
  }): Promise<{
125
127
  kind: 'updated';
126
128
  } | {
127
129
  kind: 'missing';
130
+ } | {
131
+ kind: 'content_hash_mismatch';
132
+ currentContentHash: TaskPackageContentHash;
133
+ }>;
134
+ export declare function readTaskPackageByChangeMindTarget(params: {
135
+ taskPackageDirFullPath: string;
136
+ target: TaskPackageChangeMindTarget;
137
+ }): Promise<{
138
+ kind: 'present';
139
+ content: string;
140
+ contentHash: TaskPackageContentHash;
141
+ } | {
142
+ kind: 'missing';
128
143
  }>;
129
144
  export declare function createTaskPackageByChangeMindTarget(params: {
130
145
  taskPackageDirFullPath: string;
@@ -151,6 +166,7 @@ export declare function deleteTaskPackageByChangeMindTarget(params: {
151
166
  } | {
152
167
  kind: 'missing';
153
168
  }>;
169
+ export declare function computeTaskPackageContentHash(content: string): TaskPackageContentHash;
154
170
  export declare function taskPackageRelativePathForChangeMindTarget(target: TaskPackageChangeMindTarget): string;
155
171
  export declare function ensureTaskPackage(taskPackageDirFullPath: string, _updatedBy?: string): Promise<void>;
156
172
  export declare function readTaskPackageSections(taskPackageDirFullPath: string): Promise<TaskPackageSectionsState>;
@@ -53,9 +53,11 @@ exports.parseTaskPackageChangeMindTarget = parseTaskPackageChangeMindTarget;
53
53
  exports.taskPackageFilenameForSection = taskPackageFilenameForSection;
54
54
  exports.bearInMindFilenameForSection = bearInMindFilenameForSection;
55
55
  exports.updateTaskPackageByChangeMindTarget = updateTaskPackageByChangeMindTarget;
56
+ exports.readTaskPackageByChangeMindTarget = readTaskPackageByChangeMindTarget;
56
57
  exports.createTaskPackageByChangeMindTarget = createTaskPackageByChangeMindTarget;
57
58
  exports.appendTaskPackageByChangeMindTarget = appendTaskPackageByChangeMindTarget;
58
59
  exports.deleteTaskPackageByChangeMindTarget = deleteTaskPackageByChangeMindTarget;
60
+ exports.computeTaskPackageContentHash = computeTaskPackageContentHash;
59
61
  exports.taskPackageRelativePathForChangeMindTarget = taskPackageRelativePathForChangeMindTarget;
60
62
  exports.ensureTaskPackage = ensureTaskPackage;
61
63
  exports.readTaskPackageSections = readTaskPackageSections;
@@ -65,6 +67,8 @@ exports.readTaskPackageForInjection = readTaskPackageForInjection;
65
67
  exports.updateTaskPackageSection = updateTaskPackageSection;
66
68
  const fs = __importStar(require("fs"));
67
69
  const path = __importStar(require("path"));
70
+ const zlib_1 = require("zlib");
71
+ const async_fifo_mutex_1 = require("../runtime/async-fifo-mutex");
68
72
  const taskPackageIdentifierRe = /^[a-zA-Z][a-zA-Z0-9_-]*(?:\.[a-zA-Z0-9_-]+)*$/;
69
73
  function isTaskPackageIdentifier(value) {
70
74
  return taskPackageIdentifierRe.test(value);
@@ -77,6 +81,25 @@ exports.BEAR_IN_MIND_SECTIONS = [
77
81
  'decisions',
78
82
  'risks',
79
83
  ];
84
+ const taskPackageFileLocks = new Map();
85
+ function getTaskPackageFileLock(filePath) {
86
+ const key = path.resolve(filePath);
87
+ const existing = taskPackageFileLocks.get(key);
88
+ if (existing)
89
+ return existing;
90
+ const created = new async_fifo_mutex_1.AsyncFifoMutex();
91
+ taskPackageFileLocks.set(key, created);
92
+ return created;
93
+ }
94
+ async function withTaskPackageFileLock(filePath, fn) {
95
+ const release = await getTaskPackageFileLock(filePath).acquire();
96
+ try {
97
+ return await fn();
98
+ }
99
+ finally {
100
+ release();
101
+ }
102
+ }
80
103
  const sectionToFilename = {
81
104
  goals: 'goals.md',
82
105
  constraints: 'constraints.md',
@@ -188,99 +211,152 @@ function bearInMindFilenameForSection(section) {
188
211
  return bearInMindSectionToFilename[section];
189
212
  }
190
213
  async function updateTaskPackageByChangeMindTarget(params) {
191
- const { taskPackageDirFullPath, target, content } = params;
214
+ const { taskPackageDirFullPath, target, content, previousContentHash } = params;
192
215
  const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
193
- try {
194
- const st = await fs.promises.stat(filePath);
195
- if (!st.isFile()) {
196
- throw new Error(`Taskdoc section target is not a file: ${filePath}`);
216
+ return await withTaskPackageFileLock(filePath, async () => {
217
+ try {
218
+ const st = await fs.promises.stat(filePath);
219
+ if (!st.isFile()) {
220
+ throw new Error(`Taskdoc section target is not a file: ${filePath}`);
221
+ }
222
+ const currentContent = await fs.promises.readFile(filePath, 'utf8');
223
+ const currentContentHash = computeTaskPackageContentHash(currentContent);
224
+ if (currentContentHash !== previousContentHash) {
225
+ return { kind: 'content_hash_mismatch', currentContentHash };
226
+ }
227
+ await writeExistingMarkdownFileWithCanonicalEnding(filePath, content);
228
+ return { kind: 'updated' };
197
229
  }
198
- await writeExistingMarkdownFileWithCanonicalEnding(filePath, content);
199
- return { kind: 'updated' };
200
- }
201
- catch (err) {
202
- if (typeof err === 'object' &&
203
- err !== null &&
204
- 'code' in err &&
205
- err.code === 'ENOENT') {
206
- return { kind: 'missing' };
230
+ catch (err) {
231
+ if (typeof err === 'object' &&
232
+ err !== null &&
233
+ 'code' in err &&
234
+ err.code === 'ENOENT') {
235
+ return { kind: 'missing' };
236
+ }
237
+ throw err;
207
238
  }
208
- throw err;
209
- }
239
+ });
240
+ }
241
+ async function readTaskPackageByChangeMindTarget(params) {
242
+ const filePath = taskPackageFilePathForChangeMindTarget(params.taskPackageDirFullPath, params.target);
243
+ return await withTaskPackageFileLock(filePath, async () => {
244
+ const content = await readTextFileIfPresent(filePath);
245
+ if (content === null)
246
+ return { kind: 'missing' };
247
+ return { kind: 'present', content, contentHash: computeTaskPackageContentHash(content) };
248
+ });
210
249
  }
211
250
  async function createTaskPackageByChangeMindTarget(params) {
212
251
  const { taskPackageDirFullPath, target, content, updatedBy } = params;
213
252
  await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
214
253
  const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
215
- await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
216
- try {
217
- await writeNewMarkdownFileWithCanonicalEnding(filePath, content);
218
- return { kind: 'created' };
219
- }
220
- catch (err) {
221
- if (typeof err === 'object' &&
222
- err !== null &&
223
- 'code' in err &&
224
- err.code === 'EEXIST') {
225
- return { kind: 'exists' };
254
+ return await withTaskPackageFileLock(filePath, async () => {
255
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
256
+ try {
257
+ await writeNewMarkdownFileWithCanonicalEnding(filePath, content);
258
+ return { kind: 'created' };
226
259
  }
227
- throw err;
228
- }
260
+ catch (err) {
261
+ if (typeof err === 'object' &&
262
+ err !== null &&
263
+ 'code' in err &&
264
+ err.code === 'EEXIST') {
265
+ return { kind: 'exists' };
266
+ }
267
+ throw err;
268
+ }
269
+ });
229
270
  }
230
271
  async function appendTaskPackageByChangeMindTarget(params) {
231
272
  const { taskPackageDirFullPath, target, content, sep, updatedBy } = params;
232
273
  await ensureTaskPackage(taskPackageDirFullPath, updatedBy);
233
274
  const filePath = taskPackageFilePathForChangeMindTarget(taskPackageDirFullPath, target);
234
- await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
235
- const current = await readTextFileIfPresent(filePath);
236
- const next = current === null || current.trim() === '' ? content : joinForAppend(current, content, sep);
237
- await writeMarkdownFileWithCanonicalEnding(filePath, next);
275
+ await withTaskPackageFileLock(filePath, async () => {
276
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
277
+ const current = await readTextFileIfPresent(filePath);
278
+ const next = current === null || current.trim() === '' ? content : joinForAppend(current, content, sep);
279
+ await writeMarkdownFileWithCanonicalEnding(filePath, next);
280
+ });
238
281
  }
239
282
  async function deleteTaskPackageByChangeMindTarget(params) {
240
283
  const filePath = taskPackageFilePathForChangeMindTarget(params.taskPackageDirFullPath, params.target);
241
- try {
284
+ return await withTaskPackageFileLock(filePath, async () => {
285
+ try {
286
+ const st = await fs.promises.stat(filePath);
287
+ if (!st.isFile()) {
288
+ throw new Error(`Taskdoc section target is not a file: ${filePath}`);
289
+ }
290
+ await fs.promises.unlink(filePath);
291
+ return { kind: 'deleted' };
292
+ }
293
+ catch (err) {
294
+ if (typeof err === 'object' &&
295
+ err !== null &&
296
+ 'code' in err &&
297
+ err.code === 'ENOENT') {
298
+ return { kind: 'missing' };
299
+ }
300
+ throw err;
301
+ }
302
+ });
303
+ }
304
+ async function writeMarkdownFileWithCanonicalEnding(filePath, content) {
305
+ await writeMarkdownFileWithCanonicalEndingViaRename(filePath, content, 'overwrite');
306
+ }
307
+ async function writeExistingMarkdownFileWithCanonicalEnding(filePath, content) {
308
+ await writeMarkdownFileWithCanonicalEndingViaRename(filePath, content, 'replace-existing');
309
+ }
310
+ async function writeNewMarkdownFileWithCanonicalEnding(filePath, content) {
311
+ await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), {
312
+ encoding: 'utf8',
313
+ flag: 'wx',
314
+ });
315
+ }
316
+ async function writeMarkdownFileWithCanonicalEndingViaRename(filePath, content, mode) {
317
+ const tempFilePath = path.join(path.dirname(filePath), `.${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
318
+ if (mode === 'replace-existing') {
242
319
  const st = await fs.promises.stat(filePath);
243
320
  if (!st.isFile()) {
244
321
  throw new Error(`Taskdoc section target is not a file: ${filePath}`);
245
322
  }
323
+ }
324
+ try {
325
+ await fs.promises.writeFile(tempFilePath, withCanonicalMarkdownFileEnding(content), {
326
+ encoding: 'utf8',
327
+ flag: 'wx',
328
+ });
329
+ await fs.promises.rename(tempFilePath, filePath);
330
+ }
331
+ catch (err) {
332
+ await removeTempFileIfPresent(tempFilePath);
333
+ throw err;
334
+ }
335
+ }
336
+ async function removeTempFileIfPresent(filePath) {
337
+ try {
246
338
  await fs.promises.unlink(filePath);
247
- return { kind: 'deleted' };
248
339
  }
249
340
  catch (err) {
250
341
  if (typeof err === 'object' &&
251
342
  err !== null &&
252
343
  'code' in err &&
253
344
  err.code === 'ENOENT') {
254
- return { kind: 'missing' };
345
+ return;
255
346
  }
256
347
  throw err;
257
348
  }
258
349
  }
259
- async function writeMarkdownFileWithCanonicalEnding(filePath, content) {
260
- await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), 'utf8');
261
- }
262
- async function writeExistingMarkdownFileWithCanonicalEnding(filePath, content) {
263
- const handle = await fs.promises.open(filePath, 'r+');
264
- try {
265
- await handle.truncate(0);
266
- await handle.writeFile(withCanonicalMarkdownFileEnding(content), 'utf8');
267
- }
268
- finally {
269
- await handle.close();
270
- }
271
- }
272
- async function writeNewMarkdownFileWithCanonicalEnding(filePath, content) {
273
- await fs.promises.writeFile(filePath, withCanonicalMarkdownFileEnding(content), {
274
- encoding: 'utf8',
275
- flag: 'wx',
276
- });
277
- }
278
350
  function withCanonicalMarkdownFileEnding(content) {
279
351
  const stripped = stripTrailingMarkdownFileNewlines(content);
280
352
  if (stripped === '')
281
353
  return '';
282
354
  return `${stripped}\n`;
283
355
  }
356
+ function computeTaskPackageContentHash(content) {
357
+ const checksum = (0, zlib_1.crc32)(withCanonicalMarkdownFileEnding(content)) >>> 0;
358
+ return `crc32:${checksum.toString(16).padStart(8, '0')}`;
359
+ }
284
360
  function taskPackageRelativePathForChangeMindTarget(target) {
285
361
  switch (target.kind) {
286
362
  case 'top_level':
@@ -199,10 +199,10 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
199
199
  const entries = [];
200
200
  for (const cat of extra.categories) {
201
201
  for (const selector of cat.selectors) {
202
- entries.push(`- \`${cat.category}/${selector}.md\`(读:\`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`;追加:\`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`;替换:\`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
202
+ entries.push(`- \`${cat.category}/${selector}.md\`(读/取 content_hash:\`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`;追加:\`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`;替换:先 recall 取得 content_hash,再 \`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`)`);
203
203
  }
204
204
  }
205
- const header = `**额外章节索引(不会自动注入;需要时用 \`recall_taskdoc\` 显式读取):**`;
205
+ const header = `**额外章节索引(不会自动注入;需要时用 \`recall_taskdoc\` 显式读取/取 content_hash):**`;
206
206
  const body = entries.length > 0 ? entries : ['- (无)'];
207
207
  const truncatedLine = extra.truncated
208
208
  ? `- ⚠️ 已截断:目录条目过多,仅展示前 64 项。`
@@ -219,10 +219,10 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
219
219
  const entries = [];
220
220
  for (const cat of extra.categories) {
221
221
  for (const selector of cat.selectors) {
222
- entries.push(`- \`${cat.category}/${selector}.md\` (read: \`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`; append: \`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`; replace: \`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\"})\`)`);
222
+ entries.push(`- \`${cat.category}/${selector}.md\` (read/get content_hash: \`recall_taskdoc({\"category\":\"${cat.category}\",\"selector\":\"${selector}\"})\`; append: \`mind_more({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"items\":[\"...\"]})\`; replace: recall first for content_hash, then \`change_mind({\"category\":\"${cat.category}\",\"selector\":\"${selector}\",\"content\":\"...\",\"previous_content_hash\":\"crc32:...\"})\`)`);
223
223
  }
224
224
  }
225
- const header = `**Extra sections index (NOT auto-injected; use \`recall_taskdoc\` when needed):**`;
225
+ const header = `**Extra sections index (NOT auto-injected; use \`recall_taskdoc\` to read/get content_hash):**`;
226
226
  const body = entries.length > 0 ? entries : ['- (none)'];
227
227
  const truncatedLine = extra.truncated
228
228
  ? `- ⚠️ Truncated: too many entries; showing first 64.`
@@ -259,11 +259,11 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
259
259
  const presentSectionLine = presentSectionsZh.length === 0
260
260
  ? []
261
261
  : [
262
- `- 已存在常驻分段(${presentSectionsZh.map((s) => `\`${s}\``).join(' / ')})需要追加少量条目时,使用 \`mind_more\`;需要整体改写/合并时,使用 \`change_mind\`。没有把握时不要覆盖,优先新增额外章节或追加小条目。`,
262
+ `- 已存在常驻分段(${presentSectionsZh.map((s) => `\`${s}\``).join(' / ')})需要追加少量条目时,使用 \`mind_more\`;需要整体改写/合并时,先用 \`recall_taskdoc({"selector":"<selector>"})\` 显式取得该分段当前 \`content_hash\`,再用 \`change_mind\` 并带上它作为 \`previous_content_hash\`。没有把握时不要覆盖,优先新增额外章节或追加小条目。`,
263
263
  ];
264
264
  const maintenanceLine = isSideDialog
265
265
  ? `- 支线对话中不允许 \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`:需要更新时请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要新增的章节、要追加的条目、已合并好的“分段全文替换稿”或要删除的章节(禁止覆盖/抹掉他人条目)。`
266
- : `- 维护方式:少量新增条目优先用 \`mind_more({\"items\":[\"...\"]})\` 追加到 \`progress\`(也可指定 selector/category);需要删除陈旧项、重排或压缩时,用 \`change_mind\` 指定分段做整章替换。`;
266
+ : `- 维护方式:少量新增条目优先用 \`mind_more({\"items\":[\"...\"]})\` 追加到 \`progress\`(也可指定 selector/category);需要删除陈旧项、重排或压缩时,先用 \`recall_taskdoc\` 显式取得当前 \`content_hash\`,再用 \`change_mind\` 指定分段做整章替换,并必须带上它作为 \`previous_content_hash\`。`;
267
267
  return [
268
268
  `**差遣牒结构(封装差遣牒 \`*.tsk/\`):**`,
269
269
  `- 我们的差遣牒是一个 \`*.tsk/\` 目录:顶层 3 个分段(\`goals\` / \`constraints\` / \`progress\`)一定会自动注入;\`bearinmind/\`(固定白名单)可选自动注入;其他章节不会自动注入,仅以“目录索引”形式提示并需用 \`recall_taskdoc\` 显式读取。`,
@@ -306,11 +306,11 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
306
306
  const presentSectionLine = presentSectionsEn.length === 0
307
307
  ? []
308
308
  : [
309
- `- For existing resident sections (${presentSectionsEn.map((s) => `\`${s}\``).join(' / ')}), use \`mind_more\` to append small notes, and use \`change_mind\` for full-section rewrite/merge. If unsure, do not overwrite; prefer creating an extra section or appending small notes.`,
309
+ `- For existing resident sections (${presentSectionsEn.map((s) => `\`${s}\``).join(' / ')}), use \`mind_more\` to append small notes; for full-section rewrite/merge, first call \`recall_taskdoc({"selector":"<selector>"})\` to get the current \`content_hash\`, then pass it to \`change_mind\` as \`previous_content_hash\`. If unsure, do not overwrite; prefer creating an extra section or appending small notes.`,
310
310
  ];
311
311
  const maintenanceLine = isSideDialog
312
312
  ? `- Side Dialogs cannot call \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`: ask the Taskdoc maintainer @${taskdocMaintainerId} to apply updates, and provide the new section to create, entries to append, a fully merged full-section replacement draft, or the section to delete (do not overwrite/delete other contributors).`
313
- : `- Maintenance: for small additions, prefer \`mind_more({\"items\":[\"...\"]})\` to append to \`progress\` (selector/category may be specified); when stale entries must be removed, reordered, or compressed, use \`change_mind\` for a full-section replacement.`;
313
+ : `- Maintenance: for small additions, prefer \`mind_more({\"items\":[\"...\"]})\` to append to \`progress\` (selector/category may be specified); when stale entries must be removed, reordered, or compressed, first call \`recall_taskdoc\` to get the current \`content_hash\`, then use \`change_mind\` for a full-section replacement with that value as \`previous_content_hash\`.`;
314
314
  const bearEn = bearInMindStatus === 'absent'
315
315
  ? 'absent'
316
316
  : bearInMindStatus === 'invalid'
@@ -350,7 +350,7 @@ If you provided a regular file path (e.g. a \`.md\`), that is unexpected. Please
350
350
  if (language === 'zh') {
351
351
  const howToUpdate = isSideDialog
352
352
  ? `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n支线对话中不允许 \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要新增的章节、要追加的条目、合并好的“分段全文替换稿”或要删除的章节(禁止覆盖/抹掉他人条目)。`
353
- : `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n请在当前对话中用函数工具 \`mind_more\` 追加少量条目,或用 \`change_mind\` 做整章替换;缺失章节用 \`do_mind\` 创建;禁止覆盖/抹掉他人条目。`;
353
+ : `⚠️ **注意:** 差遣牒是封装的。不要用文件工具去读/写/列目录 \`*.tsk/\` 下的任何路径。\n请在当前对话中用函数工具 \`mind_more\` 追加少量条目;需要整章替换时,先用 \`recall_taskdoc\` 取得当前 \`content_hash\`,再用带 \`previous_content_hash\` 的 \`change_mind\`;缺失章节用 \`do_mind\` 创建;禁止覆盖/抹掉他人条目。`;
354
354
  return {
355
355
  type: 'environment_msg',
356
356
  role: 'user',
@@ -365,7 +365,7 @@ ${howToUpdate}`,
365
365
  }
366
366
  const howToUpdate = isSideDialog
367
367
  ? `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nSide Dialogs cannot call \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with the new section to create, entries to append, a merged full-section replacement draft, or the section to delete (do not overwrite/delete other contributors).`
368
- : `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nIn this dialog, use \`mind_more\` for small append-only updates, or \`change_mind\` for full-section replacements; create missing sections with \`do_mind\`; do not overwrite/delete other contributors.`;
368
+ : `⚠️ **Note:** Taskdocs are encapsulated. Do not use file tools to read/write/list anything under \`*.tsk/\`.\nIn this dialog, use \`mind_more\` for small append-only updates; for full-section replacements, first use \`recall_taskdoc\` to get the current \`content_hash\`, then call \`change_mind\` with \`previous_content_hash\`; create missing sections with \`do_mind\`; do not overwrite/delete other contributors.`;
369
369
  return {
370
370
  type: 'environment_msg',
371
371
  role: 'user',
@@ -381,7 +381,7 @@ ${howToUpdate}`,
381
381
  if (language === 'zh') {
382
382
  const footerLine = isSideDialog
383
383
  ? `*支线对话中不允许 \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`:请诉请差遣牒维护人 @${taskdocMaintainerId} 执行更新,并提供要新增的章节、要追加的条目、合并好的“分段全文替换稿”或要删除的章节(禁止覆盖/抹掉他人条目)。*`
384
- : `*在当前对话中用 \`mind_more\` 追加少量条目,或用 \`change_mind\` 替换整段;缺失章节用 \`do_mind\` 创建;更新时禁止覆盖他人条目。*`;
384
+ : `*在当前对话中用 \`mind_more\` 追加少量条目;需要整段替换时先用 \`recall_taskdoc\` 取得当前 \`content_hash\`,再用带 \`previous_content_hash\` 的 \`change_mind\`;缺失章节用 \`do_mind\` 创建;更新时禁止覆盖他人条目。*`;
385
385
  return {
386
386
  type: 'environment_msg',
387
387
  role: 'user',
@@ -404,7 +404,7 @@ ${footerLine}
404
404
  }
405
405
  const footerLine = isSideDialog
406
406
  ? `*Side Dialogs cannot call \`do_mind\` / \`mind_more\` / \`change_mind\` / \`never_mind\`; ask the Taskdoc maintainer @${taskdocMaintainerId} with the new section to create, entries to append, a merged full-section replacement draft, or the section to delete (do not overwrite/delete other contributors).*`
407
- : `*In this dialog, use \`mind_more\` for small append-only updates, or \`change_mind\` for full-section replacements; create missing sections with \`do_mind\`; do not overwrite other contributors.*`;
407
+ : `*In this dialog, use \`mind_more\` for small append-only updates; for full-section replacements, first use \`recall_taskdoc\` to get the current \`content_hash\`, then call \`change_mind\` with \`previous_content_hash\`; create missing sections with \`do_mind\`; do not overwrite other contributors.*`;
408
408
  return {
409
409
  type: 'environment_msg',
410
410
  role: 'user',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dominds",
3
- "version": "1.22.1",
3
+ "version": "1.23.1",
4
4
  "description": "Dominds CLI and aggregation shell for the LongRun AI kernel/runtime packages.",
5
5
  "type": "commonjs",
6
6
  "publishConfig": {
@@ -1,5 +1,5 @@
1
- import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-vou1IeXB.js";
2
- import { aU as isObject, aC as baseRest, aV as isIterateeCall, aW as keysIn, aX as eq, aY as isArrayLike, aZ as isArray, a_ as identity, a$ as isIndex, b0 as assignValue } from "./index-B3WzTLcD.js";
1
+ import { e as isSymbol, c as baseFlatten, g as baseIteratee, k as keys, h as baseFindIndex, j as baseEach, l as arrayMap, m as hasPath, n as castPath, t as toKey, o as baseGet } from "./_baseUniq-egNq6cCa.js";
2
+ import { aU as isObject, aC as baseRest, aV as isIterateeCall, aW as keysIn, aX as eq, aY as isArrayLike, aZ as isArray, a_ as identity, a$ as isIndex, b0 as assignValue } from "./index-CGbZlct2.js";
3
3
  var reWhitespace = /\s/;
4
4
  function trimmedEndIndex(string) {
5
5
  var index = string.length;
@@ -193,4 +193,4 @@ export {
193
193
  map as m,
194
194
  toFinite as t
195
195
  };
196
- //# sourceMappingURL=_basePickBy-DUbW5G8a.js.map
196
+ //# sourceMappingURL=_basePickBy-C3SVVywm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_basePickBy-DUbW5G8a.js","sources":["../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toFinite.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toInteger.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/defaults.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createFind.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/findIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/find.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMap.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/map.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHas.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/has.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseLt.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseExtremum.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/min.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSet.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePickBy.js"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n"],"names":["objectProto","hasOwnProperty","collection"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
1
+ {"version":3,"file":"_basePickBy-C3SVVywm.js","sources":["../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_trimmedEndIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTrim.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toNumber.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toFinite.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toInteger.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/flatten.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/defaults.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createFind.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/findIndex.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/find.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMap.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/map.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHas.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/has.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseLt.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseExtremum.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/min.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSet.js","../../../../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePickBy.js"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseFlatten from './_baseFlatten.js';\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n});\n\nexport default defaults;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nexport default basePickBy;\n"],"names":["objectProto","hasOwnProperty","collection"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}
@@ -1,4 +1,4 @@
1
- import { bh as isObjectLike, bi as baseGetTag, aZ as isArray, bj as Symbol$1, aY as isArrayLike, bk as arrayLikeKeys, bl as baseKeys, bm as memoize, bn as isArguments, bo as copyObject, aW as keysIn, bp as getPrototype, bq as cloneArrayBuffer, br as cloneTypedArray, bs as getTag, bf as baseUnary, bt as nodeUtil, aU as isObject, bu as copyArray, bv as isBuffer, bw as cloneBuffer, bx as initCloneObject, by as Stack, b0 as assignValue, bz as MapCache, aX as eq, bA as Uint8Array, bB as isTypedArray, bC as isLength, a$ as isIndex, a_ as identity, bd as baseFor, bD as Set } from "./index-B3WzTLcD.js";
1
+ import { bh as isObjectLike, bi as baseGetTag, aZ as isArray, bj as Symbol$1, aY as isArrayLike, bk as arrayLikeKeys, bl as baseKeys, bm as memoize, bn as isArguments, bo as copyObject, aW as keysIn, bp as getPrototype, bq as cloneArrayBuffer, br as cloneTypedArray, bs as getTag, bf as baseUnary, bt as nodeUtil, aU as isObject, bu as copyArray, bv as isBuffer, bw as cloneBuffer, bx as initCloneObject, by as Stack, b0 as assignValue, bz as MapCache, aX as eq, bA as Uint8Array, bB as isTypedArray, bC as isLength, a$ as isIndex, a_ as identity, bd as baseFor, bD as Set } from "./index-CGbZlct2.js";
2
2
  var symbolTag$3 = "[object Symbol]";
3
3
  function isSymbol(value) {
4
4
  return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;
@@ -833,4 +833,4 @@ export {
833
833
  baseIndexOf as y,
834
834
  getAllKeysIn as z
835
835
  };
836
- //# sourceMappingURL=_baseUniq-vou1IeXB.js.map
836
+ //# sourceMappingURL=_baseUniq-egNq6cCa.js.map