@vicoa/cli 1.3.11-linux-x64 → 1.3.11

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 (301) hide show
  1. package/README.md +82 -0
  2. package/bin/vicoa.js +38 -0
  3. package/package.json +29 -10
  4. package/bin/_internal/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so +0 -0
  5. package/bin/_internal/_cffi_backend.cpython-312-x86_64-linux-gnu.so +0 -0
  6. package/bin/_internal/aiofile-3.9.0.dist-info/INSTALLER +0 -1
  7. package/bin/_internal/aiofile-3.9.0.dist-info/LICENCE +0 -195
  8. package/bin/_internal/aiofile-3.9.0.dist-info/LICENCE.md +0 -195
  9. package/bin/_internal/aiofile-3.9.0.dist-info/METADATA +0 -492
  10. package/bin/_internal/aiofile-3.9.0.dist-info/RECORD +0 -15
  11. package/bin/_internal/aiofile-3.9.0.dist-info/WHEEL +0 -4
  12. package/bin/_internal/aiohttp/_http_parser.cpython-312-x86_64-linux-gnu.so +0 -0
  13. package/bin/_internal/aiohttp/_http_writer.cpython-312-x86_64-linux-gnu.so +0 -0
  14. package/bin/_internal/aiohttp/_websocket/mask.cpython-312-x86_64-linux-gnu.so +0 -0
  15. package/bin/_internal/aiohttp/_websocket/reader_c.cpython-312-x86_64-linux-gnu.so +0 -0
  16. package/bin/_internal/attrs-26.1.0.dist-info/INSTALLER +0 -1
  17. package/bin/_internal/attrs-26.1.0.dist-info/METADATA +0 -199
  18. package/bin/_internal/attrs-26.1.0.dist-info/RECORD +0 -55
  19. package/bin/_internal/attrs-26.1.0.dist-info/WHEEL +0 -4
  20. package/bin/_internal/attrs-26.1.0.dist-info/licenses/LICENSE +0 -21
  21. package/bin/_internal/base_library.zip +0 -0
  22. package/bin/_internal/caio/linux_aio.cpython-312-x86_64-linux-gnu.so +0 -0
  23. package/bin/_internal/caio/thread_aio.cpython-312-x86_64-linux-gnu.so +0 -0
  24. package/bin/_internal/certifi/cacert.pem +0 -4494
  25. package/bin/_internal/certifi/py.typed +0 -0
  26. package/bin/_internal/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so +0 -0
  27. package/bin/_internal/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so +0 -0
  28. package/bin/_internal/click-8.3.2.dist-info/INSTALLER +0 -1
  29. package/bin/_internal/click-8.3.2.dist-info/METADATA +0 -84
  30. package/bin/_internal/click-8.3.2.dist-info/RECORD +0 -40
  31. package/bin/_internal/click-8.3.2.dist-info/WHEEL +0 -4
  32. package/bin/_internal/click-8.3.2.dist-info/licenses/LICENSE.txt +0 -28
  33. package/bin/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
  34. package/bin/_internal/cryptography-46.0.7.dist-info/INSTALLER +0 -1
  35. package/bin/_internal/cryptography-46.0.7.dist-info/METADATA +0 -139
  36. package/bin/_internal/cryptography-46.0.7.dist-info/RECORD +0 -180
  37. package/bin/_internal/cryptography-46.0.7.dist-info/WHEEL +0 -5
  38. package/bin/_internal/cryptography-46.0.7.dist-info/licenses/LICENSE +0 -3
  39. package/bin/_internal/cryptography-46.0.7.dist-info/licenses/LICENSE.APACHE +0 -202
  40. package/bin/_internal/cryptography-46.0.7.dist-info/licenses/LICENSE.BSD +0 -27
  41. package/bin/_internal/email_validator-2.3.0.dist-info/INSTALLER +0 -1
  42. package/bin/_internal/email_validator-2.3.0.dist-info/METADATA +0 -466
  43. package/bin/_internal/email_validator-2.3.0.dist-info/RECORD +0 -27
  44. package/bin/_internal/email_validator-2.3.0.dist-info/WHEEL +0 -5
  45. package/bin/_internal/email_validator-2.3.0.dist-info/entry_points.txt +0 -2
  46. package/bin/_internal/email_validator-2.3.0.dist-info/licenses/LICENSE +0 -27
  47. package/bin/_internal/email_validator-2.3.0.dist-info/top_level.txt +0 -1
  48. package/bin/_internal/frozenlist/_frozenlist.cpython-312-x86_64-linux-gnu.so +0 -0
  49. package/bin/_internal/importlib_metadata-8.7.1.dist-info/INSTALLER +0 -1
  50. package/bin/_internal/importlib_metadata-8.7.1.dist-info/METADATA +0 -133
  51. package/bin/_internal/importlib_metadata-8.7.1.dist-info/RECORD +0 -33
  52. package/bin/_internal/importlib_metadata-8.7.1.dist-info/WHEEL +0 -5
  53. package/bin/_internal/importlib_metadata-8.7.1.dist-info/licenses/LICENSE +0 -73
  54. package/bin/_internal/importlib_metadata-8.7.1.dist-info/top_level.txt +0 -1
  55. package/bin/_internal/integrations/cli_wrappers/IMPORTANT_USE_CASES.md +0 -33
  56. package/bin/_internal/integrations/github/claude-code-action/CLAUDE.md +0 -136
  57. package/bin/_internal/integrations/github/claude-code-action/CODE_OF_CONDUCT.md +0 -128
  58. package/bin/_internal/integrations/github/claude-code-action/CONTRIBUTING.md +0 -116
  59. package/bin/_internal/integrations/github/claude-code-action/LICENSE +0 -21
  60. package/bin/_internal/integrations/github/claude-code-action/README.md +0 -53
  61. package/bin/_internal/integrations/github/claude-code-action/ROADMAP.md +0 -20
  62. package/bin/_internal/integrations/github/claude-code-action/SECURITY.md +0 -15
  63. package/bin/_internal/integrations/github/claude-code-action/action.yml +0 -294
  64. package/bin/_internal/integrations/github/claude-code-action/base-action/CLAUDE.md +0 -60
  65. package/bin/_internal/integrations/github/claude-code-action/base-action/CODE_OF_CONDUCT.md +0 -128
  66. package/bin/_internal/integrations/github/claude-code-action/base-action/CONTRIBUTING.md +0 -136
  67. package/bin/_internal/integrations/github/claude-code-action/base-action/LICENSE +0 -21
  68. package/bin/_internal/integrations/github/claude-code-action/base-action/MIRROR_DISCLAIMER.md +0 -11
  69. package/bin/_internal/integrations/github/claude-code-action/base-action/README.md +0 -521
  70. package/bin/_internal/integrations/github/claude-code-action/base-action/action.yml +0 -149
  71. package/bin/_internal/integrations/github/claude-code-action/base-action/bun.lock +0 -54
  72. package/bin/_internal/integrations/github/claude-code-action/base-action/examples/issue-triage.yml +0 -108
  73. package/bin/_internal/integrations/github/claude-code-action/base-action/package.json +0 -23
  74. package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/install-hooks.sh +0 -13
  75. package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/pre-push +0 -46
  76. package/bin/_internal/integrations/github/claude-code-action/base-action/src/index.ts +0 -82
  77. package/bin/_internal/integrations/github/claude-code-action/base-action/src/prepare-prompt.ts +0 -82
  78. package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-claude.ts +0 -257
  79. package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-vicoa.ts +0 -301
  80. package/bin/_internal/integrations/github/claude-code-action/base-action/src/setup-claude-code-settings.ts +0 -68
  81. package/bin/_internal/integrations/github/claude-code-action/base-action/src/validate-env.ts +0 -54
  82. package/bin/_internal/integrations/github/claude-code-action/base-action/test-local.sh +0 -12
  83. package/bin/_internal/integrations/github/claude-code-action/base-action/test-mcp-local.sh +0 -18
  84. package/bin/_internal/integrations/github/claude-code-action/base-action/tsconfig.json +0 -30
  85. package/bin/_internal/integrations/github/claude-code-action/bun.lock +0 -384
  86. package/bin/_internal/integrations/github/claude-code-action/docs/capabilities-and-limitations.md +0 -33
  87. package/bin/_internal/integrations/github/claude-code-action/docs/cloud-providers.md +0 -99
  88. package/bin/_internal/integrations/github/claude-code-action/docs/configuration.md +0 -345
  89. package/bin/_internal/integrations/github/claude-code-action/docs/custom-automations.md +0 -113
  90. package/bin/_internal/integrations/github/claude-code-action/docs/experimental.md +0 -128
  91. package/bin/_internal/integrations/github/claude-code-action/docs/faq.md +0 -205
  92. package/bin/_internal/integrations/github/claude-code-action/docs/migration-guide.md +0 -261
  93. package/bin/_internal/integrations/github/claude-code-action/docs/security.md +0 -38
  94. package/bin/_internal/integrations/github/claude-code-action/docs/setup.md +0 -146
  95. package/bin/_internal/integrations/github/claude-code-action/docs/usage.md +0 -213
  96. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/auto-fix-ci.yml +0 -97
  97. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/commands/fix-ci.md +0 -127
  98. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/auto-fix-ci-signed.yml +0 -97
  99. package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/commands/fix-ci-signed.md +0 -148
  100. package/bin/_internal/integrations/github/claude-code-action/examples/issue-deduplication.yml +0 -63
  101. package/bin/_internal/integrations/github/claude-code-action/examples/issue-triage.yml +0 -75
  102. package/bin/_internal/integrations/github/claude-code-action/examples/vicoa.yml +0 -75
  103. package/bin/_internal/integrations/github/claude-code-action/package.json +0 -31
  104. package/bin/_internal/integrations/github/claude-code-action/scripts/install-hooks.sh +0 -13
  105. package/bin/_internal/integrations/github/claude-code-action/scripts/pre-commit +0 -46
  106. package/bin/_internal/integrations/github/claude-code-action/scripts/setup-network-restrictions.sh +0 -123
  107. package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/index.ts +0 -799
  108. package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/types.ts +0 -102
  109. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/collect-inputs.ts +0 -58
  110. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/format-turns.ts +0 -465
  111. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/prepare.ts +0 -98
  112. package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/update-comment-link.ts +0 -245
  113. package/bin/_internal/integrations/github/claude-code-action/src/github/api/client.ts +0 -23
  114. package/bin/_internal/integrations/github/claude-code-action/src/github/api/config.ts +0 -4
  115. package/bin/_internal/integrations/github/claude-code-action/src/github/api/queries/github.ts +0 -117
  116. package/bin/_internal/integrations/github/claude-code-action/src/github/context.ts +0 -277
  117. package/bin/_internal/integrations/github/claude-code-action/src/github/data/fetcher.ts +0 -233
  118. package/bin/_internal/integrations/github/claude-code-action/src/github/data/formatter.ts +0 -144
  119. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch-cleanup.ts +0 -132
  120. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch.ts +0 -163
  121. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comment-logic.ts +0 -203
  122. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/common.ts +0 -33
  123. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/create-initial.ts +0 -111
  124. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-claude-comment.ts +0 -70
  125. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-with-branch.ts +0 -57
  126. package/bin/_internal/integrations/github/claude-code-action/src/github/operations/git-config.ts +0 -62
  127. package/bin/_internal/integrations/github/claude-code-action/src/github/token.ts +0 -108
  128. package/bin/_internal/integrations/github/claude-code-action/src/github/types.ts +0 -98
  129. package/bin/_internal/integrations/github/claude-code-action/src/github/utils/image-downloader.ts +0 -246
  130. package/bin/_internal/integrations/github/claude-code-action/src/github/utils/sanitizer.ts +0 -100
  131. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/actor.ts +0 -64
  132. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts +0 -47
  133. package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts +0 -148
  134. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts +0 -279
  135. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-comment-server.ts +0 -101
  136. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-file-ops-server.ts +0 -677
  137. package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-inline-comment-server.ts +0 -184
  138. package/bin/_internal/integrations/github/claude-code-action/src/mcp/install-mcp-server.ts +0 -201
  139. package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/index.ts +0 -152
  140. package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/parse-tools.ts +0 -22
  141. package/bin/_internal/integrations/github/claude-code-action/src/modes/detector.ts +0 -66
  142. package/bin/_internal/integrations/github/claude-code-action/src/modes/registry.ts +0 -54
  143. package/bin/_internal/integrations/github/claude-code-action/src/modes/tag/index.ts +0 -187
  144. package/bin/_internal/integrations/github/claude-code-action/src/modes/types.ts +0 -100
  145. package/bin/_internal/integrations/github/claude-code-action/src/prepare/index.ts +0 -20
  146. package/bin/_internal/integrations/github/claude-code-action/src/prepare/types.ts +0 -20
  147. package/bin/_internal/integrations/github/claude-code-action/src/utils/retry.ts +0 -40
  148. package/bin/_internal/integrations/github/claude-code-action/tsconfig.json +0 -30
  149. package/bin/_internal/integrations/n8n/LICENSE +0 -21
  150. package/bin/_internal/integrations/n8n/README.md +0 -298
  151. package/bin/_internal/integrations/n8n/package-lock.json +0 -2989
  152. package/bin/_internal/integrations/n8n/package.json +0 -68
  153. package/bin/_internal/integrations/n8n/src/credentials/OmnaraApi.credentials.ts +0 -52
  154. package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.json +0 -35
  155. package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.ts +0 -304
  156. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/index.ts +0 -37
  157. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/send.operation.ts +0 -151
  158. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/sendAndWait.operation.ts +0 -252
  159. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/end.operation.ts +0 -56
  160. package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/index.ts +0 -29
  161. package/bin/_internal/integrations/n8n/src/nodes/Omnara/vicoa.png +0 -0
  162. package/bin/_internal/integrations/n8n/src/utils/GenericFunctions.ts +0 -93
  163. package/bin/_internal/integrations/n8n/src/utils/sendAndWait/configureWaitTillDate.ts +0 -42
  164. package/bin/_internal/integrations/n8n/src/utils/sendAndWait/descriptions.ts +0 -20
  165. package/bin/_internal/integrations/n8n/src/utils/sendAndWaitWebhook.ts +0 -72
  166. package/bin/_internal/integrations/n8n/tsconfig.json +0 -20
  167. package/bin/_internal/jiter/jiter.cpython-312-x86_64-linux-gnu.so +0 -0
  168. package/bin/_internal/jsonschema/benchmarks/issue232/issue.json +0 -2653
  169. package/bin/_internal/jsonschema-4.26.0.dist-info/INSTALLER +0 -1
  170. package/bin/_internal/jsonschema-4.26.0.dist-info/METADATA +0 -170
  171. package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +0 -82
  172. package/bin/_internal/jsonschema-4.26.0.dist-info/WHEEL +0 -4
  173. package/bin/_internal/jsonschema-4.26.0.dist-info/entry_points.txt +0 -2
  174. package/bin/_internal/jsonschema-4.26.0.dist-info/licenses/COPYING +0 -19
  175. package/bin/_internal/jsonschema_specifications/schemas/draft201909/metaschema.json +0 -42
  176. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +0 -56
  177. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/content +0 -17
  178. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/core +0 -57
  179. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/format +0 -14
  180. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +0 -37
  181. package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/validation +0 -98
  182. package/bin/_internal/jsonschema_specifications/schemas/draft202012/metaschema.json +0 -58
  183. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +0 -48
  184. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/content +0 -17
  185. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/core +0 -51
  186. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +0 -14
  187. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +0 -14
  188. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +0 -37
  189. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +0 -15
  190. package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/validation +0 -98
  191. package/bin/_internal/jsonschema_specifications/schemas/draft3/metaschema.json +0 -172
  192. package/bin/_internal/jsonschema_specifications/schemas/draft4/metaschema.json +0 -149
  193. package/bin/_internal/jsonschema_specifications/schemas/draft6/metaschema.json +0 -153
  194. package/bin/_internal/jsonschema_specifications/schemas/draft7/metaschema.json +0 -166
  195. package/bin/_internal/libbz2.so.1.0 +0 -0
  196. package/bin/_internal/libcrypto.so.3 +0 -0
  197. package/bin/_internal/libffi.so.8 +0 -0
  198. package/bin/_internal/libgcc_s.so.1 +0 -0
  199. package/bin/_internal/liblzma.so.5 +0 -0
  200. package/bin/_internal/libpython3.12.so.1.0 +0 -0
  201. package/bin/_internal/libreadline.so.8 +0 -0
  202. package/bin/_internal/libssl.so.3 +0 -0
  203. package/bin/_internal/libstdc++.so.6 +0 -0
  204. package/bin/_internal/libtinfo.so.6 +0 -0
  205. package/bin/_internal/libuuid.so.1 +0 -0
  206. package/bin/_internal/libz.so.1 +0 -0
  207. package/bin/_internal/mcp-1.27.0.dist-info/INSTALLER +0 -1
  208. package/bin/_internal/mcp-1.27.0.dist-info/METADATA +0 -230
  209. package/bin/_internal/mcp-1.27.0.dist-info/RECORD +0 -226
  210. package/bin/_internal/mcp-1.27.0.dist-info/WHEEL +0 -4
  211. package/bin/_internal/mcp-1.27.0.dist-info/entry_points.txt +0 -2
  212. package/bin/_internal/mcp-1.27.0.dist-info/licenses/LICENSE +0 -21
  213. package/bin/_internal/multidict/_multidict.cpython-312-x86_64-linux-gnu.so +0 -0
  214. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/INSTALLER +0 -1
  215. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/METADATA +0 -45
  216. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/RECORD +0 -81
  217. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/WHEEL +0 -4
  218. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/entry_points.txt +0 -15
  219. package/bin/_internal/opentelemetry_api-1.41.0.dist-info/licenses/LICENSE +0 -201
  220. package/bin/_internal/propcache/_helpers_c.cpython-312-x86_64-linux-gnu.so +0 -0
  221. package/bin/_internal/pydantic-2.13.2.dist-info/INSTALLER +0 -1
  222. package/bin/_internal/pydantic-2.13.2.dist-info/METADATA +0 -1269
  223. package/bin/_internal/pydantic-2.13.2.dist-info/RECORD +0 -217
  224. package/bin/_internal/pydantic-2.13.2.dist-info/WHEEL +0 -4
  225. package/bin/_internal/pydantic-2.13.2.dist-info/licenses/LICENSE +0 -21
  226. package/bin/_internal/pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so +0 -0
  227. package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so +0 -0
  228. package/bin/_internal/python3.12/lib-dynload/_bisect.cpython-312-x86_64-linux-gnu.so +0 -0
  229. package/bin/_internal/python3.12/lib-dynload/_blake2.cpython-312-x86_64-linux-gnu.so +0 -0
  230. package/bin/_internal/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so +0 -0
  231. package/bin/_internal/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so +0 -0
  232. package/bin/_internal/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so +0 -0
  233. package/bin/_internal/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so +0 -0
  234. package/bin/_internal/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so +0 -0
  235. package/bin/_internal/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so +0 -0
  236. package/bin/_internal/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so +0 -0
  237. package/bin/_internal/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so +0 -0
  238. package/bin/_internal/python3.12/lib-dynload/_csv.cpython-312-x86_64-linux-gnu.so +0 -0
  239. package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so +0 -0
  240. package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-x86_64-linux-gnu.so +0 -0
  241. package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so +0 -0
  242. package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so +0 -0
  243. package/bin/_internal/python3.12/lib-dynload/_heapq.cpython-312-x86_64-linux-gnu.so +0 -0
  244. package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so +0 -0
  245. package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so +0 -0
  246. package/bin/_internal/python3.12/lib-dynload/_md5.cpython-312-x86_64-linux-gnu.so +0 -0
  247. package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so +0 -0
  248. package/bin/_internal/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so +0 -0
  249. package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-x86_64-linux-gnu.so +0 -0
  250. package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-x86_64-linux-gnu.so +0 -0
  251. package/bin/_internal/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so +0 -0
  252. package/bin/_internal/python3.12/lib-dynload/_posixsubprocess.cpython-312-x86_64-linux-gnu.so +0 -0
  253. package/bin/_internal/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so +0 -0
  254. package/bin/_internal/python3.12/lib-dynload/_random.cpython-312-x86_64-linux-gnu.so +0 -0
  255. package/bin/_internal/python3.12/lib-dynload/_sha1.cpython-312-x86_64-linux-gnu.so +0 -0
  256. package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-x86_64-linux-gnu.so +0 -0
  257. package/bin/_internal/python3.12/lib-dynload/_sha3.cpython-312-x86_64-linux-gnu.so +0 -0
  258. package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-x86_64-linux-gnu.so +0 -0
  259. package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so +0 -0
  260. package/bin/_internal/python3.12/lib-dynload/_statistics.cpython-312-x86_64-linux-gnu.so +0 -0
  261. package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-x86_64-linux-gnu.so +0 -0
  262. package/bin/_internal/python3.12/lib-dynload/_uuid.cpython-312-x86_64-linux-gnu.so +0 -0
  263. package/bin/_internal/python3.12/lib-dynload/_zoneinfo.cpython-312-x86_64-linux-gnu.so +0 -0
  264. package/bin/_internal/python3.12/lib-dynload/array.cpython-312-x86_64-linux-gnu.so +0 -0
  265. package/bin/_internal/python3.12/lib-dynload/binascii.cpython-312-x86_64-linux-gnu.so +0 -0
  266. package/bin/_internal/python3.12/lib-dynload/fcntl.cpython-312-x86_64-linux-gnu.so +0 -0
  267. package/bin/_internal/python3.12/lib-dynload/grp.cpython-312-x86_64-linux-gnu.so +0 -0
  268. package/bin/_internal/python3.12/lib-dynload/math.cpython-312-x86_64-linux-gnu.so +0 -0
  269. package/bin/_internal/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so +0 -0
  270. package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-x86_64-linux-gnu.so +0 -0
  271. package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so +0 -0
  272. package/bin/_internal/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so +0 -0
  273. package/bin/_internal/python3.12/lib-dynload/select.cpython-312-x86_64-linux-gnu.so +0 -0
  274. package/bin/_internal/python3.12/lib-dynload/syslog.cpython-312-x86_64-linux-gnu.so +0 -0
  275. package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so +0 -0
  276. package/bin/_internal/python3.12/lib-dynload/unicodedata.cpython-312-x86_64-linux-gnu.so +0 -0
  277. package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-x86_64-linux-gnu.so +0 -0
  278. package/bin/_internal/rpds/rpds.cpython-312-x86_64-linux-gnu.so +0 -0
  279. package/bin/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt +0 -2
  280. package/bin/_internal/vicoa/_bin/README.md +0 -28
  281. package/bin/_internal/vicoa-1.3.10.dist-info/INSTALLER +0 -1
  282. package/bin/_internal/vicoa-1.3.10.dist-info/METADATA +0 -311
  283. package/bin/_internal/vicoa-1.3.10.dist-info/RECORD +0 -11
  284. package/bin/_internal/vicoa-1.3.10.dist-info/REQUESTED +0 -0
  285. package/bin/_internal/vicoa-1.3.10.dist-info/WHEEL +0 -5
  286. package/bin/_internal/vicoa-1.3.10.dist-info/direct_url.json +0 -1
  287. package/bin/_internal/vicoa-1.3.10.dist-info/entry_points.txt +0 -2
  288. package/bin/_internal/vicoa-1.3.10.dist-info/licenses/LICENSE +0 -201
  289. package/bin/_internal/vicoa-1.3.10.dist-info/top_level.txt +0 -3
  290. package/bin/_internal/watchfiles/_rust_notify.cpython-312-x86_64-linux-gnu.so +0 -0
  291. package/bin/_internal/websockets/speedups.cpython-312-x86_64-linux-gnu.so +0 -0
  292. package/bin/_internal/websockets-16.0.dist-info/INSTALLER +0 -1
  293. package/bin/_internal/websockets-16.0.dist-info/METADATA +0 -179
  294. package/bin/_internal/websockets-16.0.dist-info/RECORD +0 -108
  295. package/bin/_internal/websockets-16.0.dist-info/WHEEL +0 -7
  296. package/bin/_internal/websockets-16.0.dist-info/entry_points.txt +0 -2
  297. package/bin/_internal/websockets-16.0.dist-info/licenses/LICENSE +0 -24
  298. package/bin/_internal/websockets-16.0.dist-info/top_level.txt +0 -1
  299. package/bin/_internal/yaml/_yaml.cpython-312-x86_64-linux-gnu.so +0 -0
  300. package/bin/_internal/yarl/_quoting_c.cpython-312-x86_64-linux-gnu.so +0 -0
  301. package/bin/vicoa +0 -0
