agentix-cli 0.143.0 → 0.144.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 (156) hide show
  1. package/dist/{App-UTDCBFZI.js → App-N2U77ED7.js} +2 -2
  2. package/dist/{ChatApp-7P22XAL2.js → ChatApp-GYVTECF6.js} +2 -2
  3. package/dist/{absorb-eval-EGO6JJOV.js → absorb-eval-WSAVWCZV.js} +2 -2
  4. package/dist/{agent-AI6LNZV2.js → agent-SLRGXBMK.js} +2 -2
  5. package/dist/{board-dashboard-ZKN5Y3GJ.js → board-dashboard-B3T7VCRQ.js} +4 -4
  6. package/dist/{chunk-SDSSRNSU.js → chunk-2GJFLPS7.js} +3 -3
  7. package/dist/{chunk-NYWIN4BW.js → chunk-3LAQ74H7.js} +2 -2
  8. package/dist/{chunk-THWDSPX4.js → chunk-45TKVOJX.js} +2 -2
  9. package/dist/{chunk-RB5W3FVO.js → chunk-4JHMV3D3.js} +2 -2
  10. package/dist/{chunk-QSKG754X.js → chunk-5TTHN7DP.js} +12 -8
  11. package/dist/chunk-5TTHN7DP.js.map +1 -0
  12. package/dist/{chunk-PYI7ZAU3.js → chunk-BAO77R4L.js} +2 -2
  13. package/dist/{chunk-YYPTXXCJ.js → chunk-CZWEXRIE.js} +2 -2
  14. package/dist/{chunk-OMO7UTWW.js → chunk-DFWPTNZ5.js} +2 -2
  15. package/dist/chunk-DG2DC43E.js +11 -0
  16. package/dist/chunk-DG2DC43E.js.map +1 -0
  17. package/dist/chunk-DPIQCHXB.js +62 -0
  18. package/dist/chunk-DPIQCHXB.js.map +1 -0
  19. package/dist/{chunk-3WBOWXAN.js → chunk-EX4AREN5.js} +2 -2
  20. package/dist/{chunk-MFUN3ZS3.js → chunk-GOAMSJ2D.js} +2 -2
  21. package/dist/{chunk-YVNGPYXN.js → chunk-GWBBWYGM.js} +58 -55
  22. package/dist/chunk-GWBBWYGM.js.map +1 -0
  23. package/dist/{chunk-WY5ZOEOE.js → chunk-JGX5IWNX.js} +2 -2
  24. package/dist/chunk-KV4ZA7FS.js +4 -0
  25. package/dist/chunk-KV4ZA7FS.js.map +1 -0
  26. package/dist/{chunk-YXFTUOZR.js → chunk-LLJZMS23.js} +2 -2
  27. package/dist/{chunk-L4RCA3OC.js → chunk-LVQHNTXV.js} +2 -2
  28. package/dist/{chunk-UNIXYV3U.js → chunk-M7527M7D.js} +2 -2
  29. package/dist/{chunk-IABJLTZN.js → chunk-MXWAREAQ.js} +2 -2
  30. package/dist/{chunk-GB4YT5IG.js → chunk-PJGLIAEP.js} +247 -240
  31. package/dist/chunk-PJGLIAEP.js.map +1 -0
  32. package/dist/{chunk-ERG5OUKH.js → chunk-Q73QQPDB.js} +2 -2
  33. package/dist/{chunk-O2CYERSX.js → chunk-QI4FYJGJ.js} +2 -2
  34. package/dist/{chunk-HPQ3AAG3.js → chunk-R5VGRKUW.js} +2 -2
  35. package/dist/{chunk-N2HLL25P.js → chunk-RGBQULXX.js} +2 -2
  36. package/dist/{chunk-6CTQPGBR.js → chunk-RV4WJZW5.js} +2 -2
  37. package/dist/{chunk-QVPBSV5Z.js → chunk-SFUNL7RV.js} +2 -2
  38. package/dist/{chunk-7H6HDN3K.js → chunk-SVNYI6GR.js} +2 -2
  39. package/dist/{chunk-DKLVB5L6.js → chunk-TTBCXVPJ.js} +6 -6
  40. package/dist/chunk-TTBCXVPJ.js.map +1 -0
  41. package/dist/{chunk-XWHD2Z3Z.js → chunk-UII54DAP.js} +2 -2
  42. package/dist/{chunk-5BXAKMYK.js → chunk-UNZRZOED.js} +2 -2
  43. package/dist/{chunk-Y4CYQV7G.js → chunk-VY7TBMJU.js} +2 -2
  44. package/dist/chunk-VY7TBMJU.js.map +1 -0
  45. package/dist/{chunk-AJUWIBLV.js → chunk-VYLMC5DO.js} +2 -2
  46. package/dist/{chunk-SHEUCITK.js → chunk-WBG6NA7R.js} +2 -2
  47. package/dist/{chunk-SHEUCITK.js.map → chunk-WBG6NA7R.js.map} +1 -1
  48. package/dist/cli.js +1 -1
  49. package/dist/{client-E66ELJK7.js → client-B7FXDTYK.js} +2 -2
  50. package/dist/config-MLP33NWR.js +2 -0
  51. package/dist/{config-mutate-QBDKJNHA.js → config-mutate-XQRUAVEH.js} +2 -2
  52. package/dist/config-mutator-5JFTMQ43.js +2 -0
  53. package/dist/{contributions-L5XZJ3DP.js → contributions-ESUSYUQG.js} +2 -2
  54. package/dist/{doctor-3ZUFSE6R.js → doctor-DIYZGSIS.js} +2 -2
  55. package/dist/{failure-candidates-XZSZP4HT.js → failure-candidates-NQX2JMMS.js} +2 -2
  56. package/dist/{follow-up-tool-6OCQUSC3.js → follow-up-tool-QXEYEWX7.js} +2 -2
  57. package/dist/{grants-CEUGZBQ4.js → grants-MM7U6GCK.js} +2 -2
  58. package/dist/{hub-MOQRSVCQ.js → hub-OC7PH2AR.js} +2 -2
  59. package/dist/index.d.ts +213 -76
  60. package/dist/index.js +1 -1
  61. package/dist/{program-AR6F763U.js → program-LZPM6I2Q.js} +289 -254
  62. package/dist/program-LZPM6I2Q.js.map +1 -0
  63. package/dist/{promote-ZGJEPCBE.js → promote-SIC6RWCX.js} +2 -2
  64. package/dist/{query-JLTHESIZ.js → query-OP2MSR2G.js} +2 -2
  65. package/dist/{query-settings-GMEL3EKR.js → query-settings-67332F5V.js} +2 -2
  66. package/dist/{registry-MFD3XJBR.js → registry-G2ZG5TIN.js} +2 -2
  67. package/dist/{request-planner-4ORFYSAT.js → request-planner-THTPE3FP.js} +2 -2
  68. package/dist/{review-candidates-77NDFTGM.js → review-candidates-7PS7CHXF.js} +2 -2
  69. package/dist/{routing-3FL3KYPJ.js → routing-PE7DB7WA.js} +2 -2
  70. package/dist/schedule-tool-3FXRKJGN.js +2 -0
  71. package/dist/{scheduler-QLL7ZHYW.js → scheduler-YTXCIQTZ.js} +2 -2
  72. package/dist/{seat-RBKONP63.js → seat-6DMK4274.js} +2 -2
  73. package/dist/{select-MOUDR6PQ.js → select-CLDYPAOS.js} +2 -2
  74. package/dist/{set-enabled-JKYF3QIA.js → set-enabled-ZH2DH4GU.js} +2 -2
  75. package/dist/tool-4AO3ZMAY.js +6 -0
  76. package/dist/tool-4AO3ZMAY.js.map +1 -0
  77. package/dist/{tool-Y3ZTSZGE.js → tool-MKDTKBJ4.js} +3 -3
  78. package/dist/{tool-Y3ZTSZGE.js.map → tool-MKDTKBJ4.js.map} +1 -1
  79. package/dist/traces-GVEQZX24.js +2 -0
  80. package/dist/{wiki-3FSSLQAE.js → wiki-CH2HYJVI.js} +2 -2
  81. package/dist/wiki-enrich-VEAYFVR2.js +2 -0
  82. package/dist/wiki-enrich-VEAYFVR2.js.map +1 -0
  83. package/dist/workflow-pilot-HCPSMGIC.js +2 -0
  84. package/dist/workflow-pilot-HCPSMGIC.js.map +1 -0
  85. package/package.json +1 -1
  86. package/dist/chunk-3W2BHUGM.js +0 -11
  87. package/dist/chunk-3W2BHUGM.js.map +0 -1
  88. package/dist/chunk-AKWBDCMU.js +0 -4
  89. package/dist/chunk-AKWBDCMU.js.map +0 -1
  90. package/dist/chunk-DKLVB5L6.js.map +0 -1
  91. package/dist/chunk-GB4YT5IG.js.map +0 -1
  92. package/dist/chunk-K22XMF6M.js +0 -62
  93. package/dist/chunk-K22XMF6M.js.map +0 -1
  94. package/dist/chunk-QSKG754X.js.map +0 -1
  95. package/dist/chunk-Y4CYQV7G.js.map +0 -1
  96. package/dist/chunk-YVNGPYXN.js.map +0 -1
  97. package/dist/config-3C3Z7VKG.js +0 -2
  98. package/dist/config-mutator-ZI3SQIUN.js +0 -2
  99. package/dist/program-AR6F763U.js.map +0 -1
  100. package/dist/schedule-tool-5KJMXBRZ.js +0 -2
  101. package/dist/tool-C4JNMTEF.js +0 -6
  102. package/dist/tool-C4JNMTEF.js.map +0 -1
  103. package/dist/wiki-enrich-HQWXZRID.js +0 -2
  104. /package/dist/{App-UTDCBFZI.js.map → App-N2U77ED7.js.map} +0 -0
  105. /package/dist/{ChatApp-7P22XAL2.js.map → ChatApp-GYVTECF6.js.map} +0 -0
  106. /package/dist/{absorb-eval-EGO6JJOV.js.map → absorb-eval-WSAVWCZV.js.map} +0 -0
  107. /package/dist/{agent-AI6LNZV2.js.map → agent-SLRGXBMK.js.map} +0 -0
  108. /package/dist/{board-dashboard-ZKN5Y3GJ.js.map → board-dashboard-B3T7VCRQ.js.map} +0 -0
  109. /package/dist/{chunk-SDSSRNSU.js.map → chunk-2GJFLPS7.js.map} +0 -0
  110. /package/dist/{chunk-NYWIN4BW.js.map → chunk-3LAQ74H7.js.map} +0 -0
  111. /package/dist/{chunk-THWDSPX4.js.map → chunk-45TKVOJX.js.map} +0 -0
  112. /package/dist/{chunk-RB5W3FVO.js.map → chunk-4JHMV3D3.js.map} +0 -0
  113. /package/dist/{chunk-PYI7ZAU3.js.map → chunk-BAO77R4L.js.map} +0 -0
  114. /package/dist/{chunk-YYPTXXCJ.js.map → chunk-CZWEXRIE.js.map} +0 -0
  115. /package/dist/{chunk-OMO7UTWW.js.map → chunk-DFWPTNZ5.js.map} +0 -0
  116. /package/dist/{chunk-3WBOWXAN.js.map → chunk-EX4AREN5.js.map} +0 -0
  117. /package/dist/{chunk-MFUN3ZS3.js.map → chunk-GOAMSJ2D.js.map} +0 -0
  118. /package/dist/{chunk-WY5ZOEOE.js.map → chunk-JGX5IWNX.js.map} +0 -0
  119. /package/dist/{chunk-YXFTUOZR.js.map → chunk-LLJZMS23.js.map} +0 -0
  120. /package/dist/{chunk-L4RCA3OC.js.map → chunk-LVQHNTXV.js.map} +0 -0
  121. /package/dist/{chunk-UNIXYV3U.js.map → chunk-M7527M7D.js.map} +0 -0
  122. /package/dist/{chunk-IABJLTZN.js.map → chunk-MXWAREAQ.js.map} +0 -0
  123. /package/dist/{chunk-ERG5OUKH.js.map → chunk-Q73QQPDB.js.map} +0 -0
  124. /package/dist/{chunk-O2CYERSX.js.map → chunk-QI4FYJGJ.js.map} +0 -0
  125. /package/dist/{chunk-HPQ3AAG3.js.map → chunk-R5VGRKUW.js.map} +0 -0
  126. /package/dist/{chunk-N2HLL25P.js.map → chunk-RGBQULXX.js.map} +0 -0
  127. /package/dist/{chunk-6CTQPGBR.js.map → chunk-RV4WJZW5.js.map} +0 -0
  128. /package/dist/{chunk-QVPBSV5Z.js.map → chunk-SFUNL7RV.js.map} +0 -0
  129. /package/dist/{chunk-7H6HDN3K.js.map → chunk-SVNYI6GR.js.map} +0 -0
  130. /package/dist/{chunk-XWHD2Z3Z.js.map → chunk-UII54DAP.js.map} +0 -0
  131. /package/dist/{chunk-5BXAKMYK.js.map → chunk-UNZRZOED.js.map} +0 -0
  132. /package/dist/{chunk-AJUWIBLV.js.map → chunk-VYLMC5DO.js.map} +0 -0
  133. /package/dist/{client-E66ELJK7.js.map → client-B7FXDTYK.js.map} +0 -0
  134. /package/dist/{config-3C3Z7VKG.js.map → config-MLP33NWR.js.map} +0 -0
  135. /package/dist/{config-mutate-QBDKJNHA.js.map → config-mutate-XQRUAVEH.js.map} +0 -0
  136. /package/dist/{config-mutator-ZI3SQIUN.js.map → config-mutator-5JFTMQ43.js.map} +0 -0
  137. /package/dist/{contributions-L5XZJ3DP.js.map → contributions-ESUSYUQG.js.map} +0 -0
  138. /package/dist/{doctor-3ZUFSE6R.js.map → doctor-DIYZGSIS.js.map} +0 -0
  139. /package/dist/{failure-candidates-XZSZP4HT.js.map → failure-candidates-NQX2JMMS.js.map} +0 -0
  140. /package/dist/{follow-up-tool-6OCQUSC3.js.map → follow-up-tool-QXEYEWX7.js.map} +0 -0
  141. /package/dist/{grants-CEUGZBQ4.js.map → grants-MM7U6GCK.js.map} +0 -0
  142. /package/dist/{hub-MOQRSVCQ.js.map → hub-OC7PH2AR.js.map} +0 -0
  143. /package/dist/{promote-ZGJEPCBE.js.map → promote-SIC6RWCX.js.map} +0 -0
  144. /package/dist/{query-JLTHESIZ.js.map → query-OP2MSR2G.js.map} +0 -0
  145. /package/dist/{query-settings-GMEL3EKR.js.map → query-settings-67332F5V.js.map} +0 -0
  146. /package/dist/{registry-MFD3XJBR.js.map → registry-G2ZG5TIN.js.map} +0 -0
  147. /package/dist/{request-planner-4ORFYSAT.js.map → request-planner-THTPE3FP.js.map} +0 -0
  148. /package/dist/{review-candidates-77NDFTGM.js.map → review-candidates-7PS7CHXF.js.map} +0 -0
  149. /package/dist/{routing-3FL3KYPJ.js.map → routing-PE7DB7WA.js.map} +0 -0
  150. /package/dist/{schedule-tool-5KJMXBRZ.js.map → schedule-tool-3FXRKJGN.js.map} +0 -0
  151. /package/dist/{scheduler-QLL7ZHYW.js.map → scheduler-YTXCIQTZ.js.map} +0 -0
  152. /package/dist/{seat-RBKONP63.js.map → seat-6DMK4274.js.map} +0 -0
  153. /package/dist/{select-MOUDR6PQ.js.map → select-CLDYPAOS.js.map} +0 -0
  154. /package/dist/{set-enabled-JKYF3QIA.js.map → set-enabled-ZH2DH4GU.js.map} +0 -0
  155. /package/dist/{wiki-3FSSLQAE.js.map → traces-GVEQZX24.js.map} +0 -0
  156. /package/dist/{wiki-enrich-HQWXZRID.js.map → wiki-CH2HYJVI.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -5433,9 +5433,9 @@ declare const daemonConfigSchema: z.ZodObject<{
5433
5433
  style: "card" | "dialog";
5434
5434
  sound: string;
5435
5435
  volume: number;
5436
+ timeoutSeconds: number;
5436
5437
  theme: "system" | "light" | "dark";
5437
5438
  speak: boolean;
5438
- timeoutSeconds: number;
5439
5439
  voice?: string | undefined;
5440
5440
  }, {
5441
5441
  enabled?: boolean | undefined;
@@ -5443,9 +5443,9 @@ declare const daemonConfigSchema: z.ZodObject<{
5443
5443
  sound?: string | undefined;
5444
5444
  voice?: string | undefined;
5445
5445
  volume?: number | undefined;
5446
+ timeoutSeconds?: number | undefined;
5446
5447
  theme?: "system" | "light" | "dark" | undefined;
5447
5448
  speak?: boolean | undefined;
5448
- timeoutSeconds?: number | undefined;
5449
5449
  }>>;
5450
5450
  /** Check-ins (src/approvals/checkin.ts): a few times a day, waiting cards
5451
5451
  * come back to the Mac card and the operator's open Apple Reminders get
@@ -5510,9 +5510,9 @@ declare const daemonConfigSchema: z.ZodObject<{
5510
5510
  style: "card" | "dialog";
5511
5511
  sound: string;
5512
5512
  volume: number;
5513
+ timeoutSeconds: number;
5513
5514
  theme: "system" | "light" | "dark";
5514
5515
  speak: boolean;
5515
- timeoutSeconds: number;
5516
5516
  voice?: string | undefined;
5517
5517
  };
5518
5518
  checkin: {
@@ -5549,9 +5549,9 @@ declare const daemonConfigSchema: z.ZodObject<{
5549
5549
  sound?: string | undefined;
5550
5550
  voice?: string | undefined;
5551
5551
  volume?: number | undefined;
5552
+ timeoutSeconds?: number | undefined;
5552
5553
  theme?: "system" | "light" | "dark" | undefined;
5553
5554
  speak?: boolean | undefined;
5554
- timeoutSeconds?: number | undefined;
5555
5555
  } | undefined;
5556
5556
  checkin?: {
5557
5557
  enabled?: boolean | undefined;
@@ -6249,6 +6249,105 @@ declare const daemonConfigSchema: z.ZodObject<{
6249
6249
  }, {
6250
6250
  channels?: string[] | undefined;
6251
6251
  }>>;
6252
+ /** Weekly quality report posted on the epic issue (src/quality, #994).
6253
+ * Off by default. */
6254
+ qualityReport: z.ZodEffects<z.ZodDefault<z.ZodObject<{
6255
+ /** Post the report every week. Off by default. */
6256
+ enabled: z.ZodDefault<z.ZodBoolean>;
6257
+ /** Where it goes: "owner/name" and the epic issue number. */
6258
+ repo: z.ZodOptional<z.ZodString>;
6259
+ issue: z.ZodOptional<z.ZodNumber>;
6260
+ /** Monday, local time, 24-hour HH:MM. */
6261
+ time: z.ZodDefault<z.ZodString>;
6262
+ /** IANA timezone for `time`. Unset: this machine's. */
6263
+ timezone: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
6264
+ /** The command whose output is posted, as a code block. AgentX adds
6265
+ * `--repo <repo>` (unless the command names one), `--since <Monday>
6266
+ * --until <Sunday>` for the week and `--compare <baseline>`. It must print no cost amounts and no names. */
6267
+ command: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
6268
+ /** The baseline saved with `agentx quality report --save-baseline`:
6269
+ * each week is compared with it, and the verdict quotes its fix share. */
6270
+ baseline: z.ZodDefault<z.ZodString>;
6271
+ timeoutSeconds: z.ZodDefault<z.ZodNumber>;
6272
+ /** The gates and the dates they were turned on (and off), so each week's
6273
+ * comment says which gates were on. */
6274
+ gates: z.ZodDefault<z.ZodArray<z.ZodObject<{
6275
+ id: z.ZodString;
6276
+ label: z.ZodOptional<z.ZodString>;
6277
+ since: z.ZodString;
6278
+ until: z.ZodOptional<z.ZodString>;
6279
+ }, "strip", z.ZodTypeAny, {
6280
+ id: string;
6281
+ since: string;
6282
+ label?: string | undefined;
6283
+ until?: string | undefined;
6284
+ }, {
6285
+ id: string;
6286
+ since: string;
6287
+ label?: string | undefined;
6288
+ until?: string | undefined;
6289
+ }>, "many">>;
6290
+ }, "strip", z.ZodTypeAny, {
6291
+ enabled: boolean;
6292
+ command: string[];
6293
+ time: string;
6294
+ baseline: string;
6295
+ timeoutSeconds: number;
6296
+ gates: {
6297
+ id: string;
6298
+ since: string;
6299
+ label?: string | undefined;
6300
+ until?: string | undefined;
6301
+ }[];
6302
+ repo?: string | undefined;
6303
+ timezone?: string | undefined;
6304
+ issue?: number | undefined;
6305
+ }, {
6306
+ enabled?: boolean | undefined;
6307
+ command?: string[] | undefined;
6308
+ repo?: string | undefined;
6309
+ timezone?: string | undefined;
6310
+ time?: string | undefined;
6311
+ issue?: number | undefined;
6312
+ baseline?: string | undefined;
6313
+ timeoutSeconds?: number | undefined;
6314
+ gates?: {
6315
+ id: string;
6316
+ since: string;
6317
+ label?: string | undefined;
6318
+ until?: string | undefined;
6319
+ }[] | undefined;
6320
+ }>>, {
6321
+ enabled: boolean;
6322
+ command: string[];
6323
+ time: string;
6324
+ baseline: string;
6325
+ timeoutSeconds: number;
6326
+ gates: {
6327
+ id: string;
6328
+ since: string;
6329
+ label?: string | undefined;
6330
+ until?: string | undefined;
6331
+ }[];
6332
+ repo?: string | undefined;
6333
+ timezone?: string | undefined;
6334
+ issue?: number | undefined;
6335
+ }, {
6336
+ enabled?: boolean | undefined;
6337
+ command?: string[] | undefined;
6338
+ repo?: string | undefined;
6339
+ timezone?: string | undefined;
6340
+ time?: string | undefined;
6341
+ issue?: number | undefined;
6342
+ baseline?: string | undefined;
6343
+ timeoutSeconds?: number | undefined;
6344
+ gates?: {
6345
+ id: string;
6346
+ since: string;
6347
+ label?: string | undefined;
6348
+ until?: string | undefined;
6349
+ }[] | undefined;
6350
+ } | undefined>;
6252
6351
  /** Hand due Apple Reminders back to the agent that created them
6253
6352
  * (src/reminders). macOS only; reads reminders whose notes end with the
6254
6353
  * mac-pim skill's `agentx: agent=<id>` trailer. */
@@ -9035,6 +9134,41 @@ declare const daemonConfigSchema: z.ZodObject<{
9035
9134
  region: string;
9036
9135
  };
9037
9136
  };
9137
+ quality: {
9138
+ specTests: {
9139
+ enabled: boolean;
9140
+ agent: string;
9141
+ paths: string[];
9142
+ maxMinutes: number;
9143
+ maxCostPerIssue: number;
9144
+ model?: string | undefined;
9145
+ };
9146
+ canary: {
9147
+ enabled: boolean;
9148
+ soakMinutes: number;
9149
+ thresholds: {
9150
+ maxRestarts: number;
9151
+ maxCrashes: number;
9152
+ maxFailedTasks: number;
9153
+ maxErrorRateIncrease: number;
9154
+ minTasksForRate: number;
9155
+ };
9156
+ };
9157
+ reviewGate: {
9158
+ enabled: boolean;
9159
+ mode: "required" | "advisory";
9160
+ reviewer: {
9161
+ model?: string | undefined;
9162
+ agent?: string | undefined;
9163
+ };
9164
+ paths: string[];
9165
+ maxCostPerReview: number;
9166
+ maxMinutes: number;
9167
+ maxReviewsPerPrPerDay: number;
9168
+ ciWaitMinutes: number;
9169
+ maxDiffKb: number;
9170
+ };
9171
+ };
9038
9172
  providers: Record<string, {
9039
9173
  apiKey?: string | undefined;
9040
9174
  thinking?: boolean | undefined;
@@ -9147,9 +9281,9 @@ declare const daemonConfigSchema: z.ZodObject<{
9147
9281
  style: "card" | "dialog";
9148
9282
  sound: string;
9149
9283
  volume: number;
9284
+ timeoutSeconds: number;
9150
9285
  theme: "system" | "light" | "dark";
9151
9286
  speak: boolean;
9152
- timeoutSeconds: number;
9153
9287
  voice?: string | undefined;
9154
9288
  };
9155
9289
  checkin: {
@@ -9165,41 +9299,6 @@ declare const daemonConfigSchema: z.ZodObject<{
9165
9299
  };
9166
9300
  forwardTo?: string | undefined;
9167
9301
  };
9168
- quality: {
9169
- specTests: {
9170
- enabled: boolean;
9171
- agent: string;
9172
- paths: string[];
9173
- maxMinutes: number;
9174
- maxCostPerIssue: number;
9175
- model?: string | undefined;
9176
- };
9177
- canary: {
9178
- enabled: boolean;
9179
- soakMinutes: number;
9180
- thresholds: {
9181
- maxRestarts: number;
9182
- maxCrashes: number;
9183
- maxFailedTasks: number;
9184
- maxErrorRateIncrease: number;
9185
- minTasksForRate: number;
9186
- };
9187
- };
9188
- reviewGate: {
9189
- enabled: boolean;
9190
- mode: "required" | "advisory";
9191
- reviewer: {
9192
- model?: string | undefined;
9193
- agent?: string | undefined;
9194
- };
9195
- paths: string[];
9196
- maxCostPerReview: number;
9197
- maxMinutes: number;
9198
- maxReviewsPerPrPerDay: number;
9199
- ciWaitMinutes: number;
9200
- maxDiffKb: number;
9201
- };
9202
- };
9203
9302
  shutdown: {
9204
9303
  restart: {
9205
9304
  windowWaitMinutes: number;
@@ -9248,6 +9347,22 @@ declare const daemonConfigSchema: z.ZodObject<{
9248
9347
  requestStatus: {
9249
9348
  channels: string[];
9250
9349
  };
9350
+ qualityReport: {
9351
+ enabled: boolean;
9352
+ command: string[];
9353
+ time: string;
9354
+ baseline: string;
9355
+ timeoutSeconds: number;
9356
+ gates: {
9357
+ id: string;
9358
+ since: string;
9359
+ label?: string | undefined;
9360
+ until?: string | undefined;
9361
+ }[];
9362
+ repo?: string | undefined;
9363
+ timezone?: string | undefined;
9364
+ issue?: number | undefined;
9365
+ };
9251
9366
  reminders: {
9252
9367
  enabled: boolean;
9253
9368
  command: string;
@@ -10137,6 +10252,41 @@ declare const daemonConfigSchema: z.ZodObject<{
10137
10252
  region?: string | undefined;
10138
10253
  } | undefined;
10139
10254
  } | undefined;
10255
+ quality?: {
10256
+ specTests?: {
10257
+ model?: string | undefined;
10258
+ enabled?: boolean | undefined;
10259
+ agent?: string | undefined;
10260
+ paths?: string[] | undefined;
10261
+ maxMinutes?: number | undefined;
10262
+ maxCostPerIssue?: number | undefined;
10263
+ } | undefined;
10264
+ canary?: {
10265
+ enabled?: boolean | undefined;
10266
+ soakMinutes?: number | undefined;
10267
+ thresholds?: {
10268
+ maxRestarts?: number | undefined;
10269
+ maxCrashes?: number | undefined;
10270
+ maxFailedTasks?: number | undefined;
10271
+ maxErrorRateIncrease?: number | undefined;
10272
+ minTasksForRate?: number | undefined;
10273
+ } | undefined;
10274
+ } | undefined;
10275
+ reviewGate?: {
10276
+ enabled?: boolean | undefined;
10277
+ mode?: "required" | "advisory" | undefined;
10278
+ reviewer?: {
10279
+ model?: string | undefined;
10280
+ agent?: string | undefined;
10281
+ } | undefined;
10282
+ paths?: string[] | undefined;
10283
+ maxCostPerReview?: number | undefined;
10284
+ maxMinutes?: number | undefined;
10285
+ maxReviewsPerPrPerDay?: number | undefined;
10286
+ ciWaitMinutes?: number | undefined;
10287
+ maxDiffKb?: number | undefined;
10288
+ } | undefined;
10289
+ } | undefined;
10140
10290
  providers?: Record<string, {
10141
10291
  apiKey?: string | undefined;
10142
10292
  thinking?: boolean | undefined;
@@ -10251,9 +10401,9 @@ declare const daemonConfigSchema: z.ZodObject<{
10251
10401
  sound?: string | undefined;
10252
10402
  voice?: string | undefined;
10253
10403
  volume?: number | undefined;
10404
+ timeoutSeconds?: number | undefined;
10254
10405
  theme?: "system" | "light" | "dark" | undefined;
10255
10406
  speak?: boolean | undefined;
10256
- timeoutSeconds?: number | undefined;
10257
10407
  } | undefined;
10258
10408
  checkin?: {
10259
10409
  enabled?: boolean | undefined;
@@ -10267,41 +10417,6 @@ declare const daemonConfigSchema: z.ZodObject<{
10267
10417
  composeTimeoutSeconds?: number | undefined;
10268
10418
  } | undefined;
10269
10419
  } | undefined;
10270
- quality?: {
10271
- specTests?: {
10272
- model?: string | undefined;
10273
- enabled?: boolean | undefined;
10274
- agent?: string | undefined;
10275
- paths?: string[] | undefined;
10276
- maxMinutes?: number | undefined;
10277
- maxCostPerIssue?: number | undefined;
10278
- } | undefined;
10279
- canary?: {
10280
- enabled?: boolean | undefined;
10281
- soakMinutes?: number | undefined;
10282
- thresholds?: {
10283
- maxRestarts?: number | undefined;
10284
- maxCrashes?: number | undefined;
10285
- maxFailedTasks?: number | undefined;
10286
- maxErrorRateIncrease?: number | undefined;
10287
- minTasksForRate?: number | undefined;
10288
- } | undefined;
10289
- } | undefined;
10290
- reviewGate?: {
10291
- enabled?: boolean | undefined;
10292
- mode?: "required" | "advisory" | undefined;
10293
- reviewer?: {
10294
- model?: string | undefined;
10295
- agent?: string | undefined;
10296
- } | undefined;
10297
- paths?: string[] | undefined;
10298
- maxCostPerReview?: number | undefined;
10299
- maxMinutes?: number | undefined;
10300
- maxReviewsPerPrPerDay?: number | undefined;
10301
- ciWaitMinutes?: number | undefined;
10302
- maxDiffKb?: number | undefined;
10303
- } | undefined;
10304
- } | undefined;
10305
10420
  shutdown?: {
10306
10421
  restart?: {
10307
10422
  allowBy?: string | undefined;
@@ -10350,6 +10465,22 @@ declare const daemonConfigSchema: z.ZodObject<{
10350
10465
  requestStatus?: {
10351
10466
  channels?: string[] | undefined;
10352
10467
  } | undefined;
10468
+ qualityReport?: {
10469
+ enabled?: boolean | undefined;
10470
+ command?: string[] | undefined;
10471
+ repo?: string | undefined;
10472
+ timezone?: string | undefined;
10473
+ time?: string | undefined;
10474
+ issue?: number | undefined;
10475
+ baseline?: string | undefined;
10476
+ timeoutSeconds?: number | undefined;
10477
+ gates?: {
10478
+ id: string;
10479
+ since: string;
10480
+ label?: string | undefined;
10481
+ until?: string | undefined;
10482
+ }[] | undefined;
10483
+ } | undefined;
10353
10484
  reminders?: {
10354
10485
  enabled?: boolean | undefined;
10355
10486
  command?: string | undefined;
@@ -11411,6 +11542,12 @@ declare class AgentXDaemon {
11411
11542
  private status;
11412
11543
  /** Send a status-comment edit to the peer that holds the agent's token. */
11413
11544
  private forwardCommentEdit;
11545
+ private qualityTimer?;
11546
+ private qualityPosting;
11547
+ /** Every minute: post the weekly quality report on the epic issue once
11548
+ * it is due (src/quality/epic-report.ts, #994). Failures are logged
11549
+ * and retried hourly; the settings are read on each tick. */
11550
+ private startQualityReport;
11414
11551
  private approvalsTimer?;
11415
11552
  /** On a push relay: sends the phone roster to the host (#711). */
11416
11553
  private pushRosterTimer?;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt,la as Tt,ma as Mt}from"./chunk-GB4YT5IG.js";import"./chunk-YVNGPYXN.js";import"./chunk-GTJIKXDB.js";import"./chunk-MFUN3ZS3.js";import"./chunk-S2GAEH2F.js";import"./chunk-7LN4VKDU.js";import"./chunk-IMLAPB7G.js";import"./chunk-ZVP6GB4G.js";import"./chunk-MRIVENBY.js";import"./chunk-UNIXYV3U.js";import"./chunk-AKWBDCMU.js";import"./chunk-PPUN7YHA.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-N2HLL25P.js";import"./chunk-EMGB23H5.js";import"./chunk-JAML6222.js";import"./chunk-YMX3QCV7.js";import"./chunk-JWDJMFU6.js";import"./chunk-5HLD66CW.js";import"./chunk-IS2IWRP7.js";import"./chunk-LQE73AZR.js";import"./chunk-2D3RYIDU.js";import"./chunk-Y4CYQV7G.js";import"./chunk-3W2BHUGM.js";import"./chunk-SHEUCITK.js";import"./chunk-A5GYG56I.js";import"./chunk-2AXFYDWF.js";import"./chunk-AQASR6KR.js";import{m as lt,n as ct,na as yt,o as dt,p as mt,q as pt}from"./chunk-DKLVB5L6.js";import"./chunk-THWDSPX4.js";import"./chunk-QSKG754X.js";import"./chunk-MEFPXHQJ.js";import{a as L}from"./chunk-UG2OF2EI.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-O2CYERSX.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-6TTGRTDO.js";import"./chunk-WY5ZOEOE.js";import"./chunk-SZDACK6O.js";import"./chunk-VE3SSOQX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import{s as ut}from"./chunk-NYWIN4BW.js";import"./chunk-QVPBSV5Z.js";import"./chunk-3UOTLMXD.js";import"./chunk-36AXN6ZB.js";import"./chunk-PE5V2LI7.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-VWTBHLMX.js";import"./chunk-ERG5OUKH.js";import{a as ht}from"./chunk-6CTQPGBR.js";import"./chunk-OWNQ2FD4.js";import"./chunk-KEXBEUSU.js";import"./chunk-ROLSSYXE.js";import"./chunk-SDSSRNSU.js";import"./chunk-SKSYII3K.js";import{f as gt,g as ft}from"./chunk-XWHD2Z3Z.js";import"./chunk-WPNRDEHW.js";import"./chunk-MWNCS57L.js";import"./chunk-4LWFJ4MZ.js";import"./chunk-BIJHMWXK.js";import"./chunk-RB5W3FVO.js";import{j as it,k as rt,l as at}from"./chunk-HPQ3AAG3.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-MCI3DIWW.js";import"./chunk-MYVHVJWZ.js";import"./chunk-6TURWSMN.js";import"./chunk-AV7T3SYT.js";import"./chunk-Y5MFVVTM.js";import"./chunk-QD6IICK7.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-2PJKGZWP.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{Ha as tt,Ja as st,Ka as ot,Ra as nt}from"./chunk-K22XMF6M.js";import"./chunk-BRK6M6LA.js";import"./chunk-UIBUZ2N3.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
1
+ import{Aa as Tt,Ba as Mt,a as St,b as kt,c as vt,d as xt,e as $t,f as Ct,g as Pt,h as bt}from"./chunk-PJGLIAEP.js";import"./chunk-GWBBWYGM.js";import"./chunk-GTJIKXDB.js";import"./chunk-GOAMSJ2D.js";import"./chunk-S2GAEH2F.js";import"./chunk-7LN4VKDU.js";import"./chunk-IMLAPB7G.js";import"./chunk-ZVP6GB4G.js";import"./chunk-2D3RYIDU.js";import"./chunk-MRIVENBY.js";import"./chunk-M7527M7D.js";import"./chunk-KV4ZA7FS.js";import"./chunk-PPUN7YHA.js";import"./chunk-VZLIBDLH.js";import"./chunk-EKJG63EJ.js";import"./chunk-RGBQULXX.js";import"./chunk-AQASR6KR.js";import"./chunk-EMGB23H5.js";import"./chunk-JAML6222.js";import"./chunk-YMX3QCV7.js";import"./chunk-JWDJMFU6.js";import"./chunk-5HLD66CW.js";import"./chunk-IS2IWRP7.js";import"./chunk-LQE73AZR.js";import"./chunk-VY7TBMJU.js";import"./chunk-DG2DC43E.js";import"./chunk-WBG6NA7R.js";import"./chunk-JGX5IWNX.js";import"./chunk-A5GYG56I.js";import"./chunk-2AXFYDWF.js";import{m as lt,n as ct,na as yt,o as dt,p as mt,q as pt}from"./chunk-TTBCXVPJ.js";import"./chunk-45TKVOJX.js";import"./chunk-MEFPXHQJ.js";import{a as L}from"./chunk-UG2OF2EI.js";import{A as D,B as z,C as V,a as ye,b as we,c as Se,d as Ae,e as Ie,f as Oe,g as Ne,h as He,i as je,j as Ue,k as _e,l as I,m as q,n as Be,o as qe,p as Ye,q as O,r as ze,s as Ve,t as Xe,u as x,v as Y,w as Qe,x as Ze,y as et,z as wt}from"./chunk-QI4FYJGJ.js";import{a as B,b as M,c as F}from"./chunk-SFQUP3BP.js";import"./chunk-6TTGRTDO.js";import"./chunk-SZDACK6O.js";import"./chunk-VE3SSOQX.js";import"./chunk-W4YR2RO2.js";import"./chunk-AFRHKA7B.js";import"./chunk-5TTHN7DP.js";import{s as ut}from"./chunk-3LAQ74H7.js";import"./chunk-SFUNL7RV.js";import"./chunk-3UOTLMXD.js";import"./chunk-36AXN6ZB.js";import"./chunk-PE5V2LI7.js";import"./chunk-GQ76J72O.js";import"./chunk-ILEC3IAV.js";import"./chunk-J3SOEFRE.js";import"./chunk-SIU6STB2.js";import"./chunk-X5C5W3E4.js";import"./chunk-GV7S5BAX.js";import"./chunk-GSX4NK2N.js";import"./chunk-VWTBHLMX.js";import"./chunk-Q73QQPDB.js";import{a as ht}from"./chunk-RV4WJZW5.js";import"./chunk-OWNQ2FD4.js";import"./chunk-KEXBEUSU.js";import"./chunk-ROLSSYXE.js";import"./chunk-2GJFLPS7.js";import"./chunk-SKSYII3K.js";import{f as gt,g as ft}from"./chunk-UII54DAP.js";import"./chunk-WPNRDEHW.js";import"./chunk-MWNCS57L.js";import"./chunk-4LWFJ4MZ.js";import"./chunk-BIJHMWXK.js";import"./chunk-4JHMV3D3.js";import{j as it,k as rt,l as at}from"./chunk-R5VGRKUW.js";import"./chunk-72SZI2UW.js";import"./chunk-FCPTN6NF.js";import"./chunk-MCI3DIWW.js";import"./chunk-MYVHVJWZ.js";import"./chunk-6TURWSMN.js";import"./chunk-AV7T3SYT.js";import"./chunk-Y5MFVVTM.js";import"./chunk-QD6IICK7.js";import"./chunk-QOYAX2FT.js";import{a as ke,b as ve,c as xe,d as $e,e as Ce,f as Pe,g as be,h as Te,i as Me,j as Re,l as Ee,m as Ge,o as T,p as W}from"./chunk-2PJKGZWP.js";import{a as m,b as G}from"./chunk-7I7IEX4S.js";import{b as Fe,c as Le,d as A,e as De}from"./chunk-JHCI6XCJ.js";import{a as Ke,b as Je,e as We}from"./chunk-DSYKYZMT.js";import{Ia as tt,Ka as st,La as ot,Sa as nt}from"./chunk-DPIQCHXB.js";import"./chunk-BRK6M6LA.js";import"./chunk-UIBUZ2N3.js";import"./chunk-2QNT5JDS.js";import"./chunk-RGDKHYY2.js";import"./chunk-QIJLFPWE.js";W();G();import{execa as Rt}from"execa";import{existsSync as se,promises as X}from"fs";import S from"path";import ie from"node-fetch";async function Et(o,e){let t=o.split("/");if(t.length<2)throw new Error(`Invalid skill package ID: ${o}. Expected format: owner/repo`);let s=t[0],i=t[1],n=t[2];try{let a=n?`${s}/${i}/${n}`:`${s}/${i}`;await Rt("npx",["-y","skills","add",a],{cwd:e,stdio:"pipe"}),m.success(`Installed skill package: ${o}`);let r=S.resolve(e,".skills",`${s}_${i}`);if(se(r))return await ne(r,o);let d=S.resolve(e,".skills");return se(d)?await ne(d,o):[]}catch{return m.info(`Fetching skills directly from GitHub: ${s}/${i}`),await Gt(s,i,n,e)}}async function Gt(o,e,t,s){let i=[];try{let n=`https://api.github.com/repos/${o}/${e}/git/trees/main?recursive=1`,a=await ie(n);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let d=(await a.json()).tree.filter(p=>p.type==="blob"&&p.path.endsWith("SKILL.md"));if(t){let p=d.find(f=>f.path.includes(`/${t}/`)||f.path===`${t}/SKILL.md`);if(p){let f=await oe(o,e,p.path,s);f&&i.push(f)}}else for(let p of d){let f=await oe(o,e,p.path,s);f&&i.push(f)}}catch(n){m.error(`Failed to fetch skills from GitHub: ${n.message}`)}return i}async function oe(o,e,t,s){try{let i=`https://raw.githubusercontent.com/${o}/${e}/main/${t}`,n=await ie(i);if(!n.ok)return null;let a=await n.text(),r=A(a);if(r){r.source="remote",r.packageId=`${o}/${e}`;let d=S.dirname(t),p=S.resolve(s,".skills",`${o}_${e}`,d);await X.mkdir(p,{recursive:!0}),await X.writeFile(S.resolve(p,"SKILL.md"),a),r.path=S.resolve(p,"SKILL.md")}return r}catch{return null}}async function ne(o,e){let t=[],{default:s}=await import("fast-glob"),i=await s.glob("**/SKILL.md",{cwd:o,deep:5});for(let n of i)try{let a=S.resolve(o,n),r=await X.readFile(a,"utf8"),d=A(r);d&&(d.source="remote",d.path=a,d.packageId=e,t.push(d))}catch{}return t}async function At(o,e,t,s,i){let n=["---",`name: ${o}`,`description: ${e}`];if(s?.length){n.push("tags:");for(let a of s)n.push(` - ${a}`)}if(i?.length){n.push("globs:");for(let a of i)n.push(` - ${a}`)}return n.push("---"),`${n.join(`
2
2
  `)}
3
3
 
4
4
  ${t}`}async function It(o){let{loadLocalSkills:e}=await import("./loader-YFVSSYSL.js");return e(o)}async function Ot(o,e,t,s,i){let a=[{role:"system",content:`You are a skill author for the Agent Skills ecosystem (skills.sh).