planflow-ai 1.3.4 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.claude/commands/create-plan.md +11 -0
  2. package/.claude/commands/discovery-plan.md +12 -0
  3. package/.claude/commands/execute-plan.md +114 -23
  4. package/.claude/commands/flow.md +30 -5
  5. package/.claude/commands/resume-work.md +261 -0
  6. package/.claude/commands/review-code.md +11 -0
  7. package/.claude/commands/review-pr.md +11 -0
  8. package/.claude/resources/core/_index.md +45 -2
  9. package/.claude/resources/core/atomic-commits.md +380 -0
  10. package/.claude/resources/core/autopilot-mode.md +3 -2
  11. package/.claude/resources/core/compaction-guide.md +15 -1
  12. package/.claude/resources/core/heartbeat.md +129 -1
  13. package/.claude/resources/core/model-routing.md +6 -2
  14. package/.claude/resources/core/per-task-verification.md +362 -0
  15. package/.claude/resources/core/phase-isolation.md +192 -4
  16. package/.claude/resources/core/session-scratchpad.md +1 -0
  17. package/.claude/resources/core/wave-execution.md +329 -0
  18. package/.claude/resources/patterns/plans-patterns.md +56 -0
  19. package/.claude/resources/patterns/plans-templates.md +152 -0
  20. package/.claude/resources/skills/_index.md +8 -6
  21. package/.claude/resources/skills/create-plan-skill.md +71 -5
  22. package/.claude/resources/skills/execute-plan-skill.md +357 -12
  23. package/.claude/resources/skills/resume-work-skill.md +159 -0
  24. package/.claude/rules/core/forbidden-patterns.md +38 -0
  25. package/dist/cli/commands/init.js +1 -1
  26. package/dist/cli/commands/init.js.map +1 -1
  27. package/dist/cli/commands/state.d.ts +12 -0
  28. package/dist/cli/commands/state.d.ts.map +1 -0
  29. package/dist/cli/commands/state.js +47 -0
  30. package/dist/cli/commands/state.js.map +1 -0
  31. package/dist/cli/daemon/desktop-notifier.d.ts +16 -0
  32. package/dist/cli/daemon/desktop-notifier.d.ts.map +1 -0
  33. package/dist/cli/daemon/desktop-notifier.js +53 -0
  34. package/dist/cli/daemon/desktop-notifier.js.map +1 -0
  35. package/dist/cli/daemon/event-writer.d.ts +22 -0
  36. package/dist/cli/daemon/event-writer.d.ts.map +1 -0
  37. package/dist/cli/daemon/event-writer.js +76 -0
  38. package/dist/cli/daemon/event-writer.js.map +1 -0
  39. package/dist/cli/daemon/heartbeat-daemon.js +81 -1
  40. package/dist/cli/daemon/heartbeat-daemon.js.map +1 -1
  41. package/dist/cli/daemon/log-writer.d.ts +17 -0
  42. package/dist/cli/daemon/log-writer.d.ts.map +1 -0
  43. package/dist/cli/daemon/log-writer.js +62 -0
  44. package/dist/cli/daemon/log-writer.js.map +1 -0
  45. package/dist/cli/daemon/notification-router.d.ts +17 -0
  46. package/dist/cli/daemon/notification-router.d.ts.map +1 -0
  47. package/dist/cli/daemon/notification-router.js +35 -0
  48. package/dist/cli/daemon/notification-router.js.map +1 -0
  49. package/dist/cli/daemon/prompt-manager.d.ts +27 -0
  50. package/dist/cli/daemon/prompt-manager.d.ts.map +1 -0
  51. package/dist/cli/daemon/prompt-manager.js +107 -0
  52. package/dist/cli/daemon/prompt-manager.js.map +1 -0
  53. package/dist/cli/index.js +9 -0
  54. package/dist/cli/index.js.map +1 -1
  55. package/dist/cli/state/flowconfig-parser.d.ts +16 -0
  56. package/dist/cli/state/flowconfig-parser.d.ts.map +1 -0
  57. package/dist/cli/state/flowconfig-parser.js +166 -0
  58. package/dist/cli/state/flowconfig-parser.js.map +1 -0
  59. package/dist/cli/state/heartbeat-state.d.ts +16 -0
  60. package/dist/cli/state/heartbeat-state.d.ts.map +1 -0
  61. package/dist/cli/state/heartbeat-state.js +97 -0
  62. package/dist/cli/state/heartbeat-state.js.map +1 -0
  63. package/dist/cli/state/model-router.d.ts +8 -0
  64. package/dist/cli/state/model-router.d.ts.map +1 -0
  65. package/dist/cli/state/model-router.js +36 -0
  66. package/dist/cli/state/model-router.js.map +1 -0
  67. package/dist/cli/state/plan-parser.d.ts +16 -0
  68. package/dist/cli/state/plan-parser.d.ts.map +1 -0
  69. package/dist/cli/state/plan-parser.js +124 -0
  70. package/dist/cli/state/plan-parser.js.map +1 -0
  71. package/dist/cli/state/session-state.d.ts +21 -0
  72. package/dist/cli/state/session-state.d.ts.map +1 -0
  73. package/dist/cli/state/session-state.js +36 -0
  74. package/dist/cli/state/session-state.js.map +1 -0
  75. package/dist/cli/state/state-md-parser.d.ts +18 -0
  76. package/dist/cli/state/state-md-parser.d.ts.map +1 -0
  77. package/dist/cli/state/state-md-parser.js +222 -0
  78. package/dist/cli/state/state-md-parser.js.map +1 -0
  79. package/dist/cli/state/types.d.ts +106 -0
  80. package/dist/cli/state/types.d.ts.map +1 -0
  81. package/dist/cli/state/types.js +8 -0
  82. package/dist/cli/state/types.js.map +1 -0
  83. package/dist/cli/state/wave-calculator.d.ts +18 -0
  84. package/dist/cli/state/wave-calculator.d.ts.map +1 -0
  85. package/dist/cli/state/wave-calculator.js +134 -0
  86. package/dist/cli/state/wave-calculator.js.map +1 -0
  87. package/dist/cli/types.d.ts +15 -0
  88. package/dist/cli/types.d.ts.map +1 -1
  89. package/package.json +4 -2
  90. package/templates/shared/CLAUDE.md.template +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-daemon.js","sourceRoot":"","sources":["../../../src/cli/daemon/heartbeat-daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"heartbeat-daemon.js","sourceRoot":"","sources":["../../../src/cli/daemon/heartbeat-daemon.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/G,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AAChD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACvD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEvD,MAAM,YAAY,GAAqB,EAAE,CAAC;AAC1C,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,uDAAuD,CAAC;AACrF,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,cAAc,GAAG,MAAM,CAAC;AAC9B,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;AAChD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC;;GAEG;AACH,SAAS,WAAW,CAClB,IAAmB,EACnB,IAAsB,EACtB,KAAwB,EACxB,OAAe,EACf,KAAc;IAEd,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI;QACJ,KAAK;QACL,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,CAAS;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,GAAG,CAAC,OAAe;IAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC;IAC3C,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAsB;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,MAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,SAAS,GAAG,CAAC;YAAE,SAAS,IAAI,CAAC,CAAC;QAClC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,MAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,SAAS,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,MAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,UAAW,CAAC;IAC5B,CAAC;IAED,+BAA+B;IAC/B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,WAAW,GAAG,IAAI,CAAC;IACnB,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjD,8CAA8C;IAC9C,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE9E,mDAAmD;IACnD,KAAK,MAAM,CACT,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,EACxE,OAAO,CACR,CAAC;IAEF,gEAAgE;IAChE,uDAAuD;IACvD,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACpC,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE9B,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,gCAAgC;QAChC,wBAAwB;QACxB,4XAA4X;KAC7X,CAAC;IAEF,qCAAqC;IACrC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;QAClC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,QAAQ;KACd,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;QACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;QACxC,WAAW,GAAG,KAAK,CAAC;QACpB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEhD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhC,gFAAgF;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;YACzD,IAAI,CAAC,mBAAmB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,2DAA2D,CAAC,CAAC;gBAEnF,KAAK,MAAM,CACT,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,IAAI,CAAC,IAAI,EAAE,CAAC,EAC5E,OAAO,CACR,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC;gBAElD,oDAAoD;gBACpD,KAAK,MAAM,CACT,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC,EAC1E,OAAO,CACR,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,uCAAuC;YACvC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,uCAAuC,CAAC,CAAC;YAC/D,IAAI,MAAM;gBAAE,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAErD,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;YAEpC,mDAAmD;YACnD,KAAK,MAAM,CACT,WAAW,CACT,IAAI,EACJ,cAAc,EACd,OAAO,EACP,+BAA+B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAClF,EACD,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC5D,GAAG,CAAC,4BAA4B,sBAAsB,4BAA4B,CAAC,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,8CAA8C,CAAC,CAAC;YACtD,CAAC;YACD,GAAG,CAAC,mBAAmB,UAAU,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACjD,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,sBAAsB,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM;gBAAE,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YAErD,kDAAkD;YAClD,KAAK,MAAM,CACT,WAAW,CACT,IAAI,EACJ,aAAa,EACb,OAAO,EACP,qBAAqB,IAAI,MAAM,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7F,EACD,OAAO,CACR,CAAC;QACJ,CAAC;QACD,IAAI,MAAM;YAAE,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;QAC/B,WAAW,GAAG,KAAK,CAAC;QACpB,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAEjD,mEAAmE;QACnE,KAAK,MAAM,CACT,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,EAC5F,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEpC,IAAI,KAAK,GAAG,WAAW,EAAE,CAAC;QACxB,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,wBAAwB,WAAW,4CAA4C,CAAC,CAAC;QACvG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,uEAAuE,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;IACtH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IAClE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO;QACvC,IAAI,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,sEAAsE;QACtE,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,WAAW,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,yCAAyC,EACnG,GAAG,CACJ,CAAC;QACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,GAAG,CAAC,kBAAkB,QAAQ,4BAA4B,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,oCAAoC,QAAQ,MAAO,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAmB;IACvC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;IAEnC,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,UAAW,CAAC;QAC9B,GAAG,CAAC,wBAAwB,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,WAAW,MAAM,CAAC,UAAW,GAAG,IAAI,GAAG,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,UAAW,CAAC,CAAC;QACvE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,+DAA+D;IAC/D,MAAM,EAAE,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAEzF,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAEzE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe;IACtB,WAAW,EAAE,CAAC;IAEd,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE1C,GAAG,CAAC,UAAU,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC;IAEd,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,eAAe;AAEf,iBAAiB;AACjB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACrD,GAAG,CAAC,wBAAwB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAE5C,kBAAkB;AAClB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE9B,eAAe;AACf,eAAe,EAAE,CAAC;AAElB,uCAAuC;AACvC,IAAI,aAAa,GAA0B,IAAI,CAAC;AAEhD,IAAI,CAAC;IACH,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE;QACxB,IAAI,aAAa;YAAE,YAAY,CAAC,aAAa,CAAC,CAAC;QAC/C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,GAAG,CAAC,kCAAkC,CAAC,CAAC;YACxC,eAAe,EAAE,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAAC,MAAM,CAAC;IACP,GAAG,CAAC,mDAAmD,CAAC,CAAC;AAC3D,CAAC;AAED,uEAAuE;AACvE,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,WAAW,CAAC,GAAG,EAAE;IACf,IAAI,CAAC;QACH,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC,EAAE,YAAY,CAAC,CAAC;AAEjB,uDAAuD;AACvD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,GAAG,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,GAAG,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Log writer — appends formatted one-liner entries to flow/log.md.
3
+ * Auto-creates the file with a header if it does not exist.
4
+ */
5
+ import type { NotificationEvent } from '../types.js';
6
+ /**
7
+ * Build a single log line from a NotificationEvent.
8
+ *
9
+ * Format: `[2026-03-17 14:00] <icon> <task>: <message>`
10
+ */
11
+ export declare function formatLogLine(event: NotificationEvent): string;
12
+ /**
13
+ * Append a formatted log entry to flow/log.md.
14
+ * Creates the file with a header if it does not exist.
15
+ */
16
+ export declare function appendLog(flowDir: string, event: NotificationEvent): Promise<void>;
17
+ //# sourceMappingURL=log-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-writer.d.ts","sourceRoot":"","sources":["../../../src/cli/daemon/log-writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA4BrD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAM9D;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Log writer — appends formatted one-liner entries to flow/log.md.
3
+ * Auto-creates the file with a header if it does not exist.
4
+ */
5
+ import { readFile, writeFile, mkdir } from 'node:fs/promises';
6
+ import { dirname, join } from 'node:path';
7
+ const LOG_FILENAME = 'log.md';
8
+ const LOG_HEADER = `# Heartbeat Log
9
+
10
+ > Auto-generated by the heartbeat daemon. Do not edit manually.
11
+
12
+ `;
13
+ const LEVEL_ICONS = {
14
+ info: '\u2705', // checkmark
15
+ warn: '\u23F8\uFE0F', // pause
16
+ error: '\u274C', // cross
17
+ };
18
+ /**
19
+ * Format a Date as `[YYYY-MM-DD HH:MM]`.
20
+ */
21
+ function formatTimestamp(date) {
22
+ const y = date.getFullYear();
23
+ const mo = String(date.getMonth() + 1).padStart(2, '0');
24
+ const d = String(date.getDate()).padStart(2, '0');
25
+ const h = String(date.getHours()).padStart(2, '0');
26
+ const mi = String(date.getMinutes()).padStart(2, '0');
27
+ return `[${y}-${mo}-${d} ${h}:${mi}]`;
28
+ }
29
+ /**
30
+ * Build a single log line from a NotificationEvent.
31
+ *
32
+ * Format: `[2026-03-17 14:00] <icon> <task>: <message>`
33
+ */
34
+ export function formatLogLine(event) {
35
+ const ts = formatTimestamp(event.timestamp instanceof Date ? event.timestamp : new Date(event.timestamp));
36
+ const icon = LEVEL_ICONS[event.level] ?? '\u2139\uFE0F';
37
+ return `${ts} ${icon} ${event.task}: ${event.message}`;
38
+ }
39
+ /**
40
+ * Append a formatted log entry to flow/log.md.
41
+ * Creates the file with a header if it does not exist.
42
+ */
43
+ export async function appendLog(flowDir, event) {
44
+ const filePath = join(flowDir, LOG_FILENAME);
45
+ const dir = dirname(filePath);
46
+ await mkdir(dir, { recursive: true });
47
+ let existing = '';
48
+ try {
49
+ existing = await readFile(filePath, 'utf-8');
50
+ }
51
+ catch {
52
+ // File does not exist — will create with header
53
+ }
54
+ const line = formatLogLine(event);
55
+ if (!existing) {
56
+ await writeFile(filePath, `${LOG_HEADER}${line}\n`, 'utf-8');
57
+ }
58
+ else {
59
+ await writeFile(filePath, `${existing.trimEnd()}\n${line}\n`, 'utf-8');
60
+ }
61
+ }
62
+ //# sourceMappingURL=log-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-writer.js","sourceRoot":"","sources":["../../../src/cli/daemon/log-writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B,MAAM,UAAU,GAAG;;;;CAIlB,CAAC;AAEF,MAAM,WAAW,GAA2B;IAC1C,IAAI,EAAE,QAAQ,EAAI,YAAY;IAC9B,IAAI,EAAE,cAAc,EAAE,QAAQ;IAC9B,KAAK,EAAE,QAAQ,EAAG,QAAQ;CAC3B,CAAC;AAEF;;GAEG;AACH,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAwB;IACpD,MAAM,EAAE,GAAG,eAAe,CACxB,KAAK,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAC9E,CAAC;IACF,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC;IACxD,OAAO,GAAG,EAAE,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,KAAwB;IAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Notification router — dispatches NotificationEvents to the appropriate channels
3
+ * based on severity.
4
+ *
5
+ * Routing rules:
6
+ * ALL events → log-writer + event-writer
7
+ * error | blocked | task_complete → also desktop-notifier
8
+ */
9
+ import type { NotificationEvent } from '../types.js';
10
+ /**
11
+ * Dispatch a notification event to all relevant channels.
12
+ *
13
+ * @param event - The notification event to route
14
+ * @param flowDir - The flow directory (for log-writer and event-writer)
15
+ */
16
+ export declare function notify(event: NotificationEvent, flowDir: string): Promise<void>;
17
+ //# sourceMappingURL=notification-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-router.d.ts","sourceRoot":"","sources":["../../../src/cli/daemon/notification-router.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAYrD;;;;;GAKG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Notification router — dispatches NotificationEvents to the appropriate channels
3
+ * based on severity.
4
+ *
5
+ * Routing rules:
6
+ * ALL events → log-writer + event-writer
7
+ * error | blocked | task_complete → also desktop-notifier
8
+ */
9
+ import { appendLog } from './log-writer.js';
10
+ import { appendEvent } from './event-writer.js';
11
+ import { sendDesktopNotification } from './desktop-notifier.js';
12
+ /**
13
+ * Determine whether an event should trigger a desktop notification.
14
+ */
15
+ function shouldNotifyDesktop(event) {
16
+ return event.level === 'error' || event.type === 'task_blocked' || event.type === 'task_complete';
17
+ }
18
+ /**
19
+ * Dispatch a notification event to all relevant channels.
20
+ *
21
+ * @param event - The notification event to route
22
+ * @param flowDir - The flow directory (for log-writer and event-writer)
23
+ */
24
+ export async function notify(event, flowDir) {
25
+ // Always write to log and event store (run in parallel)
26
+ await Promise.all([
27
+ appendLog(flowDir, event),
28
+ appendEvent(flowDir, event),
29
+ ]);
30
+ // Desktop notification for high-severity events (fire-and-forget)
31
+ if (shouldNotifyDesktop(event)) {
32
+ sendDesktopNotification(event);
33
+ }
34
+ }
35
+ //# sourceMappingURL=notification-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-router.js","sourceRoot":"","sources":["../../../src/cli/daemon/notification-router.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAwB;IACnD,OAAO,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAwB,EACxB,OAAe;IAEf,wDAAwD;IACxD,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;QACzB,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;KAC5B,CAAC,CAAC;IAEH,kEAAkE;IAClE,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Prompt Manager
3
+ *
4
+ * Manages .heartbeat-prompt.md files for human-in-the-loop interaction
5
+ * when a heartbeat task exits with code 2 (needs input) and autopilot is OFF.
6
+ */
7
+ /**
8
+ * Atomically write a prompt file to flow/.heartbeat-prompt.md.
9
+ * Uses write-to-temp + rename for crash safety.
10
+ */
11
+ export declare function writePrompt(taskName: string, outputTail: string, errorTail: string, flowDir: string): Promise<void>;
12
+ /**
13
+ * Read the current prompt file contents.
14
+ * Returns null if no prompt file exists.
15
+ */
16
+ export declare function readPrompt(flowDir: string): Promise<string | null>;
17
+ /**
18
+ * Check whether a prompt file exists.
19
+ */
20
+ export declare function hasPrompt(flowDir: string): Promise<boolean>;
21
+ /**
22
+ * Archive the current prompt file to flow/archive/heartbeat-prompts/.
23
+ * Creates the archive directory if it does not exist.
24
+ * Removes the active prompt file after archiving.
25
+ */
26
+ export declare function archivePrompt(taskName: string, flowDir: string): Promise<void>;
27
+ //# sourceMappingURL=prompt-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-manager.d.ts","sourceRoot":"","sources":["../../../src/cli/daemon/prompt-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8CH;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAwBf"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Prompt Manager
3
+ *
4
+ * Manages .heartbeat-prompt.md files for human-in-the-loop interaction
5
+ * when a heartbeat task exits with code 2 (needs input) and autopilot is OFF.
6
+ */
7
+ import { writeFile, rename, readFile, mkdir, unlink, stat } from 'node:fs/promises';
8
+ import { join } from 'node:path';
9
+ const PROMPT_FILENAME = '.heartbeat-prompt.md';
10
+ const ARCHIVE_DIR = 'archive/heartbeat-prompts';
11
+ /**
12
+ * Build the prompt markdown content.
13
+ */
14
+ function buildPromptContent(taskName, outputTail, errorTail) {
15
+ const timestamp = new Date().toISOString();
16
+ return `# Heartbeat Prompt
17
+
18
+ **Task**: ${taskName}
19
+ **Time**: ${timestamp}
20
+ **Status**: Waiting for input
21
+
22
+ ## Context
23
+
24
+ The task "${taskName}" exited with code 2, indicating it needs human input.
25
+
26
+ ### Last Output
27
+ \`\`\`
28
+ ${outputTail || '(no output)'}
29
+ \`\`\`
30
+
31
+ ### Error Output
32
+ \`\`\`
33
+ ${errorTail || '(no errors)'}
34
+ \`\`\`
35
+
36
+ ## Action Required
37
+
38
+ Please review the output above and either:
39
+ 1. Open a new Claude session to resolve the issue
40
+ 2. Edit this file with your response and the daemon will resume
41
+ `;
42
+ }
43
+ /**
44
+ * Atomically write a prompt file to flow/.heartbeat-prompt.md.
45
+ * Uses write-to-temp + rename for crash safety.
46
+ */
47
+ export async function writePrompt(taskName, outputTail, errorTail, flowDir) {
48
+ const content = buildPromptContent(taskName, outputTail, errorTail);
49
+ const promptPath = join(flowDir, PROMPT_FILENAME);
50
+ const tempPath = promptPath + '.tmp';
51
+ await writeFile(tempPath, content, 'utf-8');
52
+ await rename(tempPath, promptPath);
53
+ }
54
+ /**
55
+ * Read the current prompt file contents.
56
+ * Returns null if no prompt file exists.
57
+ */
58
+ export async function readPrompt(flowDir) {
59
+ try {
60
+ const promptPath = join(flowDir, PROMPT_FILENAME);
61
+ return await readFile(promptPath, 'utf-8');
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ /**
68
+ * Check whether a prompt file exists.
69
+ */
70
+ export async function hasPrompt(flowDir) {
71
+ try {
72
+ const promptPath = join(flowDir, PROMPT_FILENAME);
73
+ await stat(promptPath);
74
+ return true;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ /**
81
+ * Archive the current prompt file to flow/archive/heartbeat-prompts/.
82
+ * Creates the archive directory if it does not exist.
83
+ * Removes the active prompt file after archiving.
84
+ */
85
+ export async function archivePrompt(taskName, flowDir) {
86
+ const promptPath = join(flowDir, PROMPT_FILENAME);
87
+ const archiveDir = join(flowDir, ARCHIVE_DIR);
88
+ // Read current content before archiving
89
+ let content;
90
+ try {
91
+ content = await readFile(promptPath, 'utf-8');
92
+ }
93
+ catch {
94
+ // No prompt file to archive
95
+ return;
96
+ }
97
+ // Ensure archive directory exists
98
+ await mkdir(archiveDir, { recursive: true });
99
+ // Generate archive filename: prompt_{task}_{timestamp}.md
100
+ const sanitizedTask = taskName.replace(/[^a-zA-Z0-9_-]/g, '_');
101
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
102
+ const archiveFilename = `prompt_${sanitizedTask}_${timestamp}.md`;
103
+ const archivePath = join(archiveDir, archiveFilename);
104
+ await writeFile(archivePath, content, 'utf-8');
105
+ await unlink(promptPath);
106
+ }
107
+ //# sourceMappingURL=prompt-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-manager.js","sourceRoot":"","sources":["../../../src/cli/daemon/prompt-manager.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -62,5 +62,14 @@ program
62
62
  const { runHeartbeat } = await import('./commands/heartbeat.js');
63
63
  await runHeartbeat(action, options);
64
64
  });
65
+ program
66
+ .command('state')
67
+ .description('Output deterministic JSON representing current plan-flow state')
68
+ .option('--plan <path>', 'Path to a plan file to include plan/wave/tier data')
69
+ .option('--target <dir>', 'Target directory (defaults to current directory)', process.cwd())
70
+ .action(async (options) => {
71
+ const { runState } = await import('./commands/state.js');
72
+ await runState(options);
73
+ });
65
74
  program.parse();
66
75
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Flowconfig Parser
3
+ *
4
+ * Parses `flow/.flowconfig` YAML into a structured FlowConfig object.
5
+ * Uses regex-based line parsing consistent with the heartbeat daemon pattern.
6
+ * Provides legacy fallbacks for `.autopilot` and `.gitcontrol` files.
7
+ */
8
+ import type { FlowConfig } from './types.js';
9
+ /**
10
+ * Parse `flow/.flowconfig` into a structured FlowConfig object.
11
+ *
12
+ * Applies defaults for missing keys and falls back to legacy files
13
+ * (`.autopilot`, `.gitcontrol`) when keys are absent from `.flowconfig`.
14
+ */
15
+ export declare function parseFlowConfig(flowDir: string): FlowConfig;
16
+ //# sourceMappingURL=flowconfig-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowconfig-parser.d.ts","sourceRoot":"","sources":["../../../src/cli/state/flowconfig-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA2E7C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA+E3D"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Flowconfig Parser
3
+ *
4
+ * Parses `flow/.flowconfig` YAML into a structured FlowConfig object.
5
+ * Uses regex-based line parsing consistent with the heartbeat daemon pattern.
6
+ * Provides legacy fallbacks for `.autopilot` and `.gitcontrol` files.
7
+ */
8
+ import { existsSync, readFileSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ const DEFAULT_CONFIG = {
11
+ autopilot: false,
12
+ commit: false,
13
+ push: false,
14
+ pr: false,
15
+ branch: '',
16
+ wave_execution: true,
17
+ phase_isolation: true,
18
+ model_routing: false,
19
+ max_verify_retries: 2,
20
+ };
21
+ const MIN_VERIFY_RETRIES = 1;
22
+ const MAX_VERIFY_RETRIES = 5;
23
+ /**
24
+ * Extract a boolean value from flowconfig content by key name.
25
+ * Returns undefined if the key is not found.
26
+ */
27
+ function extractBoolean(content, key) {
28
+ const match = content.match(new RegExp(`^${key}:\\s*(true|false)`, 'm'));
29
+ if (!match)
30
+ return undefined;
31
+ return match[1] === 'true';
32
+ }
33
+ /**
34
+ * Extract a string value from flowconfig content by key name.
35
+ * Returns undefined if the key is not found.
36
+ */
37
+ function extractString(content, key) {
38
+ const match = content.match(new RegExp(`^${key}:\\s*(.+)`, 'm'));
39
+ if (!match)
40
+ return undefined;
41
+ return match[1].trim();
42
+ }
43
+ /**
44
+ * Extract a numeric value from flowconfig content by key name.
45
+ * Returns undefined if the key is not found.
46
+ */
47
+ function extractNumber(content, key) {
48
+ const match = content.match(new RegExp(`^${key}:\\s*(\\d+)`, 'm'));
49
+ if (!match)
50
+ return undefined;
51
+ return parseInt(match[1], 10);
52
+ }
53
+ /**
54
+ * Read legacy `.autopilot` file to determine autopilot setting.
55
+ * File existence means autopilot is enabled.
56
+ */
57
+ function readLegacyAutopilot(flowDir) {
58
+ return existsSync(join(flowDir, '.autopilot'));
59
+ }
60
+ /**
61
+ * Read legacy `.gitcontrol` file for commit/push/branch settings.
62
+ * Returns partial config values found in the file.
63
+ */
64
+ function readLegacyGitControl(flowDir) {
65
+ const gitControlPath = join(flowDir, '.gitcontrol');
66
+ if (!existsSync(gitControlPath))
67
+ return {};
68
+ try {
69
+ const content = readFileSync(gitControlPath, 'utf-8');
70
+ return {
71
+ commit: extractBoolean(content, 'commit'),
72
+ push: extractBoolean(content, 'push'),
73
+ branch: extractString(content, 'branch'),
74
+ };
75
+ }
76
+ catch {
77
+ return {};
78
+ }
79
+ }
80
+ /**
81
+ * Parse `flow/.flowconfig` into a structured FlowConfig object.
82
+ *
83
+ * Applies defaults for missing keys and falls back to legacy files
84
+ * (`.autopilot`, `.gitcontrol`) when keys are absent from `.flowconfig`.
85
+ */
86
+ export function parseFlowConfig(flowDir) {
87
+ const configPath = join(flowDir, '.flowconfig');
88
+ const config = { ...DEFAULT_CONFIG };
89
+ if (!existsSync(configPath)) {
90
+ // No .flowconfig — use legacy fallbacks + defaults
91
+ config.autopilot = readLegacyAutopilot(flowDir);
92
+ const legacy = readLegacyGitControl(flowDir);
93
+ if (legacy.commit !== undefined)
94
+ config.commit = legacy.commit;
95
+ if (legacy.push !== undefined)
96
+ config.push = legacy.push;
97
+ if (legacy.branch !== undefined)
98
+ config.branch = legacy.branch;
99
+ return config;
100
+ }
101
+ let content;
102
+ try {
103
+ content = readFileSync(configPath, 'utf-8');
104
+ }
105
+ catch {
106
+ return config;
107
+ }
108
+ // Parse boolean keys
109
+ const autopilot = extractBoolean(content, 'autopilot');
110
+ if (autopilot !== undefined) {
111
+ config.autopilot = autopilot;
112
+ }
113
+ else {
114
+ // Legacy fallback: check .autopilot file
115
+ config.autopilot = readLegacyAutopilot(flowDir);
116
+ }
117
+ const commit = extractBoolean(content, 'commit');
118
+ const push = extractBoolean(content, 'push');
119
+ const pr = extractBoolean(content, 'pr');
120
+ const branch = extractString(content, 'branch');
121
+ if (commit !== undefined) {
122
+ config.commit = commit;
123
+ }
124
+ if (push !== undefined) {
125
+ config.push = push;
126
+ }
127
+ if (pr !== undefined) {
128
+ config.pr = pr;
129
+ }
130
+ if (branch !== undefined) {
131
+ config.branch = branch;
132
+ }
133
+ // Legacy fallback for git keys not found in .flowconfig
134
+ if (commit === undefined || push === undefined || branch === undefined) {
135
+ const legacy = readLegacyGitControl(flowDir);
136
+ if (commit === undefined && legacy.commit !== undefined)
137
+ config.commit = legacy.commit;
138
+ if (push === undefined && legacy.push !== undefined)
139
+ config.push = legacy.push;
140
+ if (branch === undefined && legacy.branch !== undefined)
141
+ config.branch = legacy.branch;
142
+ }
143
+ const waveExecution = extractBoolean(content, 'wave_execution');
144
+ if (waveExecution !== undefined)
145
+ config.wave_execution = waveExecution;
146
+ const phaseIsolation = extractBoolean(content, 'phase_isolation');
147
+ if (phaseIsolation !== undefined)
148
+ config.phase_isolation = phaseIsolation;
149
+ const modelRouting = extractBoolean(content, 'model_routing');
150
+ if (modelRouting !== undefined)
151
+ config.model_routing = modelRouting;
152
+ const maxVerifyRetries = extractNumber(content, 'max_verify_retries');
153
+ if (maxVerifyRetries !== undefined) {
154
+ config.max_verify_retries = Math.max(MIN_VERIFY_RETRIES, Math.min(MAX_VERIFY_RETRIES, maxVerifyRetries));
155
+ }
156
+ // Validation cascade: pr → push → commit
157
+ if (config.pr) {
158
+ config.push = true;
159
+ config.commit = true;
160
+ }
161
+ else if (config.push) {
162
+ config.commit = true;
163
+ }
164
+ return config;
165
+ }
166
+ //# sourceMappingURL=flowconfig-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowconfig-parser.js","sourceRoot":"","sources":["../../../src/cli/state/flowconfig-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Heartbeat state parser — reads heartbeat events and calculates unread count.
3
+ *
4
+ * Parses `.heartbeat-state.json` for the last read timestamp,
5
+ * `.heartbeat-events.jsonl` for event records, and checks
6
+ * `.heartbeat-prompt.md` for pending prompt status.
7
+ */
8
+ import type { HeartbeatSummary } from './types.js';
9
+ /**
10
+ * Get the heartbeat summary for a flow directory.
11
+ *
12
+ * Returns unread event count, pending prompt status, and last read timestamp.
13
+ * Handles all edge cases: missing files, empty files, corrupt JSON.
14
+ */
15
+ export declare function getHeartbeatSummary(flowDir: string): HeartbeatSummary;
16
+ //# sourceMappingURL=heartbeat-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-state.d.ts","sourceRoot":"","sources":["../../../src/cli/state/heartbeat-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkFnD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAcrE"}