agentix-cli 0.154.2 → 0.155.0

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 (138) hide show
  1. package/dist/{App-6T6NVB7O.js → App-P4MLXD46.js} +2 -2
  2. package/dist/{ChatApp-QZBJ4NHC.js → ChatApp-DILDQOJL.js} +2 -2
  3. package/dist/{absorb-eval-EVX7LDXR.js → absorb-eval-DBC7EKU5.js} +2 -2
  4. package/dist/{agent-F2NT6B25.js → agent-OZ3KPI6Y.js} +2 -2
  5. package/dist/{board-dashboard-642BO7GV.js → board-dashboard-MWUCBHDN.js} +239 -233
  6. package/dist/board-dashboard-MWUCBHDN.js.map +1 -0
  7. package/dist/{chunk-KA2NV7H4.js → chunk-3ZAAUY2N.js} +2 -2
  8. package/dist/{chunk-743RAKLP.js → chunk-4RHM4XTI.js} +2 -2
  9. package/dist/{chunk-U4YTTWR6.js → chunk-6CXJAZZD.js} +2 -2
  10. package/dist/{chunk-AKCEMKQM.js → chunk-ACB6GRSP.js} +2 -2
  11. package/dist/{chunk-W2RB5XG7.js → chunk-AHZBWCXI.js} +2 -2
  12. package/dist/chunk-AVAR5KNN.js +36 -0
  13. package/dist/chunk-AVAR5KNN.js.map +1 -0
  14. package/dist/{chunk-E76HREC7.js → chunk-CTXHMJLZ.js} +3 -3
  15. package/dist/{chunk-IA4J3YLB.js → chunk-D65HXPIB.js} +2 -2
  16. package/dist/{chunk-S3EX64LR.js → chunk-EE3ZYIIB.js} +2 -2
  17. package/dist/{chunk-VRF4YW46.js → chunk-FTIJQLBX.js} +2 -2
  18. package/dist/{chunk-YL26FRKJ.js → chunk-GIFUJ3LL.js} +2 -2
  19. package/dist/chunk-H7DLFJBV.js +575 -0
  20. package/dist/chunk-H7DLFJBV.js.map +1 -0
  21. package/dist/{chunk-4CWACHEH.js → chunk-HGF73KFH.js} +2 -2
  22. package/dist/{chunk-JAML6222.js → chunk-HOVJVXEP.js} +2 -2
  23. package/dist/{chunk-GRVTLUQ6.js → chunk-IW4AZVJR.js} +2 -2
  24. package/dist/{chunk-IWWEUXZQ.js → chunk-J3IP3UZX.js} +2 -2
  25. package/dist/{chunk-67DWBJEO.js → chunk-J432IZXG.js} +333 -336
  26. package/dist/chunk-J432IZXG.js.map +1 -0
  27. package/dist/{chunk-37I654UJ.js → chunk-KYRF2FPT.js} +2 -2
  28. package/dist/{chunk-SD3CC4EX.js → chunk-NJEJU5XN.js} +2 -2
  29. package/dist/{chunk-CUAS4ITR.js → chunk-PI6CKUUH.js} +2 -2
  30. package/dist/{chunk-HUN6COOF.js → chunk-Q7LUTCNO.js} +2 -2
  31. package/dist/chunk-QHRQ3PUX.js +3 -0
  32. package/dist/chunk-QHRQ3PUX.js.map +1 -0
  33. package/dist/chunk-SQTL2CLY.js +76 -0
  34. package/dist/chunk-SQTL2CLY.js.map +1 -0
  35. package/dist/{chunk-EGTANAFI.js → chunk-SSFQWEPJ.js} +2 -2
  36. package/dist/{chunk-MLC5INGD.js → chunk-UK6MICKK.js} +5 -5
  37. package/dist/{chunk-MLC5INGD.js.map → chunk-UK6MICKK.js.map} +1 -1
  38. package/dist/{chunk-YJNUVAM4.js → chunk-WHMX2D2Q.js} +2 -2
  39. package/dist/{chunk-ABCQ6QMJ.js → chunk-YDAFHXDE.js} +2 -2
  40. package/dist/{chunk-GFRAHUAQ.js → chunk-YLAJOO5X.js} +2 -2
  41. package/dist/{chunk-B75BLZ2M.js → chunk-YXBQSLFV.js} +2 -2
  42. package/dist/cli.js +1 -1
  43. package/dist/{client-OCLSGJYQ.js → client-7JINGNNU.js} +2 -2
  44. package/dist/{config-FZTWI3VG.js → config-S4ZZHOUZ.js} +2 -2
  45. package/dist/{config-mutate-X5IKMROK.js → config-mutate-U3KKAXVD.js} +2 -2
  46. package/dist/config-mutator-KKRVNVVV.js +2 -0
  47. package/dist/{contributions-KHGGVSR6.js → contributions-6F3MYSRR.js} +2 -2
  48. package/dist/{doctor-KNCRQ3YO.js → doctor-UDZI2OMU.js} +2 -2
  49. package/dist/{follow-up-tool-TGKEPA5C.js → follow-up-tool-MP6FOIQE.js} +2 -2
  50. package/dist/{hub-HQUAH5H6.js → hub-TSUVK7PH.js} +2 -2
  51. package/dist/index.d.ts +362 -61
  52. package/dist/index.js +1 -1
  53. package/dist/{program-CYOAZ43O.js → program-CMWF3BQS.js} +234 -232
  54. package/dist/program-CMWF3BQS.js.map +1 -0
  55. package/dist/{promote-VD4OVQGL.js → promote-YVOYLTXI.js} +2 -2
  56. package/dist/{push-bridge-P7HH25VN.js → push-bridge-CFPGPPO7.js} +2 -2
  57. package/dist/{query-5CPK6G2H.js → query-ZGXXMJ4M.js} +2 -2
  58. package/dist/{query-settings-35GDM3HU.js → query-settings-TNOGVKBX.js} +2 -2
  59. package/dist/{registry-JCHKHCRE.js → registry-R2X4YGUK.js} +2 -2
  60. package/dist/{request-planner-ZIG4YVXC.js → request-planner-QBNGJMF5.js} +2 -2
  61. package/dist/{review-candidates-LPZWOR2K.js → review-candidates-WCDKCFXR.js} +2 -2
  62. package/dist/{routing-BLOYDLU4.js → routing-RRRO2GDA.js} +2 -2
  63. package/dist/schedule-tool-2XZ3I5IL.js +2 -0
  64. package/dist/{scheduler-BEJRDQR3.js → scheduler-7O73TDCG.js} +2 -2
  65. package/dist/{seat-NU3UJC6C.js → seat-CCDGNARC.js} +2 -2
  66. package/dist/{select-IWAFX4XJ.js → select-VPZ4QDHV.js} +2 -2
  67. package/dist/{set-enabled-JF75TSFU.js → set-enabled-VYSPZXPC.js} +2 -2
  68. package/dist/{tool-PQBQJWM5.js → tool-K3PZOFC2.js} +2 -2
  69. package/dist/{tool-WTOOPTGC.js → tool-VPDXU3IZ.js} +2 -2
  70. package/dist/{wiki-DXG655NP.js → wiki-QA7BDTOR.js} +2 -2
  71. package/dist/wiki-enrich-ZIZ5QHQ3.js +2 -0
  72. package/package.json +1 -1
  73. package/dist/board-dashboard-642BO7GV.js.map +0 -1
  74. package/dist/chunk-67DWBJEO.js.map +0 -1
  75. package/dist/chunk-HSCZSNOX.js +0 -533
  76. package/dist/chunk-HSCZSNOX.js.map +0 -1
  77. package/dist/chunk-VKEH4IBA.js +0 -76
  78. package/dist/chunk-VKEH4IBA.js.map +0 -1
  79. package/dist/chunk-XOUK5ZIQ.js +0 -36
  80. package/dist/chunk-XOUK5ZIQ.js.map +0 -1
  81. package/dist/chunk-YMX3QCV7.js +0 -3
  82. package/dist/chunk-YMX3QCV7.js.map +0 -1
  83. package/dist/config-mutator-C5BMIBZO.js +0 -2
  84. package/dist/program-CYOAZ43O.js.map +0 -1
  85. package/dist/schedule-tool-7KFO3NPD.js +0 -2
  86. package/dist/wiki-enrich-5VQCT6BT.js +0 -2
  87. /package/dist/{App-6T6NVB7O.js.map → App-P4MLXD46.js.map} +0 -0
  88. /package/dist/{ChatApp-QZBJ4NHC.js.map → ChatApp-DILDQOJL.js.map} +0 -0
  89. /package/dist/{absorb-eval-EVX7LDXR.js.map → absorb-eval-DBC7EKU5.js.map} +0 -0
  90. /package/dist/{agent-F2NT6B25.js.map → agent-OZ3KPI6Y.js.map} +0 -0
  91. /package/dist/{chunk-KA2NV7H4.js.map → chunk-3ZAAUY2N.js.map} +0 -0
  92. /package/dist/{chunk-743RAKLP.js.map → chunk-4RHM4XTI.js.map} +0 -0
  93. /package/dist/{chunk-U4YTTWR6.js.map → chunk-6CXJAZZD.js.map} +0 -0
  94. /package/dist/{chunk-AKCEMKQM.js.map → chunk-ACB6GRSP.js.map} +0 -0
  95. /package/dist/{chunk-W2RB5XG7.js.map → chunk-AHZBWCXI.js.map} +0 -0
  96. /package/dist/{chunk-E76HREC7.js.map → chunk-CTXHMJLZ.js.map} +0 -0
  97. /package/dist/{chunk-IA4J3YLB.js.map → chunk-D65HXPIB.js.map} +0 -0
  98. /package/dist/{chunk-S3EX64LR.js.map → chunk-EE3ZYIIB.js.map} +0 -0
  99. /package/dist/{chunk-VRF4YW46.js.map → chunk-FTIJQLBX.js.map} +0 -0
  100. /package/dist/{chunk-YL26FRKJ.js.map → chunk-GIFUJ3LL.js.map} +0 -0
  101. /package/dist/{chunk-4CWACHEH.js.map → chunk-HGF73KFH.js.map} +0 -0
  102. /package/dist/{chunk-JAML6222.js.map → chunk-HOVJVXEP.js.map} +0 -0
  103. /package/dist/{chunk-GRVTLUQ6.js.map → chunk-IW4AZVJR.js.map} +0 -0
  104. /package/dist/{chunk-IWWEUXZQ.js.map → chunk-J3IP3UZX.js.map} +0 -0
  105. /package/dist/{chunk-37I654UJ.js.map → chunk-KYRF2FPT.js.map} +0 -0
  106. /package/dist/{chunk-SD3CC4EX.js.map → chunk-NJEJU5XN.js.map} +0 -0
  107. /package/dist/{chunk-CUAS4ITR.js.map → chunk-PI6CKUUH.js.map} +0 -0
  108. /package/dist/{chunk-HUN6COOF.js.map → chunk-Q7LUTCNO.js.map} +0 -0
  109. /package/dist/{chunk-EGTANAFI.js.map → chunk-SSFQWEPJ.js.map} +0 -0
  110. /package/dist/{chunk-YJNUVAM4.js.map → chunk-WHMX2D2Q.js.map} +0 -0
  111. /package/dist/{chunk-ABCQ6QMJ.js.map → chunk-YDAFHXDE.js.map} +0 -0
  112. /package/dist/{chunk-GFRAHUAQ.js.map → chunk-YLAJOO5X.js.map} +0 -0
  113. /package/dist/{chunk-B75BLZ2M.js.map → chunk-YXBQSLFV.js.map} +0 -0
  114. /package/dist/{client-OCLSGJYQ.js.map → client-7JINGNNU.js.map} +0 -0
  115. /package/dist/{config-FZTWI3VG.js.map → config-S4ZZHOUZ.js.map} +0 -0
  116. /package/dist/{config-mutate-X5IKMROK.js.map → config-mutate-U3KKAXVD.js.map} +0 -0
  117. /package/dist/{config-mutator-C5BMIBZO.js.map → config-mutator-KKRVNVVV.js.map} +0 -0
  118. /package/dist/{contributions-KHGGVSR6.js.map → contributions-6F3MYSRR.js.map} +0 -0
  119. /package/dist/{doctor-KNCRQ3YO.js.map → doctor-UDZI2OMU.js.map} +0 -0
  120. /package/dist/{follow-up-tool-TGKEPA5C.js.map → follow-up-tool-MP6FOIQE.js.map} +0 -0
  121. /package/dist/{hub-HQUAH5H6.js.map → hub-TSUVK7PH.js.map} +0 -0
  122. /package/dist/{promote-VD4OVQGL.js.map → promote-YVOYLTXI.js.map} +0 -0
  123. /package/dist/{push-bridge-P7HH25VN.js.map → push-bridge-CFPGPPO7.js.map} +0 -0
  124. /package/dist/{query-5CPK6G2H.js.map → query-ZGXXMJ4M.js.map} +0 -0
  125. /package/dist/{query-settings-35GDM3HU.js.map → query-settings-TNOGVKBX.js.map} +0 -0
  126. /package/dist/{registry-JCHKHCRE.js.map → registry-R2X4YGUK.js.map} +0 -0
  127. /package/dist/{request-planner-ZIG4YVXC.js.map → request-planner-QBNGJMF5.js.map} +0 -0
  128. /package/dist/{review-candidates-LPZWOR2K.js.map → review-candidates-WCDKCFXR.js.map} +0 -0
  129. /package/dist/{routing-BLOYDLU4.js.map → routing-RRRO2GDA.js.map} +0 -0
  130. /package/dist/{schedule-tool-7KFO3NPD.js.map → schedule-tool-2XZ3I5IL.js.map} +0 -0
  131. /package/dist/{scheduler-BEJRDQR3.js.map → scheduler-7O73TDCG.js.map} +0 -0
  132. /package/dist/{seat-NU3UJC6C.js.map → seat-CCDGNARC.js.map} +0 -0
  133. /package/dist/{select-IWAFX4XJ.js.map → select-VPZ4QDHV.js.map} +0 -0
  134. /package/dist/{set-enabled-JF75TSFU.js.map → set-enabled-VYSPZXPC.js.map} +0 -0
  135. /package/dist/{tool-PQBQJWM5.js.map → tool-K3PZOFC2.js.map} +0 -0
  136. /package/dist/{tool-WTOOPTGC.js.map → tool-VPDXU3IZ.js.map} +0 -0
  137. /package/dist/{wiki-DXG655NP.js.map → wiki-QA7BDTOR.js.map} +0 -0
  138. /package/dist/{wiki-enrich-5VQCT6BT.js.map → wiki-enrich-ZIZ5QHQ3.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -3382,15 +3382,6 @@ declare const daemonConfigSchema: z.ZodObject<{
3382
3382
  types: string[];
3383
3383
  candidates: number;
3384
3384
  };
3385
- shared: boolean;
3386
- candidates: number;
3387
- sharedCandidates: number;
3388
- maxPages: number;
3389
- pageChars: number;
3390
- linkedPages: number;
3391
- linkedChars: number;
3392
- navigatorModel: string;
3393
- answerModel: string;
3394
3385
  live: {
3395
3386
  enabled: boolean;
3396
3387
  timeoutMs: number;
@@ -3420,6 +3411,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3420
3411
  url?: string | undefined;
3421
3412
  })[];
