dominds 0.3.2 → 0.3.3

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 (99) hide show
  1. package/dist/dialog-instance-registry.js +40 -1
  2. package/dist/dialog.js +2 -2
  3. package/dist/llm/driver.js +20 -0
  4. package/dist/llm/gen/codex.js +11 -0
  5. package/dist/persistence.js +4 -0
  6. package/dist/server/api-routes.js +19 -1
  7. package/dist/server/websocket-handler.js +7 -0
  8. package/dist/static/assets/{_baseUniq-SokIVT_l.js → _baseUniq-BGmMNE5g.js} +2 -2
  9. package/dist/static/assets/{_baseUniq-SokIVT_l.js.map → _baseUniq-BGmMNE5g.js.map} +1 -1
  10. package/dist/static/assets/{arc-kjR8x1Ck.js → arc-B40b5t8J.js} +2 -2
  11. package/dist/static/assets/{arc-kjR8x1Ck.js.map → arc-B40b5t8J.js.map} +1 -1
  12. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Dqg6NBDR.js → architectureDiagram-VXUJARFQ-BOSrYU44.js} +6 -6
  13. package/dist/static/assets/{architectureDiagram-VXUJARFQ-Dqg6NBDR.js.map → architectureDiagram-VXUJARFQ-BOSrYU44.js.map} +1 -1
  14. package/dist/static/assets/{blockDiagram-VD42YOAC-B-BQL_cY.js → blockDiagram-VD42YOAC-CJWfBcHm.js} +7 -7
  15. package/dist/static/assets/{blockDiagram-VD42YOAC-B-BQL_cY.js.map → blockDiagram-VD42YOAC-CJWfBcHm.js.map} +1 -1
  16. package/dist/static/assets/{c4Diagram-YG6GDRKO-Bzr91V4Y.js → c4Diagram-YG6GDRKO-3j2ArlGi.js} +3 -3
  17. package/dist/static/assets/{c4Diagram-YG6GDRKO-Bzr91V4Y.js.map → c4Diagram-YG6GDRKO-3j2ArlGi.js.map} +1 -1
  18. package/dist/static/assets/{channel-r5ULc-CH.js → channel-DBFJxK3W.js} +2 -2
  19. package/dist/static/assets/{channel-r5ULc-CH.js.map → channel-DBFJxK3W.js.map} +1 -1
  20. package/dist/static/assets/{chunk-4BX2VUAB-DbPnZ3jR.js → chunk-4BX2VUAB-BmBlpb_I.js} +2 -2
  21. package/dist/static/assets/{chunk-4BX2VUAB-DbPnZ3jR.js.map → chunk-4BX2VUAB-BmBlpb_I.js.map} +1 -1
  22. package/dist/static/assets/{chunk-55IACEB6-jRbyNM-u.js → chunk-55IACEB6-qHAbDsOB.js} +2 -2
  23. package/dist/static/assets/{chunk-55IACEB6-jRbyNM-u.js.map → chunk-55IACEB6-qHAbDsOB.js.map} +1 -1
  24. package/dist/static/assets/{chunk-B4BG7PRW-_roYgl4_.js → chunk-B4BG7PRW-C9PZfzeJ.js} +5 -5
  25. package/dist/static/assets/{chunk-B4BG7PRW-_roYgl4_.js.map → chunk-B4BG7PRW-C9PZfzeJ.js.map} +1 -1
  26. package/dist/static/assets/{chunk-DI55MBZ5-65DWu0ny.js → chunk-DI55MBZ5-C8QAOEej.js} +4 -4
  27. package/dist/static/assets/{chunk-DI55MBZ5-65DWu0ny.js.map → chunk-DI55MBZ5-C8QAOEej.js.map} +1 -1
  28. package/dist/static/assets/{chunk-FMBD7UC4-suO96TII.js → chunk-FMBD7UC4-CdCOSoZ5.js} +2 -2
  29. package/dist/static/assets/{chunk-FMBD7UC4-suO96TII.js.map → chunk-FMBD7UC4-CdCOSoZ5.js.map} +1 -1
  30. package/dist/static/assets/{chunk-QN33PNHL-CSWxSU4j.js → chunk-QN33PNHL-CtlsBuqA.js} +2 -2
  31. package/dist/static/assets/{chunk-QN33PNHL-CSWxSU4j.js.map → chunk-QN33PNHL-CtlsBuqA.js.map} +1 -1
  32. package/dist/static/assets/{chunk-QZHKN3VN-uzgBslqF.js → chunk-QZHKN3VN-CMXi0Mez.js} +2 -2
  33. package/dist/static/assets/{chunk-QZHKN3VN-uzgBslqF.js.map → chunk-QZHKN3VN-CMXi0Mez.js.map} +1 -1
  34. package/dist/static/assets/{chunk-TZMSLE5B-Bs3-ioaP.js → chunk-TZMSLE5B-CH8z8i0l.js} +2 -2
  35. package/dist/static/assets/{chunk-TZMSLE5B-Bs3-ioaP.js.map → chunk-TZMSLE5B-CH8z8i0l.js.map} +1 -1
  36. package/dist/static/assets/{classDiagram-2ON5EDUG-BwRTuVYR.js → classDiagram-2ON5EDUG-vFniZ7ds.js} +6 -6
  37. package/dist/static/assets/{classDiagram-2ON5EDUG-BwRTuVYR.js.map → classDiagram-2ON5EDUG-vFniZ7ds.js.map} +1 -1
  38. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BwRTuVYR.js → classDiagram-v2-WZHVMYZB-vFniZ7ds.js} +6 -6
  39. package/dist/static/assets/{classDiagram-v2-WZHVMYZB-BwRTuVYR.js.map → classDiagram-v2-WZHVMYZB-vFniZ7ds.js.map} +1 -1
  40. package/dist/static/assets/{clone-DTU0L3GE.js → clone-Gx4KrEN2.js} +2 -2
  41. package/dist/static/assets/{clone-DTU0L3GE.js.map → clone-Gx4KrEN2.js.map} +1 -1
  42. package/dist/static/assets/{cose-bilkent-S5V4N54A-DFN-M43c.js → cose-bilkent-S5V4N54A-DHQv5OGs.js} +2 -2
  43. package/dist/static/assets/{cose-bilkent-S5V4N54A-DFN-M43c.js.map → cose-bilkent-S5V4N54A-DHQv5OGs.js.map} +1 -1
  44. package/dist/static/assets/{dagre-6UL2VRFP-Db2QO3fw.js → dagre-6UL2VRFP-BgCeVi19.js} +7 -7
  45. package/dist/static/assets/{dagre-6UL2VRFP-Db2QO3fw.js.map → dagre-6UL2VRFP-BgCeVi19.js.map} +1 -1
  46. package/dist/static/assets/{diagram-PSM6KHXK-KdgI-gRF.js → diagram-PSM6KHXK-BNl9PAmv.js} +7 -7
  47. package/dist/static/assets/{diagram-PSM6KHXK-KdgI-gRF.js.map → diagram-PSM6KHXK-BNl9PAmv.js.map} +1 -1
  48. package/dist/static/assets/{diagram-QEK2KX5R-xH-jYUSp.js → diagram-QEK2KX5R-D9WhYh_N.js} +6 -6
  49. package/dist/static/assets/{diagram-QEK2KX5R-xH-jYUSp.js.map → diagram-QEK2KX5R-D9WhYh_N.js.map} +1 -1
  50. package/dist/static/assets/{diagram-S2PKOQOG-xaw91UrD.js → diagram-S2PKOQOG-B3M4WfHz.js} +6 -6
  51. package/dist/static/assets/{diagram-S2PKOQOG-xaw91UrD.js.map → diagram-S2PKOQOG-B3M4WfHz.js.map} +1 -1
  52. package/dist/static/assets/{erDiagram-Q2GNP2WA-BBxSVxZ2.js → erDiagram-Q2GNP2WA-DCfp8yI3.js} +5 -5
  53. package/dist/static/assets/{erDiagram-Q2GNP2WA-BBxSVxZ2.js.map → erDiagram-Q2GNP2WA-DCfp8yI3.js.map} +1 -1
  54. package/dist/static/assets/{flowDiagram-NV44I4VS-yzYTEiMx.js → flowDiagram-NV44I4VS-aQ1DHWx7.js} +6 -6
  55. package/dist/static/assets/{flowDiagram-NV44I4VS-yzYTEiMx.js.map → flowDiagram-NV44I4VS-aQ1DHWx7.js.map} +1 -1
  56. package/dist/static/assets/{ganttDiagram-JELNMOA3-CfOHq8RS.js → ganttDiagram-JELNMOA3-C8nDdnnS.js} +3 -3
  57. package/dist/static/assets/{ganttDiagram-JELNMOA3-CfOHq8RS.js.map → ganttDiagram-JELNMOA3-C8nDdnnS.js.map} +1 -1
  58. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-DeZv5Du8.js → gitGraphDiagram-NY62KEGX-CoqmkUXe.js} +7 -7
  59. package/dist/static/assets/{gitGraphDiagram-NY62KEGX-DeZv5Du8.js.map → gitGraphDiagram-NY62KEGX-CoqmkUXe.js.map} +1 -1
  60. package/dist/static/assets/{graph-CDFIwKM1.js → graph-D14vDdyd.js} +3 -3
  61. package/dist/static/assets/{graph-CDFIwKM1.js.map → graph-D14vDdyd.js.map} +1 -1
  62. package/dist/static/assets/{index-BW6RWfVV.js → index-CjicCcol.js} +64 -40
  63. package/dist/static/assets/{index-BW6RWfVV.js.map → index-CjicCcol.js.map} +1 -1
  64. package/dist/static/assets/{infoDiagram-WHAUD3N6-DDDknjUc.js → infoDiagram-WHAUD3N6-7-5GE8mp.js} +5 -5
  65. package/dist/static/assets/{infoDiagram-WHAUD3N6-DDDknjUc.js.map → infoDiagram-WHAUD3N6-7-5GE8mp.js.map} +1 -1
  66. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Bj6kqefO.js → journeyDiagram-XKPGCS4Q-GkWqhEEo.js} +5 -5
  67. package/dist/static/assets/{journeyDiagram-XKPGCS4Q-Bj6kqefO.js.map → journeyDiagram-XKPGCS4Q-GkWqhEEo.js.map} +1 -1
  68. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DyIxtovg.js → kanban-definition-3W4ZIXB7-CHaleDZv.js} +3 -3
  69. package/dist/static/assets/{kanban-definition-3W4ZIXB7-DyIxtovg.js.map → kanban-definition-3W4ZIXB7-CHaleDZv.js.map} +1 -1
  70. package/dist/static/assets/{layout-CenW9Lg4.js → layout-Duocv-v9.js} +5 -5
  71. package/dist/static/assets/{layout-CenW9Lg4.js.map → layout-Duocv-v9.js.map} +1 -1
  72. package/dist/static/assets/{linear-CIqoXI1R.js → linear-DsxFl-l2.js} +2 -2
  73. package/dist/static/assets/{linear-CIqoXI1R.js.map → linear-DsxFl-l2.js.map} +1 -1
  74. package/dist/static/assets/{min-PhMlVnVp.js → min-DOb2gMq6.js} +3 -3
  75. package/dist/static/assets/{min-PhMlVnVp.js.map → min-DOb2gMq6.js.map} +1 -1
  76. package/dist/static/assets/{mindmap-definition-VGOIOE7T-BEc0C731.js → mindmap-definition-VGOIOE7T-fB5rIV_Q.js} +4 -4
  77. package/dist/static/assets/{mindmap-definition-VGOIOE7T-BEc0C731.js.map → mindmap-definition-VGOIOE7T-fB5rIV_Q.js.map} +1 -1
  78. package/dist/static/assets/{pieDiagram-ADFJNKIX-Y9g6QrPu.js → pieDiagram-ADFJNKIX-CMvpwKQu.js} +7 -7
  79. package/dist/static/assets/{pieDiagram-ADFJNKIX-Y9g6QrPu.js.map → pieDiagram-ADFJNKIX-CMvpwKQu.js.map} +1 -1
  80. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-0flyaoAo.js → quadrantDiagram-AYHSOK5B-HbDhaFHP.js} +3 -3
  81. package/dist/static/assets/{quadrantDiagram-AYHSOK5B-0flyaoAo.js.map → quadrantDiagram-AYHSOK5B-HbDhaFHP.js.map} +1 -1
  82. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-F46cCDfo.js → requirementDiagram-UZGBJVZJ-C7yWiMlg.js} +4 -4
  83. package/dist/static/assets/{requirementDiagram-UZGBJVZJ-F46cCDfo.js.map → requirementDiagram-UZGBJVZJ-C7yWiMlg.js.map} +1 -1
  84. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B56j3BkK.js → sankeyDiagram-TZEHDZUN-CcM_RPqW.js} +2 -2
  85. package/dist/static/assets/{sankeyDiagram-TZEHDZUN-B56j3BkK.js.map → sankeyDiagram-TZEHDZUN-CcM_RPqW.js.map} +1 -1
  86. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DzQxEivA.js → sequenceDiagram-WL72ISMW-CldNRB6A.js} +4 -4
  87. package/dist/static/assets/{sequenceDiagram-WL72ISMW-DzQxEivA.js.map → sequenceDiagram-WL72ISMW-CldNRB6A.js.map} +1 -1
  88. package/dist/static/assets/{stateDiagram-FKZM4ZOC-8zkC6mTh.js → stateDiagram-FKZM4ZOC-C9wy-R8_.js} +9 -9
  89. package/dist/static/assets/{stateDiagram-FKZM4ZOC-8zkC6mTh.js.map → stateDiagram-FKZM4ZOC-C9wy-R8_.js.map} +1 -1
  90. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CwSo5ElY.js → stateDiagram-v2-4FDKWEC3-C2lLllHK.js} +5 -5
  91. package/dist/static/assets/{stateDiagram-v2-4FDKWEC3-CwSo5ElY.js.map → stateDiagram-v2-4FDKWEC3-C2lLllHK.js.map} +1 -1
  92. package/dist/static/assets/{timeline-definition-IT6M3QCI-ZlRniSmj.js → timeline-definition-IT6M3QCI-BKSMzfLW.js} +3 -3
  93. package/dist/static/assets/{timeline-definition-IT6M3QCI-ZlRniSmj.js.map → timeline-definition-IT6M3QCI-BKSMzfLW.js.map} +1 -1
  94. package/dist/static/assets/{treemap-KMMF4GRG-D1jARXF5.js → treemap-KMMF4GRG-D8i3wA1x.js} +4 -4
  95. package/dist/static/assets/{treemap-KMMF4GRG-D1jARXF5.js.map → treemap-KMMF4GRG-D8i3wA1x.js.map} +1 -1
  96. package/dist/static/assets/{xychartDiagram-PRI3JC2R-BPX1HHsI.js → xychartDiagram-PRI3JC2R-CgzauVuw.js} +3 -3
  97. package/dist/static/assets/{xychartDiagram-PRI3JC2R-BPX1HHsI.js.map → xychartDiagram-PRI3JC2R-CgzauVuw.js.map} +1 -1
  98. package/dist/static/index.html +1 -1
  99. package/package.json +1 -1
