agent-merge-broker 0.3.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 (75) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +352 -0
  3. package/dist/broker.d.ts +110 -0
  4. package/dist/broker.d.ts.map +1 -0
  5. package/dist/broker.js +1023 -0
  6. package/dist/broker.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +558 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/config.d.ts +19 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +312 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/errors.d.ts +16 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +36 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/git.d.ts +46 -0
  20. package/dist/git.d.ts.map +1 -0
  21. package/dist/git.js +195 -0
  22. package/dist/git.js.map +1 -0
  23. package/dist/hooks.d.ts +22 -0
  24. package/dist/hooks.d.ts.map +1 -0
  25. package/dist/hooks.js +110 -0
  26. package/dist/hooks.js.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +10 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/patterns.d.ts +9 -0
  32. package/dist/patterns.d.ts.map +1 -0
  33. package/dist/patterns.js +66 -0
  34. package/dist/patterns.js.map +1 -0
  35. package/dist/process.d.ts +30 -0
  36. package/dist/process.d.ts.map +1 -0
  37. package/dist/process.js +91 -0
  38. package/dist/process.js.map +1 -0
  39. package/dist/provenance.d.ts +10 -0
  40. package/dist/provenance.d.ts.map +1 -0
  41. package/dist/provenance.js +36 -0
  42. package/dist/provenance.js.map +1 -0
  43. package/dist/publisher.d.ts +37 -0
  44. package/dist/publisher.d.ts.map +1 -0
  45. package/dist/publisher.js +144 -0
  46. package/dist/publisher.js.map +1 -0
  47. package/dist/scheduler.d.ts +6 -0
  48. package/dist/scheduler.d.ts.map +1 -0
  49. package/dist/scheduler.js +96 -0
  50. package/dist/scheduler.js.map +1 -0
  51. package/dist/store.d.ts +73 -0
  52. package/dist/store.d.ts.map +1 -0
  53. package/dist/store.js +323 -0
  54. package/dist/store.js.map +1 -0
  55. package/dist/types.d.ts +219 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +3 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/validation.d.ts +13 -0
  60. package/dist/validation.d.ts.map +1 -0
  61. package/dist/validation.js +75 -0
  62. package/dist/validation.js.map +1 -0
  63. package/dist/verify.d.ts +40 -0
  64. package/dist/verify.d.ts.map +1 -0
  65. package/dist/verify.js +177 -0
  66. package/dist/verify.js.map +1 -0
  67. package/docs/ARCHITECTURE.md +144 -0
  68. package/docs/PROTOCOL.md +127 -0
  69. package/docs/RELEASING.md +23 -0
  70. package/docs/SECURITY.md +57 -0
  71. package/package.json +68 -0
  72. package/schemas/config.schema.json +149 -0
  73. package/schemas/provenance.schema.json +56 -0
  74. package/schemas/receipt.schema.json +39 -0
  75. package/templates/AGENTS.snippet.md +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAsB,MAAM,cAAc,CAAC;AAW9D,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,OAAO,aAAa;IACf,IAAI,CAAS;IACb,YAAY,CAAS;IAE9B,YAAoB,IAAY,EAAE,YAAoB;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,EAAE;YAClG,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QACH,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAc,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,KAAK;QAC7D,OAAO,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,QAAQ,WAAW,CAAC,EACrE,IAAI,CAAC,IAAI,EACT,IAAI,CACL,CAAC;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,iCAAiC,QAAQ,EAAE,EAAE;gBACnF,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI;QAC/B,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,GAAW;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,QAAQ,WAAW,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,gBAAgB,EAAE,iCAAiC,QAAQ,EAAE,EAAE;gBACnF,QAAQ;gBACR,GAAG;gBACH,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAC3B,CAAC,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAC7E,CAAC;QACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAiB;QAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAY,EAAE,IAAY;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC;YAC5B,MAAM;YACN,aAAa;YACb,IAAI;YACJ,GAAG,IAAI,KAAK,IAAI,EAAE;SACnB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,GAAW,EAAE,IAAY;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,MAAM,CAAC,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACvC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC,MAAM;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,UAAkB;QAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/F,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,IAAI,WAAW,CAAC,wBAAwB,EAAE,0CAA0C,WAAW,EAAE,EAAE;gBACvG,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,MAAc;QAC1C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAW;QAC/B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,MAAc;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1G,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,WAAW,CAAC,eAAe,EAAE,sCAAsC,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAY;QAC7B,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,OAAe,EAAE,OAAe;QACxD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,MAAc;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,GAAW,EACX,YAAoB,EACpB,QAAgB,EAChB,OAAe;QAEf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,WAAW,CAAC,aAAa,EAAE,oDAAoD,YAAY,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAc;QACvC,MAAM,IAAI,CAAC,GAAG,CACZ,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,MAAM,eAAe,MAAM,EAAE,CAAC,EACrF,IAAI,CAAC,IAAI,CACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;QACnE,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,OAAO,GAA0B,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,GAAS,EAAE;YACvB,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;oBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;oBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;iBACpC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,EAAE,CAAC;QACf,CAAC,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,KAAK,EAAE,CAAC;gBACR,SAAS;YACX,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAChE,IAAI,GAAG,KAAK,UAAU;gBAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;iBACxC,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;iBACzC,IAAI,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;iBAC5E,IAAI,GAAG,KAAK,MAAM;gBAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;iBACxC,IAAI,GAAG,KAAK,UAAU;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;iBAChD,IAAI,GAAG,KAAK,UAAU;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvD,CAAC;QACD,KAAK,EAAE,CAAC;QACR,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import type { GitRepository } from "./git.js";