3422
3413
  };
3414
+ shared: boolean;
3415
+ candidates: number;
3416
+ sharedCandidates: number;
3417
+ maxPages: number;
3418
+ pageChars: number;
3419
+ linkedPages: number;
3420
+ linkedChars: number;
3421
+ navigatorModel: string;
3422
+ answerModel: string;
3423
3423
  }, {
3424
3424
  method?: "auto" | "summaries" | "catalog" | undefined;
3425
3425
  notes?: {
@@ -3427,15 +3427,6 @@ declare const daemonConfigSchema: z.ZodObject<{
3427
3427
  types?: string[] | undefined;
3428
3428
  candidates?: number | undefined;
3429
3429
  } | undefined;
3430
- shared?: boolean | undefined;
3431
- candidates?: number | undefined;
3432
- sharedCandidates?: number | undefined;
3433
- maxPages?: number | undefined;
3434
- pageChars?: number | undefined;
3435
- linkedPages?: number | undefined;
3436
- linkedChars?: number | undefined;
3437
- navigatorModel?: string | undefined;
3438
- answerModel?: string | undefined;
3439
3430
  live?: {
3440
3431
  enabled?: boolean | undefined;
3441
3432
  timeoutMs?: number | undefined;
@@ -3465,6 +3456,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3465
3456
  peers?: boolean | undefined;
3466
3457
  })[] | undefined;
3467
3458
  } | undefined;
