gipity 1.0.355 → 1.0.365

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 (409) hide show
  1. package/dist/capture/sources/claude-code.js +76 -11
  2. package/dist/commands/add.js +44 -27
  3. package/dist/commands/generate.js +16 -13
  4. package/dist/commands/page-eval.js +42 -3
  5. package/dist/commands/page-inspect.js +32 -4
  6. package/dist/commands/page-screenshot.js +34 -23
  7. package/dist/commands/page-test.js +86 -0
  8. package/dist/commands/page.js +5 -3
  9. package/dist/commands/service.js +56 -0
  10. package/dist/commands/skill.js +2 -1
  11. package/dist/commands/text.js +148 -0
  12. package/dist/commands/workflow.js +10 -14
  13. package/dist/config.js +8 -1
  14. package/dist/help-skills.js +1 -0
  15. package/dist/helpers/output.js +7 -1
  16. package/dist/helpers/text-analysis.js +200 -0
  17. package/dist/hooks/capture-runner.js +32 -8
  18. package/dist/index.js +31 -2
  19. package/dist/knowledge.js +13 -3
  20. package/dist/relay/daemon.js +11 -1
  21. package/dist/relay/stream-json.js +45 -8
  22. package/dist/setup.js +18 -4
  23. package/dist/sync.js +14 -2
  24. package/package.json +8 -7
  25. package/dist/__tests__/adopt-cwd.test.d.ts +0 -1
  26. package/dist/__tests__/adopt-cwd.test.js +0 -176
  27. package/dist/__tests__/adopt-cwd.test.js.map +0 -1
  28. package/dist/__tests__/capture-transcript.test.d.ts +0 -1
  29. package/dist/__tests__/capture-transcript.test.js +0 -92
  30. package/dist/__tests__/capture-transcript.test.js.map +0 -1
  31. package/dist/__tests__/claude-noninteractive.test.d.ts +0 -1
  32. package/dist/__tests__/claude-noninteractive.test.js +0 -92
  33. package/dist/__tests__/claude-noninteractive.test.js.map +0 -1
  34. package/dist/__tests__/claude-trust.test.d.ts +0 -1
  35. package/dist/__tests__/claude-trust.test.js +0 -71
  36. package/dist/__tests__/claude-trust.test.js.map +0 -1
  37. package/dist/__tests__/cli-cmd-add.test.d.ts +0 -1
  38. package/dist/__tests__/cli-cmd-add.test.js +0 -45
  39. package/dist/__tests__/cli-cmd-add.test.js.map +0 -1
  40. package/dist/__tests__/cli-cmd-agent.test.d.ts +0 -1
  41. package/dist/__tests__/cli-cmd-agent.test.js +0 -76
  42. package/dist/__tests__/cli-cmd-agent.test.js.map +0 -1
  43. package/dist/__tests__/cli-cmd-approval.test.d.ts +0 -1
  44. package/dist/__tests__/cli-cmd-approval.test.js +0 -47
  45. package/dist/__tests__/cli-cmd-approval.test.js.map +0 -1
  46. package/dist/__tests__/cli-cmd-audit.test.d.ts +0 -1
  47. package/dist/__tests__/cli-cmd-audit.test.js +0 -33
  48. package/dist/__tests__/cli-cmd-audit.test.js.map +0 -1
  49. package/dist/__tests__/cli-cmd-chat.test.d.ts +0 -1
  50. package/dist/__tests__/cli-cmd-chat.test.js +0 -94
  51. package/dist/__tests__/cli-cmd-chat.test.js.map +0 -1
  52. package/dist/__tests__/cli-cmd-credits.test.d.ts +0 -1
  53. package/dist/__tests__/cli-cmd-credits.test.js +0 -66
  54. package/dist/__tests__/cli-cmd-credits.test.js.map +0 -1
  55. package/dist/__tests__/cli-cmd-db.test.d.ts +0 -1
  56. package/dist/__tests__/cli-cmd-db.test.js +0 -95
  57. package/dist/__tests__/cli-cmd-db.test.js.map +0 -1
  58. package/dist/__tests__/cli-cmd-deploy.test.d.ts +0 -1
  59. package/dist/__tests__/cli-cmd-deploy.test.js +0 -53
  60. package/dist/__tests__/cli-cmd-deploy.test.js.map +0 -1
  61. package/dist/__tests__/cli-cmd-domain.test.d.ts +0 -1
  62. package/dist/__tests__/cli-cmd-domain.test.js +0 -73
  63. package/dist/__tests__/cli-cmd-domain.test.js.map +0 -1
  64. package/dist/__tests__/cli-cmd-email.test.d.ts +0 -1
  65. package/dist/__tests__/cli-cmd-email.test.js +0 -31
  66. package/dist/__tests__/cli-cmd-email.test.js.map +0 -1
  67. package/dist/__tests__/cli-cmd-file.test.d.ts +0 -1
  68. package/dist/__tests__/cli-cmd-file.test.js +0 -86
  69. package/dist/__tests__/cli-cmd-file.test.js.map +0 -1
  70. package/dist/__tests__/cli-cmd-fn.test.d.ts +0 -1
  71. package/dist/__tests__/cli-cmd-fn.test.js +0 -50
  72. package/dist/__tests__/cli-cmd-fn.test.js.map +0 -1
  73. package/dist/__tests__/cli-cmd-generate.test.d.ts +0 -1
  74. package/dist/__tests__/cli-cmd-generate.test.js +0 -46
  75. package/dist/__tests__/cli-cmd-generate.test.js.map +0 -1
  76. package/dist/__tests__/cli-cmd-gmail.test.d.ts +0 -1
  77. package/dist/__tests__/cli-cmd-gmail.test.js +0 -49
  78. package/dist/__tests__/cli-cmd-gmail.test.js.map +0 -1
  79. package/dist/__tests__/cli-cmd-info.test.d.ts +0 -1
  80. package/dist/__tests__/cli-cmd-info.test.js +0 -52
  81. package/dist/__tests__/cli-cmd-info.test.js.map +0 -1
  82. package/dist/__tests__/cli-cmd-init.test.d.ts +0 -1
  83. package/dist/__tests__/cli-cmd-init.test.js +0 -76
  84. package/dist/__tests__/cli-cmd-init.test.js.map +0 -1
  85. package/dist/__tests__/cli-cmd-job.test.d.ts +0 -1
  86. package/dist/__tests__/cli-cmd-job.test.js +0 -204
  87. package/dist/__tests__/cli-cmd-job.test.js.map +0 -1
  88. package/dist/__tests__/cli-cmd-location.test.d.ts +0 -1
  89. package/dist/__tests__/cli-cmd-location.test.js +0 -58
  90. package/dist/__tests__/cli-cmd-location.test.js.map +0 -1
  91. package/dist/__tests__/cli-cmd-login.test.d.ts +0 -1
  92. package/dist/__tests__/cli-cmd-login.test.js +0 -41
  93. package/dist/__tests__/cli-cmd-login.test.js.map +0 -1
  94. package/dist/__tests__/cli-cmd-logout.test.d.ts +0 -1
  95. package/dist/__tests__/cli-cmd-logout.test.js +0 -20
  96. package/dist/__tests__/cli-cmd-logout.test.js.map +0 -1
  97. package/dist/__tests__/cli-cmd-logs.test.d.ts +0 -1
  98. package/dist/__tests__/cli-cmd-logs.test.js +0 -40
  99. package/dist/__tests__/cli-cmd-logs.test.js.map +0 -1
  100. package/dist/__tests__/cli-cmd-memory.test.d.ts +0 -1
  101. package/dist/__tests__/cli-cmd-memory.test.js +0 -58
  102. package/dist/__tests__/cli-cmd-memory.test.js.map +0 -1
  103. package/dist/__tests__/cli-cmd-page-inspect.test.d.ts +0 -1
  104. package/dist/__tests__/cli-cmd-page-inspect.test.js +0 -47
  105. package/dist/__tests__/cli-cmd-page-inspect.test.js.map +0 -1
  106. package/dist/__tests__/cli-cmd-page.test.d.ts +0 -1
  107. package/dist/__tests__/cli-cmd-page.test.js +0 -90
  108. package/dist/__tests__/cli-cmd-page.test.js.map +0 -1
  109. package/dist/__tests__/cli-cmd-plan.test.d.ts +0 -1
  110. package/dist/__tests__/cli-cmd-plan.test.js +0 -81
  111. package/dist/__tests__/cli-cmd-plan.test.js.map +0 -1
  112. package/dist/__tests__/cli-cmd-project.test.d.ts +0 -1
  113. package/dist/__tests__/cli-cmd-project.test.js +0 -61
  114. package/dist/__tests__/cli-cmd-project.test.js.map +0 -1
  115. package/dist/__tests__/cli-cmd-rbac.test.d.ts +0 -1
  116. package/dist/__tests__/cli-cmd-rbac.test.js +0 -39
  117. package/dist/__tests__/cli-cmd-rbac.test.js.map +0 -1
  118. package/dist/__tests__/cli-cmd-realtime.test.d.ts +0 -1
  119. package/dist/__tests__/cli-cmd-realtime.test.js +0 -51
  120. package/dist/__tests__/cli-cmd-realtime.test.js.map +0 -1
  121. package/dist/__tests__/cli-cmd-records.test.d.ts +0 -1
  122. package/dist/__tests__/cli-cmd-records.test.js +0 -67
  123. package/dist/__tests__/cli-cmd-records.test.js.map +0 -1
  124. package/dist/__tests__/cli-cmd-relay.test.d.ts +0 -1
  125. package/dist/__tests__/cli-cmd-relay.test.js +0 -100
  126. package/dist/__tests__/cli-cmd-relay.test.js.map +0 -1
  127. package/dist/__tests__/cli-cmd-sandbox.test.d.ts +0 -1
  128. package/dist/__tests__/cli-cmd-sandbox.test.js +0 -46
  129. package/dist/__tests__/cli-cmd-sandbox.test.js.map +0 -1
  130. package/dist/__tests__/cli-cmd-scaffold.test.d.ts +0 -1
  131. package/dist/__tests__/cli-cmd-scaffold.test.js +0 -30
  132. package/dist/__tests__/cli-cmd-scaffold.test.js.map +0 -1
  133. package/dist/__tests__/cli-cmd-skill.test.d.ts +0 -1
  134. package/dist/__tests__/cli-cmd-skill.test.js +0 -40
  135. package/dist/__tests__/cli-cmd-skill.test.js.map +0 -1
  136. package/dist/__tests__/cli-cmd-test.test.d.ts +0 -1
  137. package/dist/__tests__/cli-cmd-test.test.js +0 -58
  138. package/dist/__tests__/cli-cmd-test.test.js.map +0 -1
  139. package/dist/__tests__/cli-cmd-workflow.test.d.ts +0 -1
  140. package/dist/__tests__/cli-cmd-workflow.test.js +0 -84
  141. package/dist/__tests__/cli-cmd-workflow.test.js.map +0 -1
  142. package/dist/__tests__/cli-e2e-live.test.d.ts +0 -1
  143. package/dist/__tests__/cli-e2e-live.test.js +0 -144
  144. package/dist/__tests__/cli-e2e-live.test.js.map +0 -1
  145. package/dist/__tests__/cli-smoke.test.d.ts +0 -1
  146. package/dist/__tests__/cli-smoke.test.js +0 -69
  147. package/dist/__tests__/cli-smoke.test.js.map +0 -1
  148. package/dist/__tests__/config.test.d.ts +0 -1
  149. package/dist/__tests__/config.test.js +0 -95
  150. package/dist/__tests__/config.test.js.map +0 -1
  151. package/dist/__tests__/flag-aliases.test.d.ts +0 -1
  152. package/dist/__tests__/flag-aliases.test.js +0 -53
  153. package/dist/__tests__/flag-aliases.test.js.map +0 -1
  154. package/dist/__tests__/helpers/mock-server.d.ts +0 -52
  155. package/dist/__tests__/helpers/mock-server.js +0 -86
  156. package/dist/__tests__/helpers/mock-server.js.map +0 -1
  157. package/dist/__tests__/helpers/spawn-cli.d.ts +0 -30
  158. package/dist/__tests__/helpers/spawn-cli.js +0 -72
  159. package/dist/__tests__/helpers/spawn-cli.js.map +0 -1
  160. package/dist/__tests__/helpers/test-home.d.ts +0 -22
  161. package/dist/__tests__/helpers/test-home.js +0 -35
  162. package/dist/__tests__/helpers/test-home.js.map +0 -1
  163. package/dist/__tests__/hook-capture.test.d.ts +0 -1
  164. package/dist/__tests__/hook-capture.test.js +0 -65
  165. package/dist/__tests__/hook-capture.test.js.map +0 -1
  166. package/dist/__tests__/prompts.test.d.ts +0 -1
  167. package/dist/__tests__/prompts.test.js +0 -129
  168. package/dist/__tests__/prompts.test.js.map +0 -1
  169. package/dist/__tests__/push-cas.test.d.ts +0 -1
  170. package/dist/__tests__/push-cas.test.js +0 -133
  171. package/dist/__tests__/push-cas.test.js.map +0 -1
  172. package/dist/__tests__/relay-bridge-abort.test.d.ts +0 -1
  173. package/dist/__tests__/relay-bridge-abort.test.js +0 -65
  174. package/dist/__tests__/relay-bridge-abort.test.js.map +0 -1
  175. package/dist/__tests__/relay-daemon.test.d.ts +0 -1
  176. package/dist/__tests__/relay-daemon.test.js +0 -232
  177. package/dist/__tests__/relay-daemon.test.js.map +0 -1
  178. package/dist/__tests__/relay-ingest-contract.test.d.ts +0 -1
  179. package/dist/__tests__/relay-ingest-contract.test.js +0 -76
  180. package/dist/__tests__/relay-ingest-contract.test.js.map +0 -1
  181. package/dist/__tests__/relay-installers.test.d.ts +0 -1
  182. package/dist/__tests__/relay-installers.test.js +0 -95
  183. package/dist/__tests__/relay-installers.test.js.map +0 -1
  184. package/dist/__tests__/relay-machine-id.test.d.ts +0 -1
  185. package/dist/__tests__/relay-machine-id.test.js +0 -41
  186. package/dist/__tests__/relay-machine-id.test.js.map +0 -1
  187. package/dist/__tests__/relay-pair.test.d.ts +0 -1
  188. package/dist/__tests__/relay-pair.test.js.map +0 -1
  189. package/dist/__tests__/relay-redact.test.d.ts +0 -1
  190. package/dist/__tests__/relay-redact.test.js +0 -78
  191. package/dist/__tests__/relay-redact.test.js.map +0 -1
  192. package/dist/__tests__/relay-state.test.d.ts +0 -1
  193. package/dist/__tests__/relay-state.test.js +0 -85
  194. package/dist/__tests__/relay-state.test.js.map +0 -1
  195. package/dist/__tests__/setup-skills-block.test.d.ts +0 -1
  196. package/dist/__tests__/setup-skills-block.test.js +0 -65
  197. package/dist/__tests__/setup-skills-block.test.js.map +0 -1
  198. package/dist/__tests__/stream-json.test.d.ts +0 -1
  199. package/dist/__tests__/stream-json.test.js +0 -186
  200. package/dist/__tests__/stream-json.test.js.map +0 -1
  201. package/dist/__tests__/sync-apply.test.d.ts +0 -1
  202. package/dist/__tests__/sync-apply.test.js +0 -457
  203. package/dist/__tests__/sync-apply.test.js.map +0 -1
  204. package/dist/__tests__/sync-lock.test.d.ts +0 -1
  205. package/dist/__tests__/sync-lock.test.js +0 -105
  206. package/dist/__tests__/sync-lock.test.js.map +0 -1
  207. package/dist/__tests__/sync.test.d.ts +0 -1
  208. package/dist/__tests__/sync.test.js +0 -160
  209. package/dist/__tests__/sync.test.js.map +0 -1
  210. package/dist/__tests__/template-vars.test.d.ts +0 -1
  211. package/dist/__tests__/template-vars.test.js +0 -119
  212. package/dist/__tests__/template-vars.test.js.map +0 -1
  213. package/dist/__tests__/updater.test.d.ts +0 -1
  214. package/dist/__tests__/updater.test.js +0 -95
  215. package/dist/__tests__/updater.test.js.map +0 -1
  216. package/dist/__tests__/upload.test.d.ts +0 -1
  217. package/dist/__tests__/upload.test.js +0 -92
  218. package/dist/__tests__/upload.test.js.map +0 -1
  219. package/dist/__tests__/utils.test.d.ts +0 -1
  220. package/dist/__tests__/utils.test.js +0 -69
  221. package/dist/__tests__/utils.test.js.map +0 -1
  222. package/dist/adopt-cwd.d.ts +0 -69
  223. package/dist/adopt-cwd.js.map +0 -1
  224. package/dist/api.d.ts +0 -41
  225. package/dist/api.js.map +0 -1
  226. package/dist/auth.d.ts +0 -17
  227. package/dist/auth.js.map +0 -1
  228. package/dist/banner.d.ts +0 -6
  229. package/dist/banner.js.map +0 -1
  230. package/dist/capture/sources/claude-code.d.ts +0 -78
  231. package/dist/capture/sources/claude-code.js.map +0 -1
  232. package/dist/coding-guidelines.d.ts +0 -9
  233. package/dist/coding-guidelines.js.map +0 -1
  234. package/dist/colors.d.ts +0 -22
  235. package/dist/colors.js.map +0 -1
  236. package/dist/commands/add.d.ts +0 -2
  237. package/dist/commands/add.js.map +0 -1
  238. package/dist/commands/agent.d.ts +0 -2
  239. package/dist/commands/agent.js.map +0 -1
  240. package/dist/commands/api.d.ts +0 -1
  241. package/dist/commands/api.js.map +0 -1
  242. package/dist/commands/approval.d.ts +0 -2
  243. package/dist/commands/approval.js.map +0 -1
  244. package/dist/commands/audit.d.ts +0 -2
  245. package/dist/commands/audit.js.map +0 -1
  246. package/dist/commands/browser.d.ts +0 -2
  247. package/dist/commands/browser.js.map +0 -1
  248. package/dist/commands/chat.d.ts +0 -2
  249. package/dist/commands/chat.js.map +0 -1
  250. package/dist/commands/checkpoint.d.ts +0 -2
  251. package/dist/commands/checkpoint.js.map +0 -1
  252. package/dist/commands/claude.d.ts +0 -16
  253. package/dist/commands/claude.js.map +0 -1
  254. package/dist/commands/credits.d.ts +0 -2
  255. package/dist/commands/credits.js.map +0 -1
  256. package/dist/commands/db.d.ts +0 -2
  257. package/dist/commands/db.js.map +0 -1
  258. package/dist/commands/deploy.d.ts +0 -2
  259. package/dist/commands/deploy.js.map +0 -1
  260. package/dist/commands/doctor.d.ts +0 -2
  261. package/dist/commands/doctor.js.map +0 -1
  262. package/dist/commands/domain.d.ts +0 -2
  263. package/dist/commands/domain.js.map +0 -1
  264. package/dist/commands/email.d.ts +0 -2
  265. package/dist/commands/email.js.map +0 -1
  266. package/dist/commands/file.d.ts +0 -2
  267. package/dist/commands/file.js.map +0 -1
  268. package/dist/commands/fn.d.ts +0 -2
  269. package/dist/commands/fn.js.map +0 -1
  270. package/dist/commands/generate.d.ts +0 -2
  271. package/dist/commands/generate.js.map +0 -1
  272. package/dist/commands/gmail.d.ts +0 -2
  273. package/dist/commands/gmail.js.map +0 -1
  274. package/dist/commands/hook-capture.d.ts +0 -15
  275. package/dist/commands/hook-capture.js.map +0 -1
  276. package/dist/commands/init.d.ts +0 -2
  277. package/dist/commands/init.js.map +0 -1
  278. package/dist/commands/job.d.ts +0 -2
  279. package/dist/commands/job.js.map +0 -1
  280. package/dist/commands/location.d.ts +0 -9
  281. package/dist/commands/location.js.map +0 -1
  282. package/dist/commands/login.d.ts +0 -2
  283. package/dist/commands/login.js.map +0 -1
  284. package/dist/commands/logout.d.ts +0 -2
  285. package/dist/commands/logout.js.map +0 -1
  286. package/dist/commands/logs.d.ts +0 -2
  287. package/dist/commands/logs.js.map +0 -1
  288. package/dist/commands/memory.d.ts +0 -2
  289. package/dist/commands/memory.js.map +0 -1
  290. package/dist/commands/page-eval.d.ts +0 -2
  291. package/dist/commands/page-eval.js.map +0 -1
  292. package/dist/commands/page-inspect.d.ts +0 -2
  293. package/dist/commands/page-inspect.js.map +0 -1
  294. package/dist/commands/page-screenshot.d.ts +0 -2
  295. package/dist/commands/page-screenshot.js.map +0 -1
  296. package/dist/commands/page.d.ts +0 -2
  297. package/dist/commands/page.js.map +0 -1
  298. package/dist/commands/plan.d.ts +0 -2
  299. package/dist/commands/plan.js.map +0 -1
  300. package/dist/commands/project.d.ts +0 -2
  301. package/dist/commands/project.js.map +0 -1
  302. package/dist/commands/push.d.ts +0 -2
  303. package/dist/commands/push.js.map +0 -1
  304. package/dist/commands/rbac.d.ts +0 -2
  305. package/dist/commands/rbac.js.map +0 -1
  306. package/dist/commands/realtime.d.ts +0 -2
  307. package/dist/commands/realtime.js.map +0 -1
  308. package/dist/commands/records.d.ts +0 -2
  309. package/dist/commands/records.js.map +0 -1
  310. package/dist/commands/relay-install.d.ts +0 -11
  311. package/dist/commands/relay-install.js.map +0 -1
  312. package/dist/commands/relay.d.ts +0 -9
  313. package/dist/commands/relay.js.map +0 -1
  314. package/dist/commands/sandbox.d.ts +0 -2
  315. package/dist/commands/sandbox.js.map +0 -1
  316. package/dist/commands/scaffold.d.ts +0 -2
  317. package/dist/commands/scaffold.js.map +0 -1
  318. package/dist/commands/skill.d.ts +0 -2
  319. package/dist/commands/skill.js.map +0 -1
  320. package/dist/commands/skills.d.ts +0 -2
  321. package/dist/commands/skills.js.map +0 -1
  322. package/dist/commands/start-cc.d.ts +0 -2
  323. package/dist/commands/start-cc.js.map +0 -1
  324. package/dist/commands/status.d.ts +0 -2
  325. package/dist/commands/status.js.map +0 -1
  326. package/dist/commands/sync.d.ts +0 -2
  327. package/dist/commands/sync.js.map +0 -1
  328. package/dist/commands/test.d.ts +0 -2
  329. package/dist/commands/test.js.map +0 -1
  330. package/dist/commands/uninstall.d.ts +0 -10
  331. package/dist/commands/uninstall.js.map +0 -1
  332. package/dist/commands/update.d.ts +0 -2
  333. package/dist/commands/update.js.map +0 -1
  334. package/dist/commands/upload.d.ts +0 -2
  335. package/dist/commands/upload.js.map +0 -1
  336. package/dist/commands/workflow.d.ts +0 -2
  337. package/dist/commands/workflow.js.map +0 -1
  338. package/dist/config.d.ts +0 -39
  339. package/dist/config.js.map +0 -1
  340. package/dist/flag-aliases.d.ts +0 -17
  341. package/dist/flag-aliases.js.map +0 -1
  342. package/dist/gip3dw-guide.d.ts +0 -7
  343. package/dist/gip3dw-guide.js.map +0 -1
  344. package/dist/gipcc.d.ts +0 -2
  345. package/dist/gipcc.js.map +0 -1
  346. package/dist/gipccd.d.ts +0 -2
  347. package/dist/gipccd.js.map +0 -1
  348. package/dist/help-skills.d.ts +0 -7
  349. package/dist/help-skills.js.map +0 -1
  350. package/dist/helpers/command.d.ts +0 -12
  351. package/dist/helpers/command.js.map +0 -1
  352. package/dist/helpers/index.d.ts +0 -6
  353. package/dist/helpers/index.js.map +0 -1
  354. package/dist/helpers/output.d.ts +0 -22
  355. package/dist/helpers/output.js.map +0 -1
  356. package/dist/helpers/sync.d.ts +0 -13
  357. package/dist/helpers/sync.js.map +0 -1
  358. package/dist/hooks/capture-runner.d.ts +0 -24
  359. package/dist/hooks/capture-runner.js.map +0 -1
  360. package/dist/index.d.ts +0 -2
  361. package/dist/index.js.map +0 -1
  362. package/dist/knowledge.d.ts +0 -11
  363. package/dist/knowledge.js.map +0 -1
  364. package/dist/platform-overview.d.ts +0 -9
  365. package/dist/platform-overview.js.map +0 -1
  366. package/dist/project-setup.d.ts +0 -29
  367. package/dist/project-setup.js.map +0 -1
  368. package/dist/prompts.d.ts +0 -80
  369. package/dist/prompts.js.map +0 -1
  370. package/dist/provider-docs.d.ts +0 -27
  371. package/dist/provider-docs.js.map +0 -1
  372. package/dist/relay/daemon.d.ts +0 -47
  373. package/dist/relay/daemon.js.map +0 -1
  374. package/dist/relay/device-http.d.ts +0 -9
  375. package/dist/relay/device-http.js.map +0 -1
  376. package/dist/relay/installers.d.ts +0 -24
  377. package/dist/relay/installers.js.map +0 -1
  378. package/dist/relay/machine-id.d.ts +0 -2
  379. package/dist/relay/machine-id.js.map +0 -1
  380. package/dist/relay/onboarding.d.ts +0 -8
  381. package/dist/relay/onboarding.js.map +0 -1
  382. package/dist/relay/paths.d.ts +0 -5
  383. package/dist/relay/paths.js.map +0 -1
  384. package/dist/relay/redact.d.ts +0 -34
  385. package/dist/relay/redact.js.map +0 -1
  386. package/dist/relay/state.d.ts +0 -39
  387. package/dist/relay/state.js.map +0 -1
  388. package/dist/relay/stream-json.d.ts +0 -105
  389. package/dist/relay/stream-json.js.map +0 -1
  390. package/dist/relay/transcripts.d.ts +0 -60
  391. package/dist/relay/transcripts.js.map +0 -1
  392. package/dist/setup.d.ts +0 -101
  393. package/dist/setup.js.map +0 -1
  394. package/dist/sync.d.ts +0 -74
  395. package/dist/sync.js.map +0 -1
  396. package/dist/template-vars.d.ts +0 -32
  397. package/dist/template-vars.js.map +0 -1
  398. package/dist/updater/bootstrap.d.ts +0 -13
  399. package/dist/updater/bootstrap.js.map +0 -1
  400. package/dist/updater/check.d.ts +0 -12
  401. package/dist/updater/check.js.map +0 -1
  402. package/dist/updater/shim.d.ts +0 -2
  403. package/dist/updater/shim.js.map +0 -1
  404. package/dist/updater/state.d.ts +0 -24
  405. package/dist/updater/state.js.map +0 -1
  406. package/dist/upload.d.ts +0 -40
  407. package/dist/upload.js.map +0 -1
  408. package/dist/utils.d.ts +0 -39
  409. package/dist/utils.js.map +0 -1