@@ -1,132 +0,0 @@
1
- import type { Octokits } from "../api/client";
2
- import { GITHUB_SERVER_URL } from "../api/config";
3
- import { $ } from "bun";
4
-
5
- export async function checkAndCommitOrDeleteBranch(
6
- octokit: Octokits,
7
- owner: string,
8
- repo: string,
9
- claudeBranch: string | undefined,
10
- baseBranch: string,
11
- useCommitSigning: boolean,
12
- ): Promise<{ shouldDeleteBranch: boolean; branchLink: string }> {
13
- let branchLink = "";
14
- let shouldDeleteBranch = false;
15
-
16
- if (claudeBranch) {
17
- // First check if the branch exists remotely
18
- let branchExistsRemotely = false;
19
- try {
20
- await octokit.rest.repos.getBranch({
21
- owner,
22
- repo,
23
- branch: claudeBranch,
24
- });
25
- branchExistsRemotely = true;
26
- } catch (error: any) {
27
- if (error.status === 404) {
28
- console.log(`Branch ${claudeBranch} does not exist remotely`);
29
- } else {
30
- console.error("Error checking if branch exists:", error);
31
- }
32
- }
33
-
34
- // Only proceed if branch exists remotely
35
- if (!branchExistsRemotely) {
36
- console.log(
37
- `Branch ${claudeBranch} does not exist remotely, no branch link will be added`,
38
- );
39
- return { shouldDeleteBranch: false, branchLink: "" };
40
- }
41
-
42
- // Check if Claude made any commits to the branch
43
- try {
44
- const { data: comparison } =
45
- await octokit.rest.repos.compareCommitsWithBasehead({
46
- owner,
47
- repo,
48
- basehead: `${baseBranch}...${claudeBranch}`,
49
- });
50
-
51
- // If there are no commits, check for uncommitted changes if not using commit signing
52
- if (comparison.total_commits === 0) {
53
- if (!useCommitSigning) {
54
- console.log(
55
- `Branch ${claudeBranch} has no commits from Claude, checking for uncommitted changes...`,
56
- );
57
-
58
- // Check for uncommitted changes using git status
59
- try {
60
- const gitStatus = await $`git status --porcelain`.quiet();
61
- const hasUncommittedChanges =
62
- gitStatus.stdout.toString().trim().length > 0;
63
-
64
- if (hasUncommittedChanges) {
65
- console.log("Found uncommitted changes, committing them...");
66
-
67
- // Add all changes
68
- await $`git add -A`;
69
-
70
- // Commit with a descriptive message
71
- const runId = process.env.GITHUB_RUN_ID || "unknown";
72
- const commitMessage = `Auto-commit: Save uncommitted changes from Claude\n\nRun ID: ${runId}`;
73
- await $`git commit -m ${commitMessage}`;
74
-
75
- // Push the changes
76
- await $`git push origin ${claudeBranch}`;
77
-
78
- console.log(
79
- "✅ Successfully committed and pushed uncommitted changes",
80
- );
81
-
82
- // Set branch link since we now have commits
83
- const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`;
84
- branchLink = `\n[View branch](${branchUrl})`;
85
- } else {
86
- console.log(
87
- "No uncommitted changes found, marking branch for deletion",
88
- );
89
- shouldDeleteBranch = true;
90
- }
91
- } catch (gitError) {
92
- console.error("Error checking/committing changes:", gitError);
93
- // If we can't check git status, assume the branch might have changes
94
- const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`;
95
- branchLink = `\n[View branch](${branchUrl})`;
96
- }
97
- } else {
98
- console.log(
99
- `Branch ${claudeBranch} has no commits from Claude, will delete it`,
100
- );
101
- shouldDeleteBranch = true;
102
- }
103
- } else {
104
- // Only add branch link if there are commits
105
- const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`;
106
- branchLink = `\n[View branch](${branchUrl})`;
107
- }
108
- } catch (error) {
109
- console.error("Error comparing commits on Claude branch:", error);
110
- // If we can't compare but the branch exists remotely, include the branch link
111
- const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${claudeBranch}`;
112
- branchLink = `\n[View branch](${branchUrl})`;
113
- }
114
- }
115
-
116
- // Delete the branch if it has no commits
117
- if (shouldDeleteBranch && claudeBranch) {
118
- try {
119
- await octokit.rest.git.deleteRef({
120
- owner,
121
- repo,
122
- ref: `heads/${claudeBranch}`,
123
- });
124
- console.log(`✅ Deleted empty branch: ${claudeBranch}`);
125
- } catch (deleteError) {
126
- console.error(`Failed to delete branch ${claudeBranch}:`, deleteError);
127
- // Continue even if deletion fails
128
- }
129
- }
130
-
131
- return { shouldDeleteBranch, branchLink };
132
- }
@@ -1,163 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- /**
4
- * Setup the appropriate branch based on the event type:
5
- * - For PRs: Checkout the PR branch
6
- * - For Issues: Create a new branch
7
- */
8
-
9
- import { $ } from "bun";
10
- import * as core from "@actions/core";
11
- import type { ParsedGitHubContext } from "../context";
12
- import type { GitHubPullRequest } from "../types";
13
- import type { Octokits } from "../api/client";
14
- import type { FetchDataResult } from "../data/fetcher";
15
-
16
- export type BranchInfo = {
17
- baseBranch: string;
18
- claudeBranch?: string;
19
- currentBranch: string;
20
- };
21
-
22
- export async function setupBranch(
23
- octokits: Octokits,
24
- githubData: FetchDataResult,
25
- context: ParsedGitHubContext,
26
- ): Promise<BranchInfo> {
27
- const { owner, repo } = context.repository;
28
- const entityNumber = context.entityNumber;
29
- const { baseBranch, branchPrefix } = context.inputs;
30
- const isPR = context.isPR;
31
-
32
- if (isPR) {
33
- const prData = githubData.contextData as GitHubPullRequest;
34
- const prState = prData.state;
35
-
36
- // Check if PR is closed or merged
37
- if (prState === "CLOSED" || prState === "MERGED") {
38
- console.log(
39
- `PR #${entityNumber} is ${prState}, creating new branch from source...`,
40
- );
41
- // Fall through to create a new branch like we do for issues
42
- } else {
43
- // Handle open PR: Checkout the PR branch
44
- console.log("This is an open PR, checking out PR branch...");
45
-
46
- const branchName = prData.headRefName;
47
-
48
- // Determine optimal fetch depth based on PR commit count, with a minimum of 20
49
- const commitCount = prData.commits.totalCount;
50
- const fetchDepth = Math.max(commitCount, 20);
51
-
52
- console.log(
53
- `PR #${entityNumber}: ${commitCount} commits, using fetch depth ${fetchDepth}`,
54
- );
55
-
56
- // Execute git commands to checkout PR branch (dynamic depth based on PR size)
57
- await $`git fetch origin --depth=${fetchDepth} ${branchName}`;
58
- await $`git checkout ${branchName} --`;
59
-
60
- console.log(`Successfully checked out PR branch for PR #${entityNumber}`);
61
-
62
- // For open PRs, we need to get the base branch of the PR
63
- const baseBranch = prData.baseRefName;
64
-
65
- return {
66
- baseBranch,
67
- currentBranch: branchName,
68
- };
69
- }
70
- }
71
-
72
- // Determine source branch - use baseBranch if provided, otherwise fetch default
73
- let sourceBranch: string;
74
-
75
- if (baseBranch) {
76
- // Use provided base branch for source
77
- sourceBranch = baseBranch;
78
- } else {
79
- // No base branch provided, fetch the default branch to use as source
80
- const repoResponse = await octokits.rest.repos.get({
81
- owner,
82
- repo,
83
- });
84
- sourceBranch = repoResponse.data.default_branch;
85
- }
86
-
87
- // Generate branch name for either an issue or closed/merged PR
88
- const entityType = isPR ? "pr" : "issue";
89
-
90
- // Create Kubernetes-compatible timestamp: lowercase, hyphens only, shorter format
91
- const now = new Date();
92
- const timestamp = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, "0")}${String(now.getDate()).padStart(2, "0")}-${String(now.getHours()).padStart(2, "0")}${String(now.getMinutes()).padStart(2, "0")}`;
93
-
94
- // Ensure branch name is Kubernetes-compatible:
95
- // - Lowercase only
96
- // - Alphanumeric with hyphens
97
- // - No underscores
98
- // - Max 50 chars (to allow for prefixes)
99
- const branchName = `${branchPrefix}${entityType}-${entityNumber}-${timestamp}`;
100
- const newBranch = branchName.toLowerCase().substring(0, 50);
101
-
102
- try {
103
- // Get the SHA of the source branch to verify it exists
104
- const sourceBranchRef = await octokits.rest.git.getRef({
105
- owner,
106
- repo,
107
- ref: `heads/${sourceBranch}`,
108
- });
109
-
110
- const currentSHA = sourceBranchRef.data.object.sha;
111
- console.log(`Source branch SHA: ${currentSHA}`);
112
-
113
- // For commit signing, defer branch creation to the file ops server
114
- if (context.inputs.useCommitSigning) {
115
- console.log(
116
- `Branch name generated: ${newBranch} (will be created by file ops server on first commit)`,
117
- );
118
-
119
- // Ensure we're on the source branch
120
- console.log(`Fetching and checking out source branch: ${sourceBranch}`);
121
- await $`git fetch origin ${sourceBranch} --depth=1`;
122
- await $`git checkout ${sourceBranch}`;
123
-
124
- // Set outputs for GitHub Actions
125
- core.setOutput("CLAUDE_BRANCH", newBranch);
126
- core.setOutput("BASE_BRANCH", sourceBranch);
127
- return {
128
- baseBranch: sourceBranch,
129
- claudeBranch: newBranch,
130
- currentBranch: sourceBranch, // Stay on source branch for now
131
- };
132
- }
133
-
134
- // For non-signing case, create and checkout the branch locally only
135
- console.log(
136
- `Creating local branch ${newBranch} for ${entityType} #${entityNumber} from source branch: ${sourceBranch}...`,
137
- );
138
-
139
- // Fetch and checkout the source branch first to ensure we branch from the correct base
140
- console.log(`Fetching and checking out source branch: ${sourceBranch}`);
141
- await $`git fetch origin ${sourceBranch} --depth=1`;
142
- await $`git checkout ${sourceBranch}`;
143
-
144
- // Create and checkout the new branch from the source branch
145
- await $`git checkout -b ${newBranch}`;
146
-
147
- console.log(
148
- `Successfully created and checked out local branch: ${newBranch}`,
149
- );
150
-
151
- // Set outputs for GitHub Actions
152
- core.setOutput("CLAUDE_BRANCH", newBranch);
153
- core.setOutput("BASE_BRANCH", sourceBranch);
154
- return {
155
- baseBranch: sourceBranch,
156
- claudeBranch: newBranch,
157
- currentBranch: newBranch,
158
- };
159
- } catch (error) {
160
- console.error("Error in branch setup:", error);
161
- process.exit(1);
162
- }
163
- }
@@ -1,203 +0,0 @@
1
- import { GITHUB_SERVER_URL } from "../api/config";
2
-
3
- export type ExecutionDetails = {
4
- cost_usd?: number;
5
- duration_ms?: number;
6
- duration_api_ms?: number;
7
- };
8
-
9
- export type CommentUpdateInput = {
10
- currentBody: string;
11
- actionFailed: boolean;
12
- executionDetails: ExecutionDetails | null;
13
- jobUrl: string;
14
- branchLink?: string;
15
- prLink?: string;
16
- branchName?: string;
17
- triggerUsername?: string;
18
- errorDetails?: string;
19
- };
20
-
21
- export function ensureProperlyEncodedUrl(url: string): string | null {
22
- try {
23
- // First, try to parse the URL to see if it's already properly encoded
24
- new URL(url);
25
- if (url.includes(" ")) {
26
- const [baseUrl, queryString] = url.split("?");
27
- if (queryString) {
28
- // Parse query parameters and re-encode them properly
29
- const params = new URLSearchParams();
30
- const pairs = queryString.split("&");
31
- for (const pair of pairs) {
32
- const [key, value = ""] = pair.split("=");
33
- if (key) {
34
- // Decode first in case it's partially encoded, then encode properly
35
- params.set(key, decodeURIComponent(value));
36
- }
37
- }
38
- return `${baseUrl}?${params.toString()}`;
39
- }
40
- // If no query string, just encode spaces
41
- return url.replace(/ /g, "%20");
42
- }
43
- return url;
44
- } catch (e) {
45
- // If URL parsing fails, try basic fixes
46
- try {
47
- // Replace spaces with %20
48
- let fixedUrl = url.replace(/ /g, "%20");
49
-
50
- // Ensure colons in parameter values are encoded (but not in http:// or after domain)
51
- const urlParts = fixedUrl.split("?");
52
- if (urlParts.length > 1 && urlParts[1]) {
53
- const [baseUrl, queryString] = urlParts;
54
- // Encode colons in the query string that aren't already encoded
55
- const fixedQuery = queryString.replace(/([^%]|^):(?!%2F%2F)/g, "$1%3A");
56
- fixedUrl = `${baseUrl}?${fixedQuery}`;
57
- }
58
-
59
- // Try to validate the fixed URL
60
- new URL(fixedUrl);
61
- return fixedUrl;
62
- } catch {
63
- // If we still can't create a valid URL, return null
64
- return null;
65
- }
66
- }
67
- }
68
-
69
- export function updateCommentBody(input: CommentUpdateInput): string {
70
- const originalBody = input.currentBody;
71
- const {
72
- executionDetails,
73
- jobUrl,
74
- branchLink,
75
- prLink,
76
- actionFailed,
77
- branchName,
78
- triggerUsername,
79
- errorDetails,
80
- } = input;
81
-
82
- // Extract content from the original comment body
83
- // First, remove the "Claude Code is working…" or "Claude Code is working..." message
84
- const workingPattern = /Claude Code is working[…\.]{1,3}(?:\s*<img[^>]*>)?/i;
85
- let bodyContent = originalBody.replace(workingPattern, "").trim();
86
-
87
- // Check if there's a PR link in the content
88
- let prLinkFromContent = "";
89
-
90
- // Match the entire markdown link structure
91
- const prLinkPattern = /\[Create .* PR\]\((.*)\)$/m;
92
- const prLinkMatch = bodyContent.match(prLinkPattern);
93
-
94
- if (prLinkMatch && prLinkMatch[1]) {
95
- const encodedUrl = ensureProperlyEncodedUrl(prLinkMatch[1]);
96
- if (encodedUrl) {
97
- prLinkFromContent = encodedUrl;
98
- // Remove the PR link from the content
99
- bodyContent = bodyContent.replace(prLinkMatch[0], "").trim();
100
- }
101
- }
102
-
103
- // Calculate duration string if available
104
- let durationStr = "";
105
- if (executionDetails?.duration_ms !== undefined) {
106
- const totalSeconds = Math.round(executionDetails.duration_ms / 1000);
107
- const minutes = Math.floor(totalSeconds / 60);
108
- const seconds = totalSeconds % 60;
109
- durationStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${seconds}s`;
110
- }
111
-
112
- // Build the header
113
- let header = "";
114
-
115
- if (actionFailed) {
116
- header = "**Claude encountered an error";
117
- if (durationStr) {
118
- header += ` after ${durationStr}`;
119
- }
120
- header += "**";
121
- } else {
122
- // Get the username from triggerUsername or extract from content
123
- const usernameMatch = bodyContent.match(/@([a-zA-Z0-9-]+)/);
124
- const username =
125
- triggerUsername || (usernameMatch ? usernameMatch[1] : "user");
126
-
127
- header = `**Claude finished @${username}'s task`;
128
- if (durationStr) {
129
- header += ` in ${durationStr}`;
130
- }
131
- header += "**";
132
- }
133
-
134
- // Add links section
135
- let links = ` —— [View job](${jobUrl})`;
136
-
137
- // Add branch name with link
138
- if (branchName || branchLink) {
139
- let finalBranchName = branchName;
140
- let branchUrl = "";
141
-
142
- if (branchLink) {
143
- // Extract the branch URL from the link
144
- const urlMatch = branchLink.match(/\((https:\/\/.*)\)/);
145
- if (urlMatch && urlMatch[1]) {
146
- branchUrl = urlMatch[1];
147
- }
148
-
149
- // Extract branch name from link if not provided
150
- if (!finalBranchName) {
151
- const branchNameMatch = branchLink.match(/tree\/([^"'\)]+)/);
152
- if (branchNameMatch) {
153
- finalBranchName = branchNameMatch[1];
154
- }
155
- }
156
- }
157
-
158
- // If we don't have a URL yet but have a branch name, construct it
159
- if (!branchUrl && finalBranchName) {
160
- // Extract owner/repo from jobUrl
161
- const repoMatch = jobUrl.match(/github\.com\/([^\/]+)\/([^\/]+)\//);
162
- if (repoMatch) {
163
- branchUrl = `${GITHUB_SERVER_URL}/${repoMatch[1]}/${repoMatch[2]}/tree/${finalBranchName}`;
164
- }
165
- }
166
-
167
- if (finalBranchName && branchUrl) {
168
- links += ` • [\`${finalBranchName}\`](${branchUrl})`;
169
- } else if (finalBranchName) {
170
- links += ` • \`${finalBranchName}\``;
171
- }
172
- }
173
-
174
- // Add PR link (either from content or provided)
175
- const prUrl =
176
- prLinkFromContent || (prLink ? prLink.match(/\(([^)]+)\)/)?.[1] : "");
177
- if (prUrl) {
178
- links += ` • [Create PR ➔](${prUrl})`;
179
- }
180
-
181
- // Build the new body with blank line between header and separator
182
- let newBody = `${header}${links}`;
183
-
184
- // Add error details if available
185
- if (actionFailed && errorDetails) {
186
- newBody += `\n\n\`\`\`\n${errorDetails}\n\`\`\``;
187
- }
188
-
189
- newBody += `\n\n---\n`;
190
-
191
- // Clean up the body content
192
- // Remove any existing View job run, branch links from the bottom
193
- bodyContent = bodyContent.replace(/\n?\[View job run\]\([^\)]+\)/g, "");
194
- bodyContent = bodyContent.replace(/\n?\[View branch\]\([^\)]+\)/g, "");
195
-
196
- // Remove any existing duration info at the bottom
197
- bodyContent = bodyContent.replace(/\n*---\n*Duration: [0-9]+m? [0-9]+s/g, "");
198
-
199
- // Add the cleaned body content
200
- newBody += bodyContent;
201
-
202
- return newBody.trim();
203
- }
@@ -1,33 +0,0 @@
1
- import { GITHUB_SERVER_URL } from "../../api/config";
2
-
3
- export const SPINNER_HTML =
4
- '<img src="https://github.com/user-attachments/assets/5ac382c7-e004-429b-8e35-7feb3e8f9c6f" width="14px" height="14px" style="vertical-align: middle; margin-left: 4px;" />';
5
-
6
- export function createJobRunLink(
7
- owner: string,
8
- repo: string,
9
- runId: string,
10
- ): string {
11
- const jobRunUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/actions/runs/${runId}`;
12
- return `[View job run](${jobRunUrl})`;
13
- }
14
-
15
- export function createBranchLink(
16
- owner: string,
17
- repo: string,
18
- branchName: string,
19
- ): string {
20
- const branchUrl = `${GITHUB_SERVER_URL}/${owner}/${repo}/tree/${branchName}`;
21
- return `\n[View branch](${branchUrl})`;
22
- }
23
-
24
- export function createCommentBody(
25
- jobRunLink: string,
26
- branchLink: string = "",
27
- ): string {
28
- return `Claude Code is working… ${SPINNER_HTML}
29
-
30
- I'll analyze this and get back to you.
31
-
32
- ${jobRunLink}${branchLink}`;
33
- }
@@ -1,111 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- /**
4
- * Create the initial tracking comment when Claude Code starts working
5
- * This comment shows the working status and includes a link to the job run
6
- */
7
-
8
- import { appendFileSync } from "fs";
9
- import { createJobRunLink, createCommentBody } from "./common";
10
- import {
11
- isPullRequestReviewCommentEvent,
12
- isPullRequestEvent,
13
- type ParsedGitHubContext,
14
- } from "../../context";
15
- import type { Octokit } from "@octokit/rest";
16
-
17
- const CLAUDE_APP_BOT_ID = 209825114;
18
-
19
- export async function createInitialComment(
20
- octokit: Octokit,
21
- context: ParsedGitHubContext,
22
- ) {
23
- const { owner, repo } = context.repository;
24
-
25
- const jobRunLink = createJobRunLink(owner, repo, context.runId);
26
- const initialBody = createCommentBody(jobRunLink);
27
-
28
- try {
29
- let response;
30
-
31
- if (
32
- context.inputs.useStickyComment &&
33
- context.isPR &&
34
- isPullRequestEvent(context)
35
- ) {
36
- const comments = await octokit.rest.issues.listComments({
37
- owner,
38
- repo,
39
- issue_number: context.entityNumber,
40
- });
41
- const existingComment = comments.data.find((comment) => {
42
- const idMatch = comment.user?.id === CLAUDE_APP_BOT_ID;
43
- const botNameMatch =
44
- comment.user?.type === "Bot" &&
45
- comment.user?.login.toLowerCase().includes("claude");
46
- const bodyMatch = comment.body === initialBody;
47
-
48
- return idMatch || botNameMatch || bodyMatch;
49
- });
50
- if (existingComment) {
51
- response = await octokit.rest.issues.updateComment({
52
- owner,
53
- repo,
54
- comment_id: existingComment.id,
55
- body: initialBody,
56
- });
57
- } else {
58
- // Create new comment if no existing one found
59
- response = await octokit.rest.issues.createComment({
60
- owner,
61
- repo,
62
- issue_number: context.entityNumber,
63
- body: initialBody,
64
- });
65
- }
66
- } else if (isPullRequestReviewCommentEvent(context)) {
67
- // Only use createReplyForReviewComment if it's a PR review comment AND we have a comment_id
68
- response = await octokit.rest.pulls.createReplyForReviewComment({
69
- owner,
70
- repo,
71
- pull_number: context.entityNumber,
72
- comment_id: context.payload.comment.id,
73
- body: initialBody,
74
- });
75
- } else {
76
- // For all other cases (issues, issue comments, or missing comment_id)
77
- response = await octokit.rest.issues.createComment({
78
- owner,
79
- repo,
80
- issue_number: context.entityNumber,
81
- body: initialBody,
82
- });
83
- }
84
-
85
- // Output the comment ID for downstream steps using GITHUB_OUTPUT
86
- const githubOutput = process.env.GITHUB_OUTPUT!;
87
- appendFileSync(githubOutput, `claude_comment_id=${response.data.id}\n`);
88
- console.log(`✅ Created initial comment with ID: ${response.data.id}`);
89
- return response.data;
90
- } catch (error) {
91
- console.error("Error in initial comment:", error);
92
-
93
- // Always fall back to regular issue comment if anything fails
94
- try {
95
- const response = await octokit.rest.issues.createComment({
96
- owner,
97
- repo,
98
- issue_number: context.entityNumber,
99
- body: initialBody,
100
- });
101
-
102
- const githubOutput = process.env.GITHUB_OUTPUT!;
103
- appendFileSync(githubOutput, `claude_comment_id=${response.data.id}\n`);
104
- console.log(`✅ Created fallback comment with ID: ${response.data.id}`);
105
- return response.data;
106
- } catch (fallbackError) {
107
- console.error("Error creating fallback comment:", fallbackError);
108
- throw fallbackError;
109
- }
110
- }
111
- }