agentopia 1.0.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 (140) hide show
  1. package/.claude/settings.local.json +28 -0
  2. package/dist/app.d.ts +10 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +121 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/config.d.ts +9 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +19 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/db/database.d.ts +5 -0
  11. package/dist/db/database.d.ts.map +1 -0
  12. package/dist/db/database.js +39 -0
  13. package/dist/db/database.js.map +1 -0
  14. package/dist/db/schema.d.ts +3 -0
  15. package/dist/db/schema.d.ts.map +1 -0
  16. package/dist/db/schema.js +621 -0
  17. package/dist/db/schema.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +49 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/logger.d.ts +4 -0
  23. package/dist/logger.d.ts.map +1 -0
  24. package/dist/logger.js +9 -0
  25. package/dist/logger.js.map +1 -0
  26. package/dist/middleware/auth.d.ts +13 -0
  27. package/dist/middleware/auth.d.ts.map +1 -0
  28. package/dist/middleware/auth.js +733 -0
  29. package/dist/middleware/auth.js.map +1 -0
  30. package/dist/routes/agents.d.ts +3 -0
  31. package/dist/routes/agents.d.ts.map +1 -0
  32. package/dist/routes/agents.js +1058 -0
  33. package/dist/routes/agents.js.map +1 -0
  34. package/dist/routes/issues.d.ts +4 -0
  35. package/dist/routes/issues.d.ts.map +1 -0
  36. package/dist/routes/issues.js +946 -0
  37. package/dist/routes/issues.js.map +1 -0
  38. package/dist/routes/knowledge.d.ts +3 -0
  39. package/dist/routes/knowledge.d.ts.map +1 -0
  40. package/dist/routes/knowledge.js +117 -0
  41. package/dist/routes/knowledge.js.map +1 -0
  42. package/dist/routes/memories.d.ts +3 -0
  43. package/dist/routes/memories.d.ts.map +1 -0
  44. package/dist/routes/memories.js +115 -0
  45. package/dist/routes/memories.js.map +1 -0
  46. package/dist/routes/messages.d.ts +3 -0
  47. package/dist/routes/messages.d.ts.map +1 -0
  48. package/dist/routes/messages.js +130 -0
  49. package/dist/routes/messages.js.map +1 -0
  50. package/dist/routes/projects.d.ts +3 -0
  51. package/dist/routes/projects.d.ts.map +1 -0
  52. package/dist/routes/projects.js +754 -0
  53. package/dist/routes/projects.js.map +1 -0
  54. package/dist/routes/templates.d.ts +3 -0
  55. package/dist/routes/templates.d.ts.map +1 -0
  56. package/dist/routes/templates.js +117 -0
  57. package/dist/routes/templates.js.map +1 -0
  58. package/dist/routes/ui.d.ts +3 -0
  59. package/dist/routes/ui.d.ts.map +1 -0
  60. package/dist/routes/ui.js +38 -0
  61. package/dist/routes/ui.js.map +1 -0
  62. package/dist/services/agent-hierarchy.d.ts +14 -0
  63. package/dist/services/agent-hierarchy.d.ts.map +1 -0
  64. package/dist/services/agent-hierarchy.js +58 -0
  65. package/dist/services/agent-hierarchy.js.map +1 -0
  66. package/dist/services/agent-issue-batch.d.ts +17 -0
  67. package/dist/services/agent-issue-batch.d.ts.map +1 -0
  68. package/dist/services/agent-issue-batch.js +57 -0
  69. package/dist/services/agent-issue-batch.js.map +1 -0
  70. package/dist/services/controller.d.ts +4 -0
  71. package/dist/services/controller.d.ts.map +1 -0
  72. package/dist/services/controller.js +237 -0
  73. package/dist/services/controller.js.map +1 -0
  74. package/dist/services/langgraph-runner.d.ts +33 -0
  75. package/dist/services/langgraph-runner.d.ts.map +1 -0
  76. package/dist/services/langgraph-runner.js +478 -0
  77. package/dist/services/langgraph-runner.js.map +1 -0
  78. package/dist/services/orchestrator.d.ts +9 -0
  79. package/dist/services/orchestrator.d.ts.map +1 -0
  80. package/dist/services/orchestrator.js +116 -0
  81. package/dist/services/orchestrator.js.map +1 -0
  82. package/dist/services/pre-controller.d.ts +7 -0
  83. package/dist/services/pre-controller.d.ts.map +1 -0
  84. package/dist/services/pre-controller.js +101 -0
  85. package/dist/services/pre-controller.js.map +1 -0
  86. package/dist/services/process-manager.d.ts +67 -0
  87. package/dist/services/process-manager.d.ts.map +1 -0
  88. package/dist/services/process-manager.js +938 -0
  89. package/dist/services/process-manager.js.map +1 -0
  90. package/dist/services/project-permissions.d.ts +84 -0
  91. package/dist/services/project-permissions.d.ts.map +1 -0
  92. package/dist/services/project-permissions.js +129 -0
  93. package/dist/services/project-permissions.js.map +1 -0
  94. package/dist/services/scheduler.d.ts +6 -0
  95. package/dist/services/scheduler.d.ts.map +1 -0
  96. package/dist/services/scheduler.js +300 -0
  97. package/dist/services/scheduler.js.map +1 -0
  98. package/dist/services/system-prompt.d.ts +3 -0
  99. package/dist/services/system-prompt.d.ts.map +1 -0
  100. package/dist/services/system-prompt.js +285 -0
  101. package/dist/services/system-prompt.js.map +1 -0
  102. package/dist/services/terminal.d.ts +18 -0
  103. package/dist/services/terminal.d.ts.map +1 -0
  104. package/dist/services/terminal.js +222 -0
  105. package/dist/services/terminal.js.map +1 -0
  106. package/dist/services/websocket.d.ts +15 -0
  107. package/dist/services/websocket.d.ts.map +1 -0
  108. package/dist/services/websocket.js +204 -0
  109. package/dist/services/websocket.js.map +1 -0
  110. package/dist/types.d.ts +108 -0
  111. package/dist/types.d.ts.map +1 -0
  112. package/dist/types.js +3 -0
  113. package/dist/types.js.map +1 -0
  114. package/env.ini +18 -0
  115. package/package.json +38 -0
  116. package/project_id +0 -0
  117. package/public/admin-users.html +188 -0
  118. package/public/agent.html +199 -0
  119. package/public/css/issues.css +275 -0
  120. package/public/css/style.css +1299 -0
  121. package/public/index.html +166 -0
  122. package/public/issue.html +76 -0
  123. package/public/js/agent.js +19 -0
  124. package/public/js/common.js +735 -0
  125. package/public/js/dashboard.js +772 -0
  126. package/public/js/files-panel.js +703 -0
  127. package/public/js/interactive-terminal.js +201 -0
  128. package/public/js/issue-renderer.js +559 -0
  129. package/public/js/issue.js +57 -0
  130. package/public/js/project.js +2425 -0
  131. package/public/js/terminal.js +564 -0
  132. package/public/project.html +430 -0
  133. package/public/terminal.html +67 -0
  134. package/public/vendor/marked.js +74 -0
  135. package/public/vendor/xterm-addon-fit.js +2 -0
  136. package/public/vendor/xterm.css +209 -0
  137. package/public/vendor/xterm.js +2 -0
  138. package/send_message_and_update_issue.js +65 -0
  139. package/tsconfig.json +19 -0
  140. package/update_round2_and_create_round3.js +284 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/services/scheduler.ts"],"names":[],"mappings":";;;;;AAkBA,sDA6BC;AA8OD,kDAMC;AAED,8CAiBC;AAtTD,0DAA6B;AAC7B,6CAA6D;AAE7D,6CAAsD;AACtD,qDAAuD;AACvD,uDAA4R;AAC5R,2DAAgH;AAChH,mDAAoD;AACpD,sCAAmC;AACnC,uDAA+B;AAE/B,IAAI,cAAc,GAA8B,IAAI,CAAC;AACrD,IAAI,aAAa,GAA8B,IAAI,CAAC;AACpD,IAAI,YAAY,GAA8B,IAAI,CAAC;AACnD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAExD,gFAAgF;AAChF,6EAA6E;AAC7E,SAAgB,qBAAqB,CAAC,SAAiB;IACrD,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;IACzB,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BjB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAmC,CAAC;AAC5E,CAAC;AAED,SAAS,eAAe;IACtB,uBAAuB;IACvB,cAAc,GAAG,mBAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;YACzB,MAAM,IAAI,GAAG,eAAM,CAAC,gBAAgB,CAAC;YACrC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,qEAAqE,CACtE,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;YACvB,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACvB,gBAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,OAAO,2BAA2B,IAAI,OAAO,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAM,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,gBAAM,CAAC,IAAI,CAAC,iCAAiC,eAAM,CAAC,gBAAgB,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED,+EAA+E;AAC/E,+DAA+D;AAC/D,SAAS,cAAc;IACrB,aAAa,GAAG,mBAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,EAAe,CAAC;YAEjG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,mBAAmB,GAAG,KAAK,CAAC;gBAEhC,iEAAiE;gBACjE,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAC9B,yFAAyF,CAC1F,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClB,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAE5D,IAAI,CAAC,aAAa,IAAI,CAAC,iBAAiB;oBAAE,SAAS;gBAEnD,yEAAyE;gBACzE,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;SAOxC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAY,CAAC;gBAE1C,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;oBAC3C,IAAI,IAAA,gCAAc,EAAC,MAAM,CAAC,EAAE,CAAC;wBAAE,SAAS;oBACxC,6EAA6E;oBAC7E,IAAI,IAAA,mCAAiB,EAAC,MAAM,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAC3C,wEAAwE;oBACxE,IAAI,IAAA,uCAAqB,EAAC,MAAM,CAAC,EAAE,CAAC;wBAAE,SAAS;oBAC/C,IAAI,CAAC;wBACH,6CAA6C;wBAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;wBAC3B,IAAI,MAAM,CAAC,IAAI;4BAAE,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;wBACpD,IAAI,OAAO,CAAC,gBAAgB;4BAAE,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;wBAC9E,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,wIAAwI,CACzI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAU,CAAC;wBACtC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,MAAM,CAAC,CAAC;4BAC9C,KAAK,CAAC,IAAI,CAAC,IAAA,6CAAyB,EAAC,UAAU,CAAC,CAAC,CAAC;4BAClD,IAAA,8CAA0B,EAAC,EAAE,EAAE,UAAU,CAAC,CAAC;wBAC7C,CAAC;wBACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClC,IAAI,CAAC,MAAM;4BAAE,SAAS;wBACtB,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,IAAI,eAAM,CAAC,sBAAsB,CAAC;wBAC7G,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACpE,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,iCAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBACjF,MAAM,UAAU,GAAG,IAAA,sCAAkB,EAAC,MAAM,CAAC,CAAC;wBAC9C,gBAAM,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,IAAI,UAAU,UAAU,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,oDAAoD,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;wBAChN,IAAA,mCAAiB,EAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;oBACnE,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,gBAAM,CAAC,KAAK,CAAC,CAAC,EAAE,4CAA4C,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBAED,0EAA0E;gBAC1E,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAChC;;mBAES,CACV,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAElB,IAAI,eAAe,EAAE,CAAC;oBACpB,gBAAM,CAAC,IAAI,CAAC,+DAA+D,OAAO,CAAC,IAAI,0BAA0B,CAAC,CAAC;oBACnH,IAAA,mCAAsB,EAAC,OAAO,CAAC,CAAC;oBAChC,mBAAmB,GAAG,IAAI,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBAED,2EAA2E;gBAC3E,2EAA2E;gBAC3E,gDAAgD;gBAChD,gFAAgF;gBAChF,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;SAQ7B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAmC,CAAC;gBAErD,IAAI,UAAU,EAAE,CAAC;oBACf,iGAAiG;oBACjG,IAAI,IAAA,oCAAmB,EAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBACvD,gBAAM,CAAC,IAAI,CAAC,4BAA4B,UAAU,CAAC,MAAM,oDAAoD,CAAC,CAAC;oBACjH,CAAC;yBAAM,CAAC;wBACN,gBAAM,CAAC,IAAI,CAAC,wCAAwC,UAAU,CAAC,MAAM,gCAAgC,OAAO,CAAC,IAAI,6BAA6B,CAAC,CAAC;wBAChJ,IAAA,mCAAsB,EAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;wBAC1D,mBAAmB,GAAG,IAAI,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBAED,IAAI,iBAAiB,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC9C,gBAAM,CAAC,IAAI,CAAC,oCAAoC,iBAAiB,CAAC,MAAM,gBAAgB,OAAO,CAAC,IAAI,8BAA8B,CAAC,CAAC;oBACpI,IAAA,mCAAsB,EAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAM,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,gBAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;AACtD,CAAC;AAED,uFAAuF;AAEvF,oDAAoD;AACpD,cAAc;AACd,4EAA4E;AAC5E,+EAA+E;AAC/E,SAAS,aAAa;IACpB,YAAY,GAAG,mBAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAA,sBAAW,GAAE,CAAC;YACzB,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAC9B,+CAA+C,CAChD,CAAC,GAAG,EAAa,CAAC;YAEnB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,IAAI,IAAA,gCAAc,EAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC7B,yEAAyE;oBACzE,iEAAiE;oBACjE,MAAM,cAAc,GAAG,IAAA,wCAAsB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxD,IAAI,cAAc,IAAI,4CAA0B,EAAE,CAAC;wBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;wBAClD,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,2BAA2B,MAAM,mDAAmD,CAAC,CAAC;wBAChI,EAAE,CAAC,OAAO,CACR,8FAA8F,CAC/F,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,kEAAkE,MAAM,kCAAkC,CAAC,CAAC;wBAChI,IAAA,kCAAgB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC3B,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC9E,IAAA,kCAAgB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC3B,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;4BACzB,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACjC,IAAI,CAAC,IAAA,yBAAc,GAAE;gCAAE,OAAO;4BAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAC;4BAC1F,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gCAClC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC7E,CAAC;wBACH,CAAC,EAAE,KAAK,CAAC,CAAC;wBACV,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC9B,SAAS;oBACX,CAAC;oBAED,gEAAgE;oBAChE,MAAM,MAAM,GAAG,IAAA,gCAAc,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACxC,IAAI,MAAM,IAAI,yCAAuB,EAAE,CAAC;wBACtC,kEAAkE;wBAClE,oDAAoD;wBACpD,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;4BACd,MAAM,SAAS,GAAG,IAAA,uCAAqB,EAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;4BAC7D,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gCAC3B,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,0DAA0D,CAAC,CAAC;gCAC9I,IAAA,oCAAkB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCAC7B,SAAS;4BACX,CAAC;4BACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gCAC5B,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,8DAA8D,CAAC,CAAC;gCAClJ,IAAA,oCAAkB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gCAC7B,SAAS;4BACX,CAAC;4BACD,2DAA2D;4BAC3D,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gCAC1B,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,mEAAmE,CAAC,CAAC;4BACjH,CAAC;wBACH,CAAC;wBACD,IAAA,kCAAgB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;wBAC3C,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,uBAAuB,OAAO,sBAAsB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;wBAC5G,EAAE,CAAC,OAAO,CACR,8FAA8F,CAC/F,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,0CAA0C,OAAO,yBAAyB,CAAC,CAAC;wBAChG,+EAA+E;wBAC/E,8EAA8E;wBAC9E,4EAA4E;wBAC5E,4EAA4E;wBAC5E,kDAAkD;wBAClD,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC9E,IAAA,kCAAgB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC3B,2EAA2E;wBAC3E,qCAAqC;wBACrC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;4BACzB,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;4BACjC,IAAI,CAAC,IAAA,yBAAc,GAAE;gCAAE,OAAO;4BAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAQ,CAAC;4BAC1F,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;gCAClC,EAAE,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC7E,CAAC;wBACH,CAAC,EAAE,KAAK,CAAC,CAAC;wBACV,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,+EAA+E;oBAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU;wBAChC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE;wBACpF,CAAC,CAAC,CAAC,CAAC;oBACN,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAClF,gBAAM,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,IAAI,wBAAwB,UAAU,6CAA6C,CAAC,CAAC;oBAC3H,EAAE,CAAC,OAAO,CAAC,2FAA2F,CAAC;yBACpG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,gBAAM,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,gBAAM,CAAC,IAAI,CAAC,qDAAqD,yCAAuB,GAAG,KAAK,UAAU,CAAC,CAAC;AAC9G,CAAC;AAED,SAAgB,mBAAmB;IACjC,eAAe,EAAE,CAAC;IAClB,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,CAAC;IAEhB,gBAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AACvC,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,cAAc,EAAE,CAAC;QACnB,cAAc,CAAC,IAAI,EAAE,CAAC;QACtB,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,gDAAgD;IAChD,KAAK,MAAM,KAAK,IAAI,qBAAqB;QAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/D,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC9B,gBAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Agent, Project } from '../types';