@@ -5,6 +5,25 @@ exports.ensureDialogLoaded = ensureDialogLoaded;
5
5
  const dialog_1 = require("./dialog");
6
6
  const dialog_global_registry_1 = require("./dialog-global-registry");
7
7
  const persistence_1 = require("./persistence");
8
+ const diligence_1 = require("./shared/diligence");
9
+ const team_1 = require("./team");
10
+ function resolveMemberDiligencePushMax(team, agentId) {
11
+ const member = team.getMember(agentId);
12
+ if (member && member.diligence_push_max !== undefined) {
13
+ return member.diligence_push_max;
14
+ }
15
+ return diligence_1.DEFAULT_DILIGENCE_PUSH_MAX;
16
+ }
17
+ function normalizeDiligencePushMax(value) {
18
+ if (!Number.isFinite(value))
19
+ return 0;
20
+ return Math.floor(value);
21
+ }
22
+ function clampNonNegativeFiniteInt(value, fallback) {
23
+ if (typeof value !== 'number' || !Number.isFinite(value))
24
+ return fallback;
25
+ return Math.max(0, Math.floor(value));
26
+ }
8
27
  async function getOrRestoreRootDialog(rootId, status) {
9
28
  const existing = dialog_global_registry_1.globalDialogRegistry.get(rootId);
10
29
  if (existing) {
@@ -18,6 +37,15 @@ async function getOrRestoreRootDialog(rootId, status) {
18
37
  if (!rootState)
19
38
  return undefined;
20
39
  const latest = await persistence_1.DialogPersistence.loadDialogLatest(rootDialogId, status);
40
+ let diligencePushMax = diligence_1.DEFAULT_DILIGENCE_PUSH_MAX;
41
+ try {
42
+ const team = await team_1.Team.load();
43
+ diligencePushMax = normalizeDiligencePushMax(resolveMemberDiligencePushMax(team, rootState.metadata.agentId));
44
+ }
45
+ catch (_err) {
46
+ diligencePushMax = diligence_1.DEFAULT_DILIGENCE_PUSH_MAX;
47
+ }
48
+ const defaultDisableDiligencePush = diligencePushMax <= 0;
21
49
  const rootStore = new persistence_1.DiskFileDialogStore(rootDialogId);
22
50
  const rootDialog = new dialog_1.RootDialog(rootStore, rootState.metadata.taskDocPath, rootDialogId, rootState.metadata.agentId, {
23
51
  messages: rootState.messages,
@@ -25,7 +53,18 @@ async function getOrRestoreRootDialog(rootId, status) {
25
53
  currentCourse: rootState.currentCourse,
26
54
  contextHealth: rootState.contextHealth,
27
55
  });
28
- rootDialog.disableDiligencePush = latest?.disableDiligencePush ?? false;
56
+ const persistedDisableDiligencePush = latest && typeof latest.disableDiligencePush === 'boolean'
57
+ ? latest.disableDiligencePush
58
+ : defaultDisableDiligencePush;
59
+ rootDialog.disableDiligencePush = persistedDisableDiligencePush;
60
+ const persistedRemainingBudget = latest && typeof latest.diligencePushRemainingBudget === 'number'
61
+ ? latest.diligencePushRemainingBudget
62
+ : undefined;
63
+ const normalizedRemainingBudget = clampNonNegativeFiniteInt(persistedRemainingBudget, diligencePushMax > 0 ? diligencePushMax : 0);
64
+ rootDialog.diligencePushRemainingBudget =
65
+ diligencePushMax > 0
66
+ ? Math.min(normalizedRemainingBudget, diligencePushMax)
67
+ : normalizedRemainingBudget;
29
68
  rootDialog.setPersistenceStatus(status);
30
69
  dialog_global_registry_1.globalDialogRegistry.register(rootDialog);
31
70
  // Keep the in-memory root dialog fully hydrated regardless of persistence status
package/dist/dialog.js CHANGED
@@ -96,8 +96,8 @@ class Dialog {
96
96
  // Phase 11: Suspension state for Type A subdialog mechanism
97
97
  // Tracks whether this dialog is in normal state, suspended, or resuming from suspension
98
98
  this._suspensionState = 'active';
99
- // Diligence Push (diligence auto-continue) budget counter (runtime-only).
100
- // Intentionally not persisted: this is a per-process safety valve, not dialog state.
99
+ // Diligence Push (diligence auto-continue) budget counter (root-dialog state).
100
+ // Persisted via latest.yaml so restarts and UI navigation can restore correct remaining budget.
101
101
  this.diligencePushRemainingBudget = 0;
102
102
  // Diligence Push disable switch (persisted via latest.yaml; default = false).
103
103
  this.disableDiligencePush = false;
@@ -1471,6 +1471,10 @@ async function _driveDialogStream(dlg, humanPrompt) {
1471
1471
  else {
1472
1472
  dlg.diligencePushRemainingBudget = Math.max(0, Math.floor(dlg.diligencePushRemainingBudget));
1473
1473
  }
1474
+ void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
1475
+ kind: 'patch',
1476
+ patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
1477
+ }));
1474
1478
  }
1475
1479
  }
1476
1480
  catch (err) {
@@ -1500,6 +1504,10 @@ async function _driveDialogStream(dlg, humanPrompt) {
1500
1504
  else {
1501
1505
  dlg.diligencePushRemainingBudget = Math.max(0, Math.floor(dlg.diligencePushRemainingBudget));
1502
1506
  }
1507
+ void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
1508
+ kind: 'patch',
1509
+ patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
1510
+ }));
1503
1511
  }