3459
+ shared?: boolean | undefined;
3460
+ candidates?: number | undefined;
3461
+ sharedCandidates?: number | undefined;
3462
+ maxPages?: number | undefined;
3463
+ pageChars?: number | undefined;
3464
+ linkedPages?: number | undefined;
3465
+ linkedChars?: number | undefined;
3466
+ navigatorModel?: string | undefined;
3467
+ answerModel?: string | undefined;
3468
3468
  }>>;
3469
3469
  /** One-line page summaries `wiki query` picks pages from (#855). */
3470
3470
  summaries: z.ZodDefault<z.ZodObject<{
@@ -3516,15 +3516,6 @@ declare const daemonConfigSchema: z.ZodObject<{
3516
3516
  types: string[];
3517
3517
  candidates: number;
3518
3518
  };
3519
- shared: boolean;
3520
- candidates: number;
3521
- sharedCandidates: number;
3522
- maxPages: number;
3523
- pageChars: number;
3524
- linkedPages: number;
3525
- linkedChars: number;
3526
- navigatorModel: string;
3527
- answerModel: string;
3528
3519
  live: {
3529
3520
  enabled: boolean;
3530
3521
  timeoutMs: number;
@@ -3554,6 +3545,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3554
3545
  url?: string | undefined;
3555
3546
  })[];
3556
3547
  };
3548
+ shared: boolean;
3549
+ candidates: number;
3550
+ sharedCandidates: number;
3551
+ maxPages: number;
3552
+ pageChars: number;
3553
+ linkedPages: number;
3554
+ linkedChars: number;
3555
+ navigatorModel: string;
3556
+ answerModel: string;
3557
3557
  };
