gipity 1.0.355 → 1.0.356

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 (386) hide show
  1. package/package.json +6 -5
  2. package/dist/__tests__/adopt-cwd.test.d.ts +0 -1
  3. package/dist/__tests__/adopt-cwd.test.js +0 -176
  4. package/dist/__tests__/adopt-cwd.test.js.map +0 -1
  5. package/dist/__tests__/capture-transcript.test.d.ts +0 -1
  6. package/dist/__tests__/capture-transcript.test.js +0 -92
  7. package/dist/__tests__/capture-transcript.test.js.map +0 -1
  8. package/dist/__tests__/claude-noninteractive.test.d.ts +0 -1
  9. package/dist/__tests__/claude-noninteractive.test.js +0 -92
  10. package/dist/__tests__/claude-noninteractive.test.js.map +0 -1
  11. package/dist/__tests__/claude-trust.test.d.ts +0 -1
  12. package/dist/__tests__/claude-trust.test.js +0 -71
  13. package/dist/__tests__/claude-trust.test.js.map +0 -1
  14. package/dist/__tests__/cli-cmd-add.test.d.ts +0 -1
  15. package/dist/__tests__/cli-cmd-add.test.js +0 -45
  16. package/dist/__tests__/cli-cmd-add.test.js.map +0 -1
  17. package/dist/__tests__/cli-cmd-agent.test.d.ts +0 -1
  18. package/dist/__tests__/cli-cmd-agent.test.js +0 -76
  19. package/dist/__tests__/cli-cmd-agent.test.js.map +0 -1
  20. package/dist/__tests__/cli-cmd-approval.test.d.ts +0 -1
  21. package/dist/__tests__/cli-cmd-approval.test.js +0 -47
  22. package/dist/__tests__/cli-cmd-approval.test.js.map +0 -1
  23. package/dist/__tests__/cli-cmd-audit.test.d.ts +0 -1
  24. package/dist/__tests__/cli-cmd-audit.test.js +0 -33
  25. package/dist/__tests__/cli-cmd-audit.test.js.map +0 -1
  26. package/dist/__tests__/cli-cmd-chat.test.d.ts +0 -1
  27. package/dist/__tests__/cli-cmd-chat.test.js +0 -94
  28. package/dist/__tests__/cli-cmd-chat.test.js.map +0 -1
  29. package/dist/__tests__/cli-cmd-credits.test.d.ts +0 -1
  30. package/dist/__tests__/cli-cmd-credits.test.js +0 -66
  31. package/dist/__tests__/cli-cmd-credits.test.js.map +0 -1
  32. package/dist/__tests__/cli-cmd-db.test.d.ts +0 -1
  33. package/dist/__tests__/cli-cmd-db.test.js +0 -95
  34. package/dist/__tests__/cli-cmd-db.test.js.map +0 -1
  35. package/dist/__tests__/cli-cmd-deploy.test.d.ts +0 -1
  36. package/dist/__tests__/cli-cmd-deploy.test.js +0 -53
  37. package/dist/__tests__/cli-cmd-deploy.test.js.map +0 -1
  38. package/dist/__tests__/cli-cmd-domain.test.d.ts +0 -1
  39. package/dist/__tests__/cli-cmd-domain.test.js +0 -73
  40. package/dist/__tests__/cli-cmd-domain.test.js.map +0 -1
  41. package/dist/__tests__/cli-cmd-email.test.d.ts +0 -1
  42. package/dist/__tests__/cli-cmd-email.test.js +0 -31
  43. package/dist/__tests__/cli-cmd-email.test.js.map +0 -1
  44. package/dist/__tests__/cli-cmd-file.test.d.ts +0 -1
  45. package/dist/__tests__/cli-cmd-file.test.js +0 -86
  46. package/dist/__tests__/cli-cmd-file.test.js.map +0 -1
  47. package/dist/__tests__/cli-cmd-fn.test.d.ts +0 -1
  48. package/dist/__tests__/cli-cmd-fn.test.js +0 -50
  49. package/dist/__tests__/cli-cmd-fn.test.js.map +0 -1
  50. package/dist/__tests__/cli-cmd-generate.test.d.ts +0 -1
  51. package/dist/__tests__/cli-cmd-generate.test.js +0 -46
  52. package/dist/__tests__/cli-cmd-generate.test.js.map +0 -1
  53. package/dist/__tests__/cli-cmd-gmail.test.d.ts +0 -1
  54. package/dist/__tests__/cli-cmd-gmail.test.js +0 -49
  55. package/dist/__tests__/cli-cmd-gmail.test.js.map +0 -1
  56. package/dist/__tests__/cli-cmd-info.test.d.ts +0 -1
  57. package/dist/__tests__/cli-cmd-info.test.js +0 -52
  58. package/dist/__tests__/cli-cmd-info.test.js.map +0 -1
  59. package/dist/__tests__/cli-cmd-init.test.d.ts +0 -1
  60. package/dist/__tests__/cli-cmd-init.test.js +0 -76
  61. package/dist/__tests__/cli-cmd-init.test.js.map +0 -1
  62. package/dist/__tests__/cli-cmd-job.test.d.ts +0 -1
  63. package/dist/__tests__/cli-cmd-job.test.js +0 -204
  64. package/dist/__tests__/cli-cmd-job.test.js.map +0 -1
  65. package/dist/__tests__/cli-cmd-location.test.d.ts +0 -1
  66. package/dist/__tests__/cli-cmd-location.test.js +0 -58
  67. package/dist/__tests__/cli-cmd-location.test.js.map +0 -1
  68. package/dist/__tests__/cli-cmd-login.test.d.ts +0 -1
  69. package/dist/__tests__/cli-cmd-login.test.js +0 -41
  70. package/dist/__tests__/cli-cmd-login.test.js.map +0 -1
  71. package/dist/__tests__/cli-cmd-logout.test.d.ts +0 -1
  72. package/dist/__tests__/cli-cmd-logout.test.js +0 -20
  73. package/dist/__tests__/cli-cmd-logout.test.js.map +0 -1
  74. package/dist/__tests__/cli-cmd-logs.test.d.ts +0 -1
  75. package/dist/__tests__/cli-cmd-logs.test.js +0 -40
  76. package/dist/__tests__/cli-cmd-logs.test.js.map +0 -1
  77. package/dist/__tests__/cli-cmd-memory.test.d.ts +0 -1
  78. package/dist/__tests__/cli-cmd-memory.test.js +0 -58
  79. package/dist/__tests__/cli-cmd-memory.test.js.map +0 -1
  80. package/dist/__tests__/cli-cmd-page-inspect.test.d.ts +0 -1
  81. package/dist/__tests__/cli-cmd-page-inspect.test.js +0 -47
  82. package/dist/__tests__/cli-cmd-page-inspect.test.js.map +0 -1
  83. package/dist/__tests__/cli-cmd-page.test.d.ts +0 -1
  84. package/dist/__tests__/cli-cmd-page.test.js +0 -90
  85. package/dist/__tests__/cli-cmd-page.test.js.map +0 -1
  86. package/dist/__tests__/cli-cmd-plan.test.d.ts +0 -1
  87. package/dist/__tests__/cli-cmd-plan.test.js +0 -81
  88. package/dist/__tests__/cli-cmd-plan.test.js.map +0 -1
  89. package/dist/__tests__/cli-cmd-project.test.d.ts +0 -1
  90. package/dist/__tests__/cli-cmd-project.test.js +0 -61
  91. package/dist/__tests__/cli-cmd-project.test.js.map +0 -1
  92. package/dist/__tests__/cli-cmd-rbac.test.d.ts +0 -1
  93. package/dist/__tests__/cli-cmd-rbac.test.js +0 -39
  94. package/dist/__tests__/cli-cmd-rbac.test.js.map +0 -1
  95. package/dist/__tests__/cli-cmd-realtime.test.d.ts +0 -1
  96. package/dist/__tests__/cli-cmd-realtime.test.js +0 -51
  97. package/dist/__tests__/cli-cmd-realtime.test.js.map +0 -1
  98. package/dist/__tests__/cli-cmd-records.test.d.ts +0 -1
  99. package/dist/__tests__/cli-cmd-records.test.js +0 -67
  100. package/dist/__tests__/cli-cmd-records.test.js.map +0 -1
  101. package/dist/__tests__/cli-cmd-relay.test.d.ts +0 -1
  102. package/dist/__tests__/cli-cmd-relay.test.js +0 -100
  103. package/dist/__tests__/cli-cmd-relay.test.js.map +0 -1
  104. package/dist/__tests__/cli-cmd-sandbox.test.d.ts +0 -1
  105. package/dist/__tests__/cli-cmd-sandbox.test.js +0 -46
  106. package/dist/__tests__/cli-cmd-sandbox.test.js.map +0 -1
  107. package/dist/__tests__/cli-cmd-scaffold.test.d.ts +0 -1
  108. package/dist/__tests__/cli-cmd-scaffold.test.js +0 -30
  109. package/dist/__tests__/cli-cmd-scaffold.test.js.map +0 -1
  110. package/dist/__tests__/cli-cmd-skill.test.d.ts +0 -1
  111. package/dist/__tests__/cli-cmd-skill.test.js +0 -40
  112. package/dist/__tests__/cli-cmd-skill.test.js.map +0 -1
  113. package/dist/__tests__/cli-cmd-test.test.d.ts +0 -1
  114. package/dist/__tests__/cli-cmd-test.test.js +0 -58
  115. package/dist/__tests__/cli-cmd-test.test.js.map +0 -1
  116. package/dist/__tests__/cli-cmd-workflow.test.d.ts +0 -1
  117. package/dist/__tests__/cli-cmd-workflow.test.js +0 -84
  118. package/dist/__tests__/cli-cmd-workflow.test.js.map +0 -1
  119. package/dist/__tests__/cli-e2e-live.test.d.ts +0 -1
  120. package/dist/__tests__/cli-e2e-live.test.js +0 -144
  121. package/dist/__tests__/cli-e2e-live.test.js.map +0 -1
  122. package/dist/__tests__/cli-smoke.test.d.ts +0 -1
  123. package/dist/__tests__/cli-smoke.test.js +0 -69
  124. package/dist/__tests__/cli-smoke.test.js.map +0 -1
  125. package/dist/__tests__/config.test.d.ts +0 -1
  126. package/dist/__tests__/config.test.js +0 -95
  127. package/dist/__tests__/config.test.js.map +0 -1
  128. package/dist/__tests__/flag-aliases.test.d.ts +0 -1
  129. package/dist/__tests__/flag-aliases.test.js +0 -53
  130. package/dist/__tests__/flag-aliases.test.js.map +0 -1
  131. package/dist/__tests__/helpers/mock-server.d.ts +0 -52
  132. package/dist/__tests__/helpers/mock-server.js +0 -86
  133. package/dist/__tests__/helpers/mock-server.js.map +0 -1
  134. package/dist/__tests__/helpers/spawn-cli.d.ts +0 -30
  135. package/dist/__tests__/helpers/spawn-cli.js +0 -72
  136. package/dist/__tests__/helpers/spawn-cli.js.map +0 -1
  137. package/dist/__tests__/helpers/test-home.d.ts +0 -22
  138. package/dist/__tests__/helpers/test-home.js +0 -35
  139. package/dist/__tests__/helpers/test-home.js.map +0 -1
  140. package/dist/__tests__/hook-capture.test.d.ts +0 -1
  141. package/dist/__tests__/hook-capture.test.js +0 -65
  142. package/dist/__tests__/hook-capture.test.js.map +0 -1
  143. package/dist/__tests__/prompts.test.d.ts +0 -1
  144. package/dist/__tests__/prompts.test.js +0 -129
  145. package/dist/__tests__/prompts.test.js.map +0 -1
  146. package/dist/__tests__/push-cas.test.d.ts +0 -1
  147. package/dist/__tests__/push-cas.test.js +0 -133
  148. package/dist/__tests__/push-cas.test.js.map +0 -1
  149. package/dist/__tests__/relay-bridge-abort.test.d.ts +0 -1
  150. package/dist/__tests__/relay-bridge-abort.test.js +0 -65
  151. package/dist/__tests__/relay-bridge-abort.test.js.map +0 -1
  152. package/dist/__tests__/relay-daemon.test.d.ts +0 -1
  153. package/dist/__tests__/relay-daemon.test.js +0 -232
  154. package/dist/__tests__/relay-daemon.test.js.map +0 -1
  155. package/dist/__tests__/relay-ingest-contract.test.d.ts +0 -1
  156. package/dist/__tests__/relay-ingest-contract.test.js +0 -76
  157. package/dist/__tests__/relay-ingest-contract.test.js.map +0 -1
  158. package/dist/__tests__/relay-installers.test.d.ts +0 -1
  159. package/dist/__tests__/relay-installers.test.js +0 -95
  160. package/dist/__tests__/relay-installers.test.js.map +0 -1
  161. package/dist/__tests__/relay-machine-id.test.d.ts +0 -1
  162. package/dist/__tests__/relay-machine-id.test.js +0 -41
  163. package/dist/__tests__/relay-machine-id.test.js.map +0 -1
  164. package/dist/__tests__/relay-pair.test.d.ts +0 -1
  165. package/dist/__tests__/relay-pair.test.js.map +0 -1
  166. package/dist/__tests__/relay-redact.test.d.ts +0 -1
  167. package/dist/__tests__/relay-redact.test.js +0 -78
  168. package/dist/__tests__/relay-redact.test.js.map +0 -1
  169. package/dist/__tests__/relay-state.test.d.ts +0 -1
  170. package/dist/__tests__/relay-state.test.js +0 -85
  171. package/dist/__tests__/relay-state.test.js.map +0 -1
  172. package/dist/__tests__/setup-skills-block.test.d.ts +0 -1
  173. package/dist/__tests__/setup-skills-block.test.js +0 -65
  174. package/dist/__tests__/setup-skills-block.test.js.map +0 -1
  175. package/dist/__tests__/stream-json.test.d.ts +0 -1
  176. package/dist/__tests__/stream-json.test.js +0 -186
  177. package/dist/__tests__/stream-json.test.js.map +0 -1
  178. package/dist/__tests__/sync-apply.test.d.ts +0 -1
  179. package/dist/__tests__/sync-apply.test.js +0 -457
  180. package/dist/__tests__/sync-apply.test.js.map +0 -1
  181. package/dist/__tests__/sync-lock.test.d.ts +0 -1
  182. package/dist/__tests__/sync-lock.test.js +0 -105
  183. package/dist/__tests__/sync-lock.test.js.map +0 -1
  184. package/dist/__tests__/sync.test.d.ts +0 -1
  185. package/dist/__tests__/sync.test.js +0 -160
  186. package/dist/__tests__/sync.test.js.map +0 -1
  187. package/dist/__tests__/template-vars.test.d.ts +0 -1
  188. package/dist/__tests__/template-vars.test.js +0 -119
  189. package/dist/__tests__/template-vars.test.js.map +0 -1
  190. package/dist/__tests__/updater.test.d.ts +0 -1
  191. package/dist/__tests__/updater.test.js +0 -95
  192. package/dist/__tests__/updater.test.js.map +0 -1
  193. package/dist/__tests__/upload.test.d.ts +0 -1
  194. package/dist/__tests__/upload.test.js +0 -92
  195. package/dist/__tests__/upload.test.js.map +0 -1
  196. package/dist/__tests__/utils.test.d.ts +0 -1
  197. package/dist/__tests__/utils.test.js +0 -69
  198. package/dist/__tests__/utils.test.js.map +0 -1
  199. package/dist/adopt-cwd.d.ts +0 -69
  200. package/dist/adopt-cwd.js.map +0 -1
  201. package/dist/api.d.ts +0 -41
  202. package/dist/api.js.map +0 -1
  203. package/dist/auth.d.ts +0 -17
  204. package/dist/auth.js.map +0 -1
  205. package/dist/banner.d.ts +0 -6
  206. package/dist/banner.js.map +0 -1
  207. package/dist/capture/sources/claude-code.d.ts +0 -78
  208. package/dist/capture/sources/claude-code.js.map +0 -1
  209. package/dist/coding-guidelines.d.ts +0 -9
  210. package/dist/coding-guidelines.js.map +0 -1
  211. package/dist/colors.d.ts +0 -22
  212. package/dist/colors.js.map +0 -1
  213. package/dist/commands/add.d.ts +0 -2
  214. package/dist/commands/add.js.map +0 -1
  215. package/dist/commands/agent.d.ts +0 -2
  216. package/dist/commands/agent.js.map +0 -1
  217. package/dist/commands/api.d.ts +0 -1
  218. package/dist/commands/api.js.map +0 -1
  219. package/dist/commands/approval.d.ts +0 -2
  220. package/dist/commands/approval.js.map +0 -1
  221. package/dist/commands/audit.d.ts +0 -2
  222. package/dist/commands/audit.js.map +0 -1
  223. package/dist/commands/browser.d.ts +0 -2
  224. package/dist/commands/browser.js.map +0 -1
  225. package/dist/commands/chat.d.ts +0 -2
  226. package/dist/commands/chat.js.map +0 -1
  227. package/dist/commands/checkpoint.d.ts +0 -2
  228. package/dist/commands/checkpoint.js.map +0 -1
  229. package/dist/commands/claude.d.ts +0 -16
  230. package/dist/commands/claude.js.map +0 -1
  231. package/dist/commands/credits.d.ts +0 -2
  232. package/dist/commands/credits.js.map +0 -1
  233. package/dist/commands/db.d.ts +0 -2
  234. package/dist/commands/db.js.map +0 -1
  235. package/dist/commands/deploy.d.ts +0 -2
  236. package/dist/commands/deploy.js.map +0 -1
  237. package/dist/commands/doctor.d.ts +0 -2
  238. package/dist/commands/doctor.js.map +0 -1
  239. package/dist/commands/domain.d.ts +0 -2
  240. package/dist/commands/domain.js.map +0 -1
  241. package/dist/commands/email.d.ts +0 -2
  242. package/dist/commands/email.js.map +0 -1
  243. package/dist/commands/file.d.ts +0 -2
  244. package/dist/commands/file.js.map +0 -1
  245. package/dist/commands/fn.d.ts +0 -2
  246. package/dist/commands/fn.js.map +0 -1
  247. package/dist/commands/generate.d.ts +0 -2
  248. package/dist/commands/generate.js.map +0 -1
  249. package/dist/commands/gmail.d.ts +0 -2
  250. package/dist/commands/gmail.js.map +0 -1
  251. package/dist/commands/hook-capture.d.ts +0 -15
  252. package/dist/commands/hook-capture.js.map +0 -1
  253. package/dist/commands/init.d.ts +0 -2
  254. package/dist/commands/init.js.map +0 -1
  255. package/dist/commands/job.d.ts +0 -2
  256. package/dist/commands/job.js.map +0 -1
  257. package/dist/commands/location.d.ts +0 -9
  258. package/dist/commands/location.js.map +0 -1
  259. package/dist/commands/login.d.ts +0 -2
  260. package/dist/commands/login.js.map +0 -1
  261. package/dist/commands/logout.d.ts +0 -2
  262. package/dist/commands/logout.js.map +0 -1
  263. package/dist/commands/logs.d.ts +0 -2
  264. package/dist/commands/logs.js.map +0 -1
  265. package/dist/commands/memory.d.ts +0 -2
  266. package/dist/commands/memory.js.map +0 -1
  267. package/dist/commands/page-eval.d.ts +0 -2
  268. package/dist/commands/page-eval.js.map +0 -1
  269. package/dist/commands/page-inspect.d.ts +0 -2
  270. package/dist/commands/page-inspect.js.map +0 -1
  271. package/dist/commands/page-screenshot.d.ts +0 -2
  272. package/dist/commands/page-screenshot.js.map +0 -1
  273. package/dist/commands/page.d.ts +0 -2
  274. package/dist/commands/page.js.map +0 -1
  275. package/dist/commands/plan.d.ts +0 -2
  276. package/dist/commands/plan.js.map +0 -1
  277. package/dist/commands/project.d.ts +0 -2
  278. package/dist/commands/project.js.map +0 -1
  279. package/dist/commands/push.d.ts +0 -2
  280. package/dist/commands/push.js.map +0 -1
  281. package/dist/commands/rbac.d.ts +0 -2
  282. package/dist/commands/rbac.js.map +0 -1
  283. package/dist/commands/realtime.d.ts +0 -2
  284. package/dist/commands/realtime.js.map +0 -1
  285. package/dist/commands/records.d.ts +0 -2
  286. package/dist/commands/records.js.map +0 -1
  287. package/dist/commands/relay-install.d.ts +0 -11
  288. package/dist/commands/relay-install.js.map +0 -1
  289. package/dist/commands/relay.d.ts +0 -9
  290. package/dist/commands/relay.js.map +0 -1
  291. package/dist/commands/sandbox.d.ts +0 -2
  292. package/dist/commands/sandbox.js.map +0 -1
  293. package/dist/commands/scaffold.d.ts +0 -2
  294. package/dist/commands/scaffold.js.map +0 -1
  295. package/dist/commands/skill.d.ts +0 -2
  296. package/dist/commands/skill.js.map +0 -1
  297. package/dist/commands/skills.d.ts +0 -2
  298. package/dist/commands/skills.js.map +0 -1
  299. package/dist/commands/start-cc.d.ts +0 -2
  300. package/dist/commands/start-cc.js.map +0 -1
  301. package/dist/commands/status.d.ts +0 -2
  302. package/dist/commands/status.js.map +0 -1
  303. package/dist/commands/sync.d.ts +0 -2
  304. package/dist/commands/sync.js.map +0 -1
  305. package/dist/commands/test.d.ts +0 -2
  306. package/dist/commands/test.js.map +0 -1
  307. package/dist/commands/uninstall.d.ts +0 -10
  308. package/dist/commands/uninstall.js.map +0 -1
  309. package/dist/commands/update.d.ts +0 -2
  310. package/dist/commands/update.js.map +0 -1
  311. package/dist/commands/upload.d.ts +0 -2
  312. package/dist/commands/upload.js.map +0 -1
  313. package/dist/commands/workflow.d.ts +0 -2
  314. package/dist/commands/workflow.js.map +0 -1
  315. package/dist/config.d.ts +0 -39
  316. package/dist/config.js.map +0 -1
  317. package/dist/flag-aliases.d.ts +0 -17
  318. package/dist/flag-aliases.js.map +0 -1
  319. package/dist/gip3dw-guide.d.ts +0 -7
  320. package/dist/gip3dw-guide.js.map +0 -1
  321. package/dist/gipcc.d.ts +0 -2
  322. package/dist/gipcc.js.map +0 -1
  323. package/dist/gipccd.d.ts +0 -2
  324. package/dist/gipccd.js.map +0 -1
  325. package/dist/help-skills.d.ts +0 -7
  326. package/dist/help-skills.js.map +0 -1
  327. package/dist/helpers/command.d.ts +0 -12
  328. package/dist/helpers/command.js.map +0 -1
  329. package/dist/helpers/index.d.ts +0 -6
  330. package/dist/helpers/index.js.map +0 -1
  331. package/dist/helpers/output.d.ts +0 -22
  332. package/dist/helpers/output.js.map +0 -1
  333. package/dist/helpers/sync.d.ts +0 -13
  334. package/dist/helpers/sync.js.map +0 -1
  335. package/dist/hooks/capture-runner.d.ts +0 -24
  336. package/dist/hooks/capture-runner.js.map +0 -1
  337. package/dist/index.d.ts +0 -2
  338. package/dist/index.js.map +0 -1
  339. package/dist/knowledge.d.ts +0 -11
  340. package/dist/knowledge.js.map +0 -1
  341. package/dist/platform-overview.d.ts +0 -9
  342. package/dist/platform-overview.js.map +0 -1
  343. package/dist/project-setup.d.ts +0 -29
  344. package/dist/project-setup.js.map +0 -1
  345. package/dist/prompts.d.ts +0 -80
  346. package/dist/prompts.js.map +0 -1
  347. package/dist/provider-docs.d.ts +0 -27
  348. package/dist/provider-docs.js.map +0 -1
  349. package/dist/relay/daemon.d.ts +0 -47
  350. package/dist/relay/daemon.js.map +0 -1
  351. package/dist/relay/device-http.d.ts +0 -9
  352. package/dist/relay/device-http.js.map +0 -1
  353. package/dist/relay/installers.d.ts +0 -24
  354. package/dist/relay/installers.js.map +0 -1
  355. package/dist/relay/machine-id.d.ts +0 -2
  356. package/dist/relay/machine-id.js.map +0 -1
  357. package/dist/relay/onboarding.d.ts +0 -8
  358. package/dist/relay/onboarding.js.map +0 -1
  359. package/dist/relay/paths.d.ts +0 -5
  360. package/dist/relay/paths.js.map +0 -1
  361. package/dist/relay/redact.d.ts +0 -34
  362. package/dist/relay/redact.js.map +0 -1
  363. package/dist/relay/state.d.ts +0 -39
  364. package/dist/relay/state.js.map +0 -1
  365. package/dist/relay/stream-json.d.ts +0 -105
  366. package/dist/relay/stream-json.js.map +0 -1
  367. package/dist/relay/transcripts.d.ts +0 -60
  368. package/dist/relay/transcripts.js.map +0 -1
  369. package/dist/setup.d.ts +0 -101
  370. package/dist/setup.js.map +0 -1
  371. package/dist/sync.d.ts +0 -74
  372. package/dist/sync.js.map +0 -1
  373. package/dist/template-vars.d.ts +0 -32
  374. package/dist/template-vars.js.map +0 -1
  375. package/dist/updater/bootstrap.d.ts +0 -13
  376. package/dist/updater/bootstrap.js.map +0 -1
  377. package/dist/updater/check.d.ts +0 -12
  378. package/dist/updater/check.js.map +0 -1
  379. package/dist/updater/shim.d.ts +0 -2
  380. package/dist/updater/shim.js.map +0 -1
  381. package/dist/updater/state.d.ts +0 -24
  382. package/dist/updater/state.js.map +0 -1
  383. package/dist/upload.d.ts +0 -40
  384. package/dist/upload.js.map +0 -1
  385. package/dist/utils.d.ts +0 -39
  386. package/dist/utils.js.map +0 -1