@@ -1,72 +0,0 @@
1
- import { spawnSync, spawn } from 'child_process';
2
- import { fileURLToPath } from 'url';
3
- import { dirname, resolve } from 'path';
4
- import { mkdtempSync } from 'fs';
5
- import { tmpdir } from 'os';
6
- const __dirname = dirname(fileURLToPath(import.meta.url));
7
- // __dirname is dist/__tests__/helpers - CLI entry is dist/index.js
8
- export const CLI_ENTRY = resolve(__dirname, '..', '..', 'index.js');
9
- /**
10
- * Run the built gipity CLI with a deterministic, isolated environment.
11
- * Returns combined stdout/stderr text plus exit status.
12
- */
13
- export function runCli(args, opts = {}) {
14
- const baseEnv = {
15
- PATH: process.env['PATH'] ?? '',
16
- HOME: opts.env?.['HOME'] ?? mkdtempSync(`${tmpdir()}/gipity-cli-test-`),
17
- NO_COLOR: '1',
18
- CI: '1',
19
- };
20
- if (!opts.enableUpdater)
21
- baseEnv['DISABLE_AUTOUPDATER'] = '1';
22
- const env = { ...baseEnv, ...opts.env };
23
- const spawnOpts = {
24
- encoding: 'utf-8',
25
- cwd: opts.cwd ?? process.cwd(),
26
- env,
27
- timeout: opts.timeout ?? 15000,
28
- };
29
- const res = spawnSync(process.execPath, [CLI_ENTRY, ...args], spawnOpts);
30
- return {
31
- stdout: res.stdout ?? '',
32
- stderr: res.stderr ?? '',
33
- status: res.status ?? -1,
34
- };
35
- }
36
- export function makeTmpHome() {
37
- return mkdtempSync(`${tmpdir()}/gipity-cli-test-`);
38
- }
39
- /**
40
- * Async version of runCli - uses `spawn` instead of `spawnSync` so the
41
- * test's event loop keeps turning while the child runs. Required for any
42
- * test that spins up an in-process HTTP server for the child to hit
43
- * (spawnSync deadlocks because the server can't accept connections while
44
- * the event loop is blocked).
45
- */
46
- export async function runCliAsync(args, opts = {}) {
47
- const baseEnv = {
48
- PATH: process.env['PATH'] ?? '',
49
- HOME: opts.env?.['HOME'] ?? mkdtempSync(`${tmpdir()}/gipity-cli-test-`),
50
- NO_COLOR: '1',
51
- CI: '1',
52
- };
53
- if (!opts.enableUpdater)
54
- baseEnv['DISABLE_AUTOUPDATER'] = '1';
55
- const env = { ...baseEnv, ...opts.env };
56
- const child = spawn(process.execPath, [CLI_ENTRY, ...args], {
57
- cwd: opts.cwd ?? process.cwd(),
58
- env,
59
- });
60
- let stdout = '';
61
- let stderr = '';
62
- child.stdout.on('data', c => { stdout += c; });
63
- child.stderr.on('data', c => { stderr += c; });
64
- const timeoutMs = opts.timeout ?? 15000;
65
- const timer = setTimeout(() => child.kill('SIGKILL'), timeoutMs);
66
- const status = await new Promise(resolve => {
67
- child.on('exit', code => { clearTimeout(timer); resolve(code ?? -1); });
68
- child.on('error', () => { clearTimeout(timer); resolve(-1); });
69
- });
70
- return { stdout, stderr, status };
71
- }
72
- //# sourceMappingURL=spawn-cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-cli.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/spawn-cli.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- export interface AuthedHomeOpts {
2
- /** Override the email stored in auth.json. Default: ec-test@914-6.com (blocked from real SendGrid). */
3
- email?: string;
4
- /** Override the access token. Default: fake-jwt. */
5
- accessToken?: string;
6
- }
7
- /**
8
- * Create a temp HOME with a pre-populated `~/.gipity/auth.json` so commands
9
- * that call `requireAuth()` succeed without going through magic-code flow.
10
- * Returned path is meant to be passed as `env.HOME` to `runCliAsync`.
11
- */
12
- export declare function makeAuthedHome(opts?: AuthedHomeOpts): string;
13
- export interface ProjectDirOpts {
14
- projectGuid?: string;
15
- projectSlug?: string;
16
- accountSlug?: string;
17
- agentGuid?: string | null;
18
- apiBase?: string;
19
- }
20
- /** Create a temp project directory with a `.gipity.json` so commands that
21
- * rely on `requireConfig()` work. Returned path is meant to be passed as `cwd`. */
22
- export declare function makeProjectDir(opts?: ProjectDirOpts): string;
@@ -1,35 +0,0 @@
1
- import { mkdirSync, writeFileSync, mkdtempSync } from 'fs';
2
- import { join } from 'path';
3
- import { tmpdir } from 'os';
4
- /**
5
- * Create a temp HOME with a pre-populated `~/.gipity/auth.json` so commands
6
- * that call `requireAuth()` succeed without going through magic-code flow.
7
- * Returned path is meant to be passed as `env.HOME` to `runCliAsync`.
8
- */
9
- export function makeAuthedHome(opts = {}) {
10
- const home = mkdtempSync(join(tmpdir(), 'gipity-cli-cmd-'));
11
- mkdirSync(join(home, '.gipity'), { recursive: true });
12
- writeFileSync(join(home, '.gipity', 'auth.json'), JSON.stringify({
13
- accessToken: opts.accessToken ?? 'fake-jwt',
14
- refreshToken: 'fake-refresh',
15
- email: opts.email ?? 'ec-test@914-6.com',
16
- expiresAt: new Date(Date.now() + 60 * 60_000).toISOString(),
17
- }));
18
- return home;
19
- }
20
- /** Create a temp project directory with a `.gipity.json` so commands that
21
- * rely on `requireConfig()` work. Returned path is meant to be passed as `cwd`. */
22
- export function makeProjectDir(opts = {}) {
23
- const dir = mkdtempSync(join(tmpdir(), 'gipity-cli-proj-'));
24
- writeFileSync(join(dir, '.gipity.json'), JSON.stringify({
25
- projectGuid: opts.projectGuid ?? 'p_TestProj',
26
- projectSlug: opts.projectSlug ?? 'test-project',
27
- accountSlug: opts.accountSlug ?? 'test-account',
28
- agentGuid: opts.agentGuid ?? 'a_TestAgnt',
29
- conversationGuid: null,
30
- apiBase: opts.apiBase ?? 'http://127.0.0.1:0',
31
- ignore: [],
32
- }));
33
- return dir;
34
- }
35
- //# sourceMappingURL=test-home.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-home.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/test-home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAS5B;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5D,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAC/D,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,UAAU;QAC3C,YAAY,EAAE,cAAc;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,mBAAmB;QACxC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;KAC5D,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,CAAC;AACd,CAAC;AAUD;oFACoF;AACpF,MAAM,UAAU,cAAc,CAAC,OAAuB,EAAE;IACtD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC5D,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QACtD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,YAAY;QAC7C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,cAAc;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,cAAc;QAC/C,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,YAAY;QACzC,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,oBAAoB;QAC7C,MAAM,EAAE,EAAE;KACX,CAAC,CAAC,CAAC;IACJ,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,65 +0,0 @@
1
- /**
2
- * `gipity hook-capture <event>` — hidden subcommand wired into Claude Code
3
- * hooks. Runs in every Claude Code turn (even in directories that aren't
4
- * Gipity projects) and MUST never disrupt the session: silent no-op when
5
- * there's no .gipity.json or no auth, exit 0 on bad input.
6
- *
7
- * We can't exercise the happy path here (needs a live backend). These
8
- * smoke tests cover the "must never break Claude Code" contract.
9
- */
10
- import { describe, it } from 'node:test';
11
- import assert from 'node:assert/strict';
12
- import { spawnSync } from 'child_process';
13
- import { mkdtempSync } from 'fs';
14
- import { tmpdir } from 'os';
15
- import { CLI_ENTRY } from './helpers/spawn-cli.js';
16
- function runWithStdin(args, stdin, cwd) {
17
- const home = mkdtempSync(`${tmpdir()}/gipity-hc-test-`);
18
- const res = spawnSync(process.execPath, [CLI_ENTRY, ...args], {
19
- encoding: 'utf-8',
20
- cwd: cwd ?? home,
21
- env: {
22
- PATH: process.env['PATH'] ?? '',
23
- HOME: home,
24
- NO_COLOR: '1',
25
- CI: '1',
26
- DISABLE_AUTOUPDATER: '1',
27
- },
28
- input: stdin,
29
- timeout: 10_000,
30
- });
31
- return { stdout: res.stdout ?? '', stderr: res.stderr ?? '', status: res.status ?? -1 };
32
- }
33
- describe('gipity hook-capture: silent-no-op contract', () => {
34
- const validPayload = JSON.stringify({
35
- session_id: 'sid_test_12345',
36
- tool_name: 'Bash',
37
- tool_input: { command: 'ls' },
38
- tool_response: { stdout: 'a\nb', exit_code: 0 },
39
- });
40
- it('exits 0 silently when no .gipity.json and no auth (hottest path)', () => {
41
- const r = runWithStdin(['hook-capture', 'tool'], validPayload);
42
- assert.equal(r.status, 0, `expected exit 0, got ${r.status}. stderr: ${r.stderr}`);
43
- assert.equal(r.stdout, '', `expected no stdout, got: ${r.stdout}`);
44
- assert.equal(r.stderr, '', `expected no stderr, got: ${r.stderr}`);
45
- });
46
- it('exits 0 silently on malformed JSON stdin', () => {
47
- const r = runWithStdin(['hook-capture', 'prompt'], 'not json {{{{');
48
- assert.equal(r.status, 0);
49
- assert.equal(r.stdout, '');
50
- assert.equal(r.stderr, '');
51
- });
52
- it('exits 0 silently on an unknown event name', () => {
53
- const r = runWithStdin(['hook-capture', 'totally-made-up'], validPayload);
54
- assert.equal(r.status, 0);
55
- assert.equal(r.stdout, '');
56
- assert.equal(r.stderr, '');
57
- });
58
- it('exits 0 silently on empty stdin', () => {
59
- const r = runWithStdin(['hook-capture', 'stop'], '');
60
- assert.equal(r.status, 0);
61
- assert.equal(r.stdout, '');
62
- assert.equal(r.stderr, '');
63
- });
64
- });
65
- //# sourceMappingURL=hook-capture.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook-capture.test.js","sourceRoot":"","sources":["../../src/__tests__/hook-capture.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,SAAS,YAAY,CAAC,IAAc,EAAE,KAAa,EAAE,GAAY;IAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;QAC5D,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,GAAG,EAAE;YACH,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAC/B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,GAAG;YACb,EAAE,EAAE,GAAG;YACP,mBAAmB,EAAE,GAAG;SACzB;QACD,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,UAAU,EAAE,gBAAgB;QAC5B,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC7B,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;KAChD,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -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 {};