3558
3558
  contributions: {
3559
3559
  model: string;
@@ -3582,15 +3582,6 @@ declare const daemonConfigSchema: z.ZodObject<{
3582
3582
  types?: string[] | undefined;
3583
3583
  candidates?: number | undefined;
3584
3584
  } | undefined;
3585
- shared?: boolean | undefined;
3586
- candidates?: number | undefined;
3587
- sharedCandidates?: number | undefined;
3588
- maxPages?: number | undefined;
3589
- pageChars?: number | undefined;
3590
- linkedPages?: number | undefined;
3591
- linkedChars?: number | undefined;
3592
- navigatorModel?: string | undefined;
3593
- answerModel?: string | undefined;
3594
3585
  live?: {
3595
3586
  enabled?: boolean | undefined;
3596
3587
  timeoutMs?: number | undefined;
@@ -3620,6 +3611,15 @@ declare const daemonConfigSchema: z.ZodObject<{
3620
3611
  peers?: boolean | undefined;
3621
3612
  })[] | undefined;
3622
3613
  } | undefined;
3614
+ shared?: boolean | undefined;
3615
+ candidates?: number | undefined;
3616
+ sharedCandidates?: number | undefined;
3617
+ maxPages?: number | undefined;
3618
+ pageChars?: number | undefined;
3619
+ linkedPages?: number | undefined;
3620
+ linkedChars?: number | undefined;
3621
+ navigatorModel?: string | undefined;
3622
+ answerModel?: string | undefined;
3623
3623
  } | undefined;