2
+ export declare function buildSystemPrompt(agent: Agent, project: Project): string;
3
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/services/system-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAM1C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAuSxE"}
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSystemPrompt = buildSystemPrompt;
4
+ const database_1 = require("../db/database");
5
+ const config_1 = require("../config");
6
+ const agent_hierarchy_1 = require("./agent-hierarchy");
7
+ const BASE_URL = () => `http://localhost:${config_1.config.port}`;
8
+ function buildSystemPrompt(agent, project) {
9
+ const db = (0, database_1.getDatabase)();
10
+ const base = BASE_URL();
11
+ const effectiveCommand = (agent.command_template || project.command_template || config_1.config.defaultCommandTemplate || '').trim().toLowerCase();
12
+ const header = `# Argus Multi-Agent Platform — System Instructions
13
+
14
+ You are agent "${agent.name}" in project "${project.name}".
15
+ You are running inside Argus, a multi-agent collaboration platform. Multiple agents work together on a shared project. You coordinate through an issue tracker (like GitHub Issues) where everyone can see all issues and comments.
16
+
17
+ ## Your Identity
18
+ - **Agent ID**: ${agent.id}
19
+ - **Agent Name**: ${agent.name}
20
+ - **Role**: ${agent.role || '(not specified)'}
21
+ - **Is Controller**: ${agent.is_controller ? 'Yes' : 'No'}
22
+ - **Project ID**: ${project.id}`;
23
+ // Agent list
24
+ const hierarchyAgents = (0, agent_hierarchy_1.loadProjectHierarchyAgents)(db, project.id);
25
+ const hierarchyById = new Map(hierarchyAgents.map((item) => [item.id, item]));
26
+ const agents = db.prepare(`
27
+ SELECT a.id, a.name, a.role, a.is_controller, a.status, a.parent_agent_id, parent.name as parent_name
28
+ FROM agents a
29
+ LEFT JOIN agents parent ON parent.id = a.parent_agent_id
30
+ WHERE a.project_id = ?
31
+ ORDER BY a.is_controller DESC, a.created_at
32
+ `).all(project.id);
33
+ const agentList = agents.map(a => ` - ${a.name} (ID: ${a.id}, Role: ${a.role || '-'}, Status: ${a.status}${a.is_controller ? ', Controller' : ''}${a.parent_name ? `, Parent: ${a.parent_name}` : ''})`).join('\n');
34
+ const parentAgent = agent.parent_agent_id ? hierarchyById.get(agent.parent_agent_id) || null : null;
35
+ const directChildren = (0, agent_hierarchy_1.getDirectChildAgents)(hierarchyAgents, agent.id);
36
+ const hierarchyNotes = [];
37
+ if (parentAgent) {
38
+ hierarchyNotes.push(`- 你的直接上级是 ${parentAgent.name}(ID: ${parentAgent.id})`);
39
+ }
40
+ if (directChildren.length > 0) {
41
+ hierarchyNotes.push(`- 你的直接下属:${directChildren.map((child) => `${child.name}(ID: ${child.id})`).join('、')}`);
42
+ }
43
+ if (agent.parent_agent_id) {
44
+ hierarchyNotes.push('- 通信限制:只能通过消息与直接上级或直接下属沟通,不能跨级通信。');
45
+ }
46
+ const agentSection = `
47
+ ## Agents
48
+ ${agentList || ' (none)'}${hierarchyNotes.length > 0 ? `\n\n### Hierarchy\n${hierarchyNotes.join('\n')}` : ''}`;
49
+ // Issue API (available to all)
50
+ // IMPORTANT: use "env -u LD_PRELOAD curl" to bypass any proxy for localhost
51
+ const C = 'env -u LD_PRELOAD curl';
52
+ const issueSection = `
53
+ ## Issue Tracker API
54
+ All agents share a project-wide issue tracker. Issues are visible to everyone.
55
+
56
+ **IMPORTANT**: Always use \`env -u LD_PRELOAD curl\` instead of plain \`curl\` to ensure localhost connections work.
57
+
58
+ **List open issues:**
59
+ \`\`\`bash
60
+ ${C} "${base}/api/projects/${project.id}/issues?status=open"
61
+ \`\`\`
62
+
63
+ **List issues assigned to you:**
64
+ \`\`\`bash
65
+ ${C} "${base}/api/projects/${project.id}/issues?assigned_to=${agent.id}"
66
+ \`\`\`
67
+
68
+ **Create an issue:**
69
+ \`\`\`bash
70
+ ${C} -X POST ${base}/api/projects/${project.id}/issues \\
71
+ -H "Content-Type: application/json" \\
72
+ -d '{"title":"Issue title","body":"Description","created_by":"${agent.id}","assigned_to":"AGENT_ID_or_user_or_all","labels":"bug,urgent"}'
73
+ \`\`\`
74
+
75
+ **View issue detail + comments:**
76
+ \`\`\`bash
77
+ ${C} ${base}/api/issues/{issue_id}
78
+ \`\`\`
79
+
80
+ **Update issue (status, assignment, etc.):**
81
+ \`\`\`bash
82
+ ${C} -X PUT ${base}/api/issues/{issue_id} \\
83
+ -H "Content-Type: application/json" \\
84
+ -d '{"status":"done","actor":"${agent.id}"}'
85
+ \`\`\`
86
+ Status values: \`open\`, \`in_progress\`, \`pending\` (waiting for sub-issues), \`done\`, \`closed\`
87
+
88
+ **Add a comment to an issue:**
89
+ \`\`\`bash
90
+ ${C} -X POST ${base}/api/issues/{issue_id}/comments \\
91
+ -H "Content-Type: application/json" \\
92
+ -d '{"author_id":"${agent.id}","body":"Comment text"}'
93
+ \`\`\`
94
+
95
+ **Add issue dependency (blocks/related_to):**
96
+ \`\`\`bash
97
+ ${C} -X POST ${base}/api/issues/{issue_id}/relations \\
98
+ -H "Content-Type: application/json" \\
99
+ -d '{"type":"blocks","target_issue_id":"TARGET_ISSUE_ID","actor":"${agent.id}"}'
100
+ \`\`\`
101
+
102
+ **Check agent status / logs:**
103
+ \`\`\`bash
104
+ ${C} ${base}/api/agents/{agent_id}/status
105
+ ${C} ${base}/api/agents/{agent_id}/logs?limit=50
106
+ \`\`\``;
107
+ // Controller-only management
108
+ let managementSection = '';
109
+ if (agent.is_controller) {
110
+ managementSection = `
111
+ ## Agent Management (Controller Only)
112
+
113
+ **Create agent:**
114
+ \`\`\`bash
115
+ ${C} -X POST ${base}/api/projects/${project.id}/agents \\
116
+ -H "Content-Type: application/json" \\
117
+ -d '{"name":"agent-name","role":"Role description","working_directory":"/path"}'
118
+ \`\`\`
119
+
120
+ **Start agent:**
121
+ \`\`\`bash
122
+ ${C} -X POST ${base}/api/agents/{agent_id}/start \\
123
+ -H "Content-Type: application/json" -d '{}'
124
+ \`\`\`
125
+
126
+ **Stop / Delete agent:**
127
+ \`\`\`bash
128
+ ${C} -X POST ${base}/api/agents/{agent_id}/stop
129
+ ${C} -X DELETE ${base}/api/agents/{agent_id}
130
+ \`\`\`
131
+
132
+ **Update agent (role, working_directory, custom_instructions):**
133
+ \`\`\`bash
134
+ ${C} -X PUT ${base}/api/agents/{agent_id} \\
135
+ -H "Content-Type: application/json" \\
136
+ -d '{"role":"new role","working_directory":"/new/path","custom_instructions":"extra instructions"}'
137
+ \`\`\`
138
+
139
+ **Update project settings (name, description, task_description):**
140
+ \`\`\`bash
141
+ ${C} -X PUT ${base}/api/projects/${project.id} \\
142
+ -H "Content-Type: application/json" \\
143
+ -d '{"name":"new-name","description":"new description","task_description":"updated task"}'
144
+ \`\`\`
145
+
146
+ ## Controller Workflow
147
+ 1. Review project task and open issues
148
+ 2. Create worker agents as needed
149
+ 3. Create issues and assign them to workers
150
+ 4. Start agents to work on their assigned issues
151
+ 5. Monitor progress via issue comments and agent logs
152
+ 6. Close completed issues
153
+ 7. Create a summary issue for the user when done`;
154
+ }
155
+ else {
156
+ managementSection = `
157
+ ## Worker Guidelines
158
+ - Focus on your assigned issues
159
+ - Update issue status when you start (\`in_progress\`) and finish (\`done\`)
160
+ - Add comments to issues to report progress or ask questions
161
+ - Create new issues if you discover problems. If the new issue is a sub-task of your current issue, set \`parent_id\` to link them: \`{"title":"sub-task","parent_id":"<current-issue-id>",...}\`
162
+ - When all child issues of a parent complete, the system automatically notifies the parent
163
+ - You cannot create or manage other agents — only the controller can`;
164
+ }
165
+ // Knowledge base: auto-inject high importance entries
166
+ const knowledgeEntries = db.prepare("SELECT title, content FROM knowledge_entries WHERE project_id = ? AND importance = 'high' ORDER BY updated_at DESC").all(project.id);
167
+ const knowledgeSection = `
168
+ ## Project Knowledge Base
169
+ ${knowledgeEntries.length > 0
170
+ ? knowledgeEntries.map(k => `### ${k.title}\n${k.content}`).join('\n\n')
171
+ : '(empty)'}
172
+
173
+ **Query knowledge:**
174
+ \`\`\`bash
175
+ ${C} "${base}/api/projects/${project.id}/knowledge?tag=TAG&importance=LEVEL"
176
+ \`\`\`
177
+
178
+ **Add knowledge** (when you discover important patterns, pitfalls, or conventions):
179
+ \`\`\`bash
180
+ ${C} -X POST ${base}/api/projects/${project.id}/knowledge \\
181
+ -H "Content-Type: application/json" \\
182
+ -d '{"title":"Title","content":"What you learned","tags":"tag1,tag2","importance":"high","created_by":"${agent.id}"}'
183
+ \`\`\`
184
+ importance: \`high\` (auto-injected to all agents), \`medium\` (queryable), \`low\`
185
+
186
+ **Update existing knowledge:**
187
+ \`\`\`bash
188
+ ${C} -X PUT ${base}/api/knowledge/{id} \\
189
+ -H "Content-Type: application/json" \\
190
+ -d '{"content":"Updated content","importance":"high"}'
191
+ \`\`\`
192
+
193
+ Record knowledge when you encounter: project conventions, recurring bugs, environment quirks, build/deploy notes, or anything future agents should know.
194
+
195
+ **Full-text search knowledge:**
196
+ \`\`\`bash
197
+ ${C} "${base}/api/projects/${project.id}/knowledge?q=search+terms"
198
+ \`\`\``;
199
+ // Agent memories: inject recent relevant memories
200
+ const agentMemories = db.prepare(`
201
+ SELECT content, tags, scope, created_at FROM agent_memories
202
+ WHERE project_id = ? AND (agent_id = ? OR scope = 'project')
203
+ AND (expires_at IS NULL OR expires_at > datetime('now'))
204
+ ORDER BY created_at DESC LIMIT 10
205
+ `).all(project.id, agent.id);
206
+ const memoriesSection = `
207
+ ## Agent Memories
208
+ ${agentMemories.length > 0
209
+ ? agentMemories.map(m => `- [${m.scope}] ${m.content}${m.tags ? ` (tags: ${m.tags})` : ''}`).join('\n')
210
+ : '(none)'}
211
+
212
+ **Save a memory** (persists across sessions):
213
+ \`\`\`bash
214
+ ${C} -X POST ${base}/api/agents/${agent.id}/memories \\
215
+ -H "Content-Type: application/json" \\
216
+ -d '{"content":"What to remember","tags":"tag1,tag2","scope":"private"}'
217
+ \`\`\`
218
+ scope: \`private\` (only this agent), \`project\` (shared with all agents)
219
+
220
+ **Search memories:**
221
+ \`\`\`bash
222
+ ${C} "${base}/api/agents/${agent.id}/memories?q=search+terms"
223
+ \`\`\``;
224
+ // Direct messages: inject unread messages
225
+ const unreadMessages = db.prepare(`
226
+ SELECT m.id, m.subject, m.body, m.from_agent_id, m.created_at, a.name as from_name
227
+ FROM agent_messages m
228
+ LEFT JOIN agents a ON a.id = m.from_agent_id
229
+ WHERE m.to_agent_id = ? AND m.status = 'unread'
230
+ ORDER BY m.created_at DESC LIMIT 5
231
+ `).all(agent.id);
232
+ const messagesSection = `
233
+ ## Direct Messages
234
+ ${unreadMessages.length > 0
235
+ ? `**Unread messages (${unreadMessages.length}):**\n` + unreadMessages.map(m => `- From **${m.from_name || m.from_agent_id}**: ${m.subject ? `[${m.subject}] ` : ''}${m.body.slice(0, 200)}${m.body.length > 200 ? '...' : ''}`).join('\n')
236
+ : '(no unread messages)'}
237
+
238
+ **Send a message to another agent:**
239
+ \`\`\`bash
240
+ ${C} -X POST ${base}/api/agents/${agent.id}/messages/send \\
241
+ -H "Content-Type: application/json" \\
242
+ -d '{"to":"TARGET_AGENT_ID","subject":"Subject","body":"Message content"}'
243
+ \`\`\`
244
+
245
+ **Check inbox:**
246
+ \`\`\`bash
247
+ ${C} "${base}/api/agents/${agent.id}/messages?status=unread"
248
+ \`\`\`
249
+
250
+ **Mark message as read:**
251
+ \`\`\`bash
252
+ ${C} -X PUT ${base}/api/agents/${agent.id}/messages/{message_id}
253
+ \`\`\``;
254
+ const toolExecutionSection = effectiveCommand.startsWith('codex')
255
+ ? `
256
+ ## Codex 执行约束
257
+ - 对于需要持续运行、后续还要继续交互的命令,第一次就必须使用带 \`tty: true\` 的交互会话。典型例子:dev server、\`tail -f\`、\`watch\`、REPL、\`ssh\`、\`sqlite3\` 交互模式、\`google-chrome --headless --remote-debugging-port=...\`。
258
+ - 只有在拿到交互命令返回的 \`session_id\` 之后,才能继续对该会话调用 \`write_stdin\`。不要对已经结束、没有 tty、或 stdin 已关闭的命令会话继续写入。
259
+ - 如果命令只是一次性执行,不需要后续交互,就不要再调用 \`write_stdin\`;直接等待命令完成并读取输出。
260
+ - 需要后台服务时,优先把“启动 + 检查 + 清理”放进同一个一次性脚本里完成;除非明确需要持续交互,否则不要把浏览器、服务器、调试端口单独常驻后再尝试补写 stdin。
261
+ - 如果你看到 \`stdin is closed for this session\`、\`write_stdin failed\` 或类似提示,立刻放弃旧会话,重新创建新的 tty 会话,不要沿用出错会话。
262
+ - 做 UI/浏览器验证时,优先使用一次性脚本完成完整验证流程;只有在确实需要保持进程存活时才开交互 tty。`
263
+ : '';
264
+ const customSection = agent.custom_instructions
265
+ ? `\n## Custom Instructions\n${agent.custom_instructions}`
266
+ : '';
267
+ const languageSection = `
268
+ ## 工作语言
269
+ 所有沟通和输出请使用**中文**。包括:issue标题和描述、issue评论、代码注释(如有必要)、与其他agent的交流。代码本身(变量名、函数名等)保持英文。`;
270
+ return `${header}
271
+ ${agentSection}
272
+ ${issueSection}
273
+ ${managementSection}
274
+ ${customSection}
275
+ ${knowledgeSection}
276
+ ${memoriesSection}
277
+ ${messagesSection}
278
+ ${toolExecutionSection}
279
+ ${languageSection}
280
+
281
+ ---
282
+ # Your Task Begins Below
283
+ `;
284
+ }
285
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/services/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import * as pty from 'node-pty';
2
+ export interface PtySession {
3
+ pty: pty.IPty;
4
+ agentId: string;
5
+ createdAt: number;
6
+ outputBuffer: string;
7
+ }
8
+ /**
9
+ * Get or create a PTY session for an agent.
10
+ * If `newSession` is true, kill any existing session first.
11
+ */
12
+ export declare function getOrCreatePtySession(agentId: string, newSession: boolean, cols?: number, rows?: number): PtySession;
13
+ export declare function hasPtySession(agentId: string): boolean;
14
+ export declare function killPtySession(agentId: string): boolean;
15
+ export declare function killAllPtySessions(): void;
16
+ export declare function getPtyOutputBuffer(agentId: string): string;
17
+ export declare function getPtySession(agentId: string): PtySession | undefined;
18
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAQhC,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AA6DD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,EACnB,IAAI,GAAE,MAAY,EAClB,IAAI,GAAE,MAAW,GAChB,UAAU,CA+FZ;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAErE"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getOrCreatePtySession = getOrCreatePtySession;
40
+ exports.hasPtySession = hasPtySession;
41
+ exports.killPtySession = killPtySession;
42
+ exports.killAllPtySessions = killAllPtySessions;
43
+ exports.getPtyOutputBuffer = getPtyOutputBuffer;
44
+ exports.getPtySession = getPtySession;
45
+ const pty = __importStar(require("node-pty"));
46
+ const path_1 = __importDefault(require("path"));
47
+ const os_1 = __importDefault(require("os"));
48
+ const database_1 = require("../db/database");
49
+ const config_1 = require("../config");
50
+ const logger_1 = __importDefault(require("../logger"));
51
+ // Map of agentId -> active PTY session
52
+ const ptySessions = new Map();
53
+ const PTY_OUTPUT_BUFFER_MAX = 200000;
54
+ function splitCommandTemplate(template) {
55
+ const tokens = [];
56
+ let current = '';
57
+ let quote = null;
58
+ let escape = false;
59
+ for (const ch of template) {
60
+ if (escape) {
61
+ current += ch;
62
+ escape = false;
63
+ continue;
64
+ }
65
+ if (quote === "'") {
66
+ if (ch === "'")
67
+ quote = null;
68
+ else
69
+ current += ch;
70
+ continue;
71
+ }
72
+ if (ch === '\\') {
73
+ escape = true;
74
+ continue;
75
+ }
76
+ if (quote === '"') {
77
+ if (ch === '"')
78
+ quote = null;
79
+ else
80
+ current += ch;
81
+ continue;
82
+ }
83
+ if (ch === '"' || ch === "'") {
84
+ quote = ch;
85
+ continue;
86
+ }
87
+ if (/\s/.test(ch)) {
88
+ if (current) {
89
+ tokens.push(current);
90
+ current = '';
91
+ }
92
+ continue;
93
+ }
94
+ current += ch;
95
+ }
96
+ if (escape)
97
+ current += '\\';
98
+ if (current)
99
+ tokens.push(current);
100
+ return tokens;
101
+ }
102
+ function needsShellExecution(template) {
103
+ return /[|&;<>()`$]/.test(template);
104
+ }
105
+ /**
106
+ * Get or create a PTY session for an agent.
107
+ * If `newSession` is true, kill any existing session first.
108
+ */
109
+ function getOrCreatePtySession(agentId, newSession, cols = 120, rows = 30) {
110
+ if (!newSession && ptySessions.has(agentId)) {
111
+ return ptySessions.get(agentId);
112
+ }
113
+ // Kill existing session if any
114
+ killPtySession(agentId);
115
+ // Get agent info for working directory
116
+ const db = (0, database_1.getDatabase)();
117
+ const agent = db.prepare('SELECT * FROM agents WHERE id = ?').get(agentId);
118
+ let cwd = agent?.working_directory || process.cwd();
119
+ if (cwd.startsWith('~/'))
120
+ cwd = path_1.default.join(os_1.default.homedir(), cwd.slice(2));
121
+ // Get command template: agent-level > project-level > default
122
+ let commandTemplate = 'claude';
123
+ if (agent) {
124
+ if (agent.command_template) {
125
+ commandTemplate = agent.command_template.trim() || 'claude';
126
+ }
127
+ else {
128
+ const project = db.prepare('SELECT command_template FROM projects WHERE id = ?').get(agent.project_id);
129
+ if (project?.command_template) {
130
+ commandTemplate = project.command_template.trim() || 'claude';
131
+ }
132
+ else {
133
+ commandTemplate = config_1.config.defaultCommandTemplate || 'claude';
134
+ }
135
+ }
136
+ }
137
+ const parsed = splitCommandTemplate(commandTemplate);
138
+ const baseCommand = parsed[0] || 'claude';
139
+ const baseArgs = parsed.slice(1);
140
+ // Build session args for Claude-family CLIs.
141
+ const sessionId = agent?.session_id || undefined;
142
+ const toolName = path_1.default.basename(baseCommand).toLowerCase();
143
+ const isClaudeFamily = toolName === 'cld' || toolName === 'claude' || toolName === 'ccr';
144
+ const sessionArgs = [];
145
+ if (isClaudeFamily) {
146
+ sessionArgs.push('--dangerously-skip-permissions');
147
+ if (sessionId) {
148
+ sessionArgs.push('--resume', sessionId);
149
+ }
150
+ }
151
+ const ptyOptions = {
152
+ name: 'xterm-256color',
153
+ cols,
154
+ rows,
155
+ cwd,
156
+ env: {
157
+ ...process.env,
158
+ no_proxy: [process.env.no_proxy, 'localhost', '127.0.0.1'].filter(Boolean).join(','),
159
+ NO_PROXY: [process.env.NO_PROXY, 'localhost', '127.0.0.1'].filter(Boolean).join(','),
160
+ },
161
+ };
162
+ const finalArgs = [...baseArgs, ...sessionArgs];
163
+ let ptyProcess;
164
+ if (needsShellExecution(commandTemplate)) {
165
+ const escapeArg = (arg) => "'" + arg.replace(/'/g, "'\\''") + "'";
166
+ const shellCommand = [commandTemplate, ...sessionArgs.map(escapeArg)].join(' ');
167
+ logger_1.default.info(`Spawning PTY for agent ${agentId} via shell: ${shellCommand} in ${cwd}`);
168
+ ptyProcess = pty.spawn('/bin/sh', ['-lc', shellCommand], ptyOptions);
169
+ }
170
+ else {
171
+ logger_1.default.info(`Spawning PTY for agent ${agentId}: ${baseCommand} ${finalArgs.join(' ')} in ${cwd}`);
172
+ ptyProcess = pty.spawn(baseCommand, finalArgs, ptyOptions);
173
+ }
174
+ const session = {
175
+ pty: ptyProcess,
176
+ agentId,
177
+ createdAt: Date.now(),
178
+ outputBuffer: '',
179
+ };
180
+ // Keep a rolling output buffer so clients that reconnect (or attach late)
181
+ // can still render the latest terminal content.
182
+ ptyProcess.onData((data) => {
183
+ session.outputBuffer += data;
184
+ if (session.outputBuffer.length > PTY_OUTPUT_BUFFER_MAX) {
185
+ session.outputBuffer = session.outputBuffer.slice(-PTY_OUTPUT_BUFFER_MAX);
186
+ }
187
+ });
188
+ ptySessions.set(agentId, session);
189
+ ptyProcess.onExit(({ exitCode }) => {
190
+ logger_1.default.info(`PTY for agent ${agentId} exited with code ${exitCode}`);
191
+ ptySessions.delete(agentId);
192
+ });
193
+ return session;
194
+ }
195
+ function hasPtySession(agentId) {
196
+ return ptySessions.has(agentId);
197
+ }
198
+ function killPtySession(agentId) {
199
+ const session = ptySessions.get(agentId);
200
+ if (!session)
201
+ return false;
202
+ try {
203
+ session.pty.kill();
204
+ }
205
+ catch (e) {
206
+ logger_1.default.error(e, `Failed to kill PTY for agent ${agentId}`);
207
+ }
208
+ ptySessions.delete(agentId);
209
+ return true;
210
+ }
211
+ function killAllPtySessions() {
212
+ for (const [agentId] of ptySessions) {
213
+ killPtySession(agentId);
214
+ }
215
+ }
216
+ function getPtyOutputBuffer(agentId) {
217
+ return ptySessions.get(agentId)?.outputBuffer || '';
218
+ }
219
+ function getPtySession(agentId) {
220
+ return ptySessions.get(agentId);
221
+ }
222
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/services/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { FastifyInstance } from 'fastify';
2
+ export declare function setupWebSocket(fastify: FastifyInstance): void;
3
+ export declare function broadcastToAgent(agentId: string, data: object): void;
4
+ /**
5
+ * Broadcast a project-level event to all connected clients.
6
+ * Event types: agent_status, issue_created, issue_updated, comment_added
7
+ */
8
+ export declare function broadcastToProject(projectId: string, event: ProjectEvent): void;
9
+ export declare function clearAllPtyCleanupTimers(): void;
10
+ export interface ProjectEvent {
11
+ type: 'agent_status' | 'issue_created' | 'issue_updated' | 'comment_added' | 'agent_message';
12
+ projectId: string;
13
+ data: Record<string, any>;
14
+ }
15
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/services/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoB1C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAwK7D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUpE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAU/E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3B"}