crewly 1.14.1 → 1.15.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 (452) hide show
  1. package/README.md +28 -0
  2. package/config/constants.ts +57 -0
  3. package/config/index.ts +6 -2
  4. package/config/roles/architect/soul.md +31 -0
  5. package/config/roles/auditor/soul.md +30 -0
  6. package/config/roles/backend-developer/soul.md +30 -0
  7. package/config/roles/content-strategist/soul.md +29 -0
  8. package/config/roles/designer/soul.md +30 -0
  9. package/config/roles/developer/soul.md +4 -1
  10. package/config/roles/frontend-developer/soul.md +28 -0
  11. package/config/roles/fullstack-dev/soul.md +28 -0
  12. package/config/roles/generalist/soul.md +28 -0
  13. package/config/roles/ops/soul.md +31 -0
  14. package/config/roles/orchestrator/fragments/lifecycle.md +2 -22
  15. package/config/roles/orchestrator/fragments/recovery.md +1 -1
  16. package/config/roles/orchestrator/prompt.md +18 -49
  17. package/config/roles/orchestrator/soul.md +2 -1
  18. package/config/roles/product-manager/prompt.md +1 -1
  19. package/config/roles/product-manager/soul.md +30 -0
  20. package/config/roles/qa/soul.md +31 -0
  21. package/config/roles/qa-engineer/soul.md +31 -0
  22. package/config/roles/researcher/soul.md +4 -1
  23. package/config/roles/sales/soul.md +30 -0
  24. package/config/roles/support/soul.md +30 -0
  25. package/config/roles/team-leader/prompt.md +1 -1
  26. package/config/roles/team-leader/soul.md +32 -0
  27. package/config/roles/tpm/soul.md +31 -0
  28. package/config/roles/ux-designer/soul.md +31 -0
  29. package/config/skills/_common/lib.sh +124 -2
  30. package/config/skills/_common/lib.test.sh +68 -1
  31. package/config/skills/orchestrator/delegate-task/SKILL.md +17 -21
  32. package/config/skills/orchestrator/delegate-task/execute.sh +18 -9
  33. package/config/skills/orchestrator/delegate-task/execute.test.sh +1 -1
  34. package/config/skills/orchestrator/wiki-migrate/SKILL.md +33 -3
  35. package/config/skills/orchestrator/wiki-migrate/compact.jq +36 -0
  36. package/config/skills/orchestrator/wiki-migrate/execute.sh +35 -5
  37. package/config/skills/orchestrator/wiki-migrate/execute.test.sh +124 -0
  38. package/config/skills/team-leader/verify-output/execute.sh +14 -6
  39. package/config/skills/team-leader/verify-output/execute.test.sh +117 -0
  40. package/dist/backend/backend/src/constants.d.ts +100 -0
  41. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  42. package/dist/backend/backend/src/constants.js +88 -1
  43. package/dist/backend/backend/src/constants.js.map +1 -1
  44. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.d.ts.map +1 -1
  45. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js +4 -6
  46. package/dist/backend/backend/src/controllers/mission/mission-policy.controller.js.map +1 -1
  47. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts +10 -0
  48. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
  49. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +78 -16
  50. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  51. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.d.ts.map +1 -1
  52. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js +11 -1
  53. package/dist/backend/backend/src/controllers/orchestrator/orchestrator.controller.js.map +1 -1
  54. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +14 -0
  55. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  56. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +59 -0
  57. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  58. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts +9 -0
  59. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
  60. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +14 -1
  61. package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
  62. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  63. package/dist/backend/backend/src/controllers/team/team.controller.js +16 -1
  64. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  65. package/dist/backend/backend/src/index.d.ts +12 -0
  66. package/dist/backend/backend/src/index.d.ts.map +1 -1
  67. package/dist/backend/backend/src/index.js +187 -9
  68. package/dist/backend/backend/src/index.js.map +1 -1
  69. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts +139 -0
  70. package/dist/backend/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
  71. package/dist/backend/backend/src/middleware/api-token.middleware.js +301 -0
  72. package/dist/backend/backend/src/middleware/api-token.middleware.js.map +1 -0
  73. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  74. package/dist/backend/backend/src/routes/api.routes.js +3 -1
  75. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  76. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +68 -0
  77. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  78. package/dist/backend/backend/src/services/agent/agent-registration.service.js +280 -10
  79. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  80. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
  81. package/dist/backend/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  82. package/dist/backend/backend/src/services/agent/claude-runtime.service.js +10 -1
  83. package/dist/backend/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  84. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
  85. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  86. package/dist/backend/backend/src/services/agent/codex-runtime.service.js +11 -1
  87. package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  88. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
  89. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
  91. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
  93. package/dist/backend/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js +10 -1
  95. package/dist/backend/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
  97. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  98. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
  99. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  100. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
  101. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
  103. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  104. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -1
  105. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  106. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -1
  107. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  108. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
  109. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  110. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
  111. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  112. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +42 -0
  113. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
  115. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  116. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  117. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
  118. package/dist/backend/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  119. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +26 -2
  120. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  121. package/dist/backend/backend/src/services/backup/backup-archive.service.js +91 -10
  122. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  123. package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts +15 -2
  124. package/dist/backend/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
  125. package/dist/backend/backend/src/services/backup/backup-restore.service.js +100 -21
  126. package/dist/backend/backend/src/services/backup/backup-restore.service.js.map +1 -1
  127. package/dist/backend/backend/src/services/backup/backup.types.d.ts +85 -2
  128. package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
  129. package/dist/backend/backend/src/services/backup/backup.types.js +21 -0
  130. package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
  131. package/dist/backend/backend/src/services/backup/project-file-filter.d.ts +35 -0
  132. package/dist/backend/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
  133. package/dist/backend/backend/src/services/backup/project-file-filter.js +90 -0
  134. package/dist/backend/backend/src/services/backup/project-file-filter.js.map +1 -0
  135. package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
  136. package/dist/backend/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
  137. package/dist/backend/backend/src/services/budget/team-budget-gate.service.js +364 -0
  138. package/dist/backend/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
  139. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -3
  140. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +34 -3
  142. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  143. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +5 -3
  144. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  145. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +6 -4
  146. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  147. package/dist/backend/backend/src/services/core/api-token.service.d.ts +78 -0
  148. package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -0
  149. package/dist/backend/backend/src/services/core/api-token.service.js +149 -0
  150. package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -0
  151. package/dist/backend/backend/src/services/core/logger.service.d.ts +10 -1
  152. package/dist/backend/backend/src/services/core/logger.service.d.ts.map +1 -1
  153. package/dist/backend/backend/src/services/core/logger.service.js +18 -3
  154. package/dist/backend/backend/src/services/core/logger.service.js.map +1 -1
  155. package/dist/backend/backend/src/services/core/storage.service.d.ts +11 -0
  156. package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
  157. package/dist/backend/backend/src/services/core/storage.service.js +34 -0
  158. package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
  159. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +7 -1
  160. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  161. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +29 -7
  162. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  163. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts +140 -0
  164. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.d.ts.map +1 -0
  165. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js +346 -0
  166. package/dist/backend/backend/src/services/hierarchy/hierarchy-escalation-monitor.service.js.map +1 -0
  167. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
  168. package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  169. package/dist/backend/backend/src/services/monitoring/token-usage.service.js +42 -7
  170. package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  171. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
  172. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  173. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
  174. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  175. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts +22 -15
  176. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  177. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +24 -15
  178. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  179. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +7 -1
  180. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  181. package/dist/backend/backend/src/services/session/pty/pty-session.js +9 -3
  182. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  183. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts +27 -0
  184. package/dist/backend/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  185. package/dist/backend/backend/src/services/session/session-handoff.service.js +110 -22
  186. package/dist/backend/backend/src/services/session/session-handoff.service.js.map +1 -1
  187. package/dist/backend/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -1
  188. package/dist/backend/backend/src/services/skill/skill-catalog.service.js +7 -1
  189. package/dist/backend/backend/src/services/skill/skill-catalog.service.js.map +1 -1
  190. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
  191. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  192. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +132 -6
  193. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  194. package/dist/backend/backend/src/services/v3/escalation-boot.d.ts +87 -0
  195. package/dist/backend/backend/src/services/v3/escalation-boot.d.ts.map +1 -0
  196. package/dist/backend/backend/src/services/v3/escalation-boot.js +128 -0
  197. package/dist/backend/backend/src/services/v3/escalation-boot.js.map +1 -0
  198. package/dist/backend/backend/src/services/v3/escalation.service.d.ts +1 -1
  199. package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
  200. package/dist/backend/backend/src/services/v3/escalation.service.js +4 -4
  201. package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
  202. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts +118 -0
  203. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.d.ts.map +1 -0
  204. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js +277 -0
  205. package/dist/backend/backend/src/services/v3/kr-completion.subscriber.js.map +1 -0
  206. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  207. package/dist/backend/backend/src/services/v3/kr-tracking.service.js +3 -6
  208. package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  209. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts +5 -0
  210. package/dist/backend/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  211. package/dist/backend/backend/src/services/v3/mission-executor.service.js +36 -0
  212. package/dist/backend/backend/src/services/v3/mission-executor.service.js.map +1 -1
  213. package/dist/backend/backend/src/services/v3/mission-paths.d.ts +69 -0
  214. package/dist/backend/backend/src/services/v3/mission-paths.d.ts.map +1 -0
  215. package/dist/backend/backend/src/services/v3/mission-paths.js +92 -0
  216. package/dist/backend/backend/src/services/v3/mission-paths.js.map +1 -0
  217. package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
  218. package/dist/backend/backend/src/services/v3/mission-period.service.js +1 -12
  219. package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
  220. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts +74 -2
  221. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
  222. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +251 -9
  223. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
  224. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +6 -4
  225. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -1
  226. package/dist/backend/backend/src/services/v3/okr-cascade.service.js +11 -10
  227. package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -1
  228. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +24 -0
  229. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
  230. package/dist/backend/backend/src/services/v3/okr-review.service.js +63 -3
  231. package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
  232. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts +17 -0
  233. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  234. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +62 -13
  235. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  236. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts +6 -2
  237. package/dist/backend/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  238. package/dist/backend/backend/src/services/v3/v3-data.service.js +14 -9
  239. package/dist/backend/backend/src/services/v3/v3-data.service.js.map +1 -1
  240. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +14 -0
  241. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  242. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +31 -0
  243. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  244. package/dist/backend/backend/src/types/event-bus.types.d.ts +4 -2
  245. package/dist/backend/backend/src/types/event-bus.types.d.ts.map +1 -1
  246. package/dist/backend/backend/src/types/event-bus.types.js +15 -0
  247. package/dist/backend/backend/src/types/event-bus.types.js.map +1 -1
  248. package/dist/backend/backend/src/types/index.d.ts +16 -0
  249. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  250. package/dist/backend/backend/src/types/index.js.map +1 -1
  251. package/dist/backend/backend/src/types/v2/index.d.ts +1 -1
  252. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  253. package/dist/backend/backend/src/types/v2/index.js +1 -1
  254. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  255. package/dist/backend/backend/src/types/v2/mission.types.d.ts +41 -0
  256. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  257. package/dist/backend/backend/src/types/v2/mission.types.js +29 -0
  258. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  259. package/dist/backend/backend/src/utils/network-exposure.utils.d.ts +67 -0
  260. package/dist/backend/backend/src/utils/network-exposure.utils.d.ts.map +1 -0
  261. package/dist/backend/backend/src/utils/network-exposure.utils.js +92 -0
  262. package/dist/backend/backend/src/utils/network-exposure.utils.js.map +1 -0
  263. package/dist/backend/build-info.json +2 -2
  264. package/dist/backend/config/constants.d.ts +53 -0
  265. package/dist/backend/config/constants.d.ts.map +1 -1
  266. package/dist/backend/config/constants.js +54 -0
  267. package/dist/backend/config/constants.js.map +1 -1
  268. package/dist/backend/config/index.d.ts +2 -2
  269. package/dist/backend/config/index.d.ts.map +1 -1
  270. package/dist/backend/config/index.js +6 -6
  271. package/dist/backend/config/index.js.map +1 -1
  272. package/dist/cli/backend/src/constants.d.ts +100 -0
  273. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  274. package/dist/cli/backend/src/constants.js +88 -1
  275. package/dist/cli/backend/src/constants.js.map +1 -1
  276. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +68 -0
  277. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  278. package/dist/cli/backend/src/services/agent/agent-registration.service.js +280 -10
  279. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  280. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts +7 -0
  281. package/dist/cli/backend/src/services/agent/claude-runtime.service.d.ts.map +1 -1
  282. package/dist/cli/backend/src/services/agent/claude-runtime.service.js +10 -1
  283. package/dist/cli/backend/src/services/agent/claude-runtime.service.js.map +1 -1
  284. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +8 -0
  285. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  286. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +11 -1
  287. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  288. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts +36 -1
  289. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  290. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +66 -9
  291. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  292. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts +7 -0
  293. package/dist/cli/backend/src/services/agent/gemini-runtime.service.d.ts.map +1 -1
  294. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js +10 -1
  295. package/dist/cli/backend/src/services/agent/gemini-runtime.service.js.map +1 -1
  296. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +197 -0
  297. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  298. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +422 -3
  299. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  300. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +27 -0
  301. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  302. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +50 -1
  303. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  304. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts +35 -0
  305. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  306. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +73 -2
  307. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  308. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +42 -0
  309. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -1
  310. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +33 -0
  311. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -1
  312. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.d.ts.map +1 -1
  313. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js +13 -1
  314. package/dist/cli/backend/src/services/ai/prompt-modules/recovery.module.js.map +1 -1
  315. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +26 -2
  316. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  317. package/dist/cli/backend/src/services/backup/backup-archive.service.js +91 -10
  318. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  319. package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts +15 -2
  320. package/dist/cli/backend/src/services/backup/backup-restore.service.d.ts.map +1 -1
  321. package/dist/cli/backend/src/services/backup/backup-restore.service.js +100 -21
  322. package/dist/cli/backend/src/services/backup/backup-restore.service.js.map +1 -1
  323. package/dist/cli/backend/src/services/backup/backup.types.d.ts +85 -2
  324. package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
  325. package/dist/cli/backend/src/services/backup/backup.types.js +21 -0
  326. package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
  327. package/dist/cli/backend/src/services/backup/project-file-filter.d.ts +35 -0
  328. package/dist/cli/backend/src/services/backup/project-file-filter.d.ts.map +1 -0
  329. package/dist/cli/backend/src/services/backup/project-file-filter.js +90 -0
  330. package/dist/cli/backend/src/services/backup/project-file-filter.js.map +1 -0
  331. package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts +165 -0
  332. package/dist/cli/backend/src/services/budget/team-budget-gate.service.d.ts.map +1 -0
  333. package/dist/cli/backend/src/services/budget/team-budget-gate.service.js +364 -0
  334. package/dist/cli/backend/src/services/budget/team-budget-gate.service.js.map +1 -0
  335. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +23 -3
  336. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  337. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +34 -3
  338. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  339. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +5 -3
  340. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  341. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +6 -4
  342. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  343. package/dist/cli/backend/src/services/core/api-token.service.d.ts +78 -0
  344. package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -0
  345. package/dist/cli/backend/src/services/core/api-token.service.js +149 -0
  346. package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -0
  347. package/dist/cli/backend/src/services/core/logger.service.d.ts +10 -1
  348. package/dist/cli/backend/src/services/core/logger.service.d.ts.map +1 -1
  349. package/dist/cli/backend/src/services/core/logger.service.js +18 -3
  350. package/dist/cli/backend/src/services/core/logger.service.js.map +1 -1
  351. package/dist/cli/backend/src/services/core/storage.service.d.ts +11 -0
  352. package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
  353. package/dist/cli/backend/src/services/core/storage.service.js +34 -0
  354. package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
  355. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +27 -3
  356. package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
  357. package/dist/cli/backend/src/services/monitoring/token-usage.service.js +42 -7
  358. package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
  359. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +47 -0
  360. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -1
  361. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js +67 -1
  362. package/dist/cli/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -1
  363. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts +7 -1
  364. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  365. package/dist/cli/backend/src/services/session/pty/pty-session.js +9 -3
  366. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  367. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts +27 -0
  368. package/dist/cli/backend/src/services/session/session-handoff.service.d.ts.map +1 -1
  369. package/dist/cli/backend/src/services/session/session-handoff.service.js +110 -22
  370. package/dist/cli/backend/src/services/session/session-handoff.service.js.map +1 -1
  371. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +52 -0
  372. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  373. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +132 -6
  374. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  375. package/dist/cli/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  376. package/dist/cli/backend/src/services/v3/kr-tracking.service.js +3 -6
  377. package/dist/cli/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  378. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts +5 -0
  379. package/dist/cli/backend/src/services/v3/mission-executor.service.d.ts.map +1 -1
  380. package/dist/cli/backend/src/services/v3/mission-executor.service.js +36 -0
  381. package/dist/cli/backend/src/services/v3/mission-executor.service.js.map +1 -1
  382. package/dist/cli/backend/src/services/v3/mission-paths.d.ts +69 -0
  383. package/dist/cli/backend/src/services/v3/mission-paths.d.ts.map +1 -0
  384. package/dist/cli/backend/src/services/v3/mission-paths.js +92 -0
  385. package/dist/cli/backend/src/services/v3/mission-paths.js.map +1 -0
  386. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts +6 -2
  387. package/dist/cli/backend/src/services/v3/v3-data.service.d.ts.map +1 -1
  388. package/dist/cli/backend/src/services/v3/v3-data.service.js +14 -9
  389. package/dist/cli/backend/src/services/v3/v3-data.service.js.map +1 -1
  390. package/dist/cli/backend/src/types/event-bus.types.d.ts +4 -2
  391. package/dist/cli/backend/src/types/event-bus.types.d.ts.map +1 -1
  392. package/dist/cli/backend/src/types/event-bus.types.js +15 -0
  393. package/dist/cli/backend/src/types/event-bus.types.js.map +1 -1
  394. package/dist/cli/backend/src/types/index.d.ts +16 -0
  395. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  396. package/dist/cli/backend/src/types/index.js.map +1 -1
  397. package/dist/cli/backend/src/types/v2/index.d.ts +1 -1
  398. package/dist/cli/backend/src/types/v2/index.d.ts.map +1 -1
  399. package/dist/cli/backend/src/types/v2/index.js +1 -1
  400. package/dist/cli/backend/src/types/v2/index.js.map +1 -1
  401. package/dist/cli/backend/src/types/v2/mission.types.d.ts +41 -0
  402. package/dist/cli/backend/src/types/v2/mission.types.d.ts.map +1 -1
  403. package/dist/cli/backend/src/types/v2/mission.types.js +29 -0
  404. package/dist/cli/backend/src/types/v2/mission.types.js.map +1 -1
  405. package/dist/cli/cli/src/commands/backup.d.ts +25 -0
  406. package/dist/cli/cli/src/commands/backup.d.ts.map +1 -1
  407. package/dist/cli/cli/src/commands/backup.js +120 -6
  408. package/dist/cli/cli/src/commands/backup.js.map +1 -1
  409. package/dist/cli/cli/src/commands/doctor.d.ts +58 -0
  410. package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -0
  411. package/dist/cli/cli/src/commands/doctor.js +163 -0
  412. package/dist/cli/cli/src/commands/doctor.js.map +1 -0
  413. package/dist/cli/cli/src/commands/service.d.ts +68 -11
  414. package/dist/cli/cli/src/commands/service.d.ts.map +1 -1
  415. package/dist/cli/cli/src/commands/service.js +183 -51
  416. package/dist/cli/cli/src/commands/service.js.map +1 -1
  417. package/dist/cli/cli/src/commands/token.d.ts +53 -0
  418. package/dist/cli/cli/src/commands/token.d.ts.map +1 -0
  419. package/dist/cli/cli/src/commands/token.js +70 -0
  420. package/dist/cli/cli/src/commands/token.js.map +1 -0
  421. package/dist/cli/cli/src/index.js +40 -5
  422. package/dist/cli/cli/src/index.js.map +1 -1
  423. package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts +21 -0
  424. package/dist/cli/cli/src/scripts/check-native-toolchain.d.ts.map +1 -0
  425. package/dist/cli/cli/src/scripts/check-native-toolchain.js +40 -0
  426. package/dist/cli/cli/src/scripts/check-native-toolchain.js.map +1 -0
  427. package/dist/cli/cli/src/utils/native-toolchain.d.ts +111 -0
  428. package/dist/cli/cli/src/utils/native-toolchain.d.ts.map +1 -0
  429. package/dist/cli/cli/src/utils/native-toolchain.js +146 -0
  430. package/dist/cli/cli/src/utils/native-toolchain.js.map +1 -0
  431. package/dist/cli/cli/src/utils/package-root.d.ts +55 -0
  432. package/dist/cli/cli/src/utils/package-root.d.ts.map +1 -0
  433. package/dist/cli/cli/src/utils/package-root.js +107 -0
  434. package/dist/cli/cli/src/utils/package-root.js.map +1 -0
  435. package/dist/cli/cli/src/utils/version-check.d.ts +18 -2
  436. package/dist/cli/cli/src/utils/version-check.d.ts.map +1 -1
  437. package/dist/cli/cli/src/utils/version-check.js +51 -4
  438. package/dist/cli/cli/src/utils/version-check.js.map +1 -1
  439. package/dist/cli/config/constants.d.ts +53 -0
  440. package/dist/cli/config/constants.d.ts.map +1 -1
  441. package/dist/cli/config/constants.js +54 -0
  442. package/dist/cli/config/constants.js.map +1 -1
  443. package/dist/cli/config/index.d.ts +2 -2
  444. package/dist/cli/config/index.d.ts.map +1 -1
  445. package/dist/cli/config/index.js +6 -6
  446. package/dist/cli/config/index.js.map +1 -1
  447. package/frontend/dist/assets/index-203224f9.js +4961 -0
  448. package/frontend/dist/assets/index-dcaf6c88.css +42 -0
  449. package/frontend/dist/index.html +2 -2
  450. package/package.json +3 -2
  451. package/frontend/dist/assets/index-190a957f.js +0 -4961
  452. package/frontend/dist/assets/index-88feb412.css +0 -42
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Native-module build toolchain preflight.
3
+ *
4
+ * `node-pty` (and `better-sqlite3` on platforms without a prebuild) compile
5
+ * through node-gyp, which needs a C++ compiler, `make` and `python3`. When one
6
+ * is missing the operator sees forty lines of gyp output ending in
7
+ * `make: g++: No such file or directory` (server-install finding 11). This
8
+ * module answers three questions with no dependencies beyond node builtins
9
+ * — it runs from `preinstall`, before any dependency exists:
10
+ *
11
+ * 1. Is node-pty already built (or prebuilt) for this platform?
12
+ * 2. Which build tools are missing?
13
+ * 3. What is the one-line package-manager command that installs them?
14
+ *
15
+ * @module cli/utils/native-toolchain
16
+ */
17
+ import * as fs from 'fs';
18
+ import * as path from 'path';
19
+ /** Tools node-gyp needs to compile node-pty from source. */
20
+ export const NATIVE_BUILD_TOOLS = [
21
+ { label: 'g++', candidates: ['g++', 'c++', 'clang++'] },
22
+ { label: 'make', candidates: ['make', 'gmake'] },
23
+ { label: 'python3', candidates: ['python3', 'python'] },
24
+ ];
25
+ /** Package managers and the command that installs the full toolchain. */
26
+ export const TOOLCHAIN_INSTALL_COMMANDS = [
27
+ { manager: 'apt-get', command: 'sudo apt-get update && sudo apt-get install -y build-essential python3' },
28
+ { manager: 'dnf', command: 'sudo dnf install -y gcc-c++ make python3' },
29
+ { manager: 'yum', command: 'sudo yum install -y gcc-c++ make python3' },
30
+ { manager: 'apk', command: 'sudo apk add --no-cache build-base python3' },
31
+ { manager: 'zypper', command: 'sudo zypper install -y gcc-c++ make python3' },
32
+ { manager: 'pacman', command: 'sudo pacman -S --needed base-devel python' },
33
+ { manager: 'brew', command: 'xcode-select --install # or: brew install make python' },
34
+ ];
35
+ /** Fallback hint when no known package manager is on PATH. */
36
+ const GENERIC_INSTALL_HINT = 'install a C++ compiler (g++ or clang++), make and python3 with your package manager';
37
+ /** Relative path of node-pty's compiled binding inside a package root. */
38
+ const NODE_PTY_BINDING = path.join('node_modules', 'node-pty', 'build', 'Release', 'pty.node');
39
+ /** Relative path of node-pty's prebuilds directory (absent in node-pty 1.x). */
40
+ const NODE_PTY_PREBUILDS = path.join('node_modules', 'node-pty', 'prebuilds');
41
+ /**
42
+ * Check whether an executable is on PATH without spawning a shell.
43
+ *
44
+ * @param bin - Executable name
45
+ * @param env - Environment to read PATH/PATHEXT from
46
+ * @returns true when an executable file with that name exists on PATH
47
+ */
48
+ export function isOnPath(bin, env = process.env) {
49
+ const dirs = (env.PATH ?? '').split(path.delimiter).filter(Boolean);
50
+ const exts = process.platform === 'win32' ? (env.PATHEXT ?? '.EXE;.CMD;.BAT').split(';') : [''];
51
+ for (const dir of dirs) {
52
+ for (const ext of exts) {
53
+ const candidate = path.join(dir, bin + ext);
54
+ try {
55
+ fs.accessSync(candidate, fs.constants.X_OK);
56
+ if (fs.statSync(candidate).isFile())
57
+ return true;
58
+ }
59
+ catch {
60
+ // not here — keep looking
61
+ }
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+ /**
67
+ * Determine which build tools are missing.
68
+ *
69
+ * @param which - PATH lookup (injectable for tests)
70
+ * @returns Labels of the missing requirements, in {@link NATIVE_BUILD_TOOLS} order
71
+ */
72
+ export function detectMissingBuildTools(which = isOnPath) {
73
+ // Call with a single argument: Array#some would otherwise pass (value, index,
74
+ // array) and the index would land in isOnPath's `env` parameter.
75
+ return NATIVE_BUILD_TOOLS.filter((req) => !req.candidates.some((bin) => which(bin))).map((req) => req.label);
76
+ }
77
+ /**
78
+ * Pick the install command for the first known package manager on PATH.
79
+ *
80
+ * @param which - PATH lookup (injectable for tests)
81
+ * @returns The install command, or a generic hint when none is recognised
82
+ */
83
+ export function toolchainInstallHint(which = isOnPath) {
84
+ const match = TOOLCHAIN_INSTALL_COMMANDS.find((entry) => which(entry.manager));
85
+ return match ? match.command : GENERIC_INSTALL_HINT;
86
+ }
87
+ /**
88
+ * Inspect node-pty's install state under a package root.
89
+ *
90
+ * @param packageRoot - Directory containing `node_modules/`
91
+ * @param platform - Platform tag (defaults to the current one)
92
+ * @param arch - Arch tag (defaults to the current one)
93
+ * @returns Build/prebuild status
94
+ */
95
+ export function nodePtyBuildStatus(packageRoot, platform = process.platform, arch = process.arch) {
96
+ return {
97
+ built: fs.existsSync(path.join(packageRoot, NODE_PTY_BINDING)),
98
+ prebuilt: fs.existsSync(path.join(packageRoot, NODE_PTY_PREBUILDS, `${platform}-${arch}`)),
99
+ };
100
+ }
101
+ /**
102
+ * Run the preflight: when node-pty has to be compiled and the toolchain is
103
+ * incomplete, produce ONE message naming the missing tools and the exact
104
+ * install command.
105
+ *
106
+ * @param options - Injection points
107
+ * @param options.packageRoot - Directory containing `node_modules/` (used to detect an existing build)
108
+ * @param options.which - PATH lookup
109
+ * @param options.platform - Platform tag for prebuild detection
110
+ * @param options.arch - Arch tag for prebuild detection
111
+ * @param options.force - Report missing tools even when node-pty is already built (doctor mode)
112
+ * @returns The check result
113
+ */
114
+ export function checkNativeToolchain(options) {
115
+ const which = options.which ?? isOnPath;
116
+ const nodePty = nodePtyBuildStatus(options.packageRoot, options.platform, options.arch);
117
+ const missing = detectMissingBuildTools(which);
118
+ const installHint = toolchainInstallHint(which);
119
+ const needsBuild = !nodePty.built && !nodePty.prebuilt;
120
+ if (missing.length === 0 || (!needsBuild && !options.force)) {
121
+ return { ok: true, missing, installHint, nodePty, message: '' };
122
+ }
123
+ const message = formatToolchainMessage(missing, installHint, needsBuild);
124
+ return { ok: false, missing, installHint, nodePty, message };
125
+ }
126
+ /**
127
+ * Render the single warning line block.
128
+ *
129
+ * @param missing - Missing tool labels
130
+ * @param installHint - Install command
131
+ * @param needsBuild - Whether node-pty still has to be compiled
132
+ * @returns Multi-line message
133
+ */
134
+ export function formatToolchainMessage(missing, installHint, needsBuild) {
135
+ const tools = missing.join(', ');
136
+ const consequence = needsBuild
137
+ ? 'node-pty has no prebuilt binary for this platform and must be compiled, so `npm install` will fail in node-gyp.'
138
+ : 'node-pty is currently built, but the next `npm rebuild` / upgrade will fail in node-gyp.';
139
+ return [
140
+ `[crewly] Missing native build tool${missing.length > 1 ? 's' : ''}: ${tools}.`,
141
+ `[crewly] ${consequence}`,
142
+ `[crewly] Install them, then re-run the install:`,
143
+ `[crewly] ${installHint}`,
144
+ ].join('\n');
145
+ }
146
+ //# sourceMappingURL=native-toolchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-toolchain.js","sourceRoot":"","sources":["../../../../../cli/src/utils/native-toolchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Package-root resolution for the CLI.
3
+ *
4
+ * `crewly service install` (and anything else that needs the install
5
+ * directory) used to walk up from `process.cwd()`, which only works when the
6
+ * operator happens to be inside the package directory. For a global npm
7
+ * install the CLI already knows where it lives — the entry script is inside
8
+ * the package — so resolve from the CLI's own location first and fall back to
9
+ * the cwd walk only for source checkouts run through `tsx`.
10
+ *
11
+ * `import.meta.url` cannot appear in this module (ts-jest compiles the CLI as
12
+ * CommonJS, where the meta-property is a compile error), so the ESM entry
13
+ * (`cli/src/index.ts`) registers its module directory via
14
+ * {@link setCliModuleDir}; `process.argv[1]` (realpath'd, so the global
15
+ * `bin` symlink resolves into the package) is the second anchor.
16
+ *
17
+ * @module cli/utils/package-root
18
+ */
19
+ /**
20
+ * Register the directory of the CLI entry module so package-root resolution
21
+ * can anchor on it. Called once by `cli/src/index.ts`.
22
+ *
23
+ * @param dir - Absolute directory of the running CLI module
24
+ */
25
+ export declare function setCliModuleDir(dir: string | null): void;
26
+ /**
27
+ * Walk up from `startDir` looking for a `package.json` whose `name` is
28
+ * `crewly`.
29
+ *
30
+ * @param startDir - Directory to start searching from
31
+ * @returns Absolute package root, or null when no parent matches
32
+ */
33
+ export declare function findPackageRoot(startDir: string): string | null;
34
+ /**
35
+ * Candidate directories to anchor the package-root walk on, most reliable
36
+ * first: the registered CLI module dir, the realpath of the entry script
37
+ * (`process.argv[1]`), then the current working directory.
38
+ *
39
+ * @param argv1 - Entry script path (defaults to `process.argv[1]`)
40
+ * @param cwd - Working directory (defaults to `process.cwd()`)
41
+ * @returns Ordered, de-duplicated candidate directories
42
+ */
43
+ export declare function packageRootCandidates(argv1?: string | undefined, cwd?: string): string[];
44
+ /**
45
+ * Resolve the Crewly package root regardless of the caller's cwd.
46
+ *
47
+ * Tries each candidate from {@link packageRootCandidates} in order and returns
48
+ * the first that sits inside a Crewly package.
49
+ *
50
+ * @param argv1 - Entry script path (defaults to `process.argv[1]`)
51
+ * @param cwd - Working directory (defaults to `process.cwd()`)
52
+ * @returns Absolute package root, or null when none of the anchors is inside a Crewly install
53
+ */
54
+ export declare function resolvePackageRoot(argv1?: string | undefined, cwd?: string): string | null;
55
+ //# sourceMappingURL=package-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-root.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/package-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAWH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,GAAE,MAAM,GAAG,SAA2B,EAC3C,GAAG,GAAE,MAAsB,GACzB,MAAM,EAAE,CAYV;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,GAAE,MAAM,GAAG,SAA2B,EAC3C,GAAG,GAAE,MAAsB,GACzB,MAAM,GAAG,IAAI,CAMf"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Package-root resolution for the CLI.
3
+ *
4
+ * `crewly service install` (and anything else that needs the install
5
+ * directory) used to walk up from `process.cwd()`, which only works when the
6
+ * operator happens to be inside the package directory. For a global npm
7
+ * install the CLI already knows where it lives — the entry script is inside
8
+ * the package — so resolve from the CLI's own location first and fall back to
9
+ * the cwd walk only for source checkouts run through `tsx`.
10
+ *
11
+ * `import.meta.url` cannot appear in this module (ts-jest compiles the CLI as
12
+ * CommonJS, where the meta-property is a compile error), so the ESM entry
13
+ * (`cli/src/index.ts`) registers its module directory via
14
+ * {@link setCliModuleDir}; `process.argv[1]` (realpath'd, so the global
15
+ * `bin` symlink resolves into the package) is the second anchor.
16
+ *
17
+ * @module cli/utils/package-root
18
+ */
19
+ import * as fs from 'fs';
20
+ import * as path from 'path';
21
+ /** Package name that identifies the Crewly install root. */
22
+ const CREWLY_PACKAGE_NAME = 'crewly';
23
+ /** Module directory registered by the ESM entry point (via `import.meta.url`). */
24
+ let registeredModuleDir = null;
25
+ /**
26
+ * Register the directory of the CLI entry module so package-root resolution
27
+ * can anchor on it. Called once by `cli/src/index.ts`.
28
+ *
29
+ * @param dir - Absolute directory of the running CLI module
30
+ */
31
+ export function setCliModuleDir(dir) {
32
+ registeredModuleDir = dir;
33
+ }
34
+ /**
35
+ * Walk up from `startDir` looking for a `package.json` whose `name` is
36
+ * `crewly`.
37
+ *
38
+ * @param startDir - Directory to start searching from
39
+ * @returns Absolute package root, or null when no parent matches
40
+ */
41
+ export function findPackageRoot(startDir) {
42
+ let current = path.resolve(startDir);
43
+ let parent = path.dirname(current);
44
+ // Stop once dirname() no longer changes the path (filesystem root).
45
+ for (;;) {
46
+ const pkgPath = path.join(current, 'package.json');
47
+ if (fs.existsSync(pkgPath)) {
48
+ try {
49
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
50
+ if (pkg.name === CREWLY_PACKAGE_NAME) {
51
+ return current;
52
+ }
53
+ }
54
+ catch {
55
+ // Malformed package.json — keep searching
56
+ }
57
+ }
58
+ if (parent === current) {
59
+ return null;
60
+ }
61
+ current = parent;
62
+ parent = path.dirname(current);
63
+ }
64
+ }
65
+ /**
66
+ * Candidate directories to anchor the package-root walk on, most reliable
67
+ * first: the registered CLI module dir, the realpath of the entry script
68
+ * (`process.argv[1]`), then the current working directory.
69
+ *
70
+ * @param argv1 - Entry script path (defaults to `process.argv[1]`)
71
+ * @param cwd - Working directory (defaults to `process.cwd()`)
72
+ * @returns Ordered, de-duplicated candidate directories
73
+ */
74
+ export function packageRootCandidates(argv1 = process.argv[1], cwd = process.cwd()) {
75
+ const candidates = [];
76
+ if (registeredModuleDir)
77
+ candidates.push(registeredModuleDir);
78
+ if (argv1) {
79
+ try {
80
+ candidates.push(path.dirname(fs.realpathSync(argv1)));
81
+ }
82
+ catch {
83
+ candidates.push(path.dirname(path.resolve(argv1)));
84
+ }
85
+ }
86
+ candidates.push(cwd);
87
+ return [...new Set(candidates)];
88
+ }
89
+ /**
90
+ * Resolve the Crewly package root regardless of the caller's cwd.
91
+ *
92
+ * Tries each candidate from {@link packageRootCandidates} in order and returns
93
+ * the first that sits inside a Crewly package.
94
+ *
95
+ * @param argv1 - Entry script path (defaults to `process.argv[1]`)
96
+ * @param cwd - Working directory (defaults to `process.cwd()`)
97
+ * @returns Absolute package root, or null when none of the anchors is inside a Crewly install
98
+ */
99
+ export function resolvePackageRoot(argv1 = process.argv[1], cwd = process.cwd()) {
100
+ for (const dir of packageRootCandidates(argv1, cwd)) {
101
+ const root = findPackageRoot(dir);
102
+ if (root)
103
+ return root;
104
+ }
105
+ return null;
106
+ }
107
+ //# sourceMappingURL=package-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-root.js","sourceRoot":"","sources":["../../../../../cli/src/utils/package-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,4DAA4D;AAC5D,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC,kFAAkF;AAClF,IAAI,mBAAmB,GAAkB,IAAI,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkB;IACjD,mBAAmB,GAAG,GAAG,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,oEAAoE;IACpE,SAAS,CAAC;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAsB,CAAC;gBAC/E,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACtC,OAAO,OAAO,CAAC;gBAChB,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,0CAA0C;YAC3C,CAAC;QACF,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;QACjB,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACpC,QAA4B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3C,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,mBAAmB;QAAE,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,CAAC;QACX,IAAI,CAAC;YACJ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACR,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CACjC,QAA4B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3C,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,KAAK,MAAM,GAAG,IAAI,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -32,11 +32,27 @@ export interface VersionCheckResult {
32
32
  updateAvailable: boolean;
33
33
  }
34
34
  /**
35
- * Reads the current Crewly version from the root package.json.
35
+ * Register the directory of the CLI's own entry module so version lookups
36
+ * resolve the *installed* Crewly package rather than whatever project the
37
+ * user happens to be standing in.
36
38
  *
39
+ * @param dir - Absolute directory of the CLI entry module (null clears it)
40
+ */
41
+ export declare function registerCliModuleDir(dir: string | null): void;
42
+ /**
43
+ * Reads the installed Crewly version from the package's own package.json.
44
+ *
45
+ * Resolution starts from the CLI module's location — never from
46
+ * `process.cwd()`. The old cwd-based lookup returned `1.0.0` (the hardcoded
47
+ * fallback) from any directory outside the package and, worse, reported a
48
+ * *different* project's version when run inside one (server-install finding 5).
49
+ *
50
+ * @param startDir - Directory to walk up from (defaults to the registered
51
+ * CLI module dir, then the entry script's real path)
37
52
  * @returns The version string from package.json
53
+ * @throws Error if no package.json with `"name": "crewly"` is found above startDir
38
54
  */
39
- export declare function getLocalVersion(): string;
55
+ export declare function getLocalVersion(startDir?: string): string;
40
56
  /**
41
57
  * Reads the disk-cached version check result.
42
58
  *
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;CACzB;AAwCD;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAeD;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,YAAY,GAAG,IAAI,CAe/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBhD;AAsBD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC,CA4ClE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW7E"}
1
+ {"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/version-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;CACzB;AA8CD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE7D;AAqBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASzD;AAeD;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,YAAY,GAAG,IAAI,CAe/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAgBhD;AAsBD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC,CA4ClE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW7E"}
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @module cli/utils/version-check
13
13
  */
14
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
14
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, realpathSync } from 'fs';
15
15
  import path from 'path';
16
16
  import os from 'os';
17
17
  import chalk from 'chalk';
@@ -47,14 +47,61 @@ function findPackageRoot(startDir) {
47
47
  current = parent;
48
48
  }
49
49
  }
