@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,304 +1,304 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IExecuteFunctions,
|
|
3
|
-
INodeExecutionData,
|
|
4
|
-
INodeType,
|
|
5
|
-
INodeTypeDescription,
|
|
6
|
-
NodeConnectionTypes,
|
|
7
|
-
NodeOperationError,
|
|
8
|
-
SEND_AND_WAIT_OPERATION
|
|
9
|
-
} from 'n8n-workflow';
|
|
10
|
-
|
|
11
|
-
import * as message from './actions/message';
|
|
12
|
-
import * as session from './actions/session';
|
|
13
|
-
import { vicoaSendAndWaitWebhook } from '../../utils/sendAndWaitWebhook';
|
|
14
|
-
import { sendAndWaitWebhooksDescription } from '../../utils/sendAndWait/descriptions';
|
|
15
|
-
import { configureWaitTillDate } from '../../utils/sendAndWait/configureWaitTillDate';
|
|
16
|
-
import { vicoaApiRequest, generateAgentInstanceId, getAgentType } from '../../utils/GenericFunctions';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export class Vicoa implements INodeType {
|
|
20
|
-
webhook = vicoaSendAndWaitWebhook;
|
|
21
|
-
|
|
22
|
-
description: INodeTypeDescription = {
|
|
23
|
-
displayName: 'Vicoa',
|
|
24
|
-
name: 'vicoa',
|
|
25
|
-
icon: 'file:vicoa.png',
|
|
26
|
-
group: ['transform'],
|
|
27
|
-
version: 1,
|
|
28
|
-
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
29
|
-
description:
|
|
30
|
-
'Send messages to users via Vicoa - a web and mobile platform for human-AI communication',
|
|
31
|
-
defaults: {
|
|
32
|
-
name: 'Vicoa',
|
|
33
|
-
},
|
|
34
|
-
inputs: [NodeConnectionTypes.Main],
|
|
35
|
-
outputs: [NodeConnectionTypes.Main],
|
|
36
|
-
webhooks: sendAndWaitWebhooksDescription,
|
|
37
|
-
credentials: [
|
|
38
|
-
{
|
|
39
|
-
name: 'vicoaApi',
|
|
40
|
-
required: true,
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
properties: [
|
|
44
|
-
{
|
|
45
|
-
displayName: 'Resource',
|
|
46
|
-
name: 'resource',
|
|
47
|
-
type: 'options',
|
|
48
|
-
noDataExpression: true,
|
|
49
|
-
options: [
|
|
50
|
-
{
|
|
51
|
-
name: 'Message',
|
|
52
|
-
value: 'message',
|
|
53
|
-
description: 'Send messages to Vicoa agents',
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
name: 'Session',
|
|
57
|
-
value: 'session',
|
|
58
|
-
description: 'Manage agent sessions',
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
default: 'message',
|
|
62
|
-
},
|
|
63
|
-
...message.descriptions,
|
|
64
|
-
...session.descriptions,
|
|
65
|
-
],
|
|
66
|
-
usableAsTool: true,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
|
70
|
-
const items = this.getInputData();
|
|
71
|
-
const returnData: INodeExecutionData[] = [];
|
|
72
|
-
const resource = this.getNodeParameter('resource', 0) as string;
|
|
73
|
-
const operation = this.getNodeParameter('operation', 0) as string;
|
|
74
|
-
for (let i = 0; i < items.length; i++) {
|
|
75
|
-
try {
|
|
76
|
-
let responseData: INodeExecutionData[] = [];
|
|
77
|
-
if (resource === 'message') {
|
|
78
|
-
if (operation === 'send') {
|
|
79
|
-
responseData = await message.send.execute.call(this, i);
|
|
80
|
-
} else if (operation === SEND_AND_WAIT_OPERATION || operation === 'sendAndWait') {
|
|
81
|
-
// FOLLOWING SLACK PATTERN EXACTLY
|
|
82
|
-
const agentType = getAgentType.call(this, 0);
|
|
83
|
-
const agentInstanceId = generateAgentInstanceId.call(this, 0, agentType);
|
|
84
|
-
const messageContent = this.getNodeParameter('message', 0) as string;
|
|
85
|
-
const options = this.getNodeParameter('options', 0, {}) as any;
|
|
86
|
-
|
|
87
|
-
// Check if sync mode is enabled (for AI Agent compatibility)
|
|
88
|
-
const syncMode = options.syncMode === true;
|
|
89
|
-
|
|
90
|
-
if (syncMode) {
|
|
91
|
-
// Sync mode: Poll for responses instead of using putExecutionToWait
|
|
92
|
-
// This is necessary for AI Agents which don't support async/await properly
|
|
93
|
-
const syncTimeout = options.syncTimeout || 7200; // Default 2 hours
|
|
94
|
-
const pollInterval = options.pollInterval || 5; // Default 5 seconds
|
|
95
|
-
|
|
96
|
-
// Send the message first
|
|
97
|
-
const body: any = {
|
|
98
|
-
agent_instance_id: agentInstanceId,
|
|
99
|
-
agent_type: agentType,
|
|
100
|
-
content: messageContent,
|
|
101
|
-
requires_user_input: true,
|
|
102
|
-
// Don't send webhook URL in sync mode
|
|
103
|
-
message_metadata: {
|
|
104
|
-
sync_mode: true,
|
|
105
|
-
node_id: this.getNode().id,
|
|
106
|
-
},
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
if (options.sendEmail !== undefined) {
|
|
110
|
-
body.send_email = options.sendEmail;
|
|
111
|
-
}
|
|
112
|
-
if (options.sendSms !== undefined) {
|
|
113
|
-
body.send_sms = options.sendSms;
|
|
114
|
-
}
|
|
115
|
-
if (options.sendPush !== undefined) {
|
|
116
|
-
body.send_push = options.sendPush;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const sendResponse = await vicoaApiRequest.call(
|
|
120
|
-
this,
|
|
121
|
-
'POST',
|
|
122
|
-
'/messages/agent',
|
|
123
|
-
body,
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
const messageId = sendResponse.message_id;
|
|
127
|
-
|
|
128
|
-
// Now poll for responses
|
|
129
|
-
const startTime = Date.now();
|
|
130
|
-
const timeoutMs = syncTimeout * 1000;
|
|
131
|
-
const lastReadMessageId = messageId;
|
|
132
|
-
|
|
133
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
134
|
-
// Wait for poll interval using Date.now()
|
|
135
|
-
// Community nodes must avoid restricted globals
|
|
136
|
-
const pollStart = Date.now();
|
|
137
|
-
const pollMs = pollInterval * 1000;
|
|
138
|
-
while (Date.now() - pollStart < pollMs) {
|
|
139
|
-
// Small delay to avoid blocking
|
|
140
|
-
await new Promise((resolve) => resolve(undefined));
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Check for pending messages
|
|
144
|
-
try {
|
|
145
|
-
const pendingResponse = await vicoaApiRequest.call(
|
|
146
|
-
this,
|
|
147
|
-
'GET',
|
|
148
|
-
'/messages/pending',
|
|
149
|
-
{},
|
|
150
|
-
{
|
|
151
|
-
agent_instance_id: agentInstanceId,
|
|
152
|
-
last_read_message_id: lastReadMessageId,
|
|
153
|
-
},
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
// Check if we got any user messages
|
|
157
|
-
if (pendingResponse.messages && pendingResponse.messages.length > 0) {
|
|
158
|
-
// Return the last user message as the result
|
|
159
|
-
const lastMessage =
|
|
160
|
-
pendingResponse.messages[pendingResponse.messages.length - 1];
|
|
161
|
-
|
|
162
|
-
// Return the response in a format compatible with the workflow
|
|
163
|
-
return [
|
|
164
|
-
[
|
|
165
|
-
{
|
|
166
|
-
json: {
|
|
167
|
-
success: true,
|
|
168
|
-
agent_instance_id: agentInstanceId,
|
|
169
|
-
user_response: lastMessage.content,
|
|
170
|
-
message_id: lastMessage.id,
|
|
171
|
-
response_time: lastMessage.created_at,
|
|
172
|
-
all_responses: pendingResponse.messages.map((m: any) => ({
|
|
173
|
-
content: m.content,
|
|
174
|
-
id: m.id,
|
|
175
|
-
created_at: m.created_at,
|
|
176
|
-
})),
|
|
177
|
-
},
|
|
178
|
-
pairedItem: i,
|
|
179
|
-
},
|
|
180
|
-
],
|
|
181
|
-
];
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// If status is 'stale', continue polling
|
|
185
|
-
if (pendingResponse.status === 'stale') {
|
|
186
|
-
// We might need to re-fetch to get the current state
|
|
187
|
-
// For now, continue polling
|
|
188
|
-
}
|
|
189
|
-
} catch (pollError) {
|
|
190
|
-
// Continue polling on error
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Timeout reached without response
|
|
195
|
-
return [
|
|
196
|
-
[
|
|
197
|
-
{
|
|
198
|
-
json: {
|
|
199
|
-
success: false,
|
|
200
|
-
agent_instance_id: agentInstanceId,
|
|
201
|
-
error: 'Timeout waiting for user response',
|
|
202
|
-
timeout_seconds: syncTimeout,
|
|
203
|
-
},
|
|
204
|
-
pairedItem: i,
|
|
205
|
-
},
|
|
206
|
-
],
|
|
207
|
-
];
|
|
208
|
-
} else {
|
|
209
|
-
// Original async mode with putExecutionToWait
|
|
210
|
-
// Get the webhook URL from n8n's execution context
|
|
211
|
-
// This automatically provides the correct URL for any n8n instance
|
|
212
|
-
const resumeUrl = this.evaluateExpression('{{ $execution?.resumeUrl }}', 0) as string;
|
|
213
|
-
const nodeId = this.evaluateExpression('{{ $nodeId }}', 0) as string;
|
|
214
|
-
const executionId = this.getExecutionId();
|
|
215
|
-
|
|
216
|
-
// Construct the full webhook URL with node ID appended
|
|
217
|
-
const webhookUrl = `${resumeUrl}/${nodeId}`;
|
|
218
|
-
|
|
219
|
-
const body: any = {
|
|
220
|
-
agent_instance_id: agentInstanceId,
|
|
221
|
-
agent_type: agentType,
|
|
222
|
-
content: messageContent,
|
|
223
|
-
requires_user_input: true,
|
|
224
|
-
// Send webhook URL in metadata so Vicoa knows where to send the response
|
|
225
|
-
message_metadata: {
|
|
226
|
-
webhook_url: webhookUrl, // Full URL with execution ID and node ID
|
|
227
|
-
execution_id: executionId,
|
|
228
|
-
node_id: nodeId,
|
|
229
|
-
webhook_type: 'n8n_send_and_wait',
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
if (options.sendEmail !== undefined) {
|
|
234
|
-
body.send_email = options.sendEmail;
|
|
235
|
-
}
|
|
236
|
-
if (options.sendSms !== undefined) {
|
|
237
|
-
body.send_sms = options.sendSms;
|
|
238
|
-
}
|
|
239
|
-
if (options.sendPush !== undefined) {
|
|
240
|
-
body.send_push = options.sendPush;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Send message to Vicoa (like Slack sends to chat.postMessage)
|
|
244
|
-
await vicoaApiRequest.call(this, 'POST', '/messages/agent', body);
|
|
245
|
-
|
|
246
|
-
// Configure wait time
|
|
247
|
-
const waitTill = configureWaitTillDate(this, 0);
|
|
248
|
-
|
|
249
|
-
// Put execution to wait
|
|
250
|
-
if (waitTill === 'WAIT_INDEFINITELY') {
|
|
251
|
-
await this.putExecutionToWait(new Date(Date.now() + 365 * 24 * 60 * 60 * 1000));
|
|
252
|
-
} else {
|
|
253
|
-
await this.putExecutionToWait(waitTill as Date);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Return input data
|
|
257
|
-
return [this.getInputData()];
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
throw new NodeOperationError(
|
|
261
|
-
this.getNode(),
|
|
262
|
-
`The operation "${operation}" is not supported for resource "${resource}"`,
|
|
263
|
-
{ itemIndex: i },
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
} else if (resource === 'session') {
|
|
267
|
-
if (operation === 'end') {
|
|
268
|
-
responseData = await session.end.execute.call(this, i);
|
|
269
|
-
} else {
|
|
270
|
-
throw new NodeOperationError(
|
|
271
|
-
this.getNode(),
|
|
272
|
-
`The operation "${operation}" is not supported for resource "${resource}"`,
|
|
273
|
-
{ itemIndex: i },
|
|
274
|
-
);
|
|
275
|
-
}
|
|
276
|
-
} else {
|
|
277
|
-
throw new NodeOperationError(
|
|
278
|
-
this.getNode(),
|
|
279
|
-
`The resource "${resource}" is not supported`,
|
|
280
|
-
{ itemIndex: i },
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
returnData.push(...responseData);
|
|
285
|
-
} catch (error) {
|
|
286
|
-
if (this.continueOnFail()) {
|
|
287
|
-
returnData.push({
|
|
288
|
-
json: {
|
|
289
|
-
error: error instanceof Error ? error.message : String(error),
|
|
290
|
-
resource,
|
|
291
|
-
operation,
|
|
292
|
-
itemIndex: i,
|
|
293
|
-
},
|
|
294
|
-
pairedItem: i,
|
|
295
|
-
});
|
|
296
|
-
continue;
|
|
297
|
-
}
|
|
298
|
-
throw error;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return [returnData];
|
|
303
|
-
}
|
|
304
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
IExecuteFunctions,
|
|
3
|
+
INodeExecutionData,
|
|
4
|
+
INodeType,
|
|
5
|
+
INodeTypeDescription,
|
|
6
|
+
NodeConnectionTypes,
|
|
7
|
+
NodeOperationError,
|
|
8
|
+
SEND_AND_WAIT_OPERATION
|
|
9
|
+
} from 'n8n-workflow';
|
|
10
|
+
|
|
11
|
+
import * as message from './actions/message';
|
|
12
|
+
import * as session from './actions/session';
|
|
13
|
+
import { vicoaSendAndWaitWebhook } from '../../utils/sendAndWaitWebhook';
|
|
14
|
+
import { sendAndWaitWebhooksDescription } from '../../utils/sendAndWait/descriptions';
|
|
15
|
+
import { configureWaitTillDate } from '../../utils/sendAndWait/configureWaitTillDate';
|
|
16
|
+
import { vicoaApiRequest, generateAgentInstanceId, getAgentType } from '../../utils/GenericFunctions';
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export class Vicoa implements INodeType {
|
|
20
|
+
webhook = vicoaSendAndWaitWebhook;
|
|
21
|
+
|
|
22
|
+
description: INodeTypeDescription = {
|
|
23
|
+
displayName: 'Vicoa',
|
|
24
|
+
name: 'vicoa',
|
|
25
|
+
icon: 'file:vicoa.png',
|
|
26
|
+
group: ['transform'],
|
|
27
|
+
version: 1,
|
|
28
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
29
|
+
description:
|
|
30
|
+
'Send messages to users via Vicoa - a web and mobile platform for human-AI communication',
|
|
31
|
+
defaults: {
|
|
32
|
+
name: 'Vicoa',
|
|
33
|
+
},
|
|
34
|
+
inputs: [NodeConnectionTypes.Main],
|
|
35
|
+
outputs: [NodeConnectionTypes.Main],
|
|
36
|
+
webhooks: sendAndWaitWebhooksDescription,
|
|
37
|
+
credentials: [
|
|
38
|
+
{
|
|
39
|
+
name: 'vicoaApi',
|
|
40
|
+
required: true,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
properties: [
|
|
44
|
+
{
|
|
45
|
+
displayName: 'Resource',
|
|
46
|
+
name: 'resource',
|
|
47
|
+
type: 'options',
|
|
48
|
+
noDataExpression: true,
|
|
49
|
+
options: [
|
|
50
|
+
{
|
|
51
|
+
name: 'Message',
|
|
52
|
+
value: 'message',
|
|
53
|
+
description: 'Send messages to Vicoa agents',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'Session',
|
|
57
|
+
value: 'session',
|
|
58
|
+
description: 'Manage agent sessions',
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
default: 'message',
|
|
62
|
+
},
|
|
63
|
+
...message.descriptions,
|
|
64
|
+
...session.descriptions,
|
|
65
|
+
],
|
|
66
|
+
usableAsTool: true,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
|
70
|
+
const items = this.getInputData();
|
|
71
|
+
const returnData: INodeExecutionData[] = [];
|
|
72
|
+
const resource = this.getNodeParameter('resource', 0) as string;
|
|
73
|
+
const operation = this.getNodeParameter('operation', 0) as string;
|
|
74
|
+
for (let i = 0; i < items.length; i++) {
|
|
75
|
+
try {
|
|
76
|
+
let responseData: INodeExecutionData[] = [];
|
|
77
|
+
if (resource === 'message') {
|
|
78
|
+
if (operation === 'send') {
|
|
79
|
+
responseData = await message.send.execute.call(this, i);
|
|
80
|
+
} else if (operation === SEND_AND_WAIT_OPERATION || operation === 'sendAndWait') {
|
|
81
|
+
// FOLLOWING SLACK PATTERN EXACTLY
|
|
82
|
+
const agentType = getAgentType.call(this, 0);
|
|
83
|
+
const agentInstanceId = generateAgentInstanceId.call(this, 0, agentType);
|
|
84
|
+
const messageContent = this.getNodeParameter('message', 0) as string;
|
|
85
|
+
const options = this.getNodeParameter('options', 0, {}) as any;
|
|
86
|
+
|
|
87
|
+
// Check if sync mode is enabled (for AI Agent compatibility)
|
|
88
|
+
const syncMode = options.syncMode === true;
|
|
89
|
+
|
|
90
|
+
if (syncMode) {
|
|
91
|
+
// Sync mode: Poll for responses instead of using putExecutionToWait
|
|
92
|
+
// This is necessary for AI Agents which don't support async/await properly
|
|
93
|
+
const syncTimeout = options.syncTimeout || 7200; // Default 2 hours
|
|
94
|
+
const pollInterval = options.pollInterval || 5; // Default 5 seconds
|
|
95
|
+
|
|
96
|
+
// Send the message first
|
|
97
|
+
const body: any = {
|
|
98
|
+
agent_instance_id: agentInstanceId,
|
|
99
|
+
agent_type: agentType,
|
|
100
|
+
content: messageContent,
|
|
101
|
+
requires_user_input: true,
|
|
102
|
+
// Don't send webhook URL in sync mode
|
|
103
|
+
message_metadata: {
|
|
104
|
+
sync_mode: true,
|
|
105
|
+
node_id: this.getNode().id,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
if (options.sendEmail !== undefined) {
|
|
110
|
+
body.send_email = options.sendEmail;
|
|
111
|
+
}
|
|
112
|
+
if (options.sendSms !== undefined) {
|
|
113
|
+
body.send_sms = options.sendSms;
|
|
114
|
+
}
|
|
115
|
+
if (options.sendPush !== undefined) {
|
|
116
|
+
body.send_push = options.sendPush;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const sendResponse = await vicoaApiRequest.call(
|
|
120
|
+
this,
|
|
121
|
+
'POST',
|
|
122
|
+
'/messages/agent',
|
|
123
|
+
body,
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
const messageId = sendResponse.message_id;
|
|
127
|
+
|
|
128
|
+
// Now poll for responses
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
const timeoutMs = syncTimeout * 1000;
|
|
131
|
+
const lastReadMessageId = messageId;
|
|
132
|
+
|
|
133
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
134
|
+
// Wait for poll interval using Date.now()
|
|
135
|
+
// Community nodes must avoid restricted globals
|
|
136
|
+
const pollStart = Date.now();
|
|
137
|
+
const pollMs = pollInterval * 1000;
|
|
138
|
+
while (Date.now() - pollStart < pollMs) {
|
|
139
|
+
// Small delay to avoid blocking
|
|
140
|
+
await new Promise((resolve) => resolve(undefined));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Check for pending messages
|
|
144
|
+
try {
|
|
145
|
+
const pendingResponse = await vicoaApiRequest.call(
|
|
146
|
+
this,
|
|
147
|
+
'GET',
|
|
148
|
+
'/messages/pending',
|
|
149
|
+
{},
|
|
150
|
+
{
|
|
151
|
+
agent_instance_id: agentInstanceId,
|
|
152
|
+
last_read_message_id: lastReadMessageId,
|
|
153
|
+
},
|
|
154
|
+
);
|
|
155
|
+
|
|
156
|
+
// Check if we got any user messages
|
|
157
|
+
if (pendingResponse.messages && pendingResponse.messages.length > 0) {
|
|
158
|
+
// Return the last user message as the result
|
|
159
|
+
const lastMessage =
|
|
160
|
+
pendingResponse.messages[pendingResponse.messages.length - 1];
|
|
161
|
+
|
|
162
|
+
// Return the response in a format compatible with the workflow
|
|
163
|
+
return [
|
|
164
|
+
[
|
|
165
|
+
{
|
|
166
|
+
json: {
|
|
167
|
+
success: true,
|
|
168
|
+
agent_instance_id: agentInstanceId,
|
|
169
|
+
user_response: lastMessage.content,
|
|
170
|
+
message_id: lastMessage.id,
|
|
171
|
+
response_time: lastMessage.created_at,
|
|
172
|
+
all_responses: pendingResponse.messages.map((m: any) => ({
|
|
173
|
+
content: m.content,
|
|
174
|
+
id: m.id,
|
|
175
|
+
created_at: m.created_at,
|
|
176
|
+
})),
|
|
177
|
+
},
|
|
178
|
+
pairedItem: i,
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// If status is 'stale', continue polling
|
|
185
|
+
if (pendingResponse.status === 'stale') {
|
|
186
|
+
// We might need to re-fetch to get the current state
|
|
187
|
+
// For now, continue polling
|
|
188
|
+
}
|
|
189
|
+
} catch (pollError) {
|
|
190
|
+
// Continue polling on error
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Timeout reached without response
|
|
195
|
+
return [
|
|
196
|
+
[
|
|
197
|
+
{
|
|
198
|
+
json: {
|
|
199
|
+
success: false,
|
|
200
|
+
agent_instance_id: agentInstanceId,
|
|
201
|
+
error: 'Timeout waiting for user response',
|
|
202
|
+
timeout_seconds: syncTimeout,
|
|
203
|
+
},
|
|
204
|
+
pairedItem: i,
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
];
|
|
208
|
+
} else {
|
|
209
|
+
// Original async mode with putExecutionToWait
|
|
210
|
+
// Get the webhook URL from n8n's execution context
|
|
211
|
+
// This automatically provides the correct URL for any n8n instance
|
|
212
|
+
const resumeUrl = this.evaluateExpression('{{ $execution?.resumeUrl }}', 0) as string;
|
|
213
|
+
const nodeId = this.evaluateExpression('{{ $nodeId }}', 0) as string;
|
|
214
|
+
const executionId = this.getExecutionId();
|
|
215
|
+
|
|
216
|
+
// Construct the full webhook URL with node ID appended
|
|
217
|
+
const webhookUrl = `${resumeUrl}/${nodeId}`;
|
|
218
|
+
|
|
219
|
+
const body: any = {
|
|
220
|
+
agent_instance_id: agentInstanceId,
|
|
221
|
+
agent_type: agentType,
|
|
222
|
+
content: messageContent,
|
|
223
|
+
requires_user_input: true,
|
|
224
|
+
// Send webhook URL in metadata so Vicoa knows where to send the response
|
|
225
|
+
message_metadata: {
|
|
226
|
+
webhook_url: webhookUrl, // Full URL with execution ID and node ID
|
|
227
|
+
execution_id: executionId,
|
|
228
|
+
node_id: nodeId,
|
|
229
|
+
webhook_type: 'n8n_send_and_wait',
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
if (options.sendEmail !== undefined) {
|
|
234
|
+
body.send_email = options.sendEmail;
|
|
235
|
+
}
|
|
236
|
+
if (options.sendSms !== undefined) {
|
|
237
|
+
body.send_sms = options.sendSms;
|
|
238
|
+
}
|
|
239
|
+
if (options.sendPush !== undefined) {
|
|
240
|
+
body.send_push = options.sendPush;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Send message to Vicoa (like Slack sends to chat.postMessage)
|
|
244
|
+
await vicoaApiRequest.call(this, 'POST', '/messages/agent', body);
|
|
245
|
+
|
|
246
|
+
// Configure wait time
|
|
247
|
+
const waitTill = configureWaitTillDate(this, 0);
|
|
248
|
+
|
|
249
|
+
// Put execution to wait
|
|
250
|
+
if (waitTill === 'WAIT_INDEFINITELY') {
|
|
251
|
+
await this.putExecutionToWait(new Date(Date.now() + 365 * 24 * 60 * 60 * 1000));
|
|
252
|
+
} else {
|
|
253
|
+
await this.putExecutionToWait(waitTill as Date);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Return input data
|
|
257
|
+
return [this.getInputData()];
|
|
258
|
+
}
|
|
259
|
+
} else {
|
|
260
|
+
throw new NodeOperationError(
|
|
261
|
+
this.getNode(),
|
|
262
|
+
`The operation "${operation}" is not supported for resource "${resource}"`,
|
|
263
|
+
{ itemIndex: i },
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
} else if (resource === 'session') {
|
|
267
|
+
if (operation === 'end') {
|
|
268
|
+
responseData = await session.end.execute.call(this, i);
|
|
269
|
+
} else {
|
|
270
|
+
throw new NodeOperationError(
|
|
271
|
+
this.getNode(),
|
|
272
|
+
`The operation "${operation}" is not supported for resource "${resource}"`,
|
|
273
|
+
{ itemIndex: i },
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
} else {
|
|
277
|
+
throw new NodeOperationError(
|
|
278
|
+
this.getNode(),
|
|
279
|
+
`The resource "${resource}" is not supported`,
|
|
280
|
+
{ itemIndex: i },
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
returnData.push(...responseData);
|
|
285
|
+
} catch (error) {
|
|
286
|
+
if (this.continueOnFail()) {
|
|
287
|
+
returnData.push({
|
|
288
|
+
json: {
|
|
289
|
+
error: error instanceof Error ? error.message : String(error),
|
|
290
|
+
resource,
|
|
291
|
+
operation,
|
|
292
|
+
itemIndex: i,
|
|
293
|
+
},
|
|
294
|
+
pairedItem: i,
|
|
295
|
+
});
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
throw error;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return [returnData];
|
|
303
|
+
}
|
|
304
|
+
}
|