3624
3624
  contributions?: {
3625
3625
  model?: string | undefined;
@@ -5165,6 +5165,27 @@ declare const daemonConfigSchema: z.ZodObject<{
5165
5165
  addresses?: string[] | undefined;
5166
5166
  digestNags?: boolean | undefined;
5167
5167
  }>>;
5168
+ /** Reach (src/notify/reach.ts, #1138 step B): an urgent item goes to
5169
+ * where the owner was last seen and, unseen after
5170
+ * `escalateAfterMinutes`, once to the next address on the ladder.
5171
+ * Seen/answered marks, presence and channel health are always on;
5172
+ * this switches the ladder only. Off by default: it sends a second
5173
+ * message, and seen relies on the phone app's read mark. */
5174
+ reach: z.ZodDefault<z.ZodObject<{
5175
+ enabled: z.ZodDefault<z.ZodBoolean>;
5176
+ escalateAfterMinutes: z.ZodDefault<z.ZodNumber>;
5177
+ /** Owner addresses in order, as "channel:chatId". Empty: the told
5178
+ * channels (chat "default") and then the told addresses. */
5179
+ ladder: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
5180
+ }, "strip", z.ZodTypeAny, {
5181
+ enabled: boolean;
5182
+ escalateAfterMinutes: number;
5183
+ ladder: string[];
5184
+ }, {
5185
+ enabled?: boolean | undefined;
5186
+ escalateAfterMinutes?: number | undefined;
5187
+ ladder?: string[] | undefined;
5188
+ }>>;
5168
5189
  }, "strip", z.ZodTypeAny, {
5169
5190
  local: {
5170
5191
  sound: boolean;
@@ -5187,6 +5208,11 @@ declare const daemonConfigSchema: z.ZodObject<{
5187
5208
  addresses: string[];
5188
5209
  digestNags: boolean;
5189
5210
  };
5211
+ reach: {
5212
+ enabled: boolean;
5213
+ escalateAfterMinutes: number;
5214
+ ladder: string[];
5215
+ };
5190
5216
  channel?: string | undefined;
5191
5217
  destination?: {
5192
5218
  channel: string;
@@ -5221,6 +5247,11 @@ declare const daemonConfigSchema: z.ZodObject<{
5221
5247
  addresses?: string[] | undefined;
5222
5248
  digestNags?: boolean | undefined;
5223
5249
  } | undefined;
5250
+ reach?: {
5251
+ enabled?: boolean | undefined;
5252
+ escalateAfterMinutes?: number | undefined;
5253
+ ladder?: string[] | undefined;
5254
+ } | undefined;
5224
5255
  }>>;
5225
5256
  calls: z.ZodDefault<z.ZodObject<{
5226
5257
  /** Agents allowed to call: ids, or "*" for every agent on this node.
@@ -6155,6 +6186,111 @@ declare const daemonConfigSchema: z.ZodObject<{
6155
6186
  repos?: Record<string, string> | undefined;
6156
6187
  checkEveryMinutes?: number | undefined;
6157
6188
  }>>;
6189
+ /** Status follows the work (src/requests/drift, #1138 step F): merged
6190
+ * merge requests are mapped to the issues they close, and an issue
6191
+ * whose status label no longer says what happened (merged but still
6192
+ * Doing, live but still Review, Done but not live) is reported to the
6193
+ * owner once. Only the projects listed are read. Writing the label
6194
+ * back is a second switch, off by default. */
6195
+ statusDrift: z.ZodDefault<z.ZodObject<{
6196
+ enabled: z.ZodDefault<z.ZodBoolean>;
6197
+ /** Minutes between two checks. Each one reads the forges. */
6198
+ checkEveryMinutes: z.ZodDefault<z.ZodNumber>;
6199
+ /** How far back merged merge requests are read. */
6200
+ lookbackDays: z.ZodDefault<z.ZodNumber>;
6201
+ projects: z.ZodDefault<z.ZodArray<z.ZodObject<{
6202
+ provider: z.ZodEnum<["gitlab", "github"]>;
6203
+ /** "group/project" on GitLab, "owner/repo" on GitHub. */
6204
+ project: z.ZodEffects<z.ZodString, string, string>;
6205
+ /** Where the running commit is read: "self" (this node's own build)
6206
+ * or a health URL whose JSON has it under `liveField`. Every one
6207
+ * must run a commit for it to count as live. Empty: live is not
6208
+ * known, and only merged-but-not-in-Review is reported. */
6209
+ live: z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodLiteral<"self">, z.ZodString]>, "many">>;
6210
+ /** A clone named in requests.checkers.repos: the live check runs
6211
+ * git there instead of asking the forge. */
6212
+ repo: z.ZodOptional<z.ZodString>;
6213
+ }, "strip", z.ZodTypeAny, {
6214
+ provider: "gitlab" | "github";
6215
+ project: string;
6216
+ live: string[];
6217
+ repo?: string | undefined;
6218
+ }, {
6219
+ provider: "gitlab" | "github";
6220
+ project: string;
6221
+ repo?: string | undefined;
6222
+ live?: string[] | undefined;
6223
+ }>, "many">>;
6224
+ /** The JSON field of a health URL that holds the running commit. */
6225
+ liveField: z.ZodDefault<z.ZodString>;
6226
+ /** The status labels, any case. The first label of a status is the
6227
+ * one written. */
6228
+ labels: z.ZodDefault<z.ZodObject<{
6229
+ todo: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6230
+ doing: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6231
+ review: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6232
+ done: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6233
+ }, "strip", z.ZodTypeAny, {
6234
+ done: string[];
6235
+ todo: string[];
6236
+ doing: string[];
6237
+ review: string[];
6238
+ }, {
6239
+ done?: string[] | undefined;
6240
+ todo?: string[] | undefined;
6241
+ doing?: string[] | undefined;
6242
+ review?: string[] | undefined;
6243
+ }>>;
6244
+ /** Done but not live is told only once a merge has waited this many
6245
+ * hours to go live: forges close the issue at merge, before a deploy. */
6246
+ doneNotLiveAfterHours: z.ZodDefault<z.ZodNumber>;
6247
+ /** Write mode: an issue whose work is live gets its Done label (its
6248
+ * other status labels removed) and a note quoting the proof. Never
6249
+ * closes an issue. Needs the project in `writeProjects` too. */
6250
+ write: z.ZodDefault<z.ZodBoolean>;
6251
+ /** Projects write mode may change, as listed under `projects`. */
6252
+ writeProjects: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6253
+ }, "strip", z.ZodTypeAny, {
6254
+ enabled: boolean;
6255
+ projects: {
6256
+ provider: "gitlab" | "github";
6257
+ project: string;
6258
+ live: string[];
6259
+ repo?: string | undefined;
6260
+ }[];
6261
+ labels: {
6262
+ done: string[];
6263
+ todo: string[];
6264
+ doing: string[];
6265
+ review: string[];
6266
+ };
6267
+ write: boolean;
6268
+ checkEveryMinutes: number;
6269
+ lookbackDays: number;
6270
+ liveField: string;
6271
+ doneNotLiveAfterHours: number;
6272
+ writeProjects: string[];
6273
+ }, {
6274
+ enabled?: boolean | undefined;
6275
+ projects?: {
6276
+ provider: "gitlab" | "github";
6277
+ project: string;
6278
+ repo?: string | undefined;
6279
+ live?: string[] | undefined;
6280
+ }[] | undefined;
6281
+ labels?: {
6282
+ done?: string[] | undefined;
6283
+ todo?: string[] | undefined;
6284
+ doing?: string[] | undefined;
6285
+ review?: string[] | undefined;
6286
+ } | undefined;
6287
+ write?: boolean | undefined;
6288
+ checkEveryMinutes?: number | undefined;
6289
+ lookbackDays?: number | undefined;
6290
+ liveField?: string | undefined;
6291
+ doneNotLiveAfterHours?: number | undefined;
6292
+ writeProjects?: string[] | undefined;
6293
+ }>>;
6158
6294
  /** Headlines (src/requests/headline.ts, #1126): a request the agent did
6159
6295
  * not describe gets a few words saying what it is, written once by one
6160
6296
  * small model call, so its card, push and Desk line are not titled with
@@ -6212,6 +6348,27 @@ declare const daemonConfigSchema: z.ZodObject<{
6212
6348
  timeoutSeconds: number;
6213
6349
  };
6214
6350
  settleHandedBack: boolean;
6351
+ statusDrift: {
6352
+ enabled: boolean;
6353
+ projects: {
6354
+ provider: "gitlab" | "github";
6355
+ project: string;
6356
+ live: string[];
6357
+ repo?: string | undefined;
6358
+ }[];
6359
+ labels: {
6360
+ done: string[];
6361
+ todo: string[];
6362
+ doing: string[];
6363
+ review: string[];
6364
+ };
6365
+ write: boolean;
6366
+ checkEveryMinutes: number;
6367
+ lookbackDays: number;
6368
+ liveField: string;
6369
+ doneNotLiveAfterHours: number;
6370
+ writeProjects: string[];
6371
+ };
6215
6372
  }, {
6216
6373
  enabled?: boolean | undefined;
6217
6374
  from?: string[] | undefined;
@@ -6247,6 +6404,27 @@ declare const daemonConfigSchema: z.ZodObject<{
6247
6404
  timeoutSeconds?: number | undefined;
6248
6405
  } | undefined;
6249
6406
  settleHandedBack?: boolean | undefined;
6407
+ statusDrift?: {
6408
+ enabled?: boolean | undefined;
6409
+ projects?: {
6410
+ provider: "gitlab" | "github";
6411
+ project: string;
6412
+ repo?: string | undefined;
6413
+ live?: string[] | undefined;
6414
+ }[] | undefined;
6415
+ labels?: {
6416
+ done?: string[] | undefined;
6417
+ todo?: string[] | undefined;
6418
+ doing?: string[] | undefined;
6419
+ review?: string[] | undefined;
6420
+ } | undefined;
6421
+ write?: boolean | undefined;
6422
+ checkEveryMinutes?: number | undefined;
6423
+ lookbackDays?: number | undefined;
6424
+ liveField?: string | undefined;
6425
+ doneNotLiveAfterHours?: number | undefined;
6426
+ writeProjects?: string[] | undefined;
6427
+ } | undefined;
6250
6428
  }>>;
6251
6429
  /** Task watchers (src/watchers, #1030): every task start decides whether
6252
6430
  * the task needs a watcher and attaches one. Off by default. */
@@ -6316,11 +6494,11 @@ declare const daemonConfigSchema: z.ZodObject<{
6316
6494
  linkHosts: string[];
6317
6495
  }>;
6318
6496
  retentionDays: number;
6497
+ escalateAfterMinutes: number;
6319
6498
  skipChannels: string[];
6320
6499
  defaultDueMinutes: number;
6321
6500
  noBelow: number;
6322
6501
  yesAt: number;
6323
- escalateAfterMinutes: number;
6324
6502
  doneSignal: "result" | "explicit";
6325
6503
  }, {
6326
6504
  enabled?: boolean | undefined;
@@ -6334,11 +6512,11 @@ declare const daemonConfigSchema: z.ZodObject<{
6334
6512
  linkHosts?: string[] | undefined;
6335
6513
  }> | undefined;
6336
6514
  retentionDays?: number | undefined;
6515
+ escalateAfterMinutes?: number | undefined;
6337
6516
  skipChannels?: string[] | undefined;
6338
6517
  defaultDueMinutes?: number | undefined;
6339
6518
  noBelow?: number | undefined;
6340
6519
  yesAt?: number | undefined;
6341
- escalateAfterMinutes?: number | undefined;
6342
6520
  doneSignal?: "result" | "explicit" | undefined;
6343
6521
  }>>, {
6344
6522
  enabled: boolean;
@@ -6352,11 +6530,11 @@ declare const daemonConfigSchema: z.ZodObject<{
6352
6530
  linkHosts: string[];
6353
6531
  }>;
6354
6532
  retentionDays: number;
6533
+ escalateAfterMinutes: number;
6355
6534
  skipChannels: string[];
6356
6535
  defaultDueMinutes: number;
6357
6536
  noBelow: number;
6358
6537
  yesAt: number;
6359
- escalateAfterMinutes: number;
6360
6538
  doneSignal: "result" | "explicit";
6361
6539
  }, {
6362
6540
  enabled?: boolean | undefined;
@@ -6370,11 +6548,11 @@ declare const daemonConfigSchema: z.ZodObject<{
6370
6548
  linkHosts?: string[] | undefined;
6371
6549
  }> | undefined;
6372
6550
  retentionDays?: number | undefined;
6551
+ escalateAfterMinutes?: number | undefined;
6373
6552
  skipChannels?: string[] | undefined;
6374
6553
  defaultDueMinutes?: number | undefined;
6375
6554
  noBelow?: number | undefined;
6376
6555
  yesAt?: number | undefined;
6377
- escalateAfterMinutes?: number | undefined;
6378
6556
  doneSignal?: "result" | "explicit" | undefined;
6379
6557
  } | undefined>;
6380
6558
  people: z.ZodEffects<z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -9128,15 +9306,6 @@ declare const daemonConfigSchema: z.ZodObject<{
9128
9306
  types: string[];
9129
9307
  candidates: number;
9130
9308
  };
9131
- shared: boolean;
9132
- candidates: number;
9133
- sharedCandidates: number;
9134
- maxPages: number;
9135
- pageChars: number;
9136
- linkedPages: number;
9137
- linkedChars: number;
9138
- navigatorModel: string;
9139
- answerModel: string;
9140
9309
  live: {
9141
9310
  enabled: boolean;
9142
9311
  timeoutMs: number;
@@ -9166,6 +9335,15 @@ declare const daemonConfigSchema: z.ZodObject<{
9166
9335
  url?: string | undefined;
9167
9336
  })[];
9168
9337
  };