50
+ /**
51
+ * Directory of the CLI entry module, registered by `cli/src/index.ts` from
52
+ * `import.meta.url`. Kept out of this module because ts-jest compiles tests
53
+ * as CommonJS where `import.meta` is a syntax error (see
54
+ * `backend/src/utils/node-require.utils.ts` for the banked lessons).
55
+ */
56
+ let cliModuleDir = null;
57
+ /**
58
+ * Register the directory of the CLI's own entry module so version lookups
59
+ * resolve the *installed* Crewly package rather than whatever project the
60
+ * user happens to be standing in.
61
+ *
62
+ * @param dir - Absolute directory of the CLI entry module (null clears it)
63
+ */
64
+ export function registerCliModuleDir(dir) {
65
+ cliModuleDir = dir;
66
+ }
67
+ /**
68
+ * Best-effort directory of the running CLI when nothing was registered:
69
+ * the real path of the entry script (`process.argv[1]`), which for a global
70
+ * install resolves through the `bin` symlink into the package tree.
71
+ *
72
+ * @returns Directory of the entry script, or null when unavailable
73
+ */
74
+ function entryScriptDir() {
75
+ const entry = process.argv[1];
76
+ if (!entry)
77
+ return null;
78
+ try {
79
+ return path.dirname(realpathSync(entry));
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
50
85
  // ========================= Functions =========================
51
86
  /**
52
- * Reads the current Crewly version from the root package.json.
87
+ * Reads the installed Crewly version from the package's own package.json.
53
88
  *
89
+ * Resolution starts from the CLI module's location — never from
90
+ * `process.cwd()`. The old cwd-based lookup returned `1.0.0` (the hardcoded
91
+ * fallback) from any directory outside the package and, worse, reported a
92
+ * *different* project's version when run inside one (server-install finding 5).
93
+ *
94
+ * @param startDir - Directory to walk up from (defaults to the registered
95
+ * CLI module dir, then the entry script's real path)
54
96
  * @returns The version string from package.json
97
+ * @throws Error if no package.json with `"name": "crewly"` is found above startDir
55
98
  */
56
- export function getLocalVersion() {
57
- const root = findPackageRoot(process.cwd());
99
+ export function getLocalVersion(startDir) {
100
+ const from = startDir ?? cliModuleDir ?? entryScriptDir();
101
+ if (!from) {
102
+ throw new Error('Could not determine the Crewly CLI module location for version lookup');
103
+ }
104
+ const root = findPackageRoot(from);
58
105
  const pkgPath = path.join(root, 'package.json');
59
106
  const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
60
107
  return pkg.version;
@@ -1 +1 @@
1
- {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../../../cli/src/utils/version-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../../../cli/src/utils/version-check.ts"],"names":[],"mappings":"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"}
@@ -223,6 +223,59 @@ export declare const WEB_CONSTANTS: {
223
223
  readonly FALLBACK_POLL_INTERVAL: 5000;
224
224
  };
225
225
  };
226
+ /**
227
+ * Network exposure + API token authentication for the OSS server.
228
+ *
229
+ * The REST API and WebSocket endpoints are open to loopback callers (local
230
+ * skills, the local dashboard) and require a shared API token from every
231
+ * other address. See README "Securing a server install".
232
+ */
233
+ export declare const API_SECURITY_CONSTANTS: {
234
+ /** Environment variable names */
235
+ readonly ENV: {
236
+ /** Host/interface the HTTP server binds to (default: all interfaces) */
237
+ readonly BIND_HOST: "CREWLY_BIND_HOST";
238
+ /** Pinned API token; when unset one is generated on first boot */
239
+ readonly API_TOKEN: "CREWLY_API_TOKEN";
240
+ /** Set to `1` to honour `X-Forwarded-For` when classifying loopback callers */
241
+ readonly TRUST_PROXY: "CREWLY_TRUST_PROXY";
242
+ /** Set to `1`/`true` to force headless (no display) detection */
243
+ readonly HEADLESS: "CREWLY_HEADLESS";
244
+ };
245
+ /** Default bind host — every interface, for backward compatibility */
246
+ readonly DEFAULT_BIND_HOST: "0.0.0.0";
247
+ /** Loopback-only bind host suggested in the startup warning */
248
+ readonly LOOPBACK_BIND_HOST: "127.0.0.1";
249
+ /** File (relative to CREWLY_HOME) holding the generated API token */
250
+ readonly TOKEN_FILE_NAME: "api-token";
251
+ /** Random bytes in a generated token (hex-encoded → 64 chars) */
252
+ readonly TOKEN_BYTES: 32;
253
+ /** POSIX mode for the token file (owner read/write only) */
254
+ readonly TOKEN_FILE_MODE: 384;
255
+ /** Hex characters of sha256(token) recorded for audit purposes */
256
+ readonly FINGERPRINT_HEX_LENGTH: 8;
257
+ /** Request header carrying the token */
258
+ readonly TOKEN_HEADER: "x-crewly-token";
259
+ /** Cookie name carrying the token (lets `<img>`/asset/WS requests pass) */
260
+ readonly TOKEN_COOKIE: "crewly_token";
261
+ /** Query-string parameter carrying the token (WebSocket + dashboard deep link) */
262
+ readonly TOKEN_QUERY_PARAM: "token";
263
+ /** localStorage key the dashboard stores the token under */
264
+ readonly TOKEN_STORAGE_KEY: "crewly_api_token";
265
+ /** `WWW-Authenticate` scheme advertised on 401 so clients can detect the challenge */
266
+ readonly AUTH_SCHEME: "Crewly-Token";
267
+ /** Error codes returned in `{ success: false, error }` */
268
+ readonly ERRORS: {
269
+ readonly UNAUTHORIZED: "unauthorized";
270
+ readonly OWNER_APPROVAL_REQUIRED: "owner_approval_required";
271
+ };
272
+ /** Actor recorded on approvals performed with the owner token */
273
+ readonly OWNER_ACTOR: "owner";
274
+ /** Hint appended to 401 responses */
275
+ readonly UNAUTHORIZED_HINT: "Non-loopback callers must send the API token: `Authorization: Bearer <token>`, `X-Crewly-Token: <token>` or a `crewly_token` cookie. Run `crewly token` on the server to print it.";
276
+ /** Loopback addresses that bypass token auth */
277
+ readonly LOOPBACK_ADDRESSES: readonly ["127.0.0.1", "::1", "::ffff:127.0.0.1"];
278
+ };
226
279
  /**
227
280
  * Timing and interval configurations used across domains
228
281
  */
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../config/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../config/constants.ts"],"names":[],"mappings":"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"}
@@ -227,6 +227,60 @@ export const WEB_CONSTANTS = {
227
227
  FALLBACK_POLL_INTERVAL: 5000,
228
228
  },
229
229
  };
230
+ // ========================= API SECURITY CONSTANTS =========================
231
+ /**
232
+ * Network exposure + API token authentication for the OSS server.
233
+ *
234
+ * The REST API and WebSocket endpoints are open to loopback callers (local
235
+ * skills, the local dashboard) and require a shared API token from every
236
+ * other address. See README "Securing a server install".
237
+ */
238
+ export const API_SECURITY_CONSTANTS = {
239
+ /** Environment variable names */
240
+ ENV: {
241
+ /** Host/interface the HTTP server binds to (default: all interfaces) */
242
+ BIND_HOST: 'CREWLY_BIND_HOST',
243
+ /** Pinned API token; when unset one is generated on first boot */
244
+ API_TOKEN: 'CREWLY_API_TOKEN',
245
+ /** Set to `1` to honour `X-Forwarded-For` when classifying loopback callers */
246
+ TRUST_PROXY: 'CREWLY_TRUST_PROXY',
247
+ /** Set to `1`/`true` to force headless (no display) detection */
248
+ HEADLESS: 'CREWLY_HEADLESS',
249
+ },
250
+ /** Default bind host — every interface, for backward compatibility */
251
+ DEFAULT_BIND_HOST: '0.0.0.0',
252
+ /** Loopback-only bind host suggested in the startup warning */
253
+ LOOPBACK_BIND_HOST: '127.0.0.1',
254
+ /** File (relative to CREWLY_HOME) holding the generated API token */
255
+ TOKEN_FILE_NAME: 'api-token',
256
+ /** Random bytes in a generated token (hex-encoded → 64 chars) */
257
+ TOKEN_BYTES: 32,
258
+ /** POSIX mode for the token file (owner read/write only) */
259
+ TOKEN_FILE_MODE: 0o600,
260
+ /** Hex characters of sha256(token) recorded for audit purposes */
261
+ FINGERPRINT_HEX_LENGTH: 8,
262
+ /** Request header carrying the token */
263
+ TOKEN_HEADER: 'x-crewly-token',
264
+ /** Cookie name carrying the token (lets `<img>`/asset/WS requests pass) */
265
+ TOKEN_COOKIE: 'crewly_token',
266
+ /** Query-string parameter carrying the token (WebSocket + dashboard deep link) */
267
+ TOKEN_QUERY_PARAM: 'token',
268
+ /** localStorage key the dashboard stores the token under */
269
+ TOKEN_STORAGE_KEY: 'crewly_api_token',
270
+ /** `WWW-Authenticate` scheme advertised on 401 so clients can detect the challenge */
271
+ AUTH_SCHEME: 'Crewly-Token',
272
+ /** Error codes returned in `{ success: false, error }` */
273
+ ERRORS: {
274
+ UNAUTHORIZED: 'unauthorized',
275
+ OWNER_APPROVAL_REQUIRED: 'owner_approval_required',
276
+ },
277
+ /** Actor recorded on approvals performed with the owner token */
278
+ OWNER_ACTOR: 'owner',
279
+ /** Hint appended to 401 responses */
280
+ UNAUTHORIZED_HINT: 'Non-loopback callers must send the API token: `Authorization: Bearer <token>`, `X-Crewly-Token: <token>` or a `crewly_token` cookie. Run `crewly token` on the server to print it.',
281
+ /** Loopback addresses that bypass token auth */
282
+ LOOPBACK_ADDRESSES: ['127.0.0.1', '::1', '::ffff:127.0.0.1'],
283
+ };
230
284
  // ========================= TIMING CONSTANTS =========================
231
285
  /**
232
286
  * Timing and interval configurations used across domains