1504
1512
  break;
1505
1513
  }
@@ -1510,6 +1518,10 @@ async function _driveDialogStream(dlg, humanPrompt) {
1510
1518
  diligencePushMax: resolveMemberDiligencePushMax(team, dlg.agentId),
1511
1519
  });
1512
1520
  dlg.diligencePushRemainingBudget = prepared.nextRemainingBudget;
1521
+ void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
1522
+ kind: 'patch',
1523
+ patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
1524
+ }));
1513
1525
  if (prepared.kind !== 'disabled') {
1514
1526
  (0, evt_registry_1.postDialogEvent)(dlg, {
1515
1527
  type: 'diligence_budget_evt',
@@ -1880,6 +1892,10 @@ async function _driveDialogStream(dlg, humanPrompt) {
1880
1892
  else {
1881
1893
  dlg.diligencePushRemainingBudget = Math.max(0, Math.floor(dlg.diligencePushRemainingBudget));
1882
1894
  }
1895
+ void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
1896
+ kind: 'patch',
1897
+ patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
1898
+ }));
1883
1899
  }
1884
1900
  break;
1885
1901
  }
@@ -1890,6 +1906,10 @@ async function _driveDialogStream(dlg, humanPrompt) {
1890
1906
  diligencePushMax: resolveMemberDiligencePushMax(team, dlg.agentId),
1891
1907
  });