9338
+ shared: boolean;
9339
+ candidates: number;
9340
+ sharedCandidates: number;
9341
+ maxPages: number;
9342
+ pageChars: number;
9343
+ linkedPages: number;
9344
+ linkedChars: number;
9345
+ navigatorModel: string;
9346
+ answerModel: string;
9169
9347
  };
9170
9348
  contributions: {
9171
9349
  model: string;
@@ -9307,6 +9485,27 @@ declare const daemonConfigSchema: z.ZodObject<{
9307
9485
  timeoutSeconds: number;
9308
9486
  };
9309
9487
  settleHandedBack: boolean;
9488
+ statusDrift: {
9489
+ enabled: boolean;
9490
+ projects: {
9491
+ provider: "gitlab" | "github";
9492
+ project: string;
9493
+ live: string[];
9494
+ repo?: string | undefined;
9495
+ }[];
9496
+ labels: {
9497
+ done: string[];
9498
+ todo: string[];
9499
+ doing: string[];
9500
+ review: string[];
9501
+ };
9502
+ write: boolean;
9503
+ checkEveryMinutes: number;
9504
+ lookbackDays: number;
9505
+ liveField: string;
9506
+ doneNotLiveAfterHours: number;
9507
+ writeProjects: string[];
9508
+ };
9310
9509
  };
