@vicoa/cli 1.3.11-linux-x64 → 1.3.11-win32-x64
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.
- package/bin/_internal/81d243bd2c585b0f4821__mypyc.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/VCRUNTIME140.dll +0 -0
- package/bin/_internal/VCRUNTIME140_1.dll +0 -0
- package/bin/_internal/_asyncio.pyd +0 -0
- package/bin/_internal/_bz2.pyd +0 -0
- package/bin/_internal/_cffi_backend.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/_ctypes.pyd +0 -0
- package/bin/_internal/_decimal.pyd +0 -0
- package/bin/_internal/_hashlib.pyd +0 -0
- package/bin/_internal/_lzma.pyd +0 -0
- package/bin/_internal/_multiprocessing.pyd +0 -0
- package/bin/_internal/_overlapped.pyd +0 -0
- package/bin/_internal/_queue.pyd +0 -0
- package/bin/_internal/_socket.pyd +0 -0
- package/bin/_internal/_ssl.pyd +0 -0
- package/bin/_internal/_uuid.pyd +0 -0
- package/bin/_internal/_wmi.pyd +0 -0
- package/bin/_internal/_zoneinfo.pyd +0 -0
- package/bin/_internal/aiohttp/_http_parser.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_http_writer.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_websocket/mask.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_websocket/reader_c.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/api-ms-win-core-console-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-datetime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-debug-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l2-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-handle-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-localization-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-memory-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-profile-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-timezone-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-util-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-conio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-convert-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-environment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-locale-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-math-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-process-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-time-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-utility-l1-1-0.dll +0 -0
- package/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/charset_normalizer/cd.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/charset_normalizer/md.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/cryptography/hazmat/bindings/_rust.pyd +0 -0
- package/bin/_internal/cryptography-46.0.7.dist-info/RECORD +2 -2
- package/bin/_internal/cryptography-46.0.7.dist-info/WHEEL +1 -2
- package/bin/_internal/email_validator-2.3.0.dist-info/RECORD +1 -1
- package/bin/_internal/frozenlist/_frozenlist.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/integrations/cli_wrappers/IMPORTANT_USE_CASES.md +32 -32
- package/bin/_internal/integrations/github/claude-code-action/CLAUDE.md +136 -136
- package/bin/_internal/integrations/github/claude-code-action/CODE_OF_CONDUCT.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/CONTRIBUTING.md +116 -116
- package/bin/_internal/integrations/github/claude-code-action/LICENSE +20 -20
- package/bin/_internal/integrations/github/claude-code-action/README.md +52 -52
- package/bin/_internal/integrations/github/claude-code-action/ROADMAP.md +20 -20
- package/bin/_internal/integrations/github/claude-code-action/SECURITY.md +15 -15
- package/bin/_internal/integrations/github/claude-code-action/action.yml +294 -294
- package/bin/_internal/integrations/github/claude-code-action/base-action/CLAUDE.md +60 -60
- package/bin/_internal/integrations/github/claude-code-action/base-action/CODE_OF_CONDUCT.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/base-action/CONTRIBUTING.md +136 -136
- package/bin/_internal/integrations/github/claude-code-action/base-action/LICENSE +21 -21
- package/bin/_internal/integrations/github/claude-code-action/base-action/MIRROR_DISCLAIMER.md +11 -11
- package/bin/_internal/integrations/github/claude-code-action/base-action/README.md +521 -521
- package/bin/_internal/integrations/github/claude-code-action/base-action/action.yml +149 -149
- package/bin/_internal/integrations/github/claude-code-action/base-action/bun.lock +54 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/examples/issue-triage.yml +108 -108
- package/bin/_internal/integrations/github/claude-code-action/base-action/package.json +23 -23
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/install-hooks.sh +12 -12
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/pre-push +45 -45
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/index.ts +82 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/prepare-prompt.ts +82 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-claude.ts +257 -257
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-vicoa.ts +300 -300
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/setup-claude-code-settings.ts +68 -68
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/validate-env.ts +54 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-local.sh +11 -11
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-mcp-local.sh +17 -17
- package/bin/_internal/integrations/github/claude-code-action/base-action/tsconfig.json +30 -30
- package/bin/_internal/integrations/github/claude-code-action/bun.lock +384 -384
- package/bin/_internal/integrations/github/claude-code-action/docs/capabilities-and-limitations.md +33 -33
- package/bin/_internal/integrations/github/claude-code-action/docs/cloud-providers.md +99 -99
- package/bin/_internal/integrations/github/claude-code-action/docs/configuration.md +345 -345
- package/bin/_internal/integrations/github/claude-code-action/docs/custom-automations.md +113 -113
- package/bin/_internal/integrations/github/claude-code-action/docs/experimental.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/docs/faq.md +205 -205
- package/bin/_internal/integrations/github/claude-code-action/docs/migration-guide.md +261 -261
- package/bin/_internal/integrations/github/claude-code-action/docs/security.md +38 -38
- package/bin/_internal/integrations/github/claude-code-action/docs/setup.md +146 -146
- package/bin/_internal/integrations/github/claude-code-action/docs/usage.md +213 -213
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/auto-fix-ci.yml +97 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/commands/fix-ci.md +127 -127
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/auto-fix-ci-signed.yml +97 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/commands/fix-ci-signed.md +148 -148
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-deduplication.yml +63 -63
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-triage.yml +75 -75
- package/bin/_internal/integrations/github/claude-code-action/examples/vicoa.yml +74 -74
- package/bin/_internal/integrations/github/claude-code-action/package.json +31 -31
- package/bin/_internal/integrations/github/claude-code-action/scripts/install-hooks.sh +12 -12
- package/bin/_internal/integrations/github/claude-code-action/scripts/pre-commit +45 -45
- package/bin/_internal/integrations/github/claude-code-action/scripts/setup-network-restrictions.sh +122 -122
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/index.ts +799 -799
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/types.ts +102 -102
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/collect-inputs.ts +58 -58
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/format-turns.ts +465 -465
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/prepare.ts +98 -98
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/update-comment-link.ts +245 -245
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/client.ts +23 -23
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/config.ts +4 -4
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/queries/github.ts +117 -117
- package/bin/_internal/integrations/github/claude-code-action/src/github/context.ts +277 -277
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/fetcher.ts +233 -233
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/formatter.ts +144 -144
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch-cleanup.ts +132 -132
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch.ts +163 -163
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comment-logic.ts +203 -203
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/common.ts +33 -33
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/create-initial.ts +111 -111
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-claude-comment.ts +70 -70
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-with-branch.ts +57 -57
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/git-config.ts +62 -62
- package/bin/_internal/integrations/github/claude-code-action/src/github/token.ts +108 -108
- package/bin/_internal/integrations/github/claude-code-action/src/github/types.ts +98 -98
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/image-downloader.ts +246 -246
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/sanitizer.ts +100 -100
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/actor.ts +64 -64
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts +47 -47
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts +148 -148
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts +279 -279
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-comment-server.ts +101 -101
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-file-ops-server.ts +677 -677
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-inline-comment-server.ts +184 -184
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/install-mcp-server.ts +201 -201
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/index.ts +152 -152
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/parse-tools.ts +22 -22
- package/bin/_internal/integrations/github/claude-code-action/src/modes/detector.ts +66 -66
- package/bin/_internal/integrations/github/claude-code-action/src/modes/registry.ts +54 -54
- package/bin/_internal/integrations/github/claude-code-action/src/modes/tag/index.ts +187 -187
- package/bin/_internal/integrations/github/claude-code-action/src/modes/types.ts +100 -100
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/index.ts +20 -20
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/types.ts +20 -20
- package/bin/_internal/integrations/github/claude-code-action/src/utils/retry.ts +40 -40
- package/bin/_internal/integrations/github/claude-code-action/tsconfig.json +30 -30
- package/bin/_internal/integrations/n8n/LICENSE +20 -20
- package/bin/_internal/integrations/n8n/README.md +297 -297
- package/bin/_internal/integrations/n8n/package-lock.json +2989 -2989
- package/bin/_internal/integrations/n8n/package.json +68 -68
- package/bin/_internal/integrations/n8n/src/credentials/OmnaraApi.credentials.ts +52 -52
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.json +34 -34
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.ts +304 -304
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/index.ts +37 -37
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/send.operation.ts +151 -151
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/sendAndWait.operation.ts +252 -252
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/end.operation.ts +56 -56
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/index.ts +29 -29
- package/bin/_internal/integrations/n8n/src/utils/GenericFunctions.ts +92 -92
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/configureWaitTillDate.ts +42 -42
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/descriptions.ts +20 -20
- package/bin/_internal/integrations/n8n/src/utils/sendAndWaitWebhook.ts +72 -72
- package/bin/_internal/integrations/n8n/tsconfig.json +19 -19
- package/bin/_internal/jiter/jiter.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +1 -1
- package/bin/_internal/libcrypto-3.dll +0 -0
- package/bin/_internal/libffi-8.dll +0 -0
- package/bin/_internal/libssl-3.dll +0 -0
- package/bin/_internal/mcp-1.27.0.dist-info/RECORD +1 -1
- package/bin/_internal/multidict/_multidict.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/propcache/_helpers_c.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/pydantic_core/_pydantic_core.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/pyexpat.pyd +0 -0
- package/bin/_internal/python3.dll +0 -0
- package/bin/_internal/python312.dll +0 -0
- package/bin/_internal/pywin32_system32/pythoncom312.dll +0 -0
- package/bin/_internal/pywin32_system32/pywintypes312.dll +0 -0
- package/bin/_internal/rpds/rpds.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/select.pyd +0 -0
- package/bin/_internal/ucrtbase.dll +0 -0
- package/bin/_internal/{python3.12/lib-dynload/unicodedata.cpython-312-x86_64-linux-gnu.so → unicodedata.pyd} +0 -0
- package/bin/_internal/vicoa/_bin/README.md +28 -28
- package/bin/_internal/vicoa-1.3.10.dist-info/METADATA +311 -311
- package/bin/_internal/vicoa-1.3.10.dist-info/RECORD +6 -6
- package/bin/_internal/vicoa-1.3.10.dist-info/WHEEL +1 -1
- package/bin/_internal/vicoa-1.3.10.dist-info/direct_url.json +1 -1
- package/bin/_internal/vicoa-1.3.10.dist-info/licenses/LICENSE +201 -201
- package/bin/_internal/watchfiles/_rust_notify.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/websockets/speedups.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/websockets-16.0.dist-info/METADATA +179 -179
- package/bin/_internal/websockets-16.0.dist-info/RECORD +53 -53
- package/bin/_internal/websockets-16.0.dist-info/WHEEL +1 -3
- package/bin/_internal/websockets-16.0.dist-info/licenses/LICENSE +24 -24
- package/bin/_internal/win32/_win32sysloader.pyd +0 -0
- package/bin/_internal/win32/win32api.pyd +0 -0
- package/bin/_internal/win32/win32evtlog.pyd +0 -0
- package/bin/_internal/win32/win32job.pyd +0 -0
- package/bin/_internal/yaml/_yaml.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/yarl/_quoting_c.cp312-win_amd64.pyd +0 -0
- package/bin/{vicoa → vicoa.exe} +0 -0
- package/package.json +3 -3
- package/bin/_internal/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/_cffi_backend.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_http_parser.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_http_writer.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_websocket/mask.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_websocket/reader_c.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/caio/linux_aio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/caio/thread_aio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
- package/bin/_internal/frozenlist/_frozenlist.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/jiter/jiter.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/libbz2.so.1.0 +0 -0
- package/bin/_internal/libcrypto.so.3 +0 -0
- package/bin/_internal/libffi.so.8 +0 -0
- package/bin/_internal/libgcc_s.so.1 +0 -0
- package/bin/_internal/liblzma.so.5 +0 -0
- package/bin/_internal/libpython3.12.so.1.0 +0 -0
- package/bin/_internal/libreadline.so.8 +0 -0
- package/bin/_internal/libssl.so.3 +0 -0
- package/bin/_internal/libstdc++.so.6 +0 -0
- package/bin/_internal/libtinfo.so.6 +0 -0
- package/bin/_internal/libuuid.so.1 +0 -0
- package/bin/_internal/libz.so.1 +0 -0
- package/bin/_internal/multidict/_multidict.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/propcache/_helpers_c.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bisect.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_blake2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_csv.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_heapq.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_md5.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixsubprocess.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_random.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha1.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha3.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_statistics.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_uuid.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_zoneinfo.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/array.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/binascii.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/fcntl.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/grp.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/math.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/select.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/syslog.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/rpds/rpds.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/watchfiles/_rust_notify.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/websockets/speedups.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/yaml/_yaml.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/yarl/_quoting_c.cpython-312-x86_64-linux-gnu.so +0 -0
|
@@ -1,301 +1,301 @@
|
|
|
1
|
-
import * as core from "@actions/core";
|
|
2
|
-
import { spawn } from "child_process";
|
|
3
|
-
import { unlink, writeFile, stat, readFile } from "fs/promises";
|
|
4
|
-
import { promisify } from "util";
|
|
5
|
-
|
|
6
|
-
const EXECUTION_FILE = `${process.env.RUNNER_TEMP}/vicoa-execution-output.json`;
|
|
7
|
-
|
|
8
|
-
export type VicoaOptions = {
|
|
9
|
-
allowedTools?: string;
|
|
10
|
-
disallowedTools?: string;
|
|
11
|
-
maxTurns?: string;
|
|
12
|
-
mcpConfig?: string;
|
|
13
|
-
systemPrompt?: string;
|
|
14
|
-
appendSystemPrompt?: string;
|
|
15
|
-
claudeEnv?: string;
|
|
16
|
-
fallbackModel?: string;
|
|
17
|
-
timeoutMinutes?: string;
|
|
18
|
-
model?: string;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
type PreparedConfig = {
|
|
22
|
-
vicoaArgs: string[];
|
|
23
|
-
promptPath: string;
|
|
24
|
-
env: Record<string, string>;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
function parseCustomEnvVars(claudeEnv?: string): Record<string, string> {
|
|
28
|
-
if (!claudeEnv || claudeEnv.trim() === "") {
|
|
29
|
-
return {};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const customEnv: Record<string, string> = {};
|
|
33
|
-
|
|
34
|
-
// Split by lines and parse each line as KEY: VALUE
|
|
35
|
-
const lines = claudeEnv.split("\n");
|
|
36
|
-
|
|
37
|
-
for (const line of lines) {
|
|
38
|
-
const trimmedLine = line.trim();
|
|
39
|
-
if (trimmedLine === "" || trimmedLine.startsWith("#")) {
|
|
40
|
-
continue; // Skip empty lines and comments
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const colonIndex = trimmedLine.indexOf(":");
|
|
44
|
-
if (colonIndex === -1) {
|
|
45
|
-
continue; // Skip lines without colons
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const key = trimmedLine.substring(0, colonIndex).trim();
|
|
49
|
-
const value = trimmedLine.substring(colonIndex + 1).trim();
|
|
50
|
-
|
|
51
|
-
if (key) {
|
|
52
|
-
customEnv[key] = value;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return customEnv;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export async function prepareRunConfig(
|
|
60
|
-
promptPath: string,
|
|
61
|
-
options: VicoaOptions,
|
|
62
|
-
): Promise<PreparedConfig> {
|
|
63
|
-
// Build vicoa headless arguments
|
|
64
|
-
const vicoaArgs = ["headless"];
|
|
65
|
-
|
|
66
|
-
// Read prompt content from file to pass as --prompt argument
|
|
67
|
-
let promptContent = '';
|
|
68
|
-
try {
|
|
69
|
-
promptContent = await readFile(promptPath, 'utf8');
|
|
70
|
-
console.log(`Read prompt from file: ${promptPath} (${promptContent.length} characters)`);
|
|
71
|
-
} catch (e) {
|
|
72
|
-
console.error(`Error reading prompt file: ${e}`);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Add required vicoa arguments
|
|
76
|
-
if (promptContent) {
|
|
77
|
-
vicoaArgs.push("--prompt", promptContent);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Session ID from environment or generate
|
|
81
|
-
const sessionId = process.env.VICOA_AGENT_INSTANCE_ID || `gh-action-${Date.now()}`;
|
|
82
|
-
vicoaArgs.push("--session-id", sessionId);
|
|
83
|
-
|
|
84
|
-
// Agent name/type from environment
|
|
85
|
-
const agentType = process.env.VICOA_AGENT_TYPE || "GitHub Action";
|
|
86
|
-
vicoaArgs.push("--name", agentType);
|
|
87
|
-
|
|
88
|
-
// Tool configurations
|
|
89
|
-
if (options.allowedTools) {
|
|
90
|
-
vicoaArgs.push("--allowed-tools", options.allowedTools);
|
|
91
|
-
}
|
|
92
|
-
if (options.disallowedTools) {
|
|
93
|
-
vicoaArgs.push("--disallowed-tools", options.disallowedTools);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Pass max turns as extra arg for Claude SDK within vicoa
|
|
97
|
-
if (options.maxTurns) {
|
|
98
|
-
const maxTurnsNum = parseInt(options.maxTurns, 10);
|
|
99
|
-
if (isNaN(maxTurnsNum) || maxTurnsNum <= 0) {
|
|
100
|
-
throw new Error(
|
|
101
|
-
`maxTurns must be a positive number, got: ${options.maxTurns}`,
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
// Pass as extra args for Claude SDK
|
|
105
|
-
vicoaArgs.push("--max-turns", options.maxTurns);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Validate timeout
|
|
109
|
-
if (options.timeoutMinutes) {
|
|
110
|
-
const timeoutMinutesNum = parseInt(options.timeoutMinutes, 10);
|
|
111
|
-
if (isNaN(timeoutMinutesNum) || timeoutMinutesNum <= 0) {
|
|
112
|
-
throw new Error(
|
|
113
|
-
`timeoutMinutes must be a positive number, got: ${options.timeoutMinutes}`,
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// Parse custom environment variables
|
|
119
|
-
const customEnv = parseCustomEnvVars(options.claudeEnv);
|
|
120
|
-
|
|
121
|
-
if (process.env.INPUT_ACTION_INPUTS_PRESENT) {
|
|
122
|
-
customEnv.GITHUB_ACTION_INPUTS = process.env.INPUT_ACTION_INPUTS_PRESENT;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
vicoaArgs,
|
|
127
|
-
promptPath,
|
|
128
|
-
env: customEnv,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
export async function runVicoa(promptPath: string, options: VicoaOptions) {
|
|
133
|
-
const config = await prepareRunConfig(promptPath, options);
|
|
134
|
-
|
|
135
|
-
// Log configuration for debugging
|
|
136
|
-
console.log("==================================================");
|
|
137
|
-
console.log("Vicoa Configuration:");
|
|
138
|
-
console.log(`Session ID: ${process.env.VICOA_AGENT_INSTANCE_ID || 'auto-generated'}`);
|
|
139
|
-
console.log(`Agent Type: ${process.env.VICOA_AGENT_TYPE || 'GitHub Action'}`);
|
|
140
|
-
console.log(`API Key: ${process.env.VICOA_API_KEY ? 'Present' : 'Missing'}`);
|
|
141
|
-
console.log("==================================================");
|
|
142
|
-
|
|
143
|
-
// Get prompt size
|
|
144
|
-
let promptSize = "unknown";
|
|
145
|
-
try {
|
|
146
|
-
const stats = await stat(config.promptPath);
|
|
147
|
-
promptSize = stats.size.toString();
|
|
148
|
-
} catch (e) {
|
|
149
|
-
// Ignore error
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
console.log(`Prompt file size: ${promptSize} bytes`);
|
|
153
|
-
|
|
154
|
-
// Log custom environment variables if any
|
|
155
|
-
const customEnvKeys = Object.keys(config.env).filter(
|
|
156
|
-
(key) => key !== "GITHUB_ACTION_INPUTS",
|
|
157
|
-
);
|
|
158
|
-
if (customEnvKeys.length > 0) {
|
|
159
|
-
console.log(`Custom environment variables: ${customEnvKeys.join(", ")}`);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Output to console
|
|
163
|
-
console.log(`Running Vicoa with command: vicoa ${config.vicoaArgs.join(' ')}`);
|
|
164
|
-
|
|
165
|
-
// Vicoa headless uses Claude Code under the hood, so we need to ensure
|
|
166
|
-
// Claude authentication is available in the environment
|
|
167
|
-
const vicoaEnv = {
|
|
168
|
-
...process.env,
|
|
169
|
-
...config.env,
|
|
170
|
-
// Ensure Vicoa variables are set
|
|
171
|
-
VICOA_API_KEY: process.env.VICOA_API_KEY,
|
|
172
|
-
VICOA_AGENT_INSTANCE_ID: process.env.VICOA_AGENT_INSTANCE_ID,
|
|
173
|
-
VICOA_AGENT_TYPE: process.env.VICOA_AGENT_TYPE,
|
|
174
|
-
// Pass through Claude authentication (vicoa will use these internally)
|
|
175
|
-
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
|
|
176
|
-
CLAUDE_CODE_OAUTH_TOKEN: process.env.CLAUDE_CODE_OAUTH_TOKEN,
|
|
177
|
-
// Pass through cloud provider credentials if using Bedrock/Vertex
|
|
178
|
-
CLAUDE_CODE_USE_BEDROCK: process.env.CLAUDE_CODE_USE_BEDROCK,
|
|
179
|
-
CLAUDE_CODE_USE_VERTEX: process.env.CLAUDE_CODE_USE_VERTEX,
|
|
180
|
-
AWS_REGION: process.env.AWS_REGION,
|
|
181
|
-
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
|
|
182
|
-
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
|
|
183
|
-
AWS_SESSION_TOKEN: process.env.AWS_SESSION_TOKEN,
|
|
184
|
-
ANTHROPIC_BEDROCK_BASE_URL: process.env.ANTHROPIC_BEDROCK_BASE_URL,
|
|
185
|
-
ANTHROPIC_VERTEX_PROJECT_ID: process.env.ANTHROPIC_VERTEX_PROJECT_ID,
|
|
186
|
-
CLOUD_ML_REGION: process.env.CLOUD_ML_REGION,
|
|
187
|
-
GOOGLE_APPLICATION_CREDENTIALS: process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
188
|
-
ANTHROPIC_VERTEX_BASE_URL: process.env.ANTHROPIC_VERTEX_BASE_URL,
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
const vicoaProcess = spawn("vicoa", config.vicoaArgs, {
|
|
192
|
-
stdio: ["inherit", "pipe", "inherit"],
|
|
193
|
-
env: vicoaEnv,
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
// Handle Vicoa process errors
|
|
197
|
-
vicoaProcess.on("error", (error) => {
|
|
198
|
-
console.error("Error spawning Vicoa process:", error);
|
|
199
|
-
console.error("Make sure vicoa is installed: pip install vicoa");
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Capture output for parsing execution metrics
|
|
203
|
-
let output = "";
|
|
204
|
-
vicoaProcess.stdout.on("data", (data) => {
|
|
205
|
-
const text = data.toString();
|
|
206
|
-
|
|
207
|
-
// Try to parse as JSON and pretty print if it's on a single line
|
|
208
|
-
const lines = text.split("\n");
|
|
209
|
-
lines.forEach((line: string, index: number) => {
|
|
210
|
-
if (line.trim() === "") return;
|
|
211
|
-
|
|
212
|
-
try {
|
|
213
|
-
// Check if this line is a JSON object
|
|
214
|
-
const parsed = JSON.parse(line);
|
|
215
|
-
const prettyJson = JSON.stringify(parsed, null, 2);
|
|
216
|
-
process.stdout.write(prettyJson);
|
|
217
|
-
if (index < lines.length - 1 || text.endsWith("\n")) {
|
|
218
|
-
process.stdout.write("\n");
|
|
219
|
-
}
|
|
220
|
-
} catch (e) {
|
|
221
|
-
// Not a JSON object, print as is
|
|
222
|
-
process.stdout.write(line);
|
|
223
|
-
if (index < lines.length - 1 || text.endsWith("\n")) {
|
|
224
|
-
process.stdout.write("\n");
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
output += text;
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
// Handle stdout errors
|
|
233
|
-
vicoaProcess.stdout.on("error", (error) => {
|
|
234
|
-
console.error("Error reading Vicoa stdout:", error);
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
// Wait for Vicoa to finish with timeout
|
|
238
|
-
let timeoutMs = 1440 * 60 * 1000; // Default 24 hours
|
|
239
|
-
if (options.timeoutMinutes) {
|
|
240
|
-
timeoutMs = parseInt(options.timeoutMinutes, 10) * 60 * 1000;
|
|
241
|
-
} else if (process.env.INPUT_TIMEOUT_MINUTES) {
|
|
242
|
-
const envTimeout = parseInt(process.env.INPUT_TIMEOUT_MINUTES, 10);
|
|
243
|
-
if (isNaN(envTimeout) || envTimeout <= 0) {
|
|
244
|
-
throw new Error(
|
|
245
|
-
`INPUT_TIMEOUT_MINUTES must be a positive number, got: ${process.env.INPUT_TIMEOUT_MINUTES}`,
|
|
246
|
-
);
|
|
247
|
-
}
|
|
248
|
-
timeoutMs = envTimeout * 60 * 1000;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
await new Promise<void>((resolve, reject) => {
|
|
252
|
-
const timeout = setTimeout(() => {
|
|
253
|
-
vicoaProcess.kill("SIGTERM");
|
|
254
|
-
reject(
|
|
255
|
-
new Error(
|
|
256
|
-
`Command timed out after ${timeoutMs / 1000 / 60} minutes`,
|
|
257
|
-
),
|
|
258
|
-
);
|
|
259
|
-
}, timeoutMs);
|
|
260
|
-
|
|
261
|
-
vicoaProcess.on("exit", (code) => {
|
|
262
|
-
clearTimeout(timeout);
|
|
263
|
-
if (code === 0) {
|
|
264
|
-
resolve();
|
|
265
|
-
} else {
|
|
266
|
-
reject(new Error(`Vicoa exited with code ${code}`));
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// Save output to execution file
|
|
272
|
-
await writeFile(EXECUTION_FILE, output);
|
|
273
|
-
|
|
274
|
-
// Try to extract execution metrics from output
|
|
275
|
-
let executionMetrics = {
|
|
276
|
-
conclusion: "success",
|
|
277
|
-
};
|
|
278
|
-
|
|
279
|
-
try {
|
|
280
|
-
// Try to parse the output as JSON lines
|
|
281
|
-
const lines = output.split("\n");
|
|
282
|
-
for (const line of lines) {
|
|
283
|
-
if (line.trim()) {
|
|
284
|
-
try {
|
|
285
|
-
const parsed = JSON.parse(line);
|
|
286
|
-
if (parsed.metrics) {
|
|
287
|
-
executionMetrics = parsed.metrics;
|
|
288
|
-
}
|
|
289
|
-
} catch (e) {
|
|
290
|
-
// Not JSON, skip
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
} catch (error) {
|
|
295
|
-
console.error("Error parsing execution metrics:", error);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
// Set outputs for GitHub Actions
|
|
299
|
-
core.setOutput("execution_file", EXECUTION_FILE);
|
|
300
|
-
core.setOutput("conclusion", executionMetrics.conclusion);
|
|
1
|
+
import * as core from "@actions/core";
|
|
2
|
+
import { spawn } from "child_process";
|
|
3
|
+
import { unlink, writeFile, stat, readFile } from "fs/promises";
|
|
4
|
+
import { promisify } from "util";
|
|
5
|
+
|
|
6
|
+
const EXECUTION_FILE = `${process.env.RUNNER_TEMP}/vicoa-execution-output.json`;
|
|
7
|
+
|
|
8
|
+
export type VicoaOptions = {
|
|
9
|
+
allowedTools?: string;
|
|
10
|
+
disallowedTools?: string;
|
|
11
|
+
maxTurns?: string;
|
|
12
|
+
mcpConfig?: string;
|
|
13
|
+
systemPrompt?: string;
|
|
14
|
+
appendSystemPrompt?: string;
|
|
15
|
+
claudeEnv?: string;
|
|
16
|
+
fallbackModel?: string;
|
|
17
|
+
timeoutMinutes?: string;
|
|
18
|
+
model?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type PreparedConfig = {
|
|
22
|
+
vicoaArgs: string[];
|
|
23
|
+
promptPath: string;
|
|
24
|
+
env: Record<string, string>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function parseCustomEnvVars(claudeEnv?: string): Record<string, string> {
|
|
28
|
+
if (!claudeEnv || claudeEnv.trim() === "") {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const customEnv: Record<string, string> = {};
|
|
33
|
+
|
|
34
|
+
// Split by lines and parse each line as KEY: VALUE
|
|
35
|
+
const lines = claudeEnv.split("\n");
|
|
36
|
+
|
|
37
|
+
for (const line of lines) {
|
|
38
|
+
const trimmedLine = line.trim();
|
|
39
|
+
if (trimmedLine === "" || trimmedLine.startsWith("#")) {
|
|
40
|
+
continue; // Skip empty lines and comments
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const colonIndex = trimmedLine.indexOf(":");
|
|
44
|
+
if (colonIndex === -1) {
|
|
45
|
+
continue; // Skip lines without colons
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const key = trimmedLine.substring(0, colonIndex).trim();
|
|
49
|
+
const value = trimmedLine.substring(colonIndex + 1).trim();
|
|
50
|
+
|
|
51
|
+
if (key) {
|
|
52
|
+
customEnv[key] = value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return customEnv;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function prepareRunConfig(
|
|
60
|
+
promptPath: string,
|
|
61
|
+
options: VicoaOptions,
|
|
62
|
+
): Promise<PreparedConfig> {
|
|
63
|
+
// Build vicoa headless arguments
|
|
64
|
+
const vicoaArgs = ["headless"];
|
|
65
|
+
|
|
66
|
+
// Read prompt content from file to pass as --prompt argument
|
|
67
|
+
let promptContent = '';
|
|
68
|
+
try {
|
|
69
|
+
promptContent = await readFile(promptPath, 'utf8');
|
|
70
|
+
console.log(`Read prompt from file: ${promptPath} (${promptContent.length} characters)`);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
console.error(`Error reading prompt file: ${e}`);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Add required vicoa arguments
|
|
76
|
+
if (promptContent) {
|
|
77
|
+
vicoaArgs.push("--prompt", promptContent);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Session ID from environment or generate
|
|
81
|
+
const sessionId = process.env.VICOA_AGENT_INSTANCE_ID || `gh-action-${Date.now()}`;
|
|
82
|
+
vicoaArgs.push("--session-id", sessionId);
|
|
83
|
+
|
|
84
|
+
// Agent name/type from environment
|
|
85
|
+
const agentType = process.env.VICOA_AGENT_TYPE || "GitHub Action";
|
|
86
|
+
vicoaArgs.push("--name", agentType);
|
|
87
|
+
|
|
88
|
+
// Tool configurations
|
|
89
|
+
if (options.allowedTools) {
|
|
90
|
+
vicoaArgs.push("--allowed-tools", options.allowedTools);
|
|
91
|
+
}
|
|
92
|
+
if (options.disallowedTools) {
|
|
93
|
+
vicoaArgs.push("--disallowed-tools", options.disallowedTools);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Pass max turns as extra arg for Claude SDK within vicoa
|
|
97
|
+
if (options.maxTurns) {
|
|
98
|
+
const maxTurnsNum = parseInt(options.maxTurns, 10);
|
|
99
|
+
if (isNaN(maxTurnsNum) || maxTurnsNum <= 0) {
|
|
100
|
+
throw new Error(
|
|
101
|
+
`maxTurns must be a positive number, got: ${options.maxTurns}`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
// Pass as extra args for Claude SDK
|
|
105
|
+
vicoaArgs.push("--max-turns", options.maxTurns);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Validate timeout
|
|
109
|
+
if (options.timeoutMinutes) {
|
|
110
|
+
const timeoutMinutesNum = parseInt(options.timeoutMinutes, 10);
|
|
111
|
+
if (isNaN(timeoutMinutesNum) || timeoutMinutesNum <= 0) {
|
|
112
|
+
throw new Error(
|
|
113
|
+
`timeoutMinutes must be a positive number, got: ${options.timeoutMinutes}`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Parse custom environment variables
|
|
119
|
+
const customEnv = parseCustomEnvVars(options.claudeEnv);
|
|
120
|
+
|
|
121
|
+
if (process.env.INPUT_ACTION_INPUTS_PRESENT) {
|
|
122
|
+
customEnv.GITHUB_ACTION_INPUTS = process.env.INPUT_ACTION_INPUTS_PRESENT;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
vicoaArgs,
|
|
127
|
+
promptPath,
|
|
128
|
+
env: customEnv,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export async function runVicoa(promptPath: string, options: VicoaOptions) {
|
|
133
|
+
const config = await prepareRunConfig(promptPath, options);
|
|
134
|
+
|
|
135
|
+
// Log configuration for debugging
|
|
136
|
+
console.log("==================================================");
|
|
137
|
+
console.log("Vicoa Configuration:");
|
|
138
|
+
console.log(`Session ID: ${process.env.VICOA_AGENT_INSTANCE_ID || 'auto-generated'}`);
|
|
139
|
+
console.log(`Agent Type: ${process.env.VICOA_AGENT_TYPE || 'GitHub Action'}`);
|
|
140
|
+
console.log(`API Key: ${process.env.VICOA_API_KEY ? 'Present' : 'Missing'}`);
|
|
141
|
+
console.log("==================================================");
|
|
142
|
+
|
|
143
|
+
// Get prompt size
|
|
144
|
+
let promptSize = "unknown";
|
|
145
|
+
try {
|
|
146
|
+
const stats = await stat(config.promptPath);
|
|
147
|
+
promptSize = stats.size.toString();
|
|
148
|
+
} catch (e) {
|
|
149
|
+
// Ignore error
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
console.log(`Prompt file size: ${promptSize} bytes`);
|
|
153
|
+
|
|
154
|
+
// Log custom environment variables if any
|
|
155
|
+
const customEnvKeys = Object.keys(config.env).filter(
|
|
156
|
+
(key) => key !== "GITHUB_ACTION_INPUTS",
|
|
157
|
+
);
|
|
158
|
+
if (customEnvKeys.length > 0) {
|
|
159
|
+
console.log(`Custom environment variables: ${customEnvKeys.join(", ")}`);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Output to console
|
|
163
|
+
console.log(`Running Vicoa with command: vicoa ${config.vicoaArgs.join(' ')}`);
|
|
164
|
+
|
|
165
|
+
// Vicoa headless uses Claude Code under the hood, so we need to ensure
|
|
166
|
+
// Claude authentication is available in the environment
|
|
167
|
+
const vicoaEnv = {
|
|
168
|
+
...process.env,
|
|
169
|
+
...config.env,
|
|
170
|
+
// Ensure Vicoa variables are set
|
|
171
|
+
VICOA_API_KEY: process.env.VICOA_API_KEY,
|
|
172
|
+
VICOA_AGENT_INSTANCE_ID: process.env.VICOA_AGENT_INSTANCE_ID,
|
|
173
|
+
VICOA_AGENT_TYPE: process.env.VICOA_AGENT_TYPE,
|
|
174
|
+
// Pass through Claude authentication (vicoa will use these internally)
|
|
175
|
+
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY,
|
|
176
|
+
CLAUDE_CODE_OAUTH_TOKEN: process.env.CLAUDE_CODE_OAUTH_TOKEN,
|
|
177
|
+
// Pass through cloud provider credentials if using Bedrock/Vertex
|
|
178
|
+
CLAUDE_CODE_USE_BEDROCK: process.env.CLAUDE_CODE_USE_BEDROCK,
|
|
179
|
+
CLAUDE_CODE_USE_VERTEX: process.env.CLAUDE_CODE_USE_VERTEX,
|
|
180
|
+
AWS_REGION: process.env.AWS_REGION,
|
|
181
|
+
AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
|
|
182
|
+
AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
|
|
183
|
+
AWS_SESSION_TOKEN: process.env.AWS_SESSION_TOKEN,
|
|
184
|
+
ANTHROPIC_BEDROCK_BASE_URL: process.env.ANTHROPIC_BEDROCK_BASE_URL,
|
|
185
|
+
ANTHROPIC_VERTEX_PROJECT_ID: process.env.ANTHROPIC_VERTEX_PROJECT_ID,
|
|
186
|
+
CLOUD_ML_REGION: process.env.CLOUD_ML_REGION,
|
|
187
|
+
GOOGLE_APPLICATION_CREDENTIALS: process.env.GOOGLE_APPLICATION_CREDENTIALS,
|
|
188
|
+
ANTHROPIC_VERTEX_BASE_URL: process.env.ANTHROPIC_VERTEX_BASE_URL,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const vicoaProcess = spawn("vicoa", config.vicoaArgs, {
|
|
192
|
+
stdio: ["inherit", "pipe", "inherit"],
|
|
193
|
+
env: vicoaEnv,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Handle Vicoa process errors
|
|
197
|
+
vicoaProcess.on("error", (error) => {
|
|
198
|
+
console.error("Error spawning Vicoa process:", error);
|
|
199
|
+
console.error("Make sure vicoa is installed: pip install vicoa");
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Capture output for parsing execution metrics
|
|
203
|
+
let output = "";
|
|
204
|
+
vicoaProcess.stdout.on("data", (data) => {
|
|
205
|
+
const text = data.toString();
|
|
206
|
+
|
|
207
|
+
// Try to parse as JSON and pretty print if it's on a single line
|
|
208
|
+
const lines = text.split("\n");
|
|
209
|
+
lines.forEach((line: string, index: number) => {
|
|
210
|
+
if (line.trim() === "") return;
|
|
211
|
+
|
|
212
|
+
try {
|
|
213
|
+
// Check if this line is a JSON object
|
|
214
|
+
const parsed = JSON.parse(line);
|
|
215
|
+
const prettyJson = JSON.stringify(parsed, null, 2);
|
|
216
|
+
process.stdout.write(prettyJson);
|
|
217
|
+
if (index < lines.length - 1 || text.endsWith("\n")) {
|
|
218
|
+
process.stdout.write("\n");
|
|
219
|
+
}
|
|
220
|
+
} catch (e) {
|
|
221
|
+
// Not a JSON object, print as is
|
|
222
|
+
process.stdout.write(line);
|
|
223
|
+
if (index < lines.length - 1 || text.endsWith("\n")) {
|
|
224
|
+
process.stdout.write("\n");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
output += text;
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// Handle stdout errors
|
|
233
|
+
vicoaProcess.stdout.on("error", (error) => {
|
|
234
|
+
console.error("Error reading Vicoa stdout:", error);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// Wait for Vicoa to finish with timeout
|
|
238
|
+
let timeoutMs = 1440 * 60 * 1000; // Default 24 hours
|
|
239
|
+
if (options.timeoutMinutes) {
|
|
240
|
+
timeoutMs = parseInt(options.timeoutMinutes, 10) * 60 * 1000;
|
|
241
|
+
} else if (process.env.INPUT_TIMEOUT_MINUTES) {
|
|
242
|
+
const envTimeout = parseInt(process.env.INPUT_TIMEOUT_MINUTES, 10);
|
|
243
|
+
if (isNaN(envTimeout) || envTimeout <= 0) {
|
|
244
|
+
throw new Error(
|
|
245
|
+
`INPUT_TIMEOUT_MINUTES must be a positive number, got: ${process.env.INPUT_TIMEOUT_MINUTES}`,
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
timeoutMs = envTimeout * 60 * 1000;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
await new Promise<void>((resolve, reject) => {
|
|
252
|
+
const timeout = setTimeout(() => {
|
|
253
|
+
vicoaProcess.kill("SIGTERM");
|
|
254
|
+
reject(
|
|
255
|
+
new Error(
|
|
256
|
+
`Command timed out after ${timeoutMs / 1000 / 60} minutes`,
|
|
257
|
+
),
|
|
258
|
+
);
|
|
259
|
+
}, timeoutMs);
|
|
260
|
+
|
|
261
|
+
vicoaProcess.on("exit", (code) => {
|
|
262
|
+
clearTimeout(timeout);
|
|
263
|
+
if (code === 0) {
|
|
264
|
+
resolve();
|
|
265
|
+
} else {
|
|
266
|
+
reject(new Error(`Vicoa exited with code ${code}`));
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
// Save output to execution file
|
|
272
|
+
await writeFile(EXECUTION_FILE, output);
|
|
273
|
+
|
|
274
|
+
// Try to extract execution metrics from output
|
|
275
|
+
let executionMetrics = {
|
|
276
|
+
conclusion: "success",
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
try {
|
|
280
|
+
// Try to parse the output as JSON lines
|
|
281
|
+
const lines = output.split("\n");
|
|
282
|
+
for (const line of lines) {
|
|
283
|
+
if (line.trim()) {
|
|
284
|
+
try {
|
|
285
|
+
const parsed = JSON.parse(line);
|
|
286
|
+
if (parsed.metrics) {
|
|
287
|
+
executionMetrics = parsed.metrics;
|
|
288
|
+
}
|
|
289
|
+
} catch (e) {
|
|
290
|
+
// Not JSON, skip
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
} catch (error) {
|
|
295
|
+
console.error("Error parsing execution metrics:", error);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Set outputs for GitHub Actions
|
|
299
|
+
core.setOutput("execution_file", EXECUTION_FILE);
|
|
300
|
+
core.setOutput("conclusion", executionMetrics.conclusion);
|
|
301
301
|
}
|