2
+ export declare const HOOKS_DIRECTORY = ".githooks";
3
+ export declare const BYPASS_VARIABLE = "MERGE_BROKER_ALLOW_DIRECT_PUSH";
4
+ export interface HookInstallation {
5
+ hooksPath: string;
6
+ hookFile: string;
7
+ installed: boolean;
8
+ previousHooksPath?: string;
9
+ }
10
+ /**
11
+ * Refuses a direct push of an implementation branch. Integration branches still publish normally,
12
+ * deletions and tags are untouched, and an operator can bypass the guard deliberately for an
13
+ * emergency.
14
+ */
15
+ export declare function prePushHook(branchPrefix: string): string;
16
+ export declare function installHooks(options: {
17
+ repo: GitRepository;
18
+ branchPrefix: string;
19
+ force?: boolean;
20
+ }): Promise<HookInstallation>;
21
+ export declare function uninstallHooks(repo: GitRepository): Promise<HookInstallation>;
22
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,mCAAmC,CAAC;AAGhE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA2BxD;AA0BD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmC5B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBnF"}
package/dist/hooks.js ADDED
@@ -0,0 +1,110 @@
1
+ import path from "node:path";
2
+ import { chmod, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import { BrokerError } from "./errors.js";
4
+ export const HOOKS_DIRECTORY = ".githooks";
5
+ export const BYPASS_VARIABLE = "MERGE_BROKER_ALLOW_DIRECT_PUSH";
6
+ const MARKER = "Installed by Agent Merge Broker";
7
+ /**
8
+ * Refuses a direct push of an implementation branch. Integration branches still publish normally,
9
+ * deletions and tags are untouched, and an operator can bypass the guard deliberately for an
10
+ * emergency.
11
+ */
12
+ export function prePushHook(branchPrefix) {
13
+ return `#!/bin/sh
14
+ # ${MARKER}. Remove with: merge-broker install-hooks --uninstall
15
+ #
16
+ # Work reaches the base branch through the broker: commit locally, then run
17
+ # merge-broker task submit <task-id> --since-base
18
+ # Only ${branchPrefix}* branches may be pushed directly.
19
+
20
+ if [ "\${${BYPASS_VARIABLE}:-}" = "1" ]; then
21
+ exit 0
22
+ fi
23
+
24
+ while read -r local_ref _local_sha _remote_ref _remote_sha; do
25
+ case "$local_ref" in
26
+ refs/heads/${branchPrefix}*)
27
+ ;;
28
+ refs/heads/*)
29
+ echo "Direct implementation pushes are disabled by Agent Merge Broker." >&2
30
+ echo "Submit the work instead: merge-broker task submit <task-id> --since-base" >&2
31
+ echo "Emergency bypass: ${BYPASS_VARIABLE}=1 git push ..." >&2
32
+ exit 1
33
+ ;;
34
+ esac
35
+ done
36
+
37
+ exit 0
38
+ `;
39
+ }
40
+ async function configuredHooksPath(repo) {
41
+ const result = await repo.git(["config", "--get", "core.hooksPath"], repo.root, true);
42
+ const value = result.stdout.trim();
43
+ return result.exitCode === 0 && value !== "" ? value : undefined;
44
+ }
45
+ /**
46
+ * Hooks already living in Git's default directory stop running the moment core.hooksPath moves.
47
+ * Silently disabling somebody's existing tooling is not an acceptable side effect of installing a
48
+ * guard, so they have to be acknowledged.
49
+ */
50
+ async function existingDefaultHooks(repo) {
51
+ const directory = path.join(repo.commonGitDir, "hooks");
52
+ try {
53
+ const entries = await readdir(directory, { withFileTypes: true });
54
+ return entries
55
+ .filter((entry) => entry.isFile() && !entry.name.endsWith(".sample"))
56
+ .map((entry) => entry.name)
57
+ .sort();
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
63
+ export async function installHooks(options) {
64
+ const { repo, branchPrefix, force = false } = options;
65
+ const current = await configuredHooksPath(repo);
66
+ if (current !== undefined && current !== HOOKS_DIRECTORY && !force) {
67
+ throw new BrokerError("HOOKS_PATH_CONFLICT", `core.hooksPath is already set to ${current}. Installing would disable those hooks. Re-run with --force to replace it, or add the pre-push guard to ${current} yourself.`, { current });
68
+ }
69
+ if (current === undefined) {
70
+ const inherited = await existingDefaultHooks(repo);
71
+ if (inherited.length > 0 && !force) {
72
+ throw new BrokerError("HOOKS_PATH_CONFLICT", `This repository already has Git hooks that would stop running once core.hooksPath moves: ${inherited.join(", ")}. Move them into ${HOOKS_DIRECTORY}/ and re-run with --force.`, { hooks: inherited });
73
+ }
74
+ }
75
+ const hooksPath = path.join(repo.root, HOOKS_DIRECTORY);
76
+ const hookFile = path.join(hooksPath, "pre-push");
77
+ await mkdir(hooksPath, { recursive: true });
78
+ await writeFile(hookFile, prePushHook(branchPrefix), { encoding: "utf8", mode: 0o755 });
79
+ await chmod(hookFile, 0o755).catch(() => undefined);
80
+ await repo.git(["config", "core.hooksPath", HOOKS_DIRECTORY]);
81
+ return {
82
+ hooksPath,
83
+ hookFile,
84
+ installed: true,
85
+ ...(current !== undefined && current !== HOOKS_DIRECTORY ? { previousHooksPath: current } : {}),
86
+ };
87
+ }
88
+ export async function uninstallHooks(repo) {
89
+ const hooksPath = path.join(repo.root, HOOKS_DIRECTORY);
90
+ const hookFile = path.join(hooksPath, "pre-push");
91
+ let ours = false;
92
+ try {
93
+ ours = (await readFile(hookFile, "utf8")).includes(MARKER);
94
+ }
95
+ catch {
96
+ ours = false;
97
+ }
98
+ // Only ever remove the broker's own hook; a hand-written one at the same path is not ours to
99
+ // delete.
100
+ if (ours)
101
+ await rm(hookFile, { force: true });
102
+ const current = await configuredHooksPath(repo);
103
+ if (current === HOOKS_DIRECTORY) {
104
+ const remaining = await readdir(hooksPath).catch(() => []);
105
+ if (remaining.length === 0)
106
+ await repo.git(["config", "--unset", "core.hooksPath"], repo.root, true);
107
+ }
108
+ return { hooksPath, hookFile, installed: false };
109
+ }
110
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAChE,MAAM,MAAM,GAAG,iCAAiC,CAAC;AASjD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,YAAoB;IAC9C,OAAO;IACL,MAAM;;;;SAID,YAAY;;WAEV,eAAe;;;;;;iBAMT,YAAY;;;;;wCAKW,eAAe;;;;;;;CAOtD,CAAC;AACF,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAmB;IACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,IAAmB;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAIlC;IACC,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,WAAW,CACnB,qBAAqB,EACrB,oCAAoC,OAAO,2GAA2G,OAAO,YAAY,EACzK,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,IAAI,WAAW,CACnB,qBAAqB,EACrB,4FAA4F,SAAS,CAAC,IAAI,CACxG,IAAI,CACL,oBAAoB,eAAe,4BAA4B,EAChE,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxF,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,OAAO;QACL,SAAS;QACT,QAAQ;QACR,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAmB;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,KAAK,CAAC;IACf,CAAC;IACD,6FAA6F;IAC7F,UAAU;IACV,IAAI,IAAI;QAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAc,CAAC,CAAC;QACvE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { MergeBroker, type ClaimTaskInput, type RegisterTaskInput } from "./broker.js";
2
+ export { GitRepository, type WorktreeInfo } from "./git.js";
3
+ export { StateStore, type LockStatus } from "./store.js";
4
+ export { installHooks, prePushHook, uninstallHooks, type HookInstallation } from "./hooks.js";
5
+ export { defaultConfig, initializeConfig, loadConfig, validateConfig } from "./config.js";
6
+ export { scheduleTasks } from "./scheduler.js";
7
+ export { buildBatchProvenance, provenancePath } from "./provenance.js";
8
+ export { batchIdFromBranch, policyFromBase, verifyProvenance, type ProvenanceVerification, type VerifyProvenanceOptions, } from "./verify.js";
9
+ export { BrokerError, CommandError, ValidationError } from "./errors.js";
10
+ export type * from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,mBAAmB,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { MergeBroker } from "./broker.js";
2
+ export { GitRepository } from "./git.js";
3
+ export { StateStore } from "./store.js";
4
+ export { installHooks, prePushHook, uninstallHooks } from "./hooks.js";
5
+ export { defaultConfig, initializeConfig, loadConfig, validateConfig } from "./config.js";
6
+ export { scheduleTasks } from "./scheduler.js";
7
+ export { buildBatchProvenance, provenancePath } from "./provenance.js";
8
+ export { batchIdFromBranch, policyFromBase, verifyProvenance, } from "./verify.js";
9
+ export { BrokerError, CommandError, ValidationError } from "./errors.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAyB,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function normalizeGitPath(value: string): string;
2
+ export declare function matchesPattern(file: string, pattern: string): boolean;
3
+ export declare function matchesAny(file: string, patterns: string[]): boolean;
4
+ export declare function unexpectedPaths(actual: string[], expected: string[]): string[];
5
+ export declare function patternsMayOverlap(left: string, right: string): boolean;
6
+ export declare function patternSetsMayOverlap(left: string[], right: string[]): boolean;
7
+ export declare function pathsOverlap(left: string[], right: string[]): string | undefined;
8
+ export declare function matchedSerializedPatterns(paths: string[], patterns: string[]): string[];
9
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAEpE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG9E;AAsBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWvE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAGhF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvF"}
@@ -0,0 +1,66 @@
1
+ import picomatch from "picomatch";
2
+ export function normalizeGitPath(value) {
3
+ return value
4
+ .replace(/\\(?![?*{[(\]})])/gu, "/")
5
+ .replace(/^\.\//u, "")
6
+ .replace(/^\/+|\/+$/gu, "");
7
+ }
8
+ export function matchesPattern(file, pattern) {
9
+ const normalizedFile = normalizeGitPath(file);
10
+ const normalizedPattern = normalizeGitPath(pattern);
11
+ return picomatch.isMatch(normalizedFile, normalizedPattern, { dot: true });
12
+ }
13
+ export function matchesAny(file, patterns) {
14
+ return patterns.some((pattern) => matchesPattern(file, pattern));
15
+ }
16
+ export function unexpectedPaths(actual, expected) {
17
+ if (expected.length === 0)
18
+ return [...actual];
19
+ return actual.filter((file) => !matchesAny(file, expected));
20
+ }
21
+ function firstUnescapedMagicIndex(pattern) {
22
+ for (let index = 0; index < pattern.length; index += 1) {
23
+ const character = pattern[index];
24
+ if (!character)
25
+ continue;
26
+ if (character === "\\") {
27
+ index += 1;
28
+ continue;
29
+ }
30
+ if (/[?*{[(]/u.test(character))
31
+ return index;
32
+ }
33
+ return -1;
34
+ }
35
+ function literalPrefix(pattern) {
36
+ const normalized = normalizeGitPath(pattern);
37
+ const magic = firstUnescapedMagicIndex(normalized);
38
+ const prefix = magic === -1 ? normalized : normalized.slice(0, magic);
39
+ return prefix.slice(0, prefix.lastIndexOf("/") + 1);
40
+ }
41
+ export function patternsMayOverlap(left, right) {
42
+ const a = normalizeGitPath(left);
43
+ const b = normalizeGitPath(right);
44
+ if (a === b || matchesPattern(a, b) || matchesPattern(b, a))
45
+ return true;
46
+ const aHasMagic = firstUnescapedMagicIndex(a) !== -1;
47
+ const bHasMagic = firstUnescapedMagicIndex(b) !== -1;
48
+ if (!aHasMagic || !bHasMagic)
49
+ return false;
50
+ const aPrefix = literalPrefix(a);
51
+ const bPrefix = literalPrefix(b);
52
+ if (!aPrefix || !bPrefix)
53
+ return true;
54
+ return aPrefix.startsWith(bPrefix) || bPrefix.startsWith(aPrefix);
55
+ }
56
+ export function patternSetsMayOverlap(left, right) {
57
+ return left.some((a) => right.some((b) => patternsMayOverlap(a, b)));
58
+ }
59
+ export function pathsOverlap(left, right) {
60
+ const rightSet = new Set(right.map(normalizeGitPath));
61
+ return left.map(normalizeGitPath).find((file) => rightSet.has(file));
62
+ }
63
+ export function matchedSerializedPatterns(paths, patterns) {
64
+ return patterns.filter((pattern) => paths.some((file) => matchesPattern(file, pattern)));
65
+ }
66
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface CommandResult {
2
+ command: string;
3
+ exitCode: number;
4
+ stdout: string;
5
+ stderr: string;
6
+ }
7
+ export interface RunOptions {
8
+ cwd: string;
9
+ env?: NodeJS.ProcessEnv;
10
+ input?: string;
11
+ allowFailure?: boolean;
12
+ timeoutMs?: number;
13
+ }
14
+ export interface ResolvedShell {
15
+ executable: string;
16
+ args: string[];
17
+ quote: (value: string) => string;
18
+ }
19
+ /**
20
+ * Validators must run in a predictable interpreter. Deliberately not the operator's `$SHELL`, and
21
+ * deliberately not a login shell: sourcing personal dotfiles would make an integration decision
22
+ * depend on whose machine assembled the batch. The environment still comes from the calling
23
+ * process, so PATH and toolchain managers work; a validator that needs more can set `env`.
24
+ */
25
+ export declare function resolveShell(configured?: string): ResolvedShell;
26
+ export declare function runCommand(executable: string, args: string[], options: RunOptions): Promise<CommandResult>;
27
+ export declare function runShell(command: string, options: RunOptions & {
28
+ shell?: ResolvedShell;
29
+ }): Promise<CommandResult>;
30
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAeD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAU/D;AAMD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,GAC9C,OAAO,CAAC,aAAa,CAAC,CAGxB"}
@@ -0,0 +1,91 @@
1
+ import { spawn } from "node:child_process";
2
+ import { CommandError } from "./errors.js";
3
+ function quotePosix(value) {
4
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
5
+ }
6
+ /**
7
+ * cmd.exe has no escape for a literal `%`, so a path containing one can still be expanded as an
8
+ * environment reference. Git paths that contain `%` or `"` are pathological; POSIX shells are the
9
+ * supported and tested surface.
10
+ */
11
+ function quoteCmd(value) {
12
+ return `"${value.replaceAll('"', '""')}"`;
13
+ }
14
+ /**
15
+ * Validators must run in a predictable interpreter. Deliberately not the operator's `$SHELL`, and
16
+ * deliberately not a login shell: sourcing personal dotfiles would make an integration decision
17
+ * depend on whose machine assembled the batch. The environment still comes from the calling
18
+ * process, so PATH and toolchain managers work; a validator that needs more can set `env`.
19
+ */
20
+ export function resolveShell(configured) {
21
+ if (configured) {
22
+ const isCmd = /(^|[\\/])cmd(\.exe)?$/iu.test(configured);
23
+ return isCmd
24
+ ? { executable: configured, args: ["/d", "/s", "/c"], quote: quoteCmd }
25
+ : { executable: configured, args: ["-c"], quote: quotePosix };
26
+ }
27
+ return process.platform === "win32"
28
+ ? { executable: process.env.ComSpec ?? "cmd.exe", args: ["/d", "/s", "/c"], quote: quoteCmd }
29
+ : { executable: "/bin/sh", args: ["-c"], quote: quotePosix };
30
+ }
31
+ function quoteForDisplay(value) {
32
+ return /[\s"'\\]/u.test(value) ? JSON.stringify(value) : value;
33
+ }
34
+ export async function runCommand(executable, args, options) {
35
+ const rendered = [executable, ...args].map(quoteForDisplay).join(" ");
36
+ return await new Promise((resolve, reject) => {
37
+ const child = spawn(executable, args, {
38
+ cwd: options.cwd,
39
+ env: options.env ?? process.env,
40
+ shell: false,
41
+ stdio: "pipe",
42
+ });
43
+ let stdout = "";
44
+ let stderr = "";
45
+ let timedOut = false;
46
+ const timer = options.timeoutMs
47
+ ? setTimeout(() => {
48
+ timedOut = true;
49
+ child.kill("SIGTERM");
50
+ setTimeout(() => child.kill("SIGKILL"), 2_000).unref();
51
+ }, options.timeoutMs)
52
+ : undefined;
53
+ child.stdout.setEncoding("utf8");
54
+ child.stderr.setEncoding("utf8");
55
+ child.stdout.on("data", (chunk) => {
56
+ stdout += chunk;
57
+ });
58
+ child.stderr.on("data", (chunk) => {
59
+ stderr += chunk;
60
+ });
61
+ child.once("error", (error) => {
62
+ if (timer)
63
+ clearTimeout(timer);
64
+ reject(error);
65
+ });
66
+ child.once("close", (code, signal) => {
67
+ if (timer)
68
+ clearTimeout(timer);
69
+ const exitCode = code ?? (signal ? 128 : 1);
70
+ if (timedOut) {
71
+ stderr += `\nTimed out after ${options.timeoutMs}ms`;
72
+ }
73
+ const result = { command: rendered, exitCode, stdout, stderr };
74
+ if (exitCode !== 0 && !options.allowFailure) {
75
+ reject(new CommandError(rendered, exitCode, stdout, stderr));
76
+ }
77
+ else {
78
+ resolve(result);
79
+ }
80
+ });
81
+ if (options.input !== undefined)
82
+ child.stdin.end(options.input);
83
+ else
84
+ child.stdin.end();
85
+ });
86
+ }
87
+ export async function runShell(command, options) {
88
+ const shell = options.shell ?? resolveShell();
89
+ return await runCommand(shell.executable, [...shell.args, command], options);
90
+ }
91
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { BatchProvenance, BatchRecord, HistoryMode, TaskRecord } from "./types.js";
2
+ export declare function provenancePath(directory: string, batchId: string): string;
3
+ export declare function buildBatchProvenance(options: {
4
+ batch: BatchRecord;
5
+ tasks: TaskRecord[];
6
+ integratedHeadSha: string;
7
+ integratedPaths: string[];
8
+ history?: HistoryMode;
9
+ }): BatchProvenance;
10
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,GAAG,eAAe,CA8BlB"}
@@ -0,0 +1,36 @@
1
+ import path from "node:path";
2
+ export function provenancePath(directory, batchId) {
3
+ return path.posix.join(directory.replaceAll("\\", "/"), `${batchId}.json`);
4
+ }
5
+ export function buildBatchProvenance(options) {
6
+ const { batch, tasks, integratedHeadSha, integratedPaths, history } = options;
7
+ const integratedPathSet = new Set(integratedPaths);
8
+ return {
9
+ version: 1,
10
+ generator: "agent-merge-broker",
11
+ batchId: batch.id,
12
+ baseBranch: batch.baseBranch,
13
+ ...(history ? { history } : {}),
14
+ baseSha: batch.baseSha,
15
+ integratedHeadSha,
16
+ taskIds: [...batch.taskIds],
17
+ tasks: tasks.map((task) => ({
18
+ id: task.id,
19
+ commits: [...task.commits],
20
+ // A corrective commit may intentionally cancel an earlier change. The
21
+ // attestation describes the integrated result, while task receipts retain
22
+ // the historical union used for scope checks and validation routing.
23
+ actualPaths: task.actualPaths.filter((file) => integratedPathSet.has(file)),
24
+ dependsOn: [...task.dependsOn],
25
+ })),
26
+ validations: batch.validations.map((result) => ({
27
+ name: result.name,
28
+ scope: result.scope,
29
+ ...(result.taskId ? { taskId: result.taskId } : {}),
30
+ exitCode: result.exitCode,
31
+ durationMs: result.durationMs,
32
+ })),
33
+ createdAt: new Date().toISOString(),
34
+ };
35
+ }
36
+ //# sourceMappingURL=provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAMpC;IACC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,iBAAiB;QACjB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,sEAAsE;YACtE,0EAA0E;YAC1E,qEAAqE;YACrE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3E,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;SAC/B,CAAC,CAAC;QACH,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { BatchRecord, BrokerConfig, TaskRecord } from "./types.js";
2
+ import type { GitRepository } from "./git.js";
3
+ export interface PublicationResult {
4
+ mode: "branch" | "pull-request";
5
+ branchName: string;
6
+ pullRequestUrl?: string;
7
+ autoMergeEnabled?: boolean;
8
+ }
9
+ export declare function publishBatch(options: {
10
+ repo: GitRepository;
11
+ config: BrokerConfig;
12
+ batch: BatchRecord;
13
+ tasks: TaskRecord[];
14
+ }): Promise<PublicationResult>;
15
+ export interface PullRequestMergeState {
16
+ state: string;
17
+ mergeStateStatus: string;
18
+ mergeable: string;
19
+ }
20
+ /**
21
+ * GitHub's own view of whether a pull request can merge. Returns undefined when the state cannot be
22
+ * read at all, which is treated as "do not merge" rather than as permission to proceed.
23
+ */
24
+ export declare function readMergeState(repoRoot: string, pullRequestUrl: string): Promise<PullRequestMergeState | undefined>;
25
+ /**
26
+ * Hands the merge decision to GitHub: it lands the pull request once required checks pass, and
27
+ * updates the branch itself when the base branch requires it. The broker never pushes to the base
28
+ * branch, so branch protection stays authoritative.
29
+ */
30
+ export declare function enableAutoMerge(repoRoot: string, pullRequestUrl: string, config: BrokerConfig): Promise<boolean>;
31
+ export declare function inspectPullRequest(repoRoot: string, pullRequestUrl: string): Promise<{
32
+ state: string;
33
+ mergedAt?: string;
34
+ mergeCommitSha?: string;
35
+ }>;
36
+ export declare function defaultProjectTitle(repoRoot: string): string;
37
+ //# sourceMappingURL=publisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../src/publisher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA6BD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0C7B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAiB5C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,OAAO,CAAC,CAsClB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D"}