9311
9510
  channels: {
9312
9511
  push: {
@@ -9625,6 +9824,11 @@ declare const daemonConfigSchema: z.ZodObject<{
9625
9824
  addresses: string[];
9626
9825
  digestNags: boolean;
9627
9826
  };
9827
+ reach: {
9828
+ enabled: boolean;
9829
+ escalateAfterMinutes: number;
9830
+ ladder: string[];
9831
+ };
9628
9832
  channel?: string | undefined;
9629
9833
  destination?: {
9630
9834
  channel: string;
@@ -9738,11 +9942,11 @@ declare const daemonConfigSchema: z.ZodObject<{
9738
9942
  linkHosts: string[];
9739
9943
  }>;
9740
9944
  retentionDays: number;
9945
+ escalateAfterMinutes: number;
9741
9946
  skipChannels: string[];
9742
9947
  defaultDueMinutes: number;
9743
9948
  noBelow: number;
9744
9949
  yesAt: number;
9745
- escalateAfterMinutes: number;
9746
9950
  doneSignal: "result" | "explicit";
9747
9951
  };
9748
9952
  people: {
@@ -10242,15 +10446,6 @@ declare const daemonConfigSchema: z.ZodObject<{
10242
10446
  types?: string[] | undefined;
10243
10447
  candidates?: number | undefined;
10244
10448
  } | undefined;
10245
- shared?: boolean | undefined;
10246
- candidates?: number | undefined;
10247
- sharedCandidates?: number | undefined;
10248
- maxPages?: number | undefined;
10249
- pageChars?: number | undefined;
10250
- linkedPages?: number | undefined;
10251
- linkedChars?: number | undefined;
10252
- navigatorModel?: string | undefined;
10253
- answerModel?: string | undefined;
10254
10449
  live?: {
10255
10450
  enabled?: boolean | undefined;
10256
10451
  timeoutMs?: number | undefined;
@@ -10280,6 +10475,15 @@ declare const daemonConfigSchema: z.ZodObject<{
10280
10475
  peers?: boolean | undefined;
10281
10476
  })[] | undefined;
10282
10477
  } | undefined;
10478
+ shared?: boolean | undefined;
10479
+ candidates?: number | undefined;
10480
+ sharedCandidates?: number | undefined;
10481
+ maxPages?: number | undefined;
10482
+ pageChars?: number | undefined;
10483
+ linkedPages?: number | undefined;
10484
+ linkedChars?: number | undefined;
10485
+ navigatorModel?: string | undefined;
10486
+ answerModel?: string | undefined;
10283
10487
  } | undefined;
10284
10488
  contributions?: {
10285
10489
  model?: string | undefined;
@@ -10489,6 +10693,27 @@ declare const daemonConfigSchema: z.ZodObject<{
10489
10693
  timeoutSeconds?: number | undefined;
10490
10694
  } | undefined;
10491
10695
  settleHandedBack?: boolean | undefined;
10696
+ statusDrift?: {
10697
+ enabled?: boolean | undefined;
10698
+ projects?: {
10699
+ provider: "gitlab" | "github";
10700
+ project: string;
10701
+ repo?: string | undefined;
10702
+ live?: string[] | undefined;
10703
+ }[] | undefined;
10704
+ labels?: {
10705
+ done?: string[] | undefined;
10706
+ todo?: string[] | undefined;
10707
+ doing?: string[] | undefined;
10708
+ review?: string[] | undefined;
10709
+ } | undefined;
10710
+ write?: boolean | undefined;
10711
+ checkEveryMinutes?: number | undefined;
10712
+ lookbackDays?: number | undefined;
10713
+ liveField?: string | undefined;
10714
+ doneNotLiveAfterHours?: number | undefined;
10715
+ writeProjects?: string[] | undefined;
10716
+ } | undefined;
10492
10717
  } | undefined;
10493
10718
  channels?: {
10494
10719
  push?: {
@@ -10806,6 +11031,11 @@ declare const daemonConfigSchema: z.ZodObject<{
10806
11031
  addresses?: string[] | undefined;
10807
11032
  digestNags?: boolean | undefined;
10808
11033
  } | undefined;
11034
+ reach?: {
11035
+ enabled?: boolean | undefined;
11036
+ escalateAfterMinutes?: number | undefined;
11037
+ ladder?: string[] | undefined;
11038
+ } | undefined;
10809
11039
  } | undefined;
10810
11040
  calls?: {
10811
11041
  summary?: boolean | undefined;
@@ -10913,11 +11143,11 @@ declare const daemonConfigSchema: z.ZodObject<{
10913
11143
  linkHosts?: string[] | undefined;
10914
11144
  }> | undefined;
10915
11145
  retentionDays?: number | undefined;
11146
+ escalateAfterMinutes?: number | undefined;
10916
11147
  skipChannels?: string[] | undefined;
10917
11148
  defaultDueMinutes?: number | undefined;
10918
11149
  noBelow?: number | undefined;
10919
11150
  yesAt?: number | undefined;
10920
- escalateAfterMinutes?: number | undefined;
10921
11151
  doneSignal?: "result" | "explicit" | undefined;
10922
11152
  } | undefined;
10923
11153
  people?: {
@@ -12039,6 +12269,9 @@ declare class AgentXDaemon {
12039
12269
  private requests;
12040
12270
  /** The told-the-owner gate (#1126). Null without a database. */
12041
12271
  private ownerGate;
12272
+ /** Where the owner is and did it land (#1138 step B). Null without a database. */
12273
+ private reach;
12274
+ private reachTimer?;
12042
12275
  private toldPrunedAt;
12043
12276
  /** Guest meshes (#380): the grants this node opened, and the join limiter. */
12044
12277
  private guestStore;
@@ -12047,6 +12280,10 @@ declare class AgentXDaemon {
12047
12280
  * is the owner's (requests/operator, #393). */
12048
12281
  private operatorKey;
12049
12282
  private requestsSweeping;
12283
+ /** Status drift (#1138 step F): its last check, and one at a time. */
12284
+ private driftAt;
12285
+ private driftSweeping;
12286
+ private readonly driftLiveCache;
12050
12287
  /** Task watchers (src/watchers, #1030). */
12051
12288
  private watchers;
12052
12289
  private watchersSweeping;
@@ -12109,6 +12346,10 @@ declare class AgentXDaemon {
12109
12346
  * approved messages sent, the owner told at the end or on a block
12110
12347
  * (src/requests/plan-sweep.ts, #788). One check at a time. */
12111
12348
  private sweepPlans;
12349
+ /** Status follows the work (src/requests/drift, #1138 step F): beside
12350
+ * the requests check, at its own pace, since each check reads the
12351
+ * forges. Reports drift to the owner; writes a label only in write mode. */
12352
+ private statusDriftTick;
12112
12353
  /** What the loop checkers read (#1039): the forges through the
12113
12354
  * configured connectors, the local clones under requests.checkers.repos,
12114
12355
  * and this node's own record of inbound turns. Built per check, so a
@@ -12128,6 +12369,9 @@ declare class AgentXDaemon {
12128
12369
  private waitForChat;
12129
12370
  /** The watcher checkpoint at every task start (src/watchers, #1030). */
12130
12371
  private attachTaskWatchers;
12372
+ /** Reach (#1138 step B): presence, seen/answered marks, the urgent
12373
+ * ladder and channel health, checked once a minute. */
12374
+ private attachReach;
12131
12375
  /** Tell the owner through the notify path: a push to the default
12132
12376
  * channel, the Mac banner where there is one (#788). */
12133
12377
  private notifyOwner;
@@ -12714,6 +12958,13 @@ interface ChannelAdapter {
12714
12958
  react?(chatId: string, messageId: string, emoji?: string): Promise<void>;
12715
12959
  /** Register handler for incoming messages */
12716
12960
  onMessage(handler: (msg: IncomingMessage) => Promise<void>): void;
12961
+ /** Can a send go out now (#1138 step B)? A channel that can tell it is
12962
+ * down says so, and the router refuses sends to it with the reason
12963
+ * instead of reporting them sent. Absent: taken as up. */
12964
+ health?(): {
12965
+ up: boolean;
12966
+ reason?: string;
12967
+ };
12717
12968
  /** Get verified context for a chat (optional — channels implement what they can) */
12718
12969
  getChannelMeta?(chatId: string): Promise<ChannelMeta | undefined>;
12719
12970
  /** Fetch the most recent messages from the live channel for cold-start
@@ -17547,6 +17798,8 @@ declare class BusinessLayer {
17547
17798
 
17548
17799
  type TellKind = "notice" | "nag";
17549
17800
  type TellOutcome = "sent" | "held" | "digest" | "repeat" | "failed";
17801
+ /** Where a row that went out stands: sent, seen by the owner, answered. */
17802
+ type TellState = "sent" | "seen" | "answered";
17550
17803
  /** What a caller says about a message to the owner. All optional: a bare
17551
17804
  * message on an owner channel is a notice keyed by its text. */
17552
17805
  interface TellMeta {
@@ -17577,6 +17830,20 @@ interface ToldRow {
17577
17830
  text: string;
17578
17831
  outcome: TellOutcome;
17579
17832
  digestedAt: number | null;
17833
+ /** Sent as urgent: the reach ladder may send it once more (reach.ts). */
17834
+ urgent: boolean;
17835
+ /** When the owner saw it, and how ("phone", "desk", "reply"). */
17836
+ seenAt: number | null;
17837
+ seenVia: string | null;
17838
+ /** When the owner answered it, and how ("reply", "desk", "card"). */
17839
+ answeredAt: number | null;
17840
+ answeredVia: string | null;
17841
+ /** When it was sent on to the next channel, unseen. */
17842
+ escalatedAt: number | null;
17843
+ /** On an escalation: the row it carries on. */
17844
+ escalationOf: number | null;
17845
+ /** sent → seen → answered, for a row that went out. */
17846
+ state: TellState;
17580
17847
  }
17581
17848
  interface TellSettings {
17582
17849
  enabled: boolean;
@@ -17588,10 +17855,16 @@ interface TellSettings {
17588
17855
  * sent at once, or it would never reach anyone. Unset: true. */
17589
17856
  digestAvailable?: boolean;
17590
17857
  }
17858
+ /** The fields a new row is written with. */
17859
+ type NewToldRow = Omit<ToldRow, "id" | "digestedAt" | "urgent" | "seenAt" | "seenVia" | "answeredAt" | "answeredVia" | "escalatedAt" | "escalationOf" | "state"> & {
17860
+ urgent?: boolean;
17861
+ escalationOf?: number | null;
17862
+ };
17591
17863
  declare class ToldLedger {
17592
17864
  private db;
17593
17865
  constructor(db: Database.Database);
17594
- add(row: Omit<ToldRow, "id" | "digestedAt">): number;
17866
+ add(row: NewToldRow): number;
17867
+ get(id: number): ToldRow | null;
17595
17868
  setOutcome(id: number, outcome: TellOutcome): void;
17596
17869
  /** The last time this item reached the owner, or was put in the digest
17597
17870
  * (unless `digest` is false: no digest will carry it), since `since`.
@@ -17605,6 +17878,9 @@ declare class ToldLedger {
17605
17878
  since(since: number, limit?: number): ToldRow[];
17606
17879
  /** How many of each outcome since `since`: the before/after figure. */
17607
17880
  counts(since: number): Record<TellOutcome, number>;
17881
+ /** Of the rows that went out since `since` (sent, or held and sent
17882
+ * later): how many are still only sent, seen, answered (#1138 step B). */
17883
+ states(since: number): Record<TellState, number>;
17608
17884
  /** Delete rows older than `before`. */
17609
17885
  prune(before: number): number;
17610
17886
  }
@@ -17642,6 +17918,7 @@ declare class OwnerGate {
17642
17918
  * newest rows. */
17643
17919
  report(since: number, limit?: number): {
17644
17920
  counts: Record<TellOutcome, number>;
17921
+ landed: Record<TellState, number>;
17645
17922
  waitingForDigest: number;
17646
17923
  items: ToldRow[];
17647
17924
  };
@@ -17808,6 +18085,21 @@ declare class MessageRouter {
17808
18085
  * reply to a turn the registry just ran (A2A callbacks, #277). */
17809
18086
  recordInSession?: boolean;
17810
18087
  }): Promise<string | void>;
18088
+ /** Channels switched off at runtime (POST /channels/<name>/switch),
18089
+ * with the reason. Until switched on or the daemon restarts. */
18090
+ private switchedOff;
18091
+ /** Switch a channel off (refused like a down one) or back on. */
18092
+ setChannelSwitch(name: string, on: boolean, reason?: string): void;
18093
+ /** Can a send to this channel go out now? */
18094
+ channelHealth(name: string): {
18095
+ up: boolean;
18096
+ reason?: string;
18097
+ };
18098
+ /** Every registered channel's health, by name. */
18099
+ channelsHealth(): Record<string, {
18100
+ up: boolean;
18101
+ reason?: string;
18102
+ }>;
17811
18103
  /** List registered channel names. */
17812
18104
  getChannelNames(): string[];
17813
18105
  startAll(): Promise<void>;
@@ -18320,6 +18612,8 @@ declare class WhatsAppAdapter implements ChannelAdapter {
18320
18612
  private onStatus?;
18321
18613
  /** Fires once when the adapter stops reconnecting, so the owner hears about a silent channel. */
18322
18614
  private onGiveUp?;
18615
+ /** The last connection update of the current socket. */
18616
+ private connection;
18323
18617
  constructor(config: {
18324
18618
  sessionDir: string;
18325
18619
  defaultAgent?: string;
@@ -18350,6 +18644,13 @@ declare class WhatsAppAdapter implements ChannelAdapter {
18350
18644
  stop(): Promise<void>;
18351
18645
  private clearStableTimer;
18352
18646
  private resetReconnect;
18647
+ /** Down without a socket, or once the connection closed and was not
18648
+ * reopened (#1138 step B). Connecting counts as up: a reconnect takes
18649
+ * seconds, and the watch only reports a channel down on two checks. */
18650
+ health(): {
18651
+ up: boolean;
18652
+ reason?: string;
18653
+ };
18353
18654
  send(msg: OutgoingMessage): Promise<string>;
18354
18655
  editMessage(chatId: string, messageId: string, text: string): Promise<boolean>;
18355
18656
  sendTyping(chatId: string): Promise<void>;