1892
1908
  dlg.diligencePushRemainingBudget = prepared.nextRemainingBudget;
1909
+ void persistence_1.DialogPersistence.mutateDialogLatest(dlg.id, () => ({
1910
+ kind: 'patch',
1911
+ patch: { diligencePushRemainingBudget: dlg.diligencePushRemainingBudget },
1912
+ }));
1893
1913
  if (prepared.kind !== 'disabled') {
1894
1914
  (0, evt_registry_1.postDialogEvent)(dlg, {
1895
1915
  type: 'diligence_budget_evt',
@@ -395,6 +395,17 @@ class CodexGen {
395
395
  }
396
396
  return;
397
397
  }
398
+ case 'response.reasoning_summary_text.done':
399
+ case 'response.reasoning_text.done':
400
+ case 'response.reasoning_summary_part.done': {
401
+ if (thinkingStarted) {
402
+ await receiver.thinkingFinish();
403
+ thinkingStarted = false;
404
+ if (activeStream === 'thinking')
405
+ activeStream = 'idle';
406
+ }
407
+ return;
408
+ }
398
409
  case 'response.output_item.added':
399
410
  return;
400
411
  case 'response.output_item.done': {
@@ -138,6 +138,9 @@ function parseDialogLatestFile(value) {
138
138
  return null;
139
139
  if (value.disableDiligencePush !== undefined && typeof value.disableDiligencePush !== 'boolean')
140
140
  return null;
141
+ if (value.diligencePushRemainingBudget !== undefined &&
142
+ typeof value.diligencePushRemainingBudget !== 'number')
143
+ return null;
141
144
  if (value.messageCount !== undefined && typeof value.messageCount !== 'number')
142
145
  return null;
143
146
  if (value.functionCallCount !== undefined && typeof value.functionCallCount !== 'number')
@@ -224,6 +227,7 @@ function parseDialogLatestFile(value) {
224
227
  needsDrive: value.needsDrive,
225
228
  runState,
226
229
  disableDiligencePush: value.disableDiligencePush,
230
+ diligencePushRemainingBudget: value.diligencePushRemainingBudget,
227
231
  };
228
232
  }
229
233
  function isSubdialogResponseRecord(value) {
@@ -62,6 +62,18 @@ const snippets_routes_1 = require("./snippets-routes");
62
62
  // Dialog lookup is performed via file-backed persistence; no in-memory registry
63
63
  const log = (0, log_1.createLogger)('api-routes');
64
64
  let cachedDomindsVersion;
65
+ function resolveMemberDiligencePushMax(team, agentId) {
66
+ const member = team.getMember(agentId);
67
+ if (member && member.diligence_push_max !== undefined) {
68
+ return member.diligence_push_max;
69
+ }
70
+ return diligence_1.DEFAULT_DILIGENCE_PUSH_MAX;
71
+ }
72
+ function normalizeDiligencePushMax(value) {
73
+ if (!Number.isFinite(value))
74
+ return 0;
75
+ return Math.floor(value);
76
+ }
65
77
  async function readDomindsPackageVersion() {
66
78
  if (cachedDomindsVersion !== undefined)
67
79
  return cachedDomindsVersion;
@@ -800,6 +812,11 @@ async function handleCreateDialog(req, res, context) {
800
812
  // Create RootDialog
801
813
  const dialog = new dialog_1.RootDialog(dialogUI, taskDocPath, dialogId, agentId);
802
814
  dialog_global_registry_1.globalDialogRegistry.register(dialog);
815
+ const team = await team_1.Team.load();
816
+ const diligencePushMax = normalizeDiligencePushMax(resolveMemberDiligencePushMax(team, agentId));
817
+ const defaultDisableDiligencePush = diligencePushMax <= 0;
818
+ dialog.disableDiligencePush = defaultDisableDiligencePush;
819
+ dialog.diligencePushRemainingBudget = diligencePushMax > 0 ? diligencePushMax : 0;
803
820
  // Persist dialog metadata and latest.yaml (write-once pattern)
804
821
  const metadata = {
805
822
  id: dialogId.selfId,
@@ -819,7 +836,8 @@ async function handleCreateDialog(req, res, context) {
819
836
  functionCallCount: 0,
820
837
  subdialogCount: 0,
821
838
  runState: { kind: 'idle_waiting_user' },
822
- disableDiligencePush: false,
839
+ disableDiligencePush: defaultDisableDiligencePush,
840
+ diligencePushRemainingBudget: dialog.diligencePushRemainingBudget,
823
841
  },
824
842
  }));
825
843
  // Dialog is registered with the global registry on creation
@@ -305,6 +305,10 @@ async function handleRefillDiligencePushBudget(ws, packet) {
305
305
  rootDialog.diligencePushRemainingBudget =
306
306
  clampNonNegativeFiniteInt(rootDialog.diligencePushRemainingBudget, 0) + 3;
307
307
  }
308
+ await persistence_1.DialogPersistence.mutateDialogLatest(rootDialogId, () => ({
309
+ kind: 'patch',
310
+ patch: { diligencePushRemainingBudget: rootDialog.diligencePushRemainingBudget },
311
+ }), foundStatus);
308
312
  (0, evt_registry_1.postDialogEvent)(rootDialog, {
309
313
  type: 'diligence_budget_evt',
310
314
  maxInjectCount: configuredMax > 0 ? configuredMax : 0,
@@ -404,6 +408,7 @@ async function handleCreateDialog(ws, packet) {
404
408
  subdialogCount: 0,
405
409
  runState: { kind: 'idle_waiting_user' },
406
410
  disableDiligencePush: defaultDisableDiligencePush,
411
+ diligencePushRemainingBudget: dialog.diligencePushRemainingBudget,
407
412
  },
408
413
  }));
409
414
  // Send dialog_ready with full info so frontend can track the active dialog
@@ -417,6 +422,7 @@ async function handleCreateDialog(ws, packet) {
417
422
  taskDocPath: taskDocPath,
418
423
  disableDiligencePush: defaultDisableDiligencePush,
419
424
  diligencePushMax,
425
+ diligencePushRemainingBudget: dialog.diligencePushRemainingBudget,
420
426
  };
421
427
  ws.send(JSON.stringify(response));
422
428
  broadcastDialogsIndexMessage?.({
@@ -559,6 +565,7 @@ async function handleDisplayDialog(ws, packet) {
559
565
  assignmentFromSup: metadata.assignmentFromSup,
560
566
  disableDiligencePush: effectiveDisableDiligencePush,
561
567
  diligencePushMax,
568
+ diligencePushRemainingBudget: clampNonNegativeFiniteInt(rootDialog.diligencePushRemainingBudget, diligencePushMax > 0 ? diligencePushMax : 0),
562
569
  };
563
570
  ws.send(JSON.stringify(dialogReadyResponse));
564
571
  // Send authoritative run state for this dialog so the client can render Send↔Stop and Continue.
@@ -1,4 +1,4 @@
1
- import { aV as isObjectLike, br as baseGetTag, aE as isArray, aT as Symbol$1, bs as arrayLikeKeys, bt as baseKeys, aD as isArrayLike, bu as memoize, bv as isArguments, bw as MapCache, bm as eq, bx as Uint8Array, aW as getTag, a$ as isBuffer, b2 as Stack, by as isTypedArray, aZ as isObject, bz as isLength, bp as isIndex, aF as identity, bn as baseFor, bA as Set } from "./index-BW6RWfVV.js";
1
+ import { aV as isObjectLike, br as baseGetTag, aE as isArray, aT as Symbol$1, bs as arrayLikeKeys, bt as baseKeys, aD as isArrayLike, bu as memoize, bv as isArguments, bw as MapCache, bm as eq, bx as Uint8Array, aW as getTag, a$ as isBuffer, b2 as Stack, by as isTypedArray, aZ as isObject, bz as isLength, bp as isIndex, aF as identity, bn as baseFor, bA as Set } from "./index-CjicCcol.js";
2
2
  var symbolTag$1 = "[object Symbol]";
3
3
  function isSymbol(value) {
4
4
  return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1;
@@ -658,4 +658,4 @@ export {
658
658
  hasIn as x,
659
659
  toString as y
660
660
  };
661
- //# sourceMappingURL=_baseUniq-SokIVT_l.js.map
661
+ //# sourceMappingURL=_baseUniq-BGmMNE5g.js.map