@@ -1,129 +0,0 @@
1
- /**
2
- * Wrap-format contract for relay-dispatched `gipity claude -p` messages.
3
- *
4
- * The user's actual message must sit between the `USER_MSG_OPEN` /
5
- * `USER_MSG_CLOSE` tags with no trailing instructions, and the client-side
6
- * `stripPreamble` in `platform/client/src/ts/commands/claude-display.ts`
7
- * must use identical tag strings - otherwise the web CLI renders the full
8
- * wrap as a `claude>` turn (the historical bug: duplicate user turns
9
- * rendered as walls of preamble text).
10
- */
11
- import { describe, it } from 'node:test';
12
- import assert from 'node:assert/strict';
13
- import { readFileSync } from 'fs';
14
- import { fileURLToPath } from 'url';
15
- import { dirname, resolve } from 'path';
16
- import { USER_MSG_OPEN, USER_MSG_CLOSE, buildFreshWrap, buildResumeWrap, } from '../prompts.js';
17
- const HERE = dirname(fileURLToPath(import.meta.url));
18
- // dist/__tests__/ → repo root depends on build layout. These tests also run
19
- // against the source tree via tsx in CI - handle both by walking up until we
20
- // find the platform/ sibling.
21
- function repoRoot() {
22
- let p = HERE;
23
- for (let i = 0; i < 8; i++) {
24
- try {
25
- const probe = resolve(p, 'platform/client/src/ts/commands/claude-display.ts');
26
- readFileSync(probe, 'utf-8');
27
- return p;
28
- }
29
- catch { /* keep walking */ }
30
- p = resolve(p, '..');
31
- }
32
- throw new Error('could not locate repo root from test file');
33
- }
34
- describe('buildFreshWrap', () => {
35
- it('wraps the user message between USER_MSG_OPEN / USER_MSG_CLOSE', () => {
36
- const out = buildFreshWrap('## Project context\nstuff here', 'hello world');
37
- assert.ok(out.includes(USER_MSG_OPEN), 'missing open tag');
38
- assert.ok(out.includes(USER_MSG_CLOSE), 'missing close tag');
39
- const open = out.indexOf(USER_MSG_OPEN) + USER_MSG_OPEN.length;
40
- const close = out.lastIndexOf(USER_MSG_CLOSE);
41
- assert.equal(out.slice(open, close).trim(), 'hello world');
42
- });
43
- it('places the response directive before the user message, not after', () => {
44
- const out = buildFreshWrap('ctx', 'do a thing');
45
- const directiveIdx = out.indexOf(`Don't greet`);
46
- const openIdx = out.indexOf(USER_MSG_OPEN);
47
- assert.ok(directiveIdx !== -1, 'directive should be present');
48
- assert.ok(directiveIdx < openIdx, 'directive must come before user-message tag');
49
- });
50
- it('has nothing after the closing tag', () => {
51
- const out = buildFreshWrap('ctx', 'msg');
52
- assert.ok(out.trimEnd().endsWith(USER_MSG_CLOSE), `wrap should end with close tag, got tail: ${out.slice(-120)}`);
53
- });
54
- it('does not emit the legacy "Answer directly" trailer', () => {
55
- const out = buildFreshWrap('ctx', 'msg');
56
- assert.equal(out.includes('Answer directly'), false, 'legacy trailer leaked into new wrap');
57
- });
58
- });
59
- describe('buildResumeWrap', () => {
60
- const opts = {
61
- projectName: 'proj',
62
- projectSlug: 'proj',
63
- projectGuid: 'p_abc',
64
- accountSlug: 'acct',
65
- cwd: '/tmp',
66
- };
67
- it('wraps the user message between tags', () => {
68
- const out = buildResumeWrap(opts, 'whats 2+2');
69
- const open = out.indexOf(USER_MSG_OPEN) + USER_MSG_OPEN.length;
70
- const close = out.lastIndexOf(USER_MSG_CLOSE);
71
- assert.ok(open > USER_MSG_OPEN.length - 1, 'open tag missing');
72
- assert.ok(close > open, 'close tag missing or before open');
73
- assert.equal(out.slice(open, close).trim(), 'whats 2+2');
74
- });
75
- it('has nothing after the closing tag', () => {
76
- const out = buildResumeWrap(opts, 'x');
77
- assert.ok(out.trimEnd().endsWith(USER_MSG_CLOSE));
78
- });
79
- });
80
- describe('tag constant drift guard', () => {
81
- it('client-side claude-display.ts uses identical tag strings', () => {
82
- const root = repoRoot();
83
- const clientSrc = readFileSync(resolve(root, 'platform/client/src/ts/commands/claude-display.ts'), 'utf-8');
84
- const openMatch = clientSrc.match(/USER_MSG_OPEN\s*=\s*'([^']+)'/);
85
- const closeMatch = clientSrc.match(/USER_MSG_CLOSE\s*=\s*'([^']+)'/);
86
- assert.ok(openMatch, 'claude-display.ts must define USER_MSG_OPEN as a single-quoted string literal');
87
- assert.ok(closeMatch, 'claude-display.ts must define USER_MSG_CLOSE as a single-quoted string literal');
88
- assert.equal(openMatch[1], USER_MSG_OPEN, 'open tag drift');
89
- assert.equal(closeMatch[1], USER_MSG_CLOSE, 'close tag drift');
90
- });
91
- });
92
- // Local replica of the client-side stripPreamble. The client file can't be
93
- // imported directly (different package, no DOM shim in node:test), so this
94
- // replica + the drift-guard above (identical tag strings) gives equivalent
95
- // coverage. If the algorithm shape changes in claude-display.ts, update
96
- // both here and there.
97
- function stripPreambleReplica(s) {
98
- if (!s)
99
- return s;
100
- const m1 = s.match(/The user's first message:\s*"([\s\S]+?)"(?:\s*\n|\s*$)/);
101
- if (m1)
102
- return m1[1];
103
- const open = s.indexOf(USER_MSG_OPEN);
104
- const close = s.lastIndexOf(USER_MSG_CLOSE);
105
- if (open !== -1 && close !== -1 && close > open) {
106
- return s.slice(open + USER_MSG_OPEN.length, close).trim();
107
- }
108
- return s;
109
- }
110
- describe('stripPreamble round-trip', () => {
111
- it('recovers the exact user message from buildFreshWrap output', () => {
112
- const msg = 'hello world - whats 2+2 and also a newline\nplease';
113
- const out = buildFreshWrap('## ctx\n- Name: foo\n- Files: empty', msg);
114
- assert.equal(stripPreambleReplica(out), msg);
115
- });
116
- it('recovers the exact user message from buildResumeWrap output', () => {
117
- const msg = 'resume test message';
118
- const out = buildResumeWrap({ projectName: 'p', projectSlug: 'p', projectGuid: 'p_abc', accountSlug: 'a', cwd: '/' }, msg);
119
- assert.equal(stripPreambleReplica(out), msg);
120
- });
121
- it('still handles the legacy first-message bootstrap form', () => {
122
- const s = `Some context\n\nThe user's first message: "build a pacman game"\n\nGet started.`;
123
- assert.equal(stripPreambleReplica(s), 'build a pacman game');
124
- });
125
- it('returns the input unchanged when no tags are present', () => {
126
- assert.equal(stripPreambleReplica('plain message'), 'plain message');
127
- });
128
- });
129
- //# sourceMappingURL=prompts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.test.js","sourceRoot":"","sources":["../../src/__tests__/prompts.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,133 +0,0 @@
1
- /**
2
- * `gipity push` (pushFile) CAS behavior: when the local baseline is stale,
3
- * the server returns 409 and we surface a clear error that tells the user
4
- * to run `gipity sync`.
5
- */
6
- import { describe, it, before, after } from 'node:test';
7
- import assert from 'node:assert/strict';
8
- import { writeFileSync, mkdirSync, mkdtempSync, rmSync } from 'fs';
9
- import { join } from 'path';
10
- import { tmpdir } from 'os';
11
- // Set HOME BEFORE importing the CLI so ~/.gipity/auth.json resolves to our tempdir.
12
- let home;
13
- let projectDir;
14
- let origHome;
15
- let origCwd;
16
- let origFetch;
17
- before(() => {
18
- origHome = process.env.HOME;
19
- origCwd = process.cwd();
20
- origFetch = globalThis.fetch;
21
- home = mkdtempSync(join(tmpdir(), 'gipity-pushcas-home-'));
22
- process.env.HOME = home;
23
- mkdirSync(join(home, '.gipity'), { recursive: true });
24
- writeFileSync(join(home, '.gipity', 'auth.json'), JSON.stringify({
25
- accessToken: 'fake-jwt',
26
- refreshToken: 'fake-refresh',
27
- email: 'ec-test@914-6.com',
28
- expiresAt: new Date(Date.now() + 10 * 60_000).toISOString(),
29
- }));
30
- projectDir = mkdtempSync(join(tmpdir(), 'gipity-pushcas-proj-'));
31
- writeFileSync(join(projectDir, '.gipity.json'), JSON.stringify({
32
- projectGuid: 'proj_test',
33
- projectSlug: 'p',
34
- accountSlug: 'a',
35
- agentGuid: 'agt_t',
36
- conversationGuid: null,
37
- apiBase: 'https://test.invalid',
38
- ignore: [],
39
- }));
40
- mkdirSync(join(projectDir, '.gipity'), { recursive: true });
41
- process.chdir(projectDir);
42
- });
43
- after(() => {
44
- process.chdir(origCwd);
45
- globalThis.fetch = origFetch;
46
- if (origHome === undefined)
47
- delete process.env.HOME;
48
- else
49
- process.env.HOME = origHome;
50
- rmSync(home, { recursive: true, force: true });
51
- rmSync(projectDir, { recursive: true, force: true });
52
- });
53
- function stubFetch(handler) {
54
- globalThis.fetch = handler;
55
- }
56
- describe('pushFile CAS', () => {
57
- it('surfaces a clear error when the remote has a newer version', async () => {
58
- // Baseline says we last synced at serverVersion=5.
59
- writeFileSync(join(projectDir, '.gipity', 'sync-state.json'), JSON.stringify({
60
- projectGuid: 'proj_test',
61
- files: {
62
- 'hello.txt': {
63
- size: 5, mtime: '2024-01-01T00:00:00.000Z',
64
- sha256: 'fakesha-old',
65
- serverVersion: 5,
66
- },
67
- },
68
- lastFullSync: '2024-01-01T00:00:00.000Z',
69
- }));
70
- writeFileSync(join(projectDir, 'hello.txt'), 'world');
71
- // Server returns 409: it's at version 7 now, client expected 5.
72
- stubFetch(async (url) => {
73
- if (url.includes('/files/upload-init')) {
74
- return new Response(JSON.stringify({
75
- error: { code: 'CONFLICT', message: 'Version mismatch' },
76
- data: { current_server_version: 7 },
77
- }), { status: 409, headers: { 'content-type': 'application/json' } });
78
- }
79
- throw new Error(`unexpected fetch to ${url}`);
80
- });
81
- // Force-evict the module cache so our stubbed fetch is picked up cleanly.
82
- const { clearConfigCache } = await import('../config.js');
83
- clearConfigCache();
84
- const { pushFile } = await import('../sync.js');
85
- await assert.rejects(() => pushFile(join(projectDir, 'hello.txt')), /newer version.*serverVersion=7.*gipity sync/is);
86
- });
87
- it('succeeds when baseline matches - pushFile updates serverVersion in baseline', async () => {
88
- writeFileSync(join(projectDir, '.gipity', 'sync-state.json'), JSON.stringify({
89
- projectGuid: 'proj_test',
90
- files: {
91
- 'greet.txt': {
92
- size: 5, mtime: '2024-01-01T00:00:00.000Z',
93
- sha256: 'fakesha-old',
94
- serverVersion: 3,
95
- },
96
- },
97
- lastFullSync: '2024-01-01T00:00:00.000Z',
98
- }));
99
- writeFileSync(join(projectDir, 'greet.txt'), 'hi-v4');
100
- // Server: upload-init → presigned URL. PUT to presigned URL → etag.
101
- // upload-complete → 200 with server_version=4.
102
- stubFetch(async (url, init) => {
103
- if (url.includes('/files/upload-init')) {
104
- return new Response(JSON.stringify({
105
- data: {
106
- upload_guid: 'fl_abc',
107
- method: 'PUT',
108
- url: 'https://s3.example/stage',
109
- expires_in: 3600,
110
- },
111
- }), { status: 200, headers: { 'content-type': 'application/json' } });
112
- }
113
- if (url.startsWith('https://s3.example')) {
114
- // Presigned PUT - return an etag.
115
- return new Response('', { status: 200, headers: { etag: '"fake-etag"' } });
116
- }
117
- if (url.includes('/files/upload-complete')) {
118
- return new Response(JSON.stringify({
119
- data: { size: 5, guid: 'fl_new', version: 1, server_version: 4 },
120
- }), { status: 200, headers: { 'content-type': 'application/json' } });
121
- }
122
- throw new Error(`unexpected fetch to ${url}`);
123
- });
124
- const { clearConfigCache } = await import('../config.js');
125
- clearConfigCache();
126
- const { pushFile, readBaseline } = await import('../sync.js');
127
- await pushFile(join(projectDir, 'greet.txt'));
128
- const bl = readBaseline('proj_test');
129
- assert.ok(bl.files['greet.txt'], 'greet.txt should be in baseline');
130
- assert.equal(bl.files['greet.txt'].serverVersion, 4, 'baseline should reflect bumped server version');
131
- });
132
- });
133
- //# sourceMappingURL=push-cas.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push-cas.test.js","sourceRoot":"","sources":["../../src/__tests__/push-cas.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,65 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { bridgeAbort } from '../relay/daemon.js';
4
- function listenerCount(signal) {
5
- const anyOf = signal;
6
- // Node's EventTarget uses an internal symbol; fall back to dispatching a
7
- // probe event and counting via a public API if internals aren't exposed.
8
- // Simpler: rely on MaxListenersExceededWarning being gated at 10. Instead
9
- // assert behaviourally: after N add/detach cycles the outer signal still
10
- // reports zero active listeners by firing abort and asserting only the
11
- // most recent bridge ran.
12
- void anyOf;
13
- return -1;
14
- }
15
- describe('bridgeAbort', () => {
16
- it('forwards outer abort to inner controller', () => {
17
- const outer = new AbortController();
18
- const inner = new AbortController();
19
- bridgeAbort(outer.signal, inner);
20
- outer.abort('shutdown');
21
- assert.equal(inner.signal.aborted, true);
22
- assert.equal(inner.signal.reason, 'shutdown');
23
- });
24
- it('aborts immediately when outer is already aborted', () => {
25
- const outer = new AbortController();
26
- outer.abort('pre');
27
- const inner = new AbortController();
28
- bridgeAbort(outer.signal, inner);
29
- assert.equal(inner.signal.aborted, true);
30
- assert.equal(inner.signal.reason, 'pre');
31
- });
32
- it('detaches cleanly - does not leak listeners across many calls', () => {
33
- const outer = new AbortController();
34
- // Sanity: listenerCount via public API isn't part of EventTarget, so we
35
- // verify no leak by running many cycles and confirming the process does
36
- // not emit MaxListenersExceededWarning and that only inners whose detach
37
- // was NOT called receive the abort.
38
- const warnings = [];
39
- const onWarn = (w) => { warnings.push(w.name + ':' + w.message); };
40
- process.on('warning', onWarn);
41
- try {
42
- for (let i = 0; i < 100; i++) {
43
- const inner = new AbortController();
44
- const detach = bridgeAbort(outer.signal, inner);
45
- detach();
46
- }
47
- }
48
- finally {
49
- process.off('warning', onWarn);
50
- }
51
- const leakWarn = warnings.find(w => w.includes('MaxListenersExceeded'));
52
- assert.equal(leakWarn, undefined, `leaked listeners: ${leakWarn}`);
53
- // After all detaches, firing outer.abort must not affect any prior
54
- // inners (they're out of scope / already detached). Create one more
55
- // inner WITHOUT detaching and confirm it receives the abort - proves
56
- // the bridge still works after many attach/detach cycles.
57
- const liveInner = new AbortController();
58
- bridgeAbort(outer.signal, liveInner);
59
- outer.abort('final');
60
- assert.equal(liveInner.signal.aborted, true);
61
- assert.equal(liveInner.signal.reason, 'final');
62
- void listenerCount;
63
- });
64
- });
65
- //# sourceMappingURL=relay-bridge-abort.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay-bridge-abort.test.js","sourceRoot":"","sources":["../../src/__tests__/relay-bridge-abort.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,232 +0,0 @@
1
- /**
2
- * `gipity-relay` daemon - full round-trip tests against an in-process mock
3
- * backend. `GIPITY_RELAY_CLAUDE_CMD` is pointed at `true` / `false` / a
4
- * sleep script so we can assert the daemon's ack shape for each outcome
5
- * without actually shelling out to `gipity claude`.
6
- */
7
- import { describe, it, before, after } from 'node:test';
8
- import assert from 'node:assert/strict';
9
- import { createServer } from 'http';
10
- import { mkdtempSync, writeFileSync, mkdirSync, readFileSync } from 'fs';
11
- import { join } from 'path';
12
- import { tmpdir } from 'os';
13
- import { runCliAsync } from './helpers/spawn-cli.js';
14
- let server;
15
- let apiBase;
16
- // Queue of dispatches the /next handler will hand out in order.
17
- let pending = [];
18
- let heartbeats = 0;
19
- const acks = [];
20
- let nextStatusOverride = null;
21
- let heartbeatStatusOverride = null;
22
- async function readJson(req) {
23
- let raw = '';
24
- for await (const chunk of req)
25
- raw += chunk;
26
- try {
27
- return JSON.parse(raw || '{}');
28
- }
29
- catch {
30
- return {};
31
- }
32
- }
33
- function resetMock() {
34
- pending = [];
35
- heartbeats = 0;
36
- acks.length = 0;
37
- nextStatusOverride = null;
38
- heartbeatStatusOverride = null;
39
- }
40
- before(async () => {
41
- server = createServer(async (req, res) => {
42
- // Require device bearer on every call.
43
- if (!req.headers.authorization?.startsWith('Bearer ')) {
44
- res.statusCode = 401;
45
- return res.end(JSON.stringify({ error: { code: 'UNAUTHORIZED', message: 'no token' } }));
46
- }
47
- const url = req.url ?? '';
48
- if (req.method === 'POST' && url === '/remote-devices/heartbeat') {
49
- heartbeats++;
50
- if (heartbeatStatusOverride != null) {
51
- res.statusCode = heartbeatStatusOverride;
52
- return res.end(JSON.stringify({ error: { code: 'X', message: 'override' } }));
53
- }
54
- res.statusCode = 200;
55
- return res.end(JSON.stringify({ data: { ok: true } }));
56
- }
57
- if (req.method === 'GET' && url === '/remote-devices/next') {
58
- if (nextStatusOverride != null) {
59
- res.statusCode = nextStatusOverride;
60
- return res.end(JSON.stringify({ error: { code: 'X', message: 'override' } }));
61
- }
62
- const d = pending.shift();
63
- if (!d) {
64
- // Brief wait then 204 - simulates a short long-poll hold.
65
- await new Promise(r => setTimeout(r, 80));
66
- res.statusCode = 204;
67
- return res.end();
68
- }
69
- res.statusCode = 200;
70
- return res.end(JSON.stringify({ data: d }));
71
- }
72
- const ackMatch = url.match(/^\/remote-devices\/dispatches\/([^/]+)\/ack$/);
73
- if (req.method === 'POST' && ackMatch) {
74
- const body = await readJson(req);
75
- acks.push({ guid: ackMatch[1], status: body.status, error: body.error });
76
- res.statusCode = 200;
77
- return res.end(JSON.stringify({ data: { ok: true } }));
78
- }
79
- res.statusCode = 404;
80
- res.end();
81
- });
82
- await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));
83
- const { port } = server.address();
84
- apiBase = `http://127.0.0.1:${port}`;
85
- });
86
- after(async () => {
87
- await new Promise(resolve => server.close(() => resolve()));
88
- });
89
- // ─── Fixture - a fresh $HOME with a paired device + pre-seeded project dir ─
90
- function freshHome(opts = {}) {
91
- const home = mkdtempSync(join(tmpdir(), 'gipity-daemon-'));
92
- const projectsRoot = join(home, 'GipityProjects');
93
- const projectCwd = join(projectsRoot, 'test');
94
- // relay.json: paired device + pause flag.
95
- const relayDir = join(home, '.gipity');
96
- mkdirSync(relayDir, { recursive: true });
97
- writeFileSync(join(relayDir, 'relay.json'), JSON.stringify({
98
- device: { guid: 'rd_test', name: 't', platform: 'linux', token: 'tok-test', paired_at: '2026-04-14' },
99
- paused: Boolean(opts.paused),
100
- relay_enabled: true,
101
- }, null, 2));
102
- // Pin `getProjectsRoot()` to our throwaway HOME's GipityProjects dir.
103
- writeFileSync(join(relayDir, 'settings.json'), JSON.stringify({ projectsDir: projectsRoot }) + '\n');
104
- // If this test wants to skip the bootstrap code path, pre-seed the dir
105
- // with a matching .gipity.json so the resolver short-circuits.
106
- if (opts.preseedProject ?? true) {
107
- mkdirSync(projectCwd, { recursive: true });
108
- writeFileSync(join(projectCwd, '.gipity.json'), JSON.stringify({
109
- projectGuid: 'p_test',
110
- projectSlug: 'test',
111
- accountSlug: 'acct',
112
- apiBase,
113
- ignore: [],
114
- }));
115
- }
116
- return { home, projectsRoot, projectCwd };
117
- }
118
- function dispatchRow(overrides = {}) {
119
- return {
120
- short_guid: 'rds_default1',
121
- kind: 'start',
122
- remote_session_id: null,
123
- message: 'hi',
124
- project_guid: 'p_test',
125
- project_slug: 'test',
126
- account_slug: 'acct',
127
- ...overrides,
128
- };
129
- }
130
- async function runDaemon(home, claudeCmd, opts = {}) {
131
- return runCliAsync(['--api-base', apiBase, 'relay', 'run'], {
132
- env: {
133
- HOME: home,
134
- GIPITY_RELAY_CLAUDE_CMD: claudeCmd,
135
- GIPITY_RELAY_HEARTBEAT_MS: '150',
136
- GIPITY_RELAY_POLL_TIMEOUT_MS: '300',
137
- GIPITY_RELAY_BACKOFF_BASE_MS: '50',
138
- GIPITY_RELAY_BACKOFF_MAX_MS: '200',
139
- // Bound the daemon so tests can't hang.
140
- GIPITY_RELAY_MAX_RUN_MS: String(opts.maxRunMs ?? 1500),
141
- },
142
- cwd: home,
143
- timeout: 10_000,
144
- });
145
- }
146
- // ─── Tests ─────────────────────────────────────────────────────────────
147
- describe('daemon: not paired', () => {
148
- it('errors immediately when no device is paired and user is not logged in', async () => {
149
- const home = mkdtempSync(join(tmpdir(), 'gipity-daemon-unpaired-'));
150
- const r = await runCliAsync(['--api-base', apiBase, 'relay', 'run'], {
151
- env: { HOME: home },
152
- cwd: home,
153
- timeout: 5_000,
154
- });
155
- assert.notEqual(r.status, 0);
156
- // With a fresh $HOME the auth file doesn't exist either, so the
157
- // daemon hits the "Not logged in" branch before it ever attempts to
158
- // register a device. Both messages are acceptable signals of the
159
- // not-paired condition from the user's perspective.
160
- assert.match(r.stderr, /Not logged in|Not paired/);
161
- });
162
- });
163
- describe('daemon: dispatch happy path', () => {
164
- it('claims queued dispatch, spawns child, acks done when child exits 0', async () => {
165
- resetMock();
166
- const { home } = freshHome();
167
- pending.push(dispatchRow({ short_guid: 'rds_abc123', message: 'hello' }));
168
- await runDaemon(home, 'true');
169
- assert.equal(acks.length, 1, `expected 1 ack, got ${acks.length}`);
170
- assert.equal(acks[0].guid, 'rds_abc123');
171
- assert.equal(acks[0].status, 'done');
172
- assert.ok(heartbeats >= 1, 'should have heartbeated at least once');
173
- });
174
- it('acks error when the child exits nonzero', async () => {
175
- resetMock();
176
- const { home } = freshHome();
177
- pending.push(dispatchRow({ short_guid: 'rds_fail1', message: 'boom' }));
178
- await runDaemon(home, 'false');
179
- assert.equal(acks.length, 1);
180
- assert.equal(acks[0].guid, 'rds_fail1');
181
- assert.equal(acks[0].status, 'error');
182
- assert.match(acks[0].error || '', /exited with code/);
183
- });
184
- });
185
- describe('daemon: safety checks', () => {
186
- it('refuses dispatches while paused', async () => {
187
- resetMock();
188
- const { home } = freshHome({ paused: true });
189
- pending.push(dispatchRow({ short_guid: 'rds_paused' }));
190
- await runDaemon(home, 'true');
191
- assert.equal(acks.length, 1);
192
- assert.equal(acks[0].status, 'error');
193
- assert.match(acks[0].error || '', /paused/i);
194
- });
195
- it('refuses resume without remote_session_id', async () => {
196
- resetMock();
197
- const { home } = freshHome();
198
- pending.push(dispatchRow({ short_guid: 'rds_badresume', kind: 'resume' }));
199
- await runDaemon(home, 'true');
200
- assert.equal(acks.length, 1);
201
- assert.equal(acks[0].status, 'error');
202
- assert.match(acks[0].error || '', /remote_session_id/);
203
- });
204
- });
205
- describe('daemon: auto-bootstrap missing project dir', () => {
206
- it('creates ~/GipityProjects/<slug>/ + .gipity.json when dispatch targets an unknown project', async () => {
207
- resetMock();
208
- // Don't preseed the project dir - daemon should create it.
209
- const { home, projectCwd } = freshHome({ preseedProject: false });
210
- pending.push(dispatchRow({ short_guid: 'rds_bootstrap', message: 'hi' }));
211
- await runDaemon(home, 'true');
212
- // Ack should be "done" - the dispatch ran successfully against the new dir.
213
- assert.equal(acks.length, 1);
214
- assert.equal(acks[0].status, 'done', `got ${acks[0].status}: ${acks[0].error}`);
215
- // Directory + .gipity.json now exist with the right guid.
216
- const cfgPath = join(projectCwd, '.gipity.json');
217
- const cfg = JSON.parse(readFileSync(cfgPath, 'utf-8'));
218
- assert.equal(cfg.projectGuid, 'p_test');
219
- assert.equal(cfg.projectSlug, 'test');
220
- });
221
- });
222
- describe('daemon: revocation', () => {
223
- it('exits cleanly (0) when /next returns 401', async () => {
224
- resetMock();
225
- nextStatusOverride = 401;
226
- const { home } = freshHome();
227
- const r = await runDaemon(home, 'true');
228
- assert.equal(r.status, 0, `expected clean exit, got ${r.status}. stderr: ${r.stderr}`);
229
- assert.match(r.stderr, /revoked/);
230
- });
231
- });
232
- //# sourceMappingURL=relay-daemon.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay-daemon.test.js","sourceRoot":"","sources":["../../src/__tests__/relay-daemon.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};