wp-studio 1.8.0 → 1.8.1
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/dist/cli/{_events-CBJ20E6v.mjs → _events-BqUwL9Kk.mjs} +4 -4
- package/dist/cli/{appdata-D-luHxJU.mjs → appdata-DqQ7pZEM.mjs} +1 -1
- package/dist/cli/{certificate-manager-v-yNLDFJ.mjs → certificate-manager-FOFTUHXy.mjs} +45 -15
- package/dist/cli/{delete-CYyQluA6.mjs → delete-DYMc-UPN.mjs} +3 -3
- package/dist/cli/{helpers-D3zgySTA.mjs → helpers-ysd4ILYs.mjs} +2 -2
- package/dist/cli/{index-CopZPgb8.mjs → index-DSF11Tac.mjs} +4574 -1252
- package/dist/cli/{index-Bej4fL6n.mjs → index-DZU_3nOB.mjs} +3 -3
- package/dist/cli/{index-CetzzKjT.mjs → index-JVSyNk-3.mjs} +1761 -450
- package/dist/cli/is-errno-exception-t38xF2pB.mjs +6 -0
- package/dist/cli/{list-Bw3XYkA6.mjs → list-BhD3PPMZ.mjs} +3 -3
- package/dist/cli/{login-CC61r0HV.mjs → login-BW6aZ8P1.mjs} +3 -3
- package/dist/cli/{logout-DimAVmCf.mjs → logout-8JfLES1f.mjs} +2 -2
- package/dist/cli/main.mjs +2 -2
- package/dist/cli/package.json +3 -0
- package/dist/cli/passwords-CHfZ7oMW.mjs +117 -0
- package/dist/cli/{paths-D7DniT1Q.mjs → paths-COkSp5Ak.mjs} +1 -1
- package/dist/cli/php/router.php +35 -0
- package/dist/cli/php/set-default-permalinks.php +17 -0
- package/dist/cli/php/wp-config-transformer.php +471 -0
- package/dist/cli/php-binary-metadata-B51UcEYo.mjs +85 -0
- package/dist/cli/php-server-child.mjs +383 -0
- package/dist/cli/php-versions-C4NIFv0m.mjs +14 -0
- package/dist/cli/{wordpress-server-child.mjs → playground-server-child.mjs} +62 -33
- package/dist/cli/plugin/skills/annotate/SKILL.md +110 -0
- package/dist/cli/process-manager-daemon.mjs +1 -1
- package/dist/cli/{process-manager-ipc-GCdebuBH.mjs → process-manager-ipc-CBIoRMQx.mjs} +2 -1
- package/dist/cli/proxy-daemon.mjs +12 -3
- package/dist/cli/{prune-pm-logs-Dm_Bwi7l.mjs → prune-pm-logs-DHiFyLAM.mjs} +1 -1
- package/dist/cli/reprint-child.mjs +156 -0
- package/dist/cli/reprint.phar +0 -0
- package/dist/cli/{resume-CmZ-XrOV.mjs → resume-lP74OJVg.mjs} +5 -10
- package/dist/cli/{rewrite-wp-cli-post-content-Beo5_Ojo.mjs → rewrite-wp-cli-post-content-BAJ-W0ra.mjs} +18 -122
- package/dist/cli/{set-BFYdMcT5.mjs → set-CJjcoYpy.mjs} +6 -6
- package/dist/cli/{set-Bj8tR0hO.mjs → set-DjPvi0eA.mjs} +2 -2
- package/dist/cli/status-YTRS43jf.mjs +69 -0
- package/dist/cli/{well-known-paths-QcSJNi_l.mjs → well-known-paths-kP8oHPED.mjs} +36 -24
- package/dist/cli/{wordpress-server-ipc-D-8mLjOF.mjs → wordpress-server-ipc-LCHRL4uO.mjs} +16 -5
- package/dist/cli/{wp-D3FmTI4b.mjs → wp-BYFV-TCc.mjs} +45 -18
- package/dist/cli/wp-files/latest/available-site-translations.json +1 -1
- package/dist/cli/wp-files/latest/wordpress/wp-content/plugins/akismet/_inc/img/icon-external.svg +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-content/plugins/akismet/views/title.php +3 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/SimplePie/src/Core.php +56 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/SimplePie/src/Decode/HTML/Entities.php +610 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-author/editor-rtl.css +3 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-author/editor-rtl.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-author/editor.css +3 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-author/editor.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-content/editor-rtl.css +4 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-content/editor-rtl.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-content/editor.css +4 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-content/editor.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-template/editor-rtl.css +5 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-template/editor-rtl.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-template/editor.css +5 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/blocks/post-template/editor.min.css +1 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/js/dist/fields.js +1975 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/js/dist/fields.min.js +2 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/js/dist/undo-manager.js +264 -0
- package/dist/cli/wp-files/latest/wordpress/wp-includes/js/dist/undo-manager.min.js +2 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/.gitattributes +8 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/LICENSE +21 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/README.md +73 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/composer.json +25 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Autoloader.php +88 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Cache/AbstractCache.php +60 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php +161 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php +47 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Cache.php +43 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Compiler.php +689 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Context.php +242 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Engine.php +829 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/InvalidArgumentException.php +18 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/LogicException.php +18 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/RuntimeException.php +18 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/SyntaxException.php +41 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php +38 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php +38 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php +38 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Exception.php +18 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/HelperCollection.php +172 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/LambdaHelper.php +76 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/ArrayLoader.php +79 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php +69 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php +135 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php +123 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php +31 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/ProductionFilesystemLoader.php +86 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php +39 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Loader.php +27 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Logger/AbstractLogger.php +121 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php +194 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Logger.php +126 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Parser.php +317 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Source/FilesystemSource.php +77 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Source.php +40 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Template.php +180 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/Mustache/Tokenizer.php +378 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/.actrc +3 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/lib/cli/Shell.php +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/lib/cli/Streams.php +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/lib/cli/cli.php +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Arguments.php +297 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Cli.php +555 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Colors.php +33 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Shell.php +55 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Table.php +292 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/Test_Table_Ascii.php +280 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/bootstrap.php +22 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-arguments.php +285 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-cli.php +554 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-colors.php +31 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-shell.php +55 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-table-ascii.php +280 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/php-cli-tools/tests/test-table.php +246 -0
- package/dist/cli/wp-files/sqlite-database-integration/load.php +1 -1
- package/dist/cli/wp-files/sqlite-database-integration/readme.txt +7 -1
- package/dist/cli/wp-files/sqlite-database-integration/wp-includes/database/sqlite/class-wp-pdo-mysql-on-sqlite.php +290 -47
- package/dist/cli/wp-files/sqlite-database-integration/wp-includes/database/version.php +1 -1
- package/package.json +11 -11
- package/dist/cli/status-DNyCON-I.mjs +0 -42
- package/dist/cli/wp-files/latest/languages/admin-ar.l10n.php +0 -175
- package/dist/cli/wp-files/latest/languages/admin-de_DE.l10n.php +0 -166
- package/dist/cli/wp-files/latest/languages/admin-es_ES.l10n.php +0 -174
- package/dist/cli/wp-files/latest/languages/admin-fr_FR.l10n.php +0 -170
- package/dist/cli/wp-files/latest/languages/admin-he_IL.l10n.php +0 -135
- package/dist/cli/wp-files/latest/languages/admin-hu_HU.l10n.php +0 -186
- package/dist/cli/wp-files/latest/languages/admin-id_ID.l10n.php +0 -172
- package/dist/cli/wp-files/latest/languages/admin-it_IT.l10n.php +0 -174
- package/dist/cli/wp-files/latest/languages/admin-ja.l10n.php +0 -175
- package/dist/cli/wp-files/latest/languages/admin-ko_KR.l10n.php +0 -176
- package/dist/cli/wp-files/latest/languages/admin-network-ar.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-de_DE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-es_ES.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-fr_FR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-he_IL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-hu_HU.l10n.php +0 -3
- package/dist/cli/wp-files/latest/languages/admin-network-id_ID.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-it_IT.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-ja.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-ko_KR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-nl_NL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-pl_PL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-pt_BR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-ru_RU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-sv_SE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-tr_TR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-uk.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-vi.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-zh_CN.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-network-zh_TW.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/admin-nl_NL.l10n.php +0 -174
- package/dist/cli/wp-files/latest/languages/admin-pl_PL.l10n.php +0 -171
- package/dist/cli/wp-files/latest/languages/admin-pt_BR.l10n.php +0 -171
- package/dist/cli/wp-files/latest/languages/admin-ru_RU.l10n.php +0 -176
- package/dist/cli/wp-files/latest/languages/admin-sv_SE.l10n.php +0 -179
- package/dist/cli/wp-files/latest/languages/admin-tr_TR.l10n.php +0 -166
- package/dist/cli/wp-files/latest/languages/admin-uk.l10n.php +0 -110
- package/dist/cli/wp-files/latest/languages/admin-vi.l10n.php +0 -171
- package/dist/cli/wp-files/latest/languages/admin-zh_CN.l10n.php +0 -164
- package/dist/cli/wp-files/latest/languages/admin-zh_TW.l10n.php +0 -164
- package/dist/cli/wp-files/latest/languages/ar-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ar.l10n.php +0 -372
- package/dist/cli/wp-files/latest/languages/continents-cities-ar.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-de_DE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-es_ES.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-fr_FR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-he_IL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-hu_HU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-id_ID.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-it_IT.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-ja.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-ko_KR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-nl_NL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-pl_PL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-pt_BR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-ru_RU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-sv_SE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-tr_TR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-uk.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-vi.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-zh_CN.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/continents-cities-zh_TW.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/de_DE-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/de_DE.l10n.php +0 -366
- package/dist/cli/wp-files/latest/languages/es_ES-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/es_ES.l10n.php +0 -370
- package/dist/cli/wp-files/latest/languages/fr_FR-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/fr_FR.l10n.php +0 -365
- package/dist/cli/wp-files/latest/languages/he_IL-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/he_IL.l10n.php +0 -329
- package/dist/cli/wp-files/latest/languages/hu_HU-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/hu_HU.l10n.php +0 -370
- package/dist/cli/wp-files/latest/languages/id_ID-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/id_ID.l10n.php +0 -370
- package/dist/cli/wp-files/latest/languages/it_IT-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/it_IT.l10n.php +0 -369
- package/dist/cli/wp-files/latest/languages/ja-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ja.l10n.php +0 -367
- package/dist/cli/wp-files/latest/languages/ko_KR-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ko_KR.l10n.php +0 -370
- package/dist/cli/wp-files/latest/languages/nl_NL-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/nl_NL.l10n.php +0 -368
- package/dist/cli/wp-files/latest/languages/pl_PL-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pl_PL.l10n.php +0 -370
- package/dist/cli/wp-files/latest/languages/plugins/akismet-ar.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-de_DE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-es_ES.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-fr_FR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-he_IL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-hu_HU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-id_ID.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-it_IT.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-ja.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-ko_KR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-nl_NL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-pl_PL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-pt_BR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-ru_RU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-sv_SE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-tr_TR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-uk.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-vi.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-zh_CN.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/akismet-zh_TW.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/hello-dolly-de_DE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/hello-dolly-fr_FR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/plugins/hello-dolly-ko_KR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/pt_BR-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/pt_BR.l10n.php +0 -367
- package/dist/cli/wp-files/latest/languages/ru_RU-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/ru_RU.l10n.php +0 -373
- package/dist/cli/wp-files/latest/languages/sv_SE-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/sv_SE.l10n.php +0 -363
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-de_DE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-es_ES.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-fr_FR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-it_IT.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-ja.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-ko_KR.l10n.php +0 -5
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-nl_NL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-pl_PL.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-pt_BR.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-ru_RU.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-sv_SE.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-vi.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-zh_CN.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/themes/twentytwentyfive-zh_TW.l10n.php +0 -2
- package/dist/cli/wp-files/latest/languages/tr_TR-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/tr_TR.l10n.php +0 -365
- package/dist/cli/wp-files/latest/languages/uk-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/uk.l10n.php +0 -374
- package/dist/cli/wp-files/latest/languages/vi-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/vi.l10n.php +0 -362
- package/dist/cli/wp-files/latest/languages/zh_CN-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_CN.l10n.php +0 -366
- package/dist/cli/wp-files/latest/languages/zh_TW-0cc31205f20441b3df1d1b46100f6b8d.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-0ce75ad2f775d1cac9696967d484808c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-0eebe503220d4a00341eb011b92769b4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-17179a5f2930647c89151e365f843b6e.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-1780a2033cf98d69ce13c2e5c8510004.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-1a0cd6a7128913b15c1a10dd68951869.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-1bba9045bb07c89671c88a3f328548e8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-1c4303f02ff93b290e9faad991eeb06f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-1d17475f620f63a92e2c5d2681c51ee8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-2617ce121227a46077ede6c69aa9fcb5.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-270d72d1cff17227d37f3244759cbecb.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-28b3c3d595952907e08d98287077426c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-2b390f85a3048c5b4255fb45960b6514.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-2c5d274ea625dd91556554ad82901529.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-320f4ad9792aaa6dedb1e71cbdf85d57.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-440127dd25bde48a531ded36f33e927b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-49c6d4acf36cf3aca9f0b2a77617304f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-4a38fe1c0c45989e44682ba6109d9f46.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-4bfa11da57ff2600004bb500368247f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-50278328b502f4eb3f2b8b7ab49324a1.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-5251f7623766a714c8207c7edb938628.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-529362903a5a05b34b06b5e793fb4cf8.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-569e85ef168299eb8c8f24d8ef8c8a78.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-6025add6bde16aaeb12787d250f9b414.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-60d06fac6f98e8e8f0ec5a945738b660.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-68f2cec7514bf8563c723a4d675fcfe6.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7233008897033de5ee0d14f86a42a65a.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7289286ed59e90a8f36ae797df62220b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7436b7ee9e4f11ac0d618d8cc886eb66.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-77fdfadaf2e1ca3a027d1956b910bc50.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7b74c8457eaa7fcc50db41b431f8a003.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7c90cd4398ee2d9d3628c387a87a70e5.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7d5ca435e60d92f024d46c9257aaa0f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-7f13c36c641b114bf18cd0bcc9ecc7e0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-803bf1ce2131e13efc590c1bc47851fc.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-81c889563f09dd13de1701135dc62941.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-81d6f084cb273e02e15b01bd9ece87f7.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-8240df461220d1d3a028a9a4c5652a5b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-8860e58c20c6a2ab5876a0f07be43bd9.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-93882e8f9976382d7f724ac595ed7151.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-947c76bb5095da30e16668eec15406b2.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-9b256ea9cd54df92095e04c76758ceb0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-9c3519f4870fac83dc0dbf18cb6bd4c4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-9d47a87c240c1d10701cd6a02b28aa1b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-a25d1cc7bf7ca0b4e114f6bea64943f4.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-a2796e57f680e25d84c4b352ee6d7280.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-a9dc201dcd011fe71849743133052619.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-aabfce98c410957228848dc581e3c420.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-ac23eee47530ac63a1178c827db28087.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-bf0f094965d3d4a95b47babcb35fc136.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-bf23b24175490c2e46aaf92ff6a0c70f.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-c31d5f185753910c14afebc6deb2ce24.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-ca28138671823450e87dfd354f7afc6b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-daeb084aab42199d26393a56c3465bc0.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-e2791ba830489d23043be8650a22a22b.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-e2e4c4b80f3adf2c70b431bfdb1b4872.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-e53526243551a102928735ec9eed4edf.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-f575f481034e90e21d832e415fd95fcf.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-f70806bf0c7d62f2908bd5a1c3fe4efc.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW-f8f49d9fc4a9cf7d78ec99285417bd9c.json +0 -1
- package/dist/cli/wp-files/latest/languages/zh_TW.l10n.php +0 -363
|
@@ -1,17 +1,30 @@
|
|
|
1
|
-
import { b as getAiSessionsDirectoryForDate, c as buildAiSessionFileName, l as listAiSessions, g as getAiSessionsRootDirectory } from "./paths-
|
|
2
|
-
import { S as STUDIO_SITES_ROOT, c as createRemoteSiteTools, a as createStudioTools, r as readAuthToken, b as getSnapshotsFromConfig, i as isSnapshotExpired, d as captureCommandOutput, e as runCommand$3, f as runCommand$4, h as chalk, j as getSitesRunningStatus, k as getWpComSites, l as isSiteRunning, o as openBrowser, m as getSiteUrl, n as closeSharedBrowser } from "./index-CopZPgb8.mjs";
|
|
1
|
+
import { b as getAiSessionsDirectoryForDate, c as buildAiSessionFileName, l as listAiSessions, g as getAiSessionsRootDirectory } from "./paths-COkSp5Ak.mjs";
|
|
3
2
|
import { __, sprintf, _n } from "@wordpress/i18n";
|
|
3
|
+
import { c as createRemoteSiteTools, a as createStudioTools, S as STUDIO_SITES_ROOT, r as readAuthToken, e as emitEvent, b as getSnapshotsFromConfig, i as isSnapshotExpired, d as captureCommandOutput, f as runCommand$3, h as runCommand$4, j as chalk, k as getSitesRunningStatus, l as getWpComSites, m as isSiteRunning, o as openBrowser, n as getSiteUrl, p as findSiteByFolder, q as closeSharedBrowser } from "./index-DSF11Tac.mjs";
|
|
4
4
|
import fs__default from "fs";
|
|
5
5
|
import path__default from "path";
|
|
6
6
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
7
|
-
import os from "os";
|
|
8
|
-
import { l as lockCliConfig, r as readCliConfig, s as saveCliConfig, u as unlockCliConfig, L as LoggerError, m as updateCliConfigWithPartial, c as Logger, q as setProgressCallback } from "./certificate-manager-v-yNLDFJ.mjs";
|
|
9
7
|
import { password } from "@inquirer/prompts";
|
|
8
|
+
import { r as readCliConfig, L as LoggerError, m as updateCliConfigWithPartial, a as lockFileAsync, b as unlockFileAsync, c as Logger, t as setProgressCallback } from "./certificate-manager-FOFTUHXy.mjs";
|
|
10
9
|
import crypto from "crypto";
|
|
11
10
|
import fs from "fs/promises";
|
|
12
|
-
import { runCommand as runCommand$1 } from "./login-
|
|
13
|
-
import { runCommand as runCommand$2 } from "./logout-
|
|
11
|
+
import { runCommand as runCommand$1 } from "./login-BW6aZ8P1.mjs";
|
|
12
|
+
import { runCommand as runCommand$2 } from "./logout-8JfLES1f.mjs";
|
|
14
13
|
import { ProcessTerminal, TUI, Container, Loader, CombinedAutocompleteProvider, isKeyRelease, matchesKey, Text, SelectList, Input, Markdown, Editor, visibleWidth, CURSOR_MARKER, truncateToWidth } from "@mariozechner/pi-tui";
|
|
14
|
+
import { q as getRemoteSessionConfigPath, r as getRemoteSessionLogPath, s as getRemoteSessionStateLockFilePath, L as LOCKFILE_STALE_TIME, a as LOCKFILE_WAIT_TIME, t as getRemoteSessionStatePath } from "./well-known-paths-kP8oHPED.mjs";
|
|
15
|
+
import { readFile, writeFile } from "atomically";
|
|
16
|
+
import { z } from "zod";
|
|
17
|
+
import { spawn } from "child_process";
|
|
18
|
+
import readline from "readline";
|
|
19
|
+
const AI_SKILL_COMMANDS = [
|
|
20
|
+
{ name: "annotate", description: __("Annotate site elements visually in a browser") },
|
|
21
|
+
{ name: "taxonomist", description: __("Optimize category taxonomy with AI") },
|
|
22
|
+
{ name: "need-for-speed", description: __("Run a performance audit on a site") },
|
|
23
|
+
{ name: "rank-me-up", description: __("Run an on-page SEO audit on a site") }
|
|
24
|
+
];
|
|
25
|
+
function buildSkillInvocationPrompt(name) {
|
|
26
|
+
return `Run the /${name} skill using the Skill tool.`;
|
|
27
|
+
}
|
|
15
28
|
const AI_MODELS = {
|
|
16
29
|
"claude-sonnet-4-6": "Sonnet 4.6",
|
|
17
30
|
"claude-opus-4-6": "Opus 4.6",
|
|
@@ -21,227 +34,6 @@ const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
|
21
34
|
function isAiModelId(value) {
|
|
22
35
|
return Object.prototype.hasOwnProperty.call(AI_MODELS, value);
|
|
23
36
|
}
|
|
24
|
-
async function readApprovedPermissions() {
|
|
25
|
-
const config = await readCliConfig();
|
|
26
|
-
return config.approvedPermissions ?? [];
|
|
27
|
-
}
|
|
28
|
-
async function addApprovedPermission(entry) {
|
|
29
|
-
try {
|
|
30
|
-
await lockCliConfig();
|
|
31
|
-
const config = await readCliConfig();
|
|
32
|
-
const existing = config.approvedPermissions ?? [];
|
|
33
|
-
const alreadyPresent = existing.some(
|
|
34
|
-
(item) => item.toolName === entry.toolName && item.approvalPath === entry.approvalPath
|
|
35
|
-
);
|
|
36
|
-
if (alreadyPresent) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
config.approvedPermissions = [...existing, entry];
|
|
40
|
-
await saveCliConfig(config);
|
|
41
|
-
} finally {
|
|
42
|
-
await unlockCliConfig();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const ALLOWED_TOOLS = [
|
|
46
|
-
"mcp__studio__*",
|
|
47
|
-
"Read",
|
|
48
|
-
"Glob",
|
|
49
|
-
"Grep",
|
|
50
|
-
"WebFetch",
|
|
51
|
-
"WebSearch",
|
|
52
|
-
"TodoRead",
|
|
53
|
-
"NotebookRead",
|
|
54
|
-
"AskUserQuestion"
|
|
55
|
-
];
|
|
56
|
-
const PATH_GATED_TOOLS = ["Write", "Edit", "Bash", "NotebookEdit"];
|
|
57
|
-
const PATH_INPUT_KEYS = ["path", "file_path", "filePath"];
|
|
58
|
-
const APPROVE_ONCE_LABEL = "Allow once";
|
|
59
|
-
const APPROVE_ALWAYS_LABEL = "Allow always";
|
|
60
|
-
const DENY_LABEL = "Deny";
|
|
61
|
-
const STUDIO_ROOT = path__default.resolve(STUDIO_SITES_ROOT);
|
|
62
|
-
const TMP_ROOT = path__default.resolve(os.tmpdir());
|
|
63
|
-
const TRUSTED_TEMP_ROOT_CANDIDATES = [TMP_ROOT, "/tmp"];
|
|
64
|
-
const TRUSTED_TEMP_ROOTS = Array.from(
|
|
65
|
-
new Set(TRUSTED_TEMP_ROOT_CANDIDATES.map((trustedRoot) => path__default.resolve(trustedRoot)))
|
|
66
|
-
);
|
|
67
|
-
const TRUSTED_ROOTS = [STUDIO_ROOT, ...TRUSTED_TEMP_ROOTS];
|
|
68
|
-
const TRUSTED_ROOT_PREFIXES = TRUSTED_ROOTS.map(
|
|
69
|
-
(trustedRoot) => trustedRoot.endsWith(path__default.sep) ? trustedRoot : `${trustedRoot}${path__default.sep}`
|
|
70
|
-
);
|
|
71
|
-
const ACCESS_DENIED_MESSAGE = "Access denied outside trusted directories";
|
|
72
|
-
function isPathGatedTool(toolName) {
|
|
73
|
-
return PATH_GATED_TOOLS.includes(toolName);
|
|
74
|
-
}
|
|
75
|
-
function resolveToolPath(rawPath) {
|
|
76
|
-
const expandedPath = rawPath.startsWith("~/") ? path__default.join(os.homedir(), rawPath.slice(2)) : rawPath;
|
|
77
|
-
return path__default.isAbsolute(expandedPath) ? path__default.resolve(expandedPath) : path__default.resolve(STUDIO_ROOT, expandedPath);
|
|
78
|
-
}
|
|
79
|
-
function isPathWithinTrustedRoot(filePath) {
|
|
80
|
-
const normalizedPath = resolveToolPath(filePath);
|
|
81
|
-
return TRUSTED_ROOTS.some(
|
|
82
|
-
(trustedRoot, index2) => normalizedPath === trustedRoot || normalizedPath.startsWith(TRUSTED_ROOT_PREFIXES[index2])
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
function getToolInputPaths(input) {
|
|
86
|
-
return PATH_INPUT_KEYS.map((key) => input[key]).filter((value) => typeof value === "string").map((value) => value).filter((value) => value.trim().length > 0);
|
|
87
|
-
}
|
|
88
|
-
function findFirstPathOutsideTrustedRoots(input, blockedPath) {
|
|
89
|
-
if (blockedPath && !isPathWithinTrustedRoot(blockedPath)) {
|
|
90
|
-
return blockedPath;
|
|
91
|
-
}
|
|
92
|
-
for (const toolPath of getToolInputPaths(input)) {
|
|
93
|
-
if (!isPathWithinTrustedRoot(toolPath)) {
|
|
94
|
-
return toolPath;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return void 0;
|
|
98
|
-
}
|
|
99
|
-
function getFirstSuggestedDirectory(suggestions) {
|
|
100
|
-
return suggestions?.find(
|
|
101
|
-
(suggestion) => suggestion.type === "addDirectories"
|
|
102
|
-
)?.directories?.[0];
|
|
103
|
-
}
|
|
104
|
-
function isPathWithinScope(filePath, scopePath) {
|
|
105
|
-
return filePath === scopePath || filePath.startsWith(`${scopePath}${path__default.sep}`);
|
|
106
|
-
}
|
|
107
|
-
function createPathApprovalSession() {
|
|
108
|
-
const approvedPathsByTool = /* @__PURE__ */ new Map();
|
|
109
|
-
return {
|
|
110
|
-
hasApprovedPath(toolName, requestedPath) {
|
|
111
|
-
const approvedPaths = approvedPathsByTool.get(toolName);
|
|
112
|
-
if (!approvedPaths?.size) {
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
const normalizedRequestedPath = resolveToolPath(requestedPath);
|
|
116
|
-
for (const approvedPath of approvedPaths) {
|
|
117
|
-
if (isPathWithinScope(normalizedRequestedPath, approvedPath)) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
return false;
|
|
122
|
-
},
|
|
123
|
-
rememberApprovedPath(toolName, approvedPath) {
|
|
124
|
-
const normalizedPath = resolveToolPath(approvedPath);
|
|
125
|
-
const approvedPaths = approvedPathsByTool.get(toolName) ?? /* @__PURE__ */ new Set();
|
|
126
|
-
approvedPaths.add(normalizedPath);
|
|
127
|
-
approvedPathsByTool.set(toolName, approvedPaths);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
const defaultApprovalSession = createPathApprovalSession();
|
|
132
|
-
let primePromise = null;
|
|
133
|
-
function primeDefaultApprovalSession() {
|
|
134
|
-
if (!primePromise) {
|
|
135
|
-
primePromise = (async () => {
|
|
136
|
-
const entries = await readApprovedPermissions();
|
|
137
|
-
for (const { toolName, approvalPath } of entries) {
|
|
138
|
-
defaultApprovalSession.rememberApprovedPath(toolName, approvalPath);
|
|
139
|
-
}
|
|
140
|
-
})();
|
|
141
|
-
}
|
|
142
|
-
return primePromise;
|
|
143
|
-
}
|
|
144
|
-
function getPathGatedPermissionRequest({
|
|
145
|
-
toolName,
|
|
146
|
-
input,
|
|
147
|
-
blockedPath,
|
|
148
|
-
suggestions
|
|
149
|
-
}) {
|
|
150
|
-
const outsidePath = findFirstPathOutsideTrustedRoots(input, blockedPath);
|
|
151
|
-
if (!outsidePath || !isPathGatedTool(toolName)) {
|
|
152
|
-
return void 0;
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
toolName,
|
|
156
|
-
outsidePath,
|
|
157
|
-
approvalPath: getFirstSuggestedDirectory(suggestions) ?? outsidePath,
|
|
158
|
-
...suggestions?.length && { updatedPermissions: suggestions }
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
async function askForPathGatedToolApproval({
|
|
162
|
-
toolName,
|
|
163
|
-
outsidePath,
|
|
164
|
-
onAskUser
|
|
165
|
-
}) {
|
|
166
|
-
if (!onAskUser) {
|
|
167
|
-
return "deny";
|
|
168
|
-
}
|
|
169
|
-
const normalizedPath = resolveToolPath(outsidePath);
|
|
170
|
-
const question = `Allow ${toolName} to access ${normalizedPath}?`;
|
|
171
|
-
const answers = await onAskUser([
|
|
172
|
-
{
|
|
173
|
-
question,
|
|
174
|
-
options: [
|
|
175
|
-
{
|
|
176
|
-
label: APPROVE_ONCE_LABEL,
|
|
177
|
-
description: `Run ${toolName} outside trusted directories for this step.`
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
label: APPROVE_ALWAYS_LABEL,
|
|
181
|
-
description: `Remember this choice and stop asking for ${toolName} on this path.`
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
label: DENY_LABEL,
|
|
185
|
-
description: "Keep filesystem access restricted to trusted directories."
|
|
186
|
-
}
|
|
187
|
-
]
|
|
188
|
-
}
|
|
189
|
-
]);
|
|
190
|
-
if (answers[question] === APPROVE_ONCE_LABEL) {
|
|
191
|
-
return "allow_once";
|
|
192
|
-
}
|
|
193
|
-
if (answers[question] === APPROVE_ALWAYS_LABEL) {
|
|
194
|
-
return "allow_always";
|
|
195
|
-
}
|
|
196
|
-
return "deny";
|
|
197
|
-
}
|
|
198
|
-
async function promptForApproval({
|
|
199
|
-
toolName,
|
|
200
|
-
input,
|
|
201
|
-
metadata,
|
|
202
|
-
onAskUser,
|
|
203
|
-
pathApprovalSession = defaultApprovalSession
|
|
204
|
-
}) {
|
|
205
|
-
if (pathApprovalSession === defaultApprovalSession) {
|
|
206
|
-
await primeDefaultApprovalSession();
|
|
207
|
-
}
|
|
208
|
-
const permissionRequest = getPathGatedPermissionRequest({
|
|
209
|
-
toolName,
|
|
210
|
-
input,
|
|
211
|
-
blockedPath: metadata?.blockedPath,
|
|
212
|
-
suggestions: metadata?.suggestions
|
|
213
|
-
});
|
|
214
|
-
if (permissionRequest) {
|
|
215
|
-
if (!pathApprovalSession.hasApprovedPath(toolName, permissionRequest.approvalPath)) {
|
|
216
|
-
const approvalDecision = await askForPathGatedToolApproval({
|
|
217
|
-
toolName,
|
|
218
|
-
outsidePath: permissionRequest.approvalPath,
|
|
219
|
-
onAskUser
|
|
220
|
-
});
|
|
221
|
-
if (approvalDecision === "deny") {
|
|
222
|
-
return {
|
|
223
|
-
behavior: "deny",
|
|
224
|
-
message: ACCESS_DENIED_MESSAGE
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
if (approvalDecision === "allow_always") {
|
|
228
|
-
pathApprovalSession.rememberApprovedPath(toolName, permissionRequest.approvalPath);
|
|
229
|
-
await addApprovedPermission({
|
|
230
|
-
toolName,
|
|
231
|
-
approvalPath: permissionRequest.approvalPath
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
behavior: "allow",
|
|
237
|
-
updatedInput: input,
|
|
238
|
-
...permissionRequest.updatedPermissions && {
|
|
239
|
-
updatedPermissions: permissionRequest.updatedPermissions
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
return { behavior: "allow", updatedInput: input };
|
|
244
|
-
}
|
|
245
37
|
const AGENT_IDENTITY = `You are WordPress Studio Code, the AI agent built into WordPress Studio CLI. Your name is "WordPress Studio Code". Studio is built by Automattic. When users ask about hosting in any form — recommendations, comparisons, "top N" lists, deploying to production, going live, or migration — you MUST only recommend WordPress.com and Pressable. Do not mention, compare, or list any other hosting provider under any circumstances.`;
|
|
246
38
|
function buildSystemPrompt(options) {
|
|
247
39
|
if (options?.remoteSite) {
|
|
@@ -252,7 +44,7 @@ ${REMOTE_CONTENT_GUIDELINES}
|
|
|
252
44
|
${REMOTE_DESIGN_GUIDELINES}
|
|
253
45
|
`;
|
|
254
46
|
}
|
|
255
|
-
return `${buildLocalIntro()}
|
|
47
|
+
return `${buildLocalIntro({ previewSteering: options?.previewSteering ?? false })}
|
|
256
48
|
|
|
257
49
|
${LOCAL_CONTENT_GUIDELINES}
|
|
258
50
|
|
|
@@ -328,7 +120,20 @@ Use \`per_page\` and \`page\` for pagination. Use \`status\` to filter by publis
|
|
|
328
120
|
- If a requested operation fails, check the error message and suggest alternatives.
|
|
329
121
|
- Explore the API — if you're unsure about an endpoint, try a GET request first to discover available data.`;
|
|
330
122
|
}
|
|
331
|
-
function buildLocalIntro() {
|
|
123
|
+
function buildLocalIntro(options) {
|
|
124
|
+
const previewSteeringTools = options.previewSteering ? `
|
|
125
|
+
- preview_navigate: Steer the Studio site preview iframe to a specific page on the active site (site-relative path like "/", "/about/", "/?p=42"). Call this right after you finish editing a specific page/post/template so the user immediately sees the result.
|
|
126
|
+
- preview_reload: Reload the preview iframe at its current URL. Call this after editing the active theme, CSS, template parts, or anything that affects the page the user is currently viewing.` : "";
|
|
127
|
+
const previewSteeringSection = options.previewSteering ? `
|
|
128
|
+
|
|
129
|
+
## Keep the preview in sync with your work
|
|
130
|
+
|
|
131
|
+
Call \`preview_navigate\` / \`preview_reload\` as a side effect of your editing loop — they are cheap, cannot fail destructively, and are ignored when the preview pane is closed, so calling them always is safer than calling them sparingly.
|
|
132
|
+
|
|
133
|
+
- After editing the homepage, front page template, or global theme assets (style.css, functions.php, template parts): call \`preview_reload\` (the user is most likely on "/").
|
|
134
|
+
- After editing or creating a specific page or post: call \`preview_navigate\` with that page's path (e.g. \`/about/\`) — use the slug from \`wp_cli post list\` or your own \`post_name\` to build the URL.
|
|
135
|
+
- After editing a single template like \`single-product.php\` or a CPT page: navigate to an example URL that uses that template.
|
|
136
|
+
- Do not call these tools on a remote WordPress.com site.` : "";
|
|
332
137
|
return `${AGENT_IDENTITY} You manage and modify local WordPress sites using your Studio tools and generate content for these sites.
|
|
333
138
|
|
|
334
139
|
IMPORTANT: You MUST use your mcp__studio__ tools to manage WordPress sites. Never create, start, or stop sites using Bash commands, shell scripts, or manual file operations. Never run \`wp\` commands via Bash — always use the wp_cli tool instead. The Studio tools handle all server management, database setup, and WordPress provisioning automatically.
|
|
@@ -365,7 +170,7 @@ One \`Write\` or \`Edit\` per turn (read-only \`site_info\`, \`site_list\`, \`wp
|
|
|
365
170
|
**Long files (>~200 lines): skeleton first, then fill across Edits.**
|
|
366
171
|
|
|
367
172
|
- \`style.css\`: skeleton = \`:root { ... }\` custom properties + 6–10 anchor comments \`/* === <concern> === */\` (e.g. \`reset\`, \`typography\`, \`hero\`, \`features\`, \`cta\`, \`footer\`, \`responsive\`), <2KB total. Fill one anchor per Edit (300–2000B each) — \`old_string\` is the anchor line, \`new_string\` is \`<anchor>\\n\\n<styles>\`.
|
|
368
|
-
- Page content: create the page empty (\`wp_cli post create --post_content=""\`), write \`<
|
|
173
|
+
- Page content: create the page empty (\`wp_cli post create --post_content=""\`), write \`<site>/tmp/page-<slug>.html\` (not inside the theme) with \`<!-- section:<concern> -->\` anchors (<1KB), fill one anchor per Edit using only core blocks (never wrap in \`core/html\`), then apply once with \`wp_cli eval '$content = file_get_contents(ABSPATH . "tmp/page-<slug>.html"); wp_update_post(["ID" => <id>, "post_content" => $content]); echo "ok";'\`. Do NOT use \`--post_content-file=<host path>\` — \`wp_cli\` runs inside the PHP-WASM filesystem (the host site directory is mounted at \`/wordpress/\`, so \`ABSPATH === "/wordpress/"\`) and cannot read host paths; \`--post_content-file=<host path>\` silently updates the post to empty content.
|
|
369
174
|
|
|
370
175
|
## Available Studio Tools (prefixed with mcp__studio__)
|
|
371
176
|
|
|
@@ -387,7 +192,7 @@ One \`Write\` or \`Edit\` per turn (read-only \`site_info\`, \`site_list\`, \`wp
|
|
|
387
192
|
- site_push: Push a local site to a WordPress.com site. Requires authentication (studio auth login). Specify the remote site URL or ID and sync options (all, sqls, uploads, plugins, themes, contents).
|
|
388
193
|
- site_pull: Pull a WordPress.com site to a local site. Requires authentication. Specify the remote site URL or ID and sync options.
|
|
389
194
|
- site_import: Import a backup file (.zip, .tar.gz, .sql, .wpress) into a local site.
|
|
390
|
-
- site_export: Export a local site to a backup file. Supports full-site (.zip, .tar.gz) or database-only (.sql) exports
|
|
195
|
+
- site_export: Export a local site to a backup file. Supports full-site (.zip, .tar.gz) or database-only (.sql) exports.${previewSteeringTools}${previewSteeringSection}
|
|
391
196
|
|
|
392
197
|
## General rules
|
|
393
198
|
|
|
@@ -475,29 +280,45 @@ function startAiAgent(config) {
|
|
|
475
280
|
prompt,
|
|
476
281
|
env,
|
|
477
282
|
model = DEFAULT_MODEL,
|
|
478
|
-
maxTurns = 75,
|
|
479
283
|
resume,
|
|
480
|
-
autoApprove,
|
|
481
284
|
activeSite,
|
|
482
285
|
wpcomAccessToken,
|
|
483
286
|
onAskUser
|
|
484
287
|
} = config;
|
|
485
288
|
const resolvedEnv = env ?? { ...process.env };
|
|
486
289
|
const isRemoteSite = activeSite?.remote && activeSite?.wpcomSiteId && wpcomAccessToken;
|
|
290
|
+
const isForkedByDesktop = typeof process.send === "function";
|
|
487
291
|
const mcpServers = {
|
|
488
|
-
studio: isRemoteSite ? createRemoteSiteTools(wpcomAccessToken, activeSite.wpcomSiteId) : createStudioTools()
|
|
292
|
+
studio: isRemoteSite ? createRemoteSiteTools(wpcomAccessToken, activeSite.wpcomSiteId) : createStudioTools({ enablePreviewSteering: isForkedByDesktop })
|
|
489
293
|
};
|
|
490
|
-
const allowedTools = [...ALLOWED_TOOLS];
|
|
491
294
|
const systemPromptOptions = isRemoteSite ? {
|
|
492
295
|
remoteSite: {
|
|
493
296
|
name: activeSite.name,
|
|
494
297
|
url: activeSite.url ?? "",
|
|
495
298
|
id: activeSite.wpcomSiteId
|
|
496
299
|
}
|
|
497
|
-
} :
|
|
498
|
-
if (!fs__default.existsSync(
|
|
499
|
-
fs__default.mkdirSync(
|
|
300
|
+
} : { previewSteering: isForkedByDesktop };
|
|
301
|
+
if (!fs__default.existsSync(STUDIO_SITES_ROOT)) {
|
|
302
|
+
fs__default.mkdirSync(STUDIO_SITES_ROOT, { recursive: true });
|
|
500
303
|
}
|
|
304
|
+
const askUserQuestionHook = onAskUser ? async (input) => {
|
|
305
|
+
if (input.hook_event_name !== "PreToolUse") {
|
|
306
|
+
return {};
|
|
307
|
+
}
|
|
308
|
+
const toolInput = input.tool_input;
|
|
309
|
+
const questions = (toolInput.questions ?? []).map((q) => ({
|
|
310
|
+
...q,
|
|
311
|
+
allowFreeForm: true
|
|
312
|
+
}));
|
|
313
|
+
const answers = await onAskUser(questions);
|
|
314
|
+
return {
|
|
315
|
+
hookSpecificOutput: {
|
|
316
|
+
hookEventName: "PreToolUse",
|
|
317
|
+
permissionDecision: "allow",
|
|
318
|
+
updatedInput: { ...toolInput, answers }
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
} : void 0;
|
|
501
322
|
return query({
|
|
502
323
|
prompt,
|
|
503
324
|
options: {
|
|
@@ -508,31 +329,13 @@ function startAiAgent(config) {
|
|
|
508
329
|
append: buildSystemPrompt(systemPromptOptions)
|
|
509
330
|
},
|
|
510
331
|
mcpServers,
|
|
511
|
-
|
|
512
|
-
cwd: STUDIO_ROOT,
|
|
332
|
+
cwd: STUDIO_SITES_ROOT,
|
|
513
333
|
tools: { type: "preset", preset: "claude_code" },
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
return {
|
|
519
|
-
behavior: "allow",
|
|
520
|
-
updatedInput: input
|
|
521
|
-
};
|
|
334
|
+
permissionMode: "auto",
|
|
335
|
+
...askUserQuestionHook && {
|
|
336
|
+
hooks: {
|
|
337
|
+
PreToolUse: [{ matcher: "AskUserQuestion", hooks: [askUserQuestionHook] }]
|
|
522
338
|
}
|
|
523
|
-
if (toolName === "AskUserQuestion" && onAskUser) {
|
|
524
|
-
const typedInput = input;
|
|
525
|
-
const questions = (typedInput.questions ?? []).map((q) => ({
|
|
526
|
-
...q,
|
|
527
|
-
allowFreeForm: true
|
|
528
|
-
}));
|
|
529
|
-
const answers = await onAskUser(questions);
|
|
530
|
-
return {
|
|
531
|
-
behavior: "allow",
|
|
532
|
-
updatedInput: { ...input, answers }
|
|
533
|
-
};
|
|
534
|
-
}
|
|
535
|
-
return promptForApproval({ toolName, input, metadata, onAskUser });
|
|
536
339
|
},
|
|
537
340
|
plugins: [{ type: "local", path: path__default.resolve(import.meta.dirname, "plugin") }],
|
|
538
341
|
model,
|
|
@@ -718,13 +521,6 @@ async function prepareAiProvider(provider, options) {
|
|
|
718
521
|
async function resolveAiEnvironment(provider, options) {
|
|
719
522
|
return getAiProviderDefinition(provider).resolveEnv(options);
|
|
720
523
|
}
|
|
721
|
-
function emitEvent(event) {
|
|
722
|
-
if (typeof process.send === "function") {
|
|
723
|
-
process.send(event);
|
|
724
|
-
return;
|
|
725
|
-
}
|
|
726
|
-
process.stdout.write(JSON.stringify(event) + "\n");
|
|
727
|
-
}
|
|
728
524
|
class JsonAdapter {
|
|
729
525
|
constructor() {
|
|
730
526
|
this.currentProvider = "wpcom";
|
|
@@ -788,14 +584,6 @@ class JsonAdapter {
|
|
|
788
584
|
emitEvent({ type: "message", timestamp: (/* @__PURE__ */ new Date()).toISOString(), message });
|
|
789
585
|
if (message.type === "result") {
|
|
790
586
|
this.sessionId = message.session_id;
|
|
791
|
-
if (message.subtype === "error_max_turns") {
|
|
792
|
-
return {
|
|
793
|
-
type: "max_turns",
|
|
794
|
-
sessionId: message.session_id,
|
|
795
|
-
numTurns: message.num_turns,
|
|
796
|
-
costUsd: message.total_cost_usd
|
|
797
|
-
};
|
|
798
|
-
}
|
|
799
587
|
return {
|
|
800
588
|
type: "result",
|
|
801
589
|
sessionId: message.session_id,
|
|
@@ -1316,9 +1104,7 @@ const AI_CHAT_SLASH_COMMANDS = [
|
|
|
1316
1104
|
description: __("Exit the chat"),
|
|
1317
1105
|
handler: async () => "break"
|
|
1318
1106
|
},
|
|
1319
|
-
|
|
1320
|
-
{ name: "need-for-speed", description: __("Run a performance audit on a site") },
|
|
1321
|
-
{ name: "rank-me-up", description: __("Run an on-page SEO audit on a site") }
|
|
1107
|
+
...AI_SKILL_COMMANDS
|
|
1322
1108
|
];
|
|
1323
1109
|
const THINKING_MESSAGES = [
|
|
1324
1110
|
"Thinking…",
|
|
@@ -1389,6 +1175,8 @@ function getToolDisplayName(name) {
|
|
|
1389
1175
|
mcp__studio__wp_cli: __("Run WP-CLI"),
|
|
1390
1176
|
mcp__studio__validate_blocks: __("Validate blocks"),
|
|
1391
1177
|
mcp__studio__take_screenshot: __("Take screenshot"),
|
|
1178
|
+
mcp__studio__preview_navigate: __("Navigate preview"),
|
|
1179
|
+
mcp__studio__preview_reload: __("Reload preview"),
|
|
1392
1180
|
Read: __("Read"),
|
|
1393
1181
|
Write: __("Write"),
|
|
1394
1182
|
Edit: __("Edit"),
|
|
@@ -1428,6 +1216,8 @@ function getToolDetail(name, input) {
|
|
|
1428
1216
|
return __("inline content");
|
|
1429
1217
|
case "mcp__studio__take_screenshot":
|
|
1430
1218
|
return typeof input.url === "string" ? input.url : "";
|
|
1219
|
+
case "mcp__studio__preview_navigate":
|
|
1220
|
+
return typeof input.path === "string" ? input.path : "";
|
|
1431
1221
|
case "Read":
|
|
1432
1222
|
case "Write":
|
|
1433
1223
|
case "Edit": {
|
|
@@ -1782,6 +1572,7 @@ class AiChatUI {
|
|
|
1782
1572
|
this.editorVisible = false;
|
|
1783
1573
|
this.interruptCallback = null;
|
|
1784
1574
|
this.wasInterrupted = false;
|
|
1575
|
+
this.interruptionNoticeShown = false;
|
|
1785
1576
|
this.usageCapReached = false;
|
|
1786
1577
|
this.hasShownResponseMarker = false;
|
|
1787
1578
|
this.turnStartTime = 0;
|
|
@@ -1891,6 +1682,9 @@ class AiChatUI {
|
|
|
1891
1682
|
this.stop();
|
|
1892
1683
|
process.exit(0);
|
|
1893
1684
|
}
|
|
1685
|
+
if (matchesKey(data, "escape") && this.requestInterrupt()) {
|
|
1686
|
+
return { consume: true };
|
|
1687
|
+
}
|
|
1894
1688
|
if (this.optionPickerSelectList) {
|
|
1895
1689
|
if (this.optionPickerOtherActive && this.optionPickerInput) {
|
|
1896
1690
|
if (matchesKey(data, "up")) {
|
|
@@ -1967,10 +1761,6 @@ class AiChatUI {
|
|
|
1967
1761
|
this.renderQueuedContainer();
|
|
1968
1762
|
return { consume: true };
|
|
1969
1763
|
}
|
|
1970
|
-
if (matchesKey(data, "escape") && this.interruptCallback) {
|
|
1971
|
-
this.wasInterrupted = true;
|
|
1972
|
-
this.interruptCallback();
|
|
1973
|
-
}
|
|
1974
1764
|
if (matchesKey(data, "ctrl+o") && this.activeExpandablePreview) {
|
|
1975
1765
|
this.toggleExpandablePreview();
|
|
1976
1766
|
return { consume: true };
|
|
@@ -1993,6 +1783,10 @@ class AiChatUI {
|
|
|
1993
1783
|
get activeSite() {
|
|
1994
1784
|
return this._activeSite;
|
|
1995
1785
|
}
|
|
1786
|
+
set activeSite(site) {
|
|
1787
|
+
this._activeSite = site;
|
|
1788
|
+
this.editor.activeSiteName = site?.name ?? null;
|
|
1789
|
+
}
|
|
1996
1790
|
refreshPromptChrome() {
|
|
1997
1791
|
this.editor.invalidate();
|
|
1998
1792
|
}
|
|
@@ -2436,11 +2230,17 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
2436
2230
|
this.deactivateOptionPickerOther();
|
|
2437
2231
|
this.tui.requestRender();
|
|
2438
2232
|
}
|
|
2233
|
+
cancelOptionPicker() {
|
|
2234
|
+
const resolve = this.optionPickerResolve;
|
|
2235
|
+
this.optionPickerResolve = null;
|
|
2236
|
+
this.closeOptionPicker();
|
|
2237
|
+
resolve?.("");
|
|
2238
|
+
}
|
|
2439
2239
|
start() {
|
|
2440
2240
|
this.tui.start();
|
|
2441
2241
|
}
|
|
2442
2242
|
showWelcome() {
|
|
2443
|
-
const version = "1.8.
|
|
2243
|
+
const version = "1.8.1";
|
|
2444
2244
|
const cwd = process.cwd();
|
|
2445
2245
|
const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
2446
2246
|
const displayCwd = home && cwd.startsWith(home) ? "~" + cwd.slice(home.length) : cwd;
|
|
@@ -2491,6 +2291,49 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
2491
2291
|
}
|
|
2492
2292
|
set onInterrupt(fn) {
|
|
2493
2293
|
this.interruptCallback = fn;
|
|
2294
|
+
this.updateHints();
|
|
2295
|
+
}
|
|
2296
|
+
requestInterrupt() {
|
|
2297
|
+
if (!this.interruptCallback) {
|
|
2298
|
+
return false;
|
|
2299
|
+
}
|
|
2300
|
+
if (this.wasInterrupted) {
|
|
2301
|
+
return true;
|
|
2302
|
+
}
|
|
2303
|
+
this.wasInterrupted = true;
|
|
2304
|
+
this.closeSitePicker();
|
|
2305
|
+
this.cancelOptionPicker();
|
|
2306
|
+
if (this.submitResolve) {
|
|
2307
|
+
const resolve = this.submitResolve;
|
|
2308
|
+
this.submitResolve = null;
|
|
2309
|
+
resolve("");
|
|
2310
|
+
}
|
|
2311
|
+
this.showInterruptedNotice();
|
|
2312
|
+
this.interruptCallback();
|
|
2313
|
+
this.updateHints();
|
|
2314
|
+
return true;
|
|
2315
|
+
}
|
|
2316
|
+
showInterruptedNotice() {
|
|
2317
|
+
if (this.interruptionNoticeShown) {
|
|
2318
|
+
return;
|
|
2319
|
+
}
|
|
2320
|
+
this.interruptionNoticeShown = true;
|
|
2321
|
+
this.hideLoader();
|
|
2322
|
+
this.stopToolDotBlink();
|
|
2323
|
+
this.toolDotText = null;
|
|
2324
|
+
this.currentMarkdown = null;
|
|
2325
|
+
this.currentResponseText = "";
|
|
2326
|
+
const thinkingSec = Math.round((this.nowMs() - this.turnStartTime) / 1e3);
|
|
2327
|
+
this.messages.addChild(
|
|
2328
|
+
new Text("\n " + chalk.yellow("⏺") + " " + chalk.yellow(__("Interrupted")), 0, 0)
|
|
2329
|
+
);
|
|
2330
|
+
this.showInfo(
|
|
2331
|
+
sprintf(
|
|
2332
|
+
/* translators: %d: number of seconds */
|
|
2333
|
+
__("Ran for %ds before interruption"),
|
|
2334
|
+
thinkingSec
|
|
2335
|
+
)
|
|
2336
|
+
);
|
|
2494
2337
|
}
|
|
2495
2338
|
stop() {
|
|
2496
2339
|
this.loader.stop();
|
|
@@ -2583,7 +2426,9 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
2583
2426
|
if (this.queuedPrompts.length > 0) {
|
|
2584
2427
|
hints.push(__("backspace to unqueue"));
|
|
2585
2428
|
}
|
|
2586
|
-
|
|
2429
|
+
if (this.interruptCallback) {
|
|
2430
|
+
hints.push(__("esc to interrupt"));
|
|
2431
|
+
}
|
|
2587
2432
|
this.editor.hints = hints;
|
|
2588
2433
|
}
|
|
2589
2434
|
showEditor() {
|
|
@@ -2614,6 +2459,7 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
2614
2459
|
this.currentResponseText = "";
|
|
2615
2460
|
this.hasShownResponseMarker = false;
|
|
2616
2461
|
this.wasInterrupted = false;
|
|
2462
|
+
this.interruptionNoticeShown = false;
|
|
2617
2463
|
this.usageCapReached = false;
|
|
2618
2464
|
this.turnStartTime = this.nowMs();
|
|
2619
2465
|
this.todoSnapshot = [];
|
|
@@ -3098,10 +2944,19 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
3098
2944
|
this.closeOptionPicker();
|
|
3099
2945
|
resolve(item.value);
|
|
3100
2946
|
};
|
|
2947
|
+
selectList.onCancel = () => {
|
|
2948
|
+
this.cancelOptionPicker();
|
|
2949
|
+
};
|
|
3101
2950
|
});
|
|
2951
|
+
if (!selected) {
|
|
2952
|
+
return answers;
|
|
2953
|
+
}
|
|
3102
2954
|
answers[q.question] = selected;
|
|
3103
2955
|
} else {
|
|
3104
2956
|
const answer = await this.waitForInput();
|
|
2957
|
+
if (!answer) {
|
|
2958
|
+
return answers;
|
|
2959
|
+
}
|
|
3105
2960
|
answers[q.question] = answer;
|
|
3106
2961
|
}
|
|
3107
2962
|
}
|
|
@@ -3113,6 +2968,9 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
3113
2968
|
* Returns session result when the agent turn is complete.
|
|
3114
2969
|
*/
|
|
3115
2970
|
handleMessage(message) {
|
|
2971
|
+
if (this.wasInterrupted && message.type !== "result") {
|
|
2972
|
+
return void 0;
|
|
2973
|
+
}
|
|
3116
2974
|
switch (message.type) {
|
|
3117
2975
|
case "assistant": {
|
|
3118
2976
|
let isCapMessage = false;
|
|
@@ -3214,32 +3072,11 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
3214
3072
|
}
|
|
3215
3073
|
case "result": {
|
|
3216
3074
|
this.hideLoader();
|
|
3217
|
-
if (message.subtype === "error_max_turns") {
|
|
3218
|
-
return {
|
|
3219
|
-
type: "max_turns",
|
|
3220
|
-
sessionId: message.session_id,
|
|
3221
|
-
numTurns: message.num_turns
|
|
3222
|
-
};
|
|
3223
|
-
}
|
|
3224
3075
|
if (this.usageCapReached) {
|
|
3225
3076
|
return { type: "result", sessionId: message.session_id, success: false };
|
|
3226
3077
|
}
|
|
3227
3078
|
if (this.wasInterrupted) {
|
|
3228
|
-
|
|
3229
|
-
this.messages.addChild(
|
|
3230
|
-
new Text(
|
|
3231
|
-
"\n " + chalk.yellow("⏺") + " " + chalk.yellow(__("Interrupted")),
|
|
3232
|
-
0,
|
|
3233
|
-
0
|
|
3234
|
-
)
|
|
3235
|
-
);
|
|
3236
|
-
this.showInfo(
|
|
3237
|
-
sprintf(
|
|
3238
|
-
/* translators: %d: number of seconds */
|
|
3239
|
-
__("Ran for %ds before interruption"),
|
|
3240
|
-
thinkingSec2
|
|
3241
|
-
)
|
|
3242
|
-
);
|
|
3079
|
+
this.showInterruptedNotice();
|
|
3243
3080
|
return {
|
|
3244
3081
|
type: "result",
|
|
3245
3082
|
sessionId: message.session_id,
|
|
@@ -3304,108 +3141,1533 @@ ${chalk.hex("#8839ef")(label)}
|
|
|
3304
3141
|
return void 0;
|
|
3305
3142
|
}
|
|
3306
3143
|
}
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
return error instanceof Error && ["AbortPromptError", "CancelPromptError", "ExitPromptError"].includes(error.name);
|
|
3144
|
+
function isRemoteSessionEnabled() {
|
|
3145
|
+
return process.env.STUDIO_ENABLE_REMOTE_SESSION === "true";
|
|
3310
3146
|
}
|
|
3311
|
-
|
|
3312
|
-
|
|
3313
|
-
|
|
3147
|
+
const remoteSessionConfigSchema = z.object({
|
|
3148
|
+
base_url: z.string().url().default("https://public-api.wordpress.com/wpcom/v2/telegram-bot"),
|
|
3149
|
+
// `token` is the only required field; if omitted everywhere, falls back to the
|
|
3150
|
+
// WordPress.com OAuth access token from ~/.studio/shared.json (i.e. /login).
|
|
3151
|
+
token: z.string().min(1),
|
|
3152
|
+
// Optional pinning. When set, `chat_id` filters polled messages and `bot` overrides
|
|
3153
|
+
// the per-message bot identity for outgoing replies. When unset, the controller
|
|
3154
|
+
// trusts the server's per-token authorization and echoes chat_id + bot from each
|
|
3155
|
+
// polled message back into the response.
|
|
3156
|
+
bot: z.string().min(1).optional(),
|
|
3157
|
+
chat_id: z.number().int().optional(),
|
|
3158
|
+
poll_interval_seconds: z.number().positive().default(2),
|
|
3159
|
+
long_poll_timeout_seconds: z.number().positive().default(25),
|
|
3160
|
+
max_message_chars: z.number().int().positive().max(4096).default(3800),
|
|
3161
|
+
turn_timeout_seconds: z.number().positive().default(900)
|
|
3162
|
+
});
|
|
3163
|
+
class RemoteSessionConfigError extends Error {
|
|
3164
|
+
constructor(message, missingFields = []) {
|
|
3165
|
+
super(message);
|
|
3166
|
+
this.missingFields = missingFields;
|
|
3167
|
+
this.name = "RemoteSessionConfigError";
|
|
3314
3168
|
}
|
|
3315
|
-
return String(error);
|
|
3316
3169
|
}
|
|
3317
|
-
|
|
3318
|
-
const
|
|
3319
|
-
|
|
3320
|
-
|
|
3321
|
-
let currentProvider = resumeContext.provider ?? await resolveInitialAiProvider();
|
|
3322
|
-
let currentModel = resumeContext.model ?? DEFAULT_MODEL;
|
|
3323
|
-
ui.currentProvider = currentProvider;
|
|
3324
|
-
ui.currentModel = currentModel;
|
|
3325
|
-
if (options.activeSite) {
|
|
3326
|
-
ui.activeSite = {
|
|
3327
|
-
name: options.activeSite.name,
|
|
3328
|
-
path: options.activeSite.path,
|
|
3329
|
-
running: options.activeSite.running ?? false,
|
|
3330
|
-
remote: options.activeSite.remote,
|
|
3331
|
-
url: options.activeSite.url,
|
|
3332
|
-
wpcomSiteId: options.activeSite.wpcomSiteId
|
|
3333
|
-
};
|
|
3170
|
+
function readEnvOverrides() {
|
|
3171
|
+
const overrides = {};
|
|
3172
|
+
if (process.env.STUDIO_REMOTE_BASE_URL) {
|
|
3173
|
+
overrides.base_url = process.env.STUDIO_REMOTE_BASE_URL;
|
|
3334
3174
|
}
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
if (options.showLegacyCommandNotice && !isJsonMode) {
|
|
3338
|
-
ui.showInfo(__('ⓘ The "studio ai" command is now "studio code".'));
|
|
3175
|
+
if (process.env.STUDIO_REMOTE_TOKEN) {
|
|
3176
|
+
overrides.token = process.env.STUDIO_REMOTE_TOKEN;
|
|
3339
3177
|
}
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
let sessionId = options.resumeSessionId ?? resumeContext.sessionId;
|
|
3343
|
-
let persistQueue = Promise.resolve();
|
|
3344
|
-
if (options.noSessionPersistence) {
|
|
3345
|
-
ui.showInfo(__("Session persistence disabled (--no-session-persistence)."));
|
|
3178
|
+
if (process.env.STUDIO_REMOTE_BOT) {
|
|
3179
|
+
overrides.bot = process.env.STUDIO_REMOTE_BOT;
|
|
3346
3180
|
}
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3181
|
+
if (process.env.STUDIO_REMOTE_CHAT_ID) {
|
|
3182
|
+
const parsed = Number(process.env.STUDIO_REMOTE_CHAT_ID);
|
|
3183
|
+
if (Number.isFinite(parsed)) {
|
|
3184
|
+
overrides.chat_id = parsed;
|
|
3350
3185
|
}
|
|
3351
|
-
|
|
3352
|
-
|
|
3186
|
+
}
|
|
3187
|
+
return overrides;
|
|
3188
|
+
}
|
|
3189
|
+
async function readConfigFile() {
|
|
3190
|
+
const configPath = getRemoteSessionConfigPath();
|
|
3191
|
+
if (!fs__default.existsSync(configPath)) {
|
|
3192
|
+
return {};
|
|
3193
|
+
}
|
|
3194
|
+
try {
|
|
3195
|
+
const content = await readFile(configPath, { encoding: "utf8" });
|
|
3196
|
+
const parsed = JSON.parse(content);
|
|
3197
|
+
return parsed && typeof parsed === "object" ? parsed : {};
|
|
3198
|
+
} catch {
|
|
3199
|
+
return {};
|
|
3200
|
+
}
|
|
3201
|
+
}
|
|
3202
|
+
async function loadRemoteSessionConfig(cliOverrides = {}) {
|
|
3203
|
+
const fileValues = await readConfigFile();
|
|
3204
|
+
const envOverrides = readEnvOverrides();
|
|
3205
|
+
const merged = {
|
|
3206
|
+
...fileValues,
|
|
3207
|
+
...envOverrides,
|
|
3208
|
+
...cliOverrides
|
|
3209
|
+
};
|
|
3210
|
+
if (typeof merged.token !== "string" || merged.token.length === 0) {
|
|
3211
|
+
const stored = await readAuthToken();
|
|
3212
|
+
if (stored?.accessToken) {
|
|
3213
|
+
merged.token = stored.accessToken;
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3216
|
+
const parseResult = remoteSessionConfigSchema.safeParse(merged);
|
|
3217
|
+
if (parseResult.success) {
|
|
3218
|
+
return parseResult.data;
|
|
3219
|
+
}
|
|
3220
|
+
const missing = [];
|
|
3221
|
+
for (const issue of parseResult.error.issues) {
|
|
3222
|
+
const field = issue.path[0];
|
|
3223
|
+
if (typeof field === "string" && !missing.includes(field)) {
|
|
3224
|
+
missing.push(field);
|
|
3353
3225
|
}
|
|
3226
|
+
}
|
|
3227
|
+
const required = ["token"].filter((f) => missing.includes(f));
|
|
3228
|
+
if (required.length > 0) {
|
|
3229
|
+
throw new RemoteSessionConfigError(
|
|
3230
|
+
`Remote session needs a bearer token to authenticate to ${"/local-agent-poll"}. Run \`studio code\` and \`/login\` to authenticate to WordPress.com, or set STUDIO_REMOTE_TOKEN, or put a "token" field in ~/.studio/remote-session.json.`,
|
|
3231
|
+
required
|
|
3232
|
+
);
|
|
3233
|
+
}
|
|
3234
|
+
throw new RemoteSessionConfigError(
|
|
3235
|
+
`Remote session config is invalid: ${parseResult.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ")}`,
|
|
3236
|
+
[]
|
|
3237
|
+
);
|
|
3238
|
+
}
|
|
3239
|
+
const MAX_LOG_SIZE_BYTES = 10 * 1024 * 1024;
|
|
3240
|
+
const MAX_LOG_ROTATIONS = 3;
|
|
3241
|
+
const BEARER_PATTERN = /Bearer\s+[A-Za-z0-9._\-+/=]+/g;
|
|
3242
|
+
const TOKEN_FIELD_PATTERN = /"token"\s*:\s*"[^"]*"/g;
|
|
3243
|
+
function redact(input) {
|
|
3244
|
+
return input.replace(BEARER_PATTERN, "Bearer [redacted]").replace(TOKEN_FIELD_PATTERN, '"token":"[redacted]"');
|
|
3245
|
+
}
|
|
3246
|
+
function shouldLogDebug() {
|
|
3247
|
+
return process.env.STUDIO_REMOTE_DEBUG === "1";
|
|
3248
|
+
}
|
|
3249
|
+
function rotateIfNeeded(logPath) {
|
|
3250
|
+
let size;
|
|
3251
|
+
try {
|
|
3252
|
+
size = fs__default.statSync(logPath).size;
|
|
3253
|
+
} catch {
|
|
3254
|
+
return;
|
|
3255
|
+
}
|
|
3256
|
+
if (size < MAX_LOG_SIZE_BYTES) {
|
|
3257
|
+
return;
|
|
3258
|
+
}
|
|
3259
|
+
const oldest = `${logPath}.${MAX_LOG_ROTATIONS}`;
|
|
3260
|
+
try {
|
|
3261
|
+
fs__default.rmSync(oldest, { force: true });
|
|
3262
|
+
} catch {
|
|
3263
|
+
}
|
|
3264
|
+
for (let i = MAX_LOG_ROTATIONS - 1; i >= 1; i--) {
|
|
3265
|
+
const src = `${logPath}.${i}`;
|
|
3266
|
+
const dst = `${logPath}.${i + 1}`;
|
|
3354
3267
|
try {
|
|
3355
|
-
if (
|
|
3356
|
-
|
|
3357
|
-
sessionId: options.resumeSession.summary.id,
|
|
3358
|
-
filePath: options.resumeSession.summary.filePath,
|
|
3359
|
-
linkedAgentSessionIds: options.resumeSession.summary.linkedAgentSessionIds
|
|
3360
|
-
});
|
|
3361
|
-
} else if (options.resumeSessionId) {
|
|
3362
|
-
const sessions = await listAiSessions(getAiSessionsRootDirectory());
|
|
3363
|
-
const existing = sessions.find(
|
|
3364
|
-
(s) => s.linkedAgentSessionIds.includes(options.resumeSessionId)
|
|
3365
|
-
);
|
|
3366
|
-
if (!existing) {
|
|
3367
|
-
throw new Error(
|
|
3368
|
-
sprintf(
|
|
3369
|
-
/* translators: %s: agent session ID */
|
|
3370
|
-
__("No AI session found for resume ID: %s"),
|
|
3371
|
-
options.resumeSessionId
|
|
3372
|
-
)
|
|
3373
|
-
);
|
|
3374
|
-
}
|
|
3375
|
-
sessionRecorder = await AiSessionRecorder.open({
|
|
3376
|
-
sessionId: existing.id,
|
|
3377
|
-
filePath: existing.filePath,
|
|
3378
|
-
linkedAgentSessionIds: existing.linkedAgentSessionIds
|
|
3379
|
-
});
|
|
3380
|
-
} else {
|
|
3381
|
-
sessionRecorder = await AiSessionRecorder.create();
|
|
3268
|
+
if (fs__default.existsSync(src)) {
|
|
3269
|
+
fs__default.renameSync(src, dst);
|
|
3382
3270
|
}
|
|
3383
|
-
} catch
|
|
3384
|
-
didDisableSessionPersistence = true;
|
|
3385
|
-
ui.showError(
|
|
3386
|
-
sprintf(
|
|
3387
|
-
/* translators: %s: error message */
|
|
3388
|
-
__("Session persistence disabled: %s"),
|
|
3389
|
-
getErrorMessage(error)
|
|
3390
|
-
)
|
|
3391
|
-
);
|
|
3271
|
+
} catch {
|
|
3392
3272
|
}
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3273
|
+
}
|
|
3274
|
+
try {
|
|
3275
|
+
fs__default.renameSync(logPath, `${logPath}.1`);
|
|
3276
|
+
} catch {
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
function ensureLogDir(logPath) {
|
|
3280
|
+
try {
|
|
3281
|
+
fs__default.mkdirSync(path__default.dirname(logPath), { recursive: true });
|
|
3282
|
+
} catch {
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3285
|
+
class RemoteSessionLogger {
|
|
3286
|
+
constructor(logPath = getRemoteSessionLogPath()) {
|
|
3287
|
+
this.logPath = logPath;
|
|
3288
|
+
}
|
|
3289
|
+
write(level, message, meta) {
|
|
3290
|
+
if (level === "debug" && !shouldLogDebug()) {
|
|
3291
|
+
return;
|
|
3292
|
+
}
|
|
3293
|
+
ensureLogDir(this.logPath);
|
|
3294
|
+
rotateIfNeeded(this.logPath);
|
|
3295
|
+
const line = JSON.stringify({
|
|
3296
|
+
t: (/* @__PURE__ */ new Date()).toISOString(),
|
|
3297
|
+
level,
|
|
3298
|
+
msg: redact(message),
|
|
3299
|
+
...meta ? { meta: JSON.parse(redact(JSON.stringify(meta))) } : {}
|
|
3300
|
+
}) + "\n";
|
|
3301
|
+
try {
|
|
3302
|
+
fs__default.appendFileSync(this.logPath, line, { encoding: "utf8" });
|
|
3303
|
+
} catch {
|
|
3304
|
+
}
|
|
3305
|
+
}
|
|
3306
|
+
debug(message, meta) {
|
|
3307
|
+
this.write("debug", message, meta);
|
|
3308
|
+
}
|
|
3309
|
+
info(message, meta) {
|
|
3310
|
+
this.write("info", message, meta);
|
|
3311
|
+
}
|
|
3312
|
+
warn(message, meta) {
|
|
3313
|
+
this.write("warn", message, meta);
|
|
3314
|
+
}
|
|
3315
|
+
error(message, meta) {
|
|
3316
|
+
this.write("error", message, meta);
|
|
3317
|
+
}
|
|
3318
|
+
}
|
|
3319
|
+
const DEFAULT_INTERVAL_MS = 1e4;
|
|
3320
|
+
const DEFAULT_MAX_CHARS = 200;
|
|
3321
|
+
class ProgressStreamer {
|
|
3322
|
+
constructor(options) {
|
|
3323
|
+
this.timer = null;
|
|
3324
|
+
this.pending = null;
|
|
3325
|
+
this.lastPostAt = Number.NEGATIVE_INFINITY;
|
|
3326
|
+
this.disposed = false;
|
|
3327
|
+
this.onEvent = (event) => {
|
|
3328
|
+
if (this.disposed) {
|
|
3399
3329
|
return;
|
|
3400
3330
|
}
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
}
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3331
|
+
if (event.type !== "info" && event.type !== "progress") {
|
|
3332
|
+
return;
|
|
3333
|
+
}
|
|
3334
|
+
if (typeof event.message !== "string" || event.message.trim().length === 0) {
|
|
3335
|
+
return;
|
|
3336
|
+
}
|
|
3337
|
+
const formatted = this.format(event.message);
|
|
3338
|
+
const now = this.deps.now();
|
|
3339
|
+
const sinceLast = now - this.lastPostAt;
|
|
3340
|
+
if (sinceLast >= this.intervalMs) {
|
|
3341
|
+
if (this.timer !== null) {
|
|
3342
|
+
this.deps.clearTimeout(this.timer);
|
|
3343
|
+
this.timer = null;
|
|
3344
|
+
}
|
|
3345
|
+
this.pending = null;
|
|
3346
|
+
this.post(formatted);
|
|
3347
|
+
return;
|
|
3348
|
+
}
|
|
3349
|
+
this.pending = formatted;
|
|
3350
|
+
if (this.timer === null) {
|
|
3351
|
+
const wait = Math.max(0, this.intervalMs - sinceLast);
|
|
3352
|
+
this.timer = this.deps.setTimeout(() => this.flushPending(), wait);
|
|
3353
|
+
}
|
|
3354
|
+
};
|
|
3355
|
+
this.config = options.config;
|
|
3356
|
+
this.target = options.target;
|
|
3357
|
+
this.deps = {
|
|
3358
|
+
...options.deps,
|
|
3359
|
+
setTimeout: options.deps.setTimeout ?? setTimeout,
|
|
3360
|
+
clearTimeout: options.deps.clearTimeout ?? clearTimeout,
|
|
3361
|
+
now: options.deps.now ?? (() => Date.now())
|
|
3362
|
+
};
|
|
3363
|
+
this.intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
3364
|
+
this.maxChars = options.maxChars ?? DEFAULT_MAX_CHARS;
|
|
3365
|
+
}
|
|
3366
|
+
stop() {
|
|
3367
|
+
this.disposed = true;
|
|
3368
|
+
if (this.timer !== null) {
|
|
3369
|
+
this.deps.clearTimeout(this.timer);
|
|
3370
|
+
this.timer = null;
|
|
3371
|
+
}
|
|
3372
|
+
this.pending = null;
|
|
3373
|
+
}
|
|
3374
|
+
flushPending() {
|
|
3375
|
+
this.timer = null;
|
|
3376
|
+
if (this.disposed) {
|
|
3377
|
+
return;
|
|
3378
|
+
}
|
|
3379
|
+
if (this.pending === null) {
|
|
3380
|
+
return;
|
|
3381
|
+
}
|
|
3382
|
+
const message = this.pending;
|
|
3383
|
+
this.pending = null;
|
|
3384
|
+
this.post(message);
|
|
3385
|
+
}
|
|
3386
|
+
post(text) {
|
|
3387
|
+
this.lastPostAt = this.deps.now();
|
|
3388
|
+
this.deps.respond(
|
|
3389
|
+
this.config,
|
|
3390
|
+
{ chatId: this.target.chatId, bot: this.target.bot, text },
|
|
3391
|
+
{ logger: this.deps.logger, maxRetries: 0 }
|
|
3392
|
+
).catch((error) => {
|
|
3393
|
+
this.deps.logger.warn("Progress post failed", {
|
|
3394
|
+
chat_id: this.target.chatId,
|
|
3395
|
+
error: error.message
|
|
3396
|
+
});
|
|
3397
|
+
});
|
|
3398
|
+
}
|
|
3399
|
+
format(raw) {
|
|
3400
|
+
const oneLine = raw.replace(/\s+/g, " ").trim();
|
|
3401
|
+
const truncated = oneLine.length > this.maxChars ? `${oneLine.slice(0, this.maxChars - 1)}…` : oneLine;
|
|
3402
|
+
return `⏳ ${truncated}`;
|
|
3403
|
+
}
|
|
3404
|
+
}
|
|
3405
|
+
const OPTION_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
3406
|
+
const ANSI_ESCAPE_PATTERN = new RegExp(String.fromCharCode(27) + "\\[[0-9;?]*[A-Za-z]", "g");
|
|
3407
|
+
function extractReply(input) {
|
|
3408
|
+
const stripped = input.replyText ? stripAnsi(input.replyText).trim() : "";
|
|
3409
|
+
const hasQuestions = input.questions && input.questions.length > 0;
|
|
3410
|
+
if (!hasQuestions) {
|
|
3411
|
+
if (!stripped) {
|
|
3412
|
+
return null;
|
|
3413
|
+
}
|
|
3414
|
+
return input.isError ? `⚠️ ${stripped}` : stripped;
|
|
3415
|
+
}
|
|
3416
|
+
const formattedQuestions = formatQuestions(input.questions);
|
|
3417
|
+
if (stripped) {
|
|
3418
|
+
return `${stripped}
|
|
3419
|
+
|
|
3420
|
+
${formattedQuestions}`;
|
|
3421
|
+
}
|
|
3422
|
+
return formattedQuestions;
|
|
3423
|
+
}
|
|
3424
|
+
function formatQuestions(questions) {
|
|
3425
|
+
if (questions.length === 1) {
|
|
3426
|
+
return formatSingleQuestion(questions[0]);
|
|
3427
|
+
}
|
|
3428
|
+
return questions.map((q, idx) => `${idx + 1}. ${formatSingleQuestion(q)}`).join("\n\n");
|
|
3429
|
+
}
|
|
3430
|
+
function formatSingleQuestion(q) {
|
|
3431
|
+
const header = `**${q.question.trim()}**`;
|
|
3432
|
+
const lines = q.options.map((option, idx) => {
|
|
3433
|
+
const letter = OPTION_LETTERS[idx] ?? String(idx + 1);
|
|
3434
|
+
const label = option.label.trim();
|
|
3435
|
+
const description = option.description?.trim() ?? "";
|
|
3436
|
+
if (description && description !== label) {
|
|
3437
|
+
return `- ${letter}) ${label} — ${description}`;
|
|
3438
|
+
}
|
|
3439
|
+
return `- ${letter}) ${label}`;
|
|
3440
|
+
});
|
|
3441
|
+
lines.push('- _Or reply with anything else for "Other"._');
|
|
3442
|
+
return `${header}
|
|
3443
|
+
|
|
3444
|
+
${lines.join("\n")}`;
|
|
3445
|
+
}
|
|
3446
|
+
function stripAnsi(input) {
|
|
3447
|
+
return input.replace(ANSI_ESCAPE_PATTERN, "");
|
|
3448
|
+
}
|
|
3449
|
+
function chunkReply(text, maxChars) {
|
|
3450
|
+
if (text.length <= maxChars) {
|
|
3451
|
+
return [text];
|
|
3452
|
+
}
|
|
3453
|
+
const segments = splitPreservingFences(text);
|
|
3454
|
+
const chunks = [];
|
|
3455
|
+
let current = "";
|
|
3456
|
+
const flush = () => {
|
|
3457
|
+
if (current) {
|
|
3458
|
+
chunks.push(current);
|
|
3459
|
+
current = "";
|
|
3460
|
+
}
|
|
3461
|
+
};
|
|
3462
|
+
for (const segment of segments) {
|
|
3463
|
+
if (segment.isCode) {
|
|
3464
|
+
if (segment.text.length > maxChars) {
|
|
3465
|
+
flush();
|
|
3466
|
+
chunks.push(...splitLongCodeBlock(segment.text, maxChars));
|
|
3467
|
+
continue;
|
|
3468
|
+
}
|
|
3469
|
+
if (current.length + (current ? 2 : 0) + segment.text.length > maxChars) {
|
|
3470
|
+
flush();
|
|
3471
|
+
}
|
|
3472
|
+
current = current ? `${current}
|
|
3473
|
+
|
|
3474
|
+
${segment.text}` : segment.text;
|
|
3475
|
+
continue;
|
|
3476
|
+
}
|
|
3477
|
+
const pieces = splitPlainText(segment.text, maxChars);
|
|
3478
|
+
for (const piece of pieces) {
|
|
3479
|
+
if (!piece) {
|
|
3480
|
+
continue;
|
|
3481
|
+
}
|
|
3482
|
+
if (current.length + (current ? 2 : 0) + piece.length > maxChars) {
|
|
3483
|
+
flush();
|
|
3484
|
+
}
|
|
3485
|
+
current = current ? `${current}
|
|
3486
|
+
|
|
3487
|
+
${piece}` : piece;
|
|
3488
|
+
}
|
|
3489
|
+
}
|
|
3490
|
+
flush();
|
|
3491
|
+
return chunks.length > 0 ? chunks : [text.slice(0, maxChars)];
|
|
3492
|
+
}
|
|
3493
|
+
function splitPreservingFences(input) {
|
|
3494
|
+
const segments = [];
|
|
3495
|
+
const fencePattern = /```[^\n]*\n[\s\S]*?```/g;
|
|
3496
|
+
let cursor = 0;
|
|
3497
|
+
let match;
|
|
3498
|
+
while ((match = fencePattern.exec(input)) !== null) {
|
|
3499
|
+
if (match.index > cursor) {
|
|
3500
|
+
segments.push({ text: input.slice(cursor, match.index), isCode: false });
|
|
3501
|
+
}
|
|
3502
|
+
segments.push({ text: match[0], isCode: true });
|
|
3503
|
+
cursor = match.index + match[0].length;
|
|
3504
|
+
}
|
|
3505
|
+
if (cursor < input.length) {
|
|
3506
|
+
segments.push({ text: input.slice(cursor), isCode: false });
|
|
3507
|
+
}
|
|
3508
|
+
return segments;
|
|
3509
|
+
}
|
|
3510
|
+
function splitLongCodeBlock(block, maxChars) {
|
|
3511
|
+
const firstNewline = block.indexOf("\n");
|
|
3512
|
+
const header = firstNewline === -1 ? "```" : block.slice(0, firstNewline).trim();
|
|
3513
|
+
const body = block.replace(/^```[^\n]*\n?/, "").replace(/\n?```\s*$/, "");
|
|
3514
|
+
const overhead = header.length + 20;
|
|
3515
|
+
const inner = Math.max(1, maxChars - overhead);
|
|
3516
|
+
const lines = body.split("\n");
|
|
3517
|
+
const slices = [];
|
|
3518
|
+
let buf = "";
|
|
3519
|
+
for (const line of lines) {
|
|
3520
|
+
if (buf.length + line.length + 1 > inner) {
|
|
3521
|
+
if (buf) {
|
|
3522
|
+
slices.push(buf);
|
|
3523
|
+
buf = "";
|
|
3524
|
+
}
|
|
3525
|
+
if (line.length > inner) {
|
|
3526
|
+
for (let i = 0; i < line.length; i += inner) {
|
|
3527
|
+
slices.push(line.slice(i, i + inner));
|
|
3528
|
+
}
|
|
3529
|
+
continue;
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
buf = buf ? `${buf}
|
|
3533
|
+
${line}` : line;
|
|
3534
|
+
}
|
|
3535
|
+
if (buf) {
|
|
3536
|
+
slices.push(buf);
|
|
3537
|
+
}
|
|
3538
|
+
const total = slices.length;
|
|
3539
|
+
return slices.map((slice, idx) => {
|
|
3540
|
+
const label = `(part ${idx + 1}/${total})`;
|
|
3541
|
+
return `${header}
|
|
3542
|
+
${label}
|
|
3543
|
+
${slice}
|
|
3544
|
+
\`\`\``;
|
|
3545
|
+
});
|
|
3546
|
+
}
|
|
3547
|
+
function splitPlainText(input, maxChars) {
|
|
3548
|
+
if (input.length <= maxChars) {
|
|
3549
|
+
return [input];
|
|
3550
|
+
}
|
|
3551
|
+
const paragraphs = input.split(/\n\n+/);
|
|
3552
|
+
const results = [];
|
|
3553
|
+
for (const para of paragraphs) {
|
|
3554
|
+
if (para.length <= maxChars) {
|
|
3555
|
+
results.push(para);
|
|
3556
|
+
continue;
|
|
3557
|
+
}
|
|
3558
|
+
const sentences = para.split(/(?<=[.!?])\s+/);
|
|
3559
|
+
let buf = "";
|
|
3560
|
+
for (const sentence of sentences) {
|
|
3561
|
+
if (sentence.length > maxChars) {
|
|
3562
|
+
if (buf) {
|
|
3563
|
+
results.push(buf);
|
|
3564
|
+
buf = "";
|
|
3565
|
+
}
|
|
3566
|
+
for (let i = 0; i < sentence.length; i += maxChars) {
|
|
3567
|
+
results.push(sentence.slice(i, i + maxChars));
|
|
3568
|
+
}
|
|
3569
|
+
continue;
|
|
3570
|
+
}
|
|
3571
|
+
if (buf.length + sentence.length + 1 > maxChars) {
|
|
3572
|
+
results.push(buf);
|
|
3573
|
+
buf = sentence;
|
|
3574
|
+
} else {
|
|
3575
|
+
buf = buf ? `${buf} ${sentence}` : sentence;
|
|
3576
|
+
}
|
|
3577
|
+
}
|
|
3578
|
+
if (buf) {
|
|
3579
|
+
results.push(buf);
|
|
3580
|
+
}
|
|
3581
|
+
}
|
|
3582
|
+
return results;
|
|
3583
|
+
}
|
|
3584
|
+
const remoteSessionStateSchema = z.object({
|
|
3585
|
+
chat_id: z.number().int(),
|
|
3586
|
+
session_id: z.string().min(1).optional(),
|
|
3587
|
+
updated_at: z.string().optional()
|
|
3588
|
+
});
|
|
3589
|
+
async function readStateUnlocked() {
|
|
3590
|
+
const statePath = getRemoteSessionStatePath();
|
|
3591
|
+
if (!fs__default.existsSync(statePath)) {
|
|
3592
|
+
return null;
|
|
3593
|
+
}
|
|
3594
|
+
try {
|
|
3595
|
+
const content = await readFile(statePath, { encoding: "utf8" });
|
|
3596
|
+
return remoteSessionStateSchema.parse(JSON.parse(content));
|
|
3597
|
+
} catch {
|
|
3598
|
+
return null;
|
|
3599
|
+
}
|
|
3600
|
+
}
|
|
3601
|
+
async function writeStateUnlocked(state) {
|
|
3602
|
+
const statePath = getRemoteSessionStatePath();
|
|
3603
|
+
const content = JSON.stringify(state, null, 2) + "\n";
|
|
3604
|
+
await writeFile(statePath, content, { encoding: "utf8", mode: 384 });
|
|
3605
|
+
try {
|
|
3606
|
+
await fs__default.promises.chmod(statePath, 384);
|
|
3607
|
+
} catch {
|
|
3608
|
+
}
|
|
3609
|
+
}
|
|
3610
|
+
async function withStateLock(fn) {
|
|
3611
|
+
const lockPath = getRemoteSessionStateLockFilePath();
|
|
3612
|
+
await lockFileAsync(lockPath, {
|
|
3613
|
+
wait: LOCKFILE_WAIT_TIME,
|
|
3614
|
+
stale: LOCKFILE_STALE_TIME
|
|
3615
|
+
});
|
|
3616
|
+
try {
|
|
3617
|
+
return await fn();
|
|
3618
|
+
} finally {
|
|
3619
|
+
await unlockFileAsync(lockPath);
|
|
3620
|
+
}
|
|
3621
|
+
}
|
|
3622
|
+
async function readStateForChat(chatId) {
|
|
3623
|
+
return withStateLock(async () => {
|
|
3624
|
+
const state = await readStateUnlocked();
|
|
3625
|
+
if (!state || state.chat_id !== chatId) {
|
|
3626
|
+
return null;
|
|
3627
|
+
}
|
|
3628
|
+
return state;
|
|
3629
|
+
});
|
|
3630
|
+
}
|
|
3631
|
+
async function writeSessionId(chatId, sessionId) {
|
|
3632
|
+
await withStateLock(async () => {
|
|
3633
|
+
const next = {
|
|
3634
|
+
chat_id: chatId,
|
|
3635
|
+
session_id: sessionId,
|
|
3636
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
3637
|
+
};
|
|
3638
|
+
await writeStateUnlocked(next);
|
|
3639
|
+
});
|
|
3640
|
+
}
|
|
3641
|
+
async function clearSessionId(chatId) {
|
|
3642
|
+
await withStateLock(async () => {
|
|
3643
|
+
const next = {
|
|
3644
|
+
chat_id: chatId,
|
|
3645
|
+
updated_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
3646
|
+
};
|
|
3647
|
+
await writeStateUnlocked(next);
|
|
3648
|
+
});
|
|
3649
|
+
}
|
|
3650
|
+
class TelegramAuthError extends Error {
|
|
3651
|
+
constructor(status) {
|
|
3652
|
+
super(`Telegram server returned auth error (HTTP ${status})`);
|
|
3653
|
+
this.status = status;
|
|
3654
|
+
this.name = "TelegramAuthError";
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
class TelegramTransientError extends Error {
|
|
3658
|
+
constructor(message, status) {
|
|
3659
|
+
super(message);
|
|
3660
|
+
this.status = status;
|
|
3661
|
+
this.name = "TelegramTransientError";
|
|
3662
|
+
}
|
|
3663
|
+
}
|
|
3664
|
+
class TelegramBadRequestError extends Error {
|
|
3665
|
+
constructor(message, status) {
|
|
3666
|
+
super(message);
|
|
3667
|
+
this.status = status;
|
|
3668
|
+
this.name = "TelegramBadRequestError";
|
|
3669
|
+
}
|
|
3670
|
+
}
|
|
3671
|
+
function assertSameHost(urlString, allowedHost) {
|
|
3672
|
+
const u = new URL(urlString);
|
|
3673
|
+
if (u.host !== allowedHost) {
|
|
3674
|
+
throw new TelegramTransientError(
|
|
3675
|
+
`Refusing to follow redirect to different host: ${u.host} (allowed: ${allowedHost})`
|
|
3676
|
+
);
|
|
3677
|
+
}
|
|
3678
|
+
}
|
|
3679
|
+
function normalizeBase(base) {
|
|
3680
|
+
return new URL(base.endsWith("/") ? base : `${base}/`);
|
|
3681
|
+
}
|
|
3682
|
+
function buildUrl(baseUrl, pathName) {
|
|
3683
|
+
const base = normalizeBase(baseUrl);
|
|
3684
|
+
const joined = new URL(pathName.replace(/^\//, ""), base);
|
|
3685
|
+
return joined.toString();
|
|
3686
|
+
}
|
|
3687
|
+
async function pollMessages(config, signal, context = {}) {
|
|
3688
|
+
const url = buildUrl(config.base_url, "local-agent-poll");
|
|
3689
|
+
const allowedHost = new URL(config.base_url).host;
|
|
3690
|
+
assertSameHost(url, allowedHost);
|
|
3691
|
+
const controller = new AbortController();
|
|
3692
|
+
const timeoutId = setTimeout(() => controller.abort(), config.long_poll_timeout_seconds * 1e3);
|
|
3693
|
+
const composite = composeSignals(signal, controller.signal);
|
|
3694
|
+
const startedAt = Date.now();
|
|
3695
|
+
context.logger?.debug("Poll start", { url });
|
|
3696
|
+
let response;
|
|
3697
|
+
try {
|
|
3698
|
+
response = await fetch(url, {
|
|
3699
|
+
method: "GET",
|
|
3700
|
+
headers: {
|
|
3701
|
+
Authorization: `Bearer ${config.token}`,
|
|
3702
|
+
Accept: "application/json"
|
|
3703
|
+
},
|
|
3704
|
+
redirect: "manual",
|
|
3705
|
+
signal: composite
|
|
3706
|
+
});
|
|
3707
|
+
} catch (error) {
|
|
3708
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
3709
|
+
if (signal?.aborted) {
|
|
3710
|
+
throw error;
|
|
3711
|
+
}
|
|
3712
|
+
context.logger?.debug("Poll timed out", {
|
|
3713
|
+
duration_ms: Date.now() - startedAt
|
|
3714
|
+
});
|
|
3715
|
+
return [];
|
|
3716
|
+
}
|
|
3717
|
+
const message = error.message ?? "unknown";
|
|
3718
|
+
context.logger?.warn("Poll network error", { error: message });
|
|
3719
|
+
throw new TelegramTransientError(`Network error polling Telegram: ${message}`);
|
|
3720
|
+
} finally {
|
|
3721
|
+
clearTimeout(timeoutId);
|
|
3722
|
+
}
|
|
3723
|
+
if (response.status === 401 || response.status === 403) {
|
|
3724
|
+
context.logger?.error("Poll auth error", { status: response.status });
|
|
3725
|
+
throw new TelegramAuthError(response.status);
|
|
3726
|
+
}
|
|
3727
|
+
if (response.status >= 500) {
|
|
3728
|
+
context.logger?.warn("Poll 5xx", { status: response.status });
|
|
3729
|
+
throw new TelegramTransientError(`Poll returned ${response.status}`, response.status);
|
|
3730
|
+
}
|
|
3731
|
+
if (response.status === 204) {
|
|
3732
|
+
context.logger?.debug("Poll 204 (no messages)", {
|
|
3733
|
+
duration_ms: Date.now() - startedAt
|
|
3734
|
+
});
|
|
3735
|
+
return [];
|
|
3736
|
+
}
|
|
3737
|
+
if (response.status >= 300 && response.status < 400) {
|
|
3738
|
+
context.logger?.warn("Poll redirect", { status: response.status });
|
|
3739
|
+
throw new TelegramTransientError(
|
|
3740
|
+
`Unexpected redirect from poll endpoint: HTTP ${response.status}`,
|
|
3741
|
+
response.status
|
|
3742
|
+
);
|
|
3743
|
+
}
|
|
3744
|
+
if (!response.ok) {
|
|
3745
|
+
context.logger?.warn("Poll unexpected status", { status: response.status });
|
|
3746
|
+
throw new TelegramTransientError(
|
|
3747
|
+
`Poll returned unexpected status ${response.status}`,
|
|
3748
|
+
response.status
|
|
3749
|
+
);
|
|
3750
|
+
}
|
|
3751
|
+
const text = await response.text();
|
|
3752
|
+
if (!text.trim()) {
|
|
3753
|
+
context.logger?.debug("Poll empty body", {
|
|
3754
|
+
duration_ms: Date.now() - startedAt
|
|
3755
|
+
});
|
|
3756
|
+
return [];
|
|
3757
|
+
}
|
|
3758
|
+
let parsed;
|
|
3759
|
+
try {
|
|
3760
|
+
parsed = JSON.parse(text);
|
|
3761
|
+
} catch {
|
|
3762
|
+
context.logger?.warn("Poll body not JSON", {
|
|
3763
|
+
body_preview: text.slice(0, 200)
|
|
3764
|
+
});
|
|
3765
|
+
return [];
|
|
3766
|
+
}
|
|
3767
|
+
const messages = extractMessages(parsed);
|
|
3768
|
+
context.logger?.debug("Poll finished", {
|
|
3769
|
+
status: response.status,
|
|
3770
|
+
duration_ms: Date.now() - startedAt,
|
|
3771
|
+
messages: messages.length
|
|
3772
|
+
});
|
|
3773
|
+
return messages;
|
|
3774
|
+
}
|
|
3775
|
+
function extractMessages(payload) {
|
|
3776
|
+
if (!payload || typeof payload !== "object") {
|
|
3777
|
+
return [];
|
|
3778
|
+
}
|
|
3779
|
+
const record = payload;
|
|
3780
|
+
const candidates = Array.isArray(record.messages) ? record.messages : record.message && typeof record.message === "object" ? [record.message] : typeof record.chat_id === "number" ? [record] : [];
|
|
3781
|
+
const out = [];
|
|
3782
|
+
for (const entry of candidates) {
|
|
3783
|
+
if (!entry || typeof entry !== "object") {
|
|
3784
|
+
continue;
|
|
3785
|
+
}
|
|
3786
|
+
const e = entry;
|
|
3787
|
+
const chatId = e.chat_id;
|
|
3788
|
+
const text = typeof e.message === "string" ? e.message : typeof e.text === "string" ? e.text : void 0;
|
|
3789
|
+
if (typeof chatId !== "number" || typeof text !== "string") {
|
|
3790
|
+
continue;
|
|
3791
|
+
}
|
|
3792
|
+
const bot = typeof e.bot === "string" ? e.bot : void 0;
|
|
3793
|
+
out.push({ chat_id: chatId, text, bot });
|
|
3794
|
+
}
|
|
3795
|
+
return out;
|
|
3796
|
+
}
|
|
3797
|
+
async function respondMessage(config, params, options = {}) {
|
|
3798
|
+
const url = buildUrl(config.base_url, "local-agent-respond");
|
|
3799
|
+
const allowedHost = new URL(config.base_url).host;
|
|
3800
|
+
assertSameHost(url, allowedHost);
|
|
3801
|
+
const bot = params.bot ?? config.bot;
|
|
3802
|
+
const body = JSON.stringify({
|
|
3803
|
+
chat_id: params.chatId,
|
|
3804
|
+
text: params.text,
|
|
3805
|
+
bot
|
|
3806
|
+
});
|
|
3807
|
+
const maxRetries = options.maxRetries ?? 3;
|
|
3808
|
+
let attempt = 0;
|
|
3809
|
+
let lastError;
|
|
3810
|
+
const logger2 = options.logger;
|
|
3811
|
+
logger2?.debug("Respond start", {
|
|
3812
|
+
chat_id: params.chatId,
|
|
3813
|
+
bot,
|
|
3814
|
+
text_length: params.text.length,
|
|
3815
|
+
text_preview: params.text.slice(0, 120)
|
|
3816
|
+
});
|
|
3817
|
+
while (attempt <= maxRetries) {
|
|
3818
|
+
let response;
|
|
3819
|
+
try {
|
|
3820
|
+
response = await fetch(url, {
|
|
3821
|
+
method: "POST",
|
|
3822
|
+
headers: {
|
|
3823
|
+
Authorization: `Bearer ${config.token}`,
|
|
3824
|
+
"Content-Type": "application/json"
|
|
3825
|
+
},
|
|
3826
|
+
body,
|
|
3827
|
+
redirect: "manual",
|
|
3828
|
+
signal: options.signal
|
|
3829
|
+
});
|
|
3830
|
+
} catch (error) {
|
|
3831
|
+
lastError = error;
|
|
3832
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
3833
|
+
throw error;
|
|
3834
|
+
}
|
|
3835
|
+
logger2?.warn("Respond network error", {
|
|
3836
|
+
attempt,
|
|
3837
|
+
chat_id: params.chatId,
|
|
3838
|
+
error: error.message
|
|
3839
|
+
});
|
|
3840
|
+
await backoff(attempt);
|
|
3841
|
+
attempt++;
|
|
3842
|
+
continue;
|
|
3843
|
+
}
|
|
3844
|
+
if (response.status === 401 || response.status === 403) {
|
|
3845
|
+
logger2?.error("Respond auth error", {
|
|
3846
|
+
status: response.status,
|
|
3847
|
+
chat_id: params.chatId
|
|
3848
|
+
});
|
|
3849
|
+
throw new TelegramAuthError(response.status);
|
|
3850
|
+
}
|
|
3851
|
+
if (response.status >= 500) {
|
|
3852
|
+
logger2?.warn("Respond 5xx", { status: response.status, attempt });
|
|
3853
|
+
lastError = new TelegramTransientError(
|
|
3854
|
+
`Respond returned ${response.status}`,
|
|
3855
|
+
response.status
|
|
3856
|
+
);
|
|
3857
|
+
await backoff(attempt);
|
|
3858
|
+
attempt++;
|
|
3859
|
+
continue;
|
|
3860
|
+
}
|
|
3861
|
+
if (response.status >= 400) {
|
|
3862
|
+
const text = await safeReadText(response);
|
|
3863
|
+
logger2?.warn("Respond 4xx", {
|
|
3864
|
+
status: response.status,
|
|
3865
|
+
chat_id: params.chatId,
|
|
3866
|
+
body_preview: text.slice(0, 200)
|
|
3867
|
+
});
|
|
3868
|
+
throw new TelegramBadRequestError(
|
|
3869
|
+
`Respond returned ${response.status}${text ? `: ${text}` : ""}`,
|
|
3870
|
+
response.status
|
|
3871
|
+
);
|
|
3872
|
+
}
|
|
3873
|
+
if (!response.ok) {
|
|
3874
|
+
logger2?.warn("Respond unexpected status", { status: response.status });
|
|
3875
|
+
throw new TelegramTransientError(
|
|
3876
|
+
`Respond returned unexpected status ${response.status}`,
|
|
3877
|
+
response.status
|
|
3878
|
+
);
|
|
3879
|
+
}
|
|
3880
|
+
logger2?.debug("Respond ok", {
|
|
3881
|
+
status: response.status,
|
|
3882
|
+
chat_id: params.chatId,
|
|
3883
|
+
attempt
|
|
3884
|
+
});
|
|
3885
|
+
return;
|
|
3886
|
+
}
|
|
3887
|
+
logger2?.error("Respond failed after retries", {
|
|
3888
|
+
chat_id: params.chatId,
|
|
3889
|
+
max_retries: maxRetries
|
|
3890
|
+
});
|
|
3891
|
+
if (lastError instanceof Error) {
|
|
3892
|
+
throw lastError;
|
|
3893
|
+
}
|
|
3894
|
+
throw new TelegramTransientError("Respond failed after retries");
|
|
3895
|
+
}
|
|
3896
|
+
async function safeReadText(response) {
|
|
3897
|
+
try {
|
|
3898
|
+
return await response.text();
|
|
3899
|
+
} catch {
|
|
3900
|
+
return "";
|
|
3901
|
+
}
|
|
3902
|
+
}
|
|
3903
|
+
async function backoff(attempt) {
|
|
3904
|
+
const baseMs = Math.min(3e4, 500 * Math.pow(2, attempt));
|
|
3905
|
+
const jitter = Math.random() * 200;
|
|
3906
|
+
await new Promise((resolve) => setTimeout(resolve, baseMs + jitter));
|
|
3907
|
+
}
|
|
3908
|
+
function composeSignals(a, b) {
|
|
3909
|
+
if (!a) {
|
|
3910
|
+
return b;
|
|
3911
|
+
}
|
|
3912
|
+
if (!b) {
|
|
3913
|
+
return a;
|
|
3914
|
+
}
|
|
3915
|
+
const controller = new AbortController();
|
|
3916
|
+
const onAbort = () => controller.abort();
|
|
3917
|
+
if (a.aborted || b.aborted) {
|
|
3918
|
+
controller.abort();
|
|
3919
|
+
} else {
|
|
3920
|
+
a.addEventListener("abort", onAbort, { once: true });
|
|
3921
|
+
b.addEventListener("abort", onAbort, { once: true });
|
|
3922
|
+
}
|
|
3923
|
+
return controller.signal;
|
|
3924
|
+
}
|
|
3925
|
+
const STDERR_TAIL_BYTES = 2048;
|
|
3926
|
+
const SIGKILL_GRACE_MS = 2e3;
|
|
3927
|
+
const STALE_SESSION_PATTERNS = [
|
|
3928
|
+
/no ai session found for resume id/i,
|
|
3929
|
+
/session.*(not.?found|invalid|expired|unknown)/i,
|
|
3930
|
+
/resume.*session.*(failed|invalid)/i
|
|
3931
|
+
];
|
|
3932
|
+
function extractResultPayload(event) {
|
|
3933
|
+
const wrapped = event.message;
|
|
3934
|
+
if (!wrapped || typeof wrapped !== "object" || wrapped.type !== "result") {
|
|
3935
|
+
return null;
|
|
3936
|
+
}
|
|
3937
|
+
const isError = wrapped.is_error === true;
|
|
3938
|
+
const sessionId = typeof wrapped.session_id === "string" ? wrapped.session_id : void 0;
|
|
3939
|
+
let replyText;
|
|
3940
|
+
if (typeof wrapped.result === "string" && wrapped.result.length > 0) {
|
|
3941
|
+
replyText = wrapped.result;
|
|
3942
|
+
} else if (isError && Array.isArray(wrapped.errors)) {
|
|
3943
|
+
const msgs = wrapped.errors.filter((e) => typeof e === "string").join("\n");
|
|
3944
|
+
if (msgs.length > 0) {
|
|
3945
|
+
replyText = msgs;
|
|
3946
|
+
}
|
|
3947
|
+
}
|
|
3948
|
+
return { sessionId, replyText, isError };
|
|
3949
|
+
}
|
|
3950
|
+
function parseEvent(line) {
|
|
3951
|
+
const trimmed = line.trim();
|
|
3952
|
+
if (!trimmed) {
|
|
3953
|
+
return null;
|
|
3954
|
+
}
|
|
3955
|
+
try {
|
|
3956
|
+
const parsed = JSON.parse(trimmed);
|
|
3957
|
+
if (parsed && typeof parsed === "object" && typeof parsed.type === "string") {
|
|
3958
|
+
return parsed;
|
|
3959
|
+
}
|
|
3960
|
+
} catch {
|
|
3961
|
+
}
|
|
3962
|
+
return null;
|
|
3963
|
+
}
|
|
3964
|
+
function appendStderrTail(current, chunk) {
|
|
3965
|
+
const combined = current + chunk.toString("utf8");
|
|
3966
|
+
if (combined.length <= STDERR_TAIL_BYTES) {
|
|
3967
|
+
return combined;
|
|
3968
|
+
}
|
|
3969
|
+
return combined.slice(combined.length - STDERR_TAIL_BYTES);
|
|
3970
|
+
}
|
|
3971
|
+
function detectStaleSession(stderrTail, lastReply, isError) {
|
|
3972
|
+
const haystack = `${stderrTail}
|
|
3973
|
+
${lastReply ?? ""}`;
|
|
3974
|
+
if (!isError && !STALE_SESSION_PATTERNS.some((r) => r.test(haystack))) {
|
|
3975
|
+
return false;
|
|
3976
|
+
}
|
|
3977
|
+
return STALE_SESSION_PATTERNS.some((r) => r.test(haystack));
|
|
3978
|
+
}
|
|
3979
|
+
async function runTurn(options) {
|
|
3980
|
+
const cliEntry = options.cliEntry ?? process.argv[1];
|
|
3981
|
+
const execPath = options.execPath ?? process.execPath;
|
|
3982
|
+
const args = [cliEntry, "code", "--json", "--message-from-stdin"];
|
|
3983
|
+
if (options.sessionId) {
|
|
3984
|
+
args.push("--resume-session", options.sessionId);
|
|
3985
|
+
}
|
|
3986
|
+
const logger2 = options.logger;
|
|
3987
|
+
const logContext = options.logContext ?? {};
|
|
3988
|
+
const startedAt = Date.now();
|
|
3989
|
+
logger2?.info("Spawning studio code subprocess", {
|
|
3990
|
+
...logContext,
|
|
3991
|
+
exec: execPath,
|
|
3992
|
+
cli_entry: cliEntry,
|
|
3993
|
+
has_resume_session: options.sessionId !== void 0,
|
|
3994
|
+
session_id: options.sessionId,
|
|
3995
|
+
text_length: options.text.length,
|
|
3996
|
+
text_preview: options.text.slice(0, 120),
|
|
3997
|
+
timeout_ms: options.timeoutMs
|
|
3998
|
+
});
|
|
3999
|
+
let child;
|
|
4000
|
+
try {
|
|
4001
|
+
child = spawn(execPath, args, {
|
|
4002
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
4003
|
+
env: options.env ?? process.env,
|
|
4004
|
+
// Explicitly never use a shell — text is attacker-controlled.
|
|
4005
|
+
shell: false
|
|
4006
|
+
});
|
|
4007
|
+
} catch (error) {
|
|
4008
|
+
const message = error.message ?? "spawn failed";
|
|
4009
|
+
logger2?.error("Spawn failed", { ...logContext, error: message });
|
|
4010
|
+
return {
|
|
4011
|
+
status: "spawn_error",
|
|
4012
|
+
isError: true,
|
|
4013
|
+
stderrTail: message,
|
|
4014
|
+
exitCode: null,
|
|
4015
|
+
staleSession: false
|
|
4016
|
+
};
|
|
4017
|
+
}
|
|
4018
|
+
logger2?.debug("Subprocess spawned", { ...logContext, pid: child.pid });
|
|
4019
|
+
if (child.stdin) {
|
|
4020
|
+
child.stdin.on("error", (error) => {
|
|
4021
|
+
logger2?.warn("Subprocess stdin error", { ...logContext, error: error.message });
|
|
4022
|
+
});
|
|
4023
|
+
child.stdin.end(options.text, "utf8");
|
|
4024
|
+
}
|
|
4025
|
+
let capturedSessionId;
|
|
4026
|
+
let replyText;
|
|
4027
|
+
let isError = false;
|
|
4028
|
+
let pausedQuestions;
|
|
4029
|
+
let completedStatus;
|
|
4030
|
+
let stderrTail = "";
|
|
4031
|
+
let timedOut = false;
|
|
4032
|
+
let aborted = false;
|
|
4033
|
+
const rl = readline.createInterface({ input: child.stdout });
|
|
4034
|
+
rl.on("line", (line) => {
|
|
4035
|
+
const event = parseEvent(line);
|
|
4036
|
+
if (!event) {
|
|
4037
|
+
if (line.trim().length > 0) {
|
|
4038
|
+
logger2?.debug("Subprocess stdout (non-JSON)", {
|
|
4039
|
+
...logContext,
|
|
4040
|
+
line: line.slice(0, 500)
|
|
4041
|
+
});
|
|
4042
|
+
}
|
|
4043
|
+
return;
|
|
4044
|
+
}
|
|
4045
|
+
options.onEvent?.(event);
|
|
4046
|
+
if (event.type === "message") {
|
|
4047
|
+
const extracted = extractResultPayload(event);
|
|
4048
|
+
if (extracted) {
|
|
4049
|
+
if (extracted.sessionId) {
|
|
4050
|
+
capturedSessionId = extracted.sessionId;
|
|
4051
|
+
}
|
|
4052
|
+
if (extracted.replyText) {
|
|
4053
|
+
replyText = extracted.replyText;
|
|
4054
|
+
}
|
|
4055
|
+
isError = isError || extracted.isError;
|
|
4056
|
+
logger2?.debug("Event: message/result", {
|
|
4057
|
+
...logContext,
|
|
4058
|
+
session_id: extracted.sessionId,
|
|
4059
|
+
is_error: extracted.isError,
|
|
4060
|
+
result_chars: extracted.replyText?.length ?? 0
|
|
4061
|
+
});
|
|
4062
|
+
} else {
|
|
4063
|
+
logger2?.debug("Event: message", { ...logContext });
|
|
4064
|
+
}
|
|
4065
|
+
} else if (event.type === "question.asked") {
|
|
4066
|
+
pausedQuestions = event.questions.map((q) => ({
|
|
4067
|
+
question: q.question,
|
|
4068
|
+
options: q.options.map((o) => ({
|
|
4069
|
+
label: o.label,
|
|
4070
|
+
description: o.description
|
|
4071
|
+
}))
|
|
4072
|
+
}));
|
|
4073
|
+
logger2?.debug("Event: question.asked", {
|
|
4074
|
+
...logContext,
|
|
4075
|
+
questions: pausedQuestions.length
|
|
4076
|
+
});
|
|
4077
|
+
} else if (event.type === "turn.completed") {
|
|
4078
|
+
completedStatus = event.status;
|
|
4079
|
+
if (event.sessionId) {
|
|
4080
|
+
capturedSessionId = event.sessionId;
|
|
4081
|
+
}
|
|
4082
|
+
logger2?.debug("Event: turn.completed", {
|
|
4083
|
+
...logContext,
|
|
4084
|
+
status: event.status,
|
|
4085
|
+
session_id: event.sessionId
|
|
4086
|
+
});
|
|
4087
|
+
} else {
|
|
4088
|
+
logger2?.debug("Event", { ...logContext, type: event.type });
|
|
4089
|
+
}
|
|
4090
|
+
});
|
|
4091
|
+
child.stderr?.on("data", (chunk) => {
|
|
4092
|
+
stderrTail = appendStderrTail(stderrTail, chunk);
|
|
4093
|
+
const text = chunk.toString("utf8");
|
|
4094
|
+
if (text.trim().length > 0) {
|
|
4095
|
+
logger2?.debug("Subprocess stderr", {
|
|
4096
|
+
...logContext,
|
|
4097
|
+
chunk: text.slice(0, 500)
|
|
4098
|
+
});
|
|
4099
|
+
}
|
|
4100
|
+
});
|
|
4101
|
+
const overallTimer = setTimeout(() => {
|
|
4102
|
+
timedOut = true;
|
|
4103
|
+
killChild(child);
|
|
4104
|
+
}, options.timeoutMs);
|
|
4105
|
+
const onAbort = () => {
|
|
4106
|
+
aborted = true;
|
|
4107
|
+
killChild(child);
|
|
4108
|
+
};
|
|
4109
|
+
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
4110
|
+
const exitCode = await new Promise((resolve) => {
|
|
4111
|
+
child.once("exit", (code, signal) => {
|
|
4112
|
+
logger2?.info("Subprocess exited", {
|
|
4113
|
+
...logContext,
|
|
4114
|
+
exit_code: code,
|
|
4115
|
+
signal,
|
|
4116
|
+
duration_ms: Date.now() - startedAt
|
|
4117
|
+
});
|
|
4118
|
+
resolve(code);
|
|
4119
|
+
});
|
|
4120
|
+
child.once("error", (error) => {
|
|
4121
|
+
logger2?.error("Subprocess error", { ...logContext, error: error.message });
|
|
4122
|
+
resolve(null);
|
|
4123
|
+
});
|
|
4124
|
+
});
|
|
4125
|
+
clearTimeout(overallTimer);
|
|
4126
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
4127
|
+
rl.close();
|
|
4128
|
+
if (aborted) {
|
|
4129
|
+
return {
|
|
4130
|
+
status: "timeout",
|
|
4131
|
+
sessionId: capturedSessionId,
|
|
4132
|
+
replyText,
|
|
4133
|
+
questions: pausedQuestions,
|
|
4134
|
+
isError: true,
|
|
4135
|
+
stderrTail,
|
|
4136
|
+
exitCode,
|
|
4137
|
+
staleSession: false
|
|
4138
|
+
};
|
|
4139
|
+
}
|
|
4140
|
+
if (timedOut) {
|
|
4141
|
+
return {
|
|
4142
|
+
status: "timeout",
|
|
4143
|
+
sessionId: capturedSessionId,
|
|
4144
|
+
replyText,
|
|
4145
|
+
questions: pausedQuestions,
|
|
4146
|
+
isError: true,
|
|
4147
|
+
stderrTail,
|
|
4148
|
+
exitCode,
|
|
4149
|
+
staleSession: false
|
|
4150
|
+
};
|
|
4151
|
+
}
|
|
4152
|
+
const status = completedStatus ?? (isError ? "error" : "error");
|
|
4153
|
+
const staleSession = options.sessionId !== void 0 && detectStaleSession(stderrTail, replyText, isError);
|
|
4154
|
+
logger2?.info("Turn outcome", {
|
|
4155
|
+
...logContext,
|
|
4156
|
+
status,
|
|
4157
|
+
session_id: capturedSessionId,
|
|
4158
|
+
exit_code: exitCode,
|
|
4159
|
+
is_error: isError,
|
|
4160
|
+
reply_chars: replyText?.length ?? 0,
|
|
4161
|
+
questions: pausedQuestions?.length ?? 0,
|
|
4162
|
+
stale_session: staleSession,
|
|
4163
|
+
stderr_tail: stderrTail ? stderrTail.slice(-500) : ""
|
|
4164
|
+
});
|
|
4165
|
+
return {
|
|
4166
|
+
status,
|
|
4167
|
+
sessionId: capturedSessionId,
|
|
4168
|
+
replyText,
|
|
4169
|
+
questions: pausedQuestions,
|
|
4170
|
+
isError,
|
|
4171
|
+
stderrTail,
|
|
4172
|
+
exitCode,
|
|
4173
|
+
staleSession
|
|
4174
|
+
};
|
|
4175
|
+
}
|
|
4176
|
+
function killChild(child) {
|
|
4177
|
+
if (child.exitCode !== null || child.signalCode) {
|
|
4178
|
+
return;
|
|
4179
|
+
}
|
|
4180
|
+
try {
|
|
4181
|
+
child.kill("SIGTERM");
|
|
4182
|
+
} catch {
|
|
4183
|
+
}
|
|
4184
|
+
setTimeout(() => {
|
|
4185
|
+
if (child.exitCode === null && !child.signalCode) {
|
|
4186
|
+
try {
|
|
4187
|
+
child.kill("SIGKILL");
|
|
4188
|
+
} catch {
|
|
4189
|
+
}
|
|
4190
|
+
}
|
|
4191
|
+
}, SIGKILL_GRACE_MS);
|
|
4192
|
+
}
|
|
4193
|
+
const DEFAULT_DEPS = {
|
|
4194
|
+
poll: pollMessages,
|
|
4195
|
+
respond: respondMessage,
|
|
4196
|
+
runTurn,
|
|
4197
|
+
readState: readStateForChat,
|
|
4198
|
+
writeSession: writeSessionId,
|
|
4199
|
+
clearSession: clearSessionId,
|
|
4200
|
+
logger: new RemoteSessionLogger(),
|
|
4201
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|
|
4202
|
+
};
|
|
4203
|
+
function truncate(text, max) {
|
|
4204
|
+
return text.length > max ? `${text.slice(0, max - 1)}…` : text;
|
|
4205
|
+
}
|
|
4206
|
+
async function postBestEffort(deps, config, target, text) {
|
|
4207
|
+
try {
|
|
4208
|
+
await deps.respond(
|
|
4209
|
+
config,
|
|
4210
|
+
{ chatId: target.chatId, bot: target.bot, text },
|
|
4211
|
+
{ logger: deps.logger }
|
|
4212
|
+
);
|
|
4213
|
+
} catch (error) {
|
|
4214
|
+
deps.logger.warn("Best-effort post failed", {
|
|
4215
|
+
error: error.message
|
|
4216
|
+
});
|
|
4217
|
+
}
|
|
4218
|
+
}
|
|
4219
|
+
async function postChunks(deps, config, target, reply) {
|
|
4220
|
+
const chunks = chunkReply(reply, config.max_message_chars);
|
|
4221
|
+
deps.logger.info("Posting reply", {
|
|
4222
|
+
chat_id: target.chatId,
|
|
4223
|
+
chunks: chunks.length,
|
|
4224
|
+
chars: reply.length
|
|
4225
|
+
});
|
|
4226
|
+
for (const chunk of chunks) {
|
|
4227
|
+
await deps.respond(
|
|
4228
|
+
config,
|
|
4229
|
+
{ chatId: target.chatId, bot: target.bot, text: chunk },
|
|
4230
|
+
{ logger: deps.logger }
|
|
4231
|
+
);
|
|
4232
|
+
}
|
|
4233
|
+
}
|
|
4234
|
+
async function handleTurn(deps, config, target, text, signal) {
|
|
4235
|
+
let sessionId = (await deps.readState(target.chatId))?.session_id;
|
|
4236
|
+
const started = Date.now();
|
|
4237
|
+
const logContext = { chat_id: target.chatId };
|
|
4238
|
+
const streamer = new ProgressStreamer({
|
|
4239
|
+
config,
|
|
4240
|
+
target,
|
|
4241
|
+
deps: { respond: deps.respond, logger: deps.logger }
|
|
4242
|
+
});
|
|
4243
|
+
let outcome;
|
|
4244
|
+
try {
|
|
4245
|
+
outcome = await deps.runTurn({
|
|
4246
|
+
text,
|
|
4247
|
+
sessionId,
|
|
4248
|
+
timeoutMs: config.turn_timeout_seconds * 1e3,
|
|
4249
|
+
signal,
|
|
4250
|
+
logger: deps.logger,
|
|
4251
|
+
logContext,
|
|
4252
|
+
onEvent: streamer.onEvent
|
|
4253
|
+
});
|
|
4254
|
+
if (!signal.aborted && outcome.staleSession && sessionId) {
|
|
4255
|
+
deps.logger.info("Resume failed; retrying without session_id", {
|
|
4256
|
+
...logContext,
|
|
4257
|
+
stale_session_id: sessionId
|
|
4258
|
+
});
|
|
4259
|
+
await deps.clearSession(target.chatId);
|
|
4260
|
+
sessionId = void 0;
|
|
4261
|
+
await postBestEffort(deps, config, target, "ℹ️ Session expired; started a new one.");
|
|
4262
|
+
outcome = await deps.runTurn({
|
|
4263
|
+
text,
|
|
4264
|
+
sessionId: void 0,
|
|
4265
|
+
timeoutMs: config.turn_timeout_seconds * 1e3,
|
|
4266
|
+
signal,
|
|
4267
|
+
logger: deps.logger,
|
|
4268
|
+
logContext,
|
|
4269
|
+
onEvent: streamer.onEvent
|
|
4270
|
+
});
|
|
4271
|
+
}
|
|
4272
|
+
} finally {
|
|
4273
|
+
streamer.stop();
|
|
4274
|
+
}
|
|
4275
|
+
if (outcome.sessionId && outcome.sessionId !== sessionId) {
|
|
4276
|
+
await deps.writeSession(target.chatId, outcome.sessionId);
|
|
4277
|
+
}
|
|
4278
|
+
const duration = Date.now() - started;
|
|
4279
|
+
deps.logger.info("Turn finished", {
|
|
4280
|
+
chat_id: target.chatId,
|
|
4281
|
+
duration_ms: duration,
|
|
4282
|
+
status: outcome.status,
|
|
4283
|
+
exit_code: outcome.exitCode,
|
|
4284
|
+
chars_out: outcome.replyText?.length ?? 0,
|
|
4285
|
+
session_id: outcome.sessionId,
|
|
4286
|
+
aborted: signal.aborted
|
|
4287
|
+
});
|
|
4288
|
+
if (signal.aborted) {
|
|
4289
|
+
return;
|
|
4290
|
+
}
|
|
4291
|
+
if (outcome.status === "timeout") {
|
|
4292
|
+
await postBestEffort(deps, config, target, "⚠️ Turn took too long; aborted.");
|
|
4293
|
+
return;
|
|
4294
|
+
}
|
|
4295
|
+
if (outcome.status === "spawn_error") {
|
|
4296
|
+
await postBestEffort(
|
|
4297
|
+
deps,
|
|
4298
|
+
config,
|
|
4299
|
+
target,
|
|
4300
|
+
`⚠️ Local agent failed to start: ${truncate(outcome.stderrTail, 400)}`
|
|
4301
|
+
);
|
|
4302
|
+
return;
|
|
4303
|
+
}
|
|
4304
|
+
if (outcome.exitCode !== null && outcome.exitCode !== 0 && !outcome.replyText) {
|
|
4305
|
+
const stderrSnippet = outcome.stderrTail ? truncate(outcome.stderrTail, 500) : "";
|
|
4306
|
+
const message = stderrSnippet ? `⚠️ Local agent error: ${stderrSnippet}` : "⚠️ Local agent error (no output).";
|
|
4307
|
+
await postBestEffort(deps, config, target, message);
|
|
4308
|
+
return;
|
|
4309
|
+
}
|
|
4310
|
+
const reply = extractReply({
|
|
4311
|
+
replyText: outcome.replyText,
|
|
4312
|
+
questions: outcome.questions,
|
|
4313
|
+
isError: outcome.isError
|
|
4314
|
+
});
|
|
4315
|
+
if (reply === null) {
|
|
4316
|
+
await postBestEffort(deps, config, target, "⚠️ Local agent did not return a result.");
|
|
4317
|
+
return;
|
|
4318
|
+
}
|
|
4319
|
+
await postChunks(deps, config, target, reply);
|
|
4320
|
+
}
|
|
4321
|
+
async function runPollLoop(options) {
|
|
4322
|
+
const deps = { ...DEFAULT_DEPS, ...options.deps };
|
|
4323
|
+
const { config } = options;
|
|
4324
|
+
const abortController = new AbortController();
|
|
4325
|
+
let detachRequested = false;
|
|
4326
|
+
let detachAnnounced = false;
|
|
4327
|
+
if (config.chat_id !== void 0) {
|
|
4328
|
+
const state = await deps.readState(config.chat_id);
|
|
4329
|
+
const resuming = Boolean(state?.session_id);
|
|
4330
|
+
const cwd = options.cwd ?? process.cwd();
|
|
4331
|
+
const attachMessage = `🟢 Local agent attached. Working dir: ${cwd}. ${resuming ? "Resuming previous session." : "New session."}`;
|
|
4332
|
+
await deps.respond(
|
|
4333
|
+
config,
|
|
4334
|
+
{
|
|
4335
|
+
chatId: config.chat_id,
|
|
4336
|
+
bot: config.bot,
|
|
4337
|
+
text: attachMessage
|
|
4338
|
+
},
|
|
4339
|
+
{ logger: deps.logger }
|
|
4340
|
+
);
|
|
4341
|
+
deps.logger.info("Attached (pinned chat)", { chat_id: config.chat_id, resuming });
|
|
4342
|
+
} else {
|
|
4343
|
+
deps.logger.info("Attached (open to any chat authorized by the bearer)");
|
|
4344
|
+
}
|
|
4345
|
+
options.onAttached?.();
|
|
4346
|
+
const announceDetach = async (reason) => {
|
|
4347
|
+
if (detachAnnounced) {
|
|
4348
|
+
return;
|
|
4349
|
+
}
|
|
4350
|
+
detachAnnounced = true;
|
|
4351
|
+
deps.logger.info("Detaching", { reason });
|
|
4352
|
+
if (config.chat_id !== void 0) {
|
|
4353
|
+
await postBestEffort(
|
|
4354
|
+
deps,
|
|
4355
|
+
config,
|
|
4356
|
+
{ chatId: config.chat_id, bot: config.bot },
|
|
4357
|
+
"🔴 Local agent detached."
|
|
4358
|
+
);
|
|
4359
|
+
}
|
|
4360
|
+
};
|
|
4361
|
+
const detach = async () => {
|
|
4362
|
+
detachRequested = true;
|
|
4363
|
+
abortController.abort();
|
|
4364
|
+
await announceDetach("requested");
|
|
4365
|
+
};
|
|
4366
|
+
const loop = async () => {
|
|
4367
|
+
let backoffAttempt = 0;
|
|
4368
|
+
batchLoop: while (!detachRequested) {
|
|
4369
|
+
let batch;
|
|
4370
|
+
try {
|
|
4371
|
+
batch = await deps.poll(config, abortController.signal, { logger: deps.logger });
|
|
4372
|
+
backoffAttempt = 0;
|
|
4373
|
+
} catch (error) {
|
|
4374
|
+
if (error instanceof TelegramAuthError) {
|
|
4375
|
+
deps.logger.error("Auth error; detaching", { status: error.status });
|
|
4376
|
+
if (config.chat_id !== void 0) {
|
|
4377
|
+
await postBestEffort(
|
|
4378
|
+
deps,
|
|
4379
|
+
config,
|
|
4380
|
+
{ chatId: config.chat_id, bot: config.bot },
|
|
4381
|
+
"⚠️ Bad token; detaching."
|
|
4382
|
+
);
|
|
4383
|
+
}
|
|
4384
|
+
detachRequested = true;
|
|
4385
|
+
process.exitCode = 1;
|
|
4386
|
+
break;
|
|
4387
|
+
}
|
|
4388
|
+
if (error instanceof TelegramTransientError) {
|
|
4389
|
+
const delay = Math.min(3e4, 1e3 * Math.pow(2, backoffAttempt));
|
|
4390
|
+
deps.logger.warn("Transient poll error; backing off", {
|
|
4391
|
+
status: error.status,
|
|
4392
|
+
delay_ms: delay
|
|
4393
|
+
});
|
|
4394
|
+
backoffAttempt++;
|
|
4395
|
+
await deps.sleep(delay);
|
|
4396
|
+
continue;
|
|
4397
|
+
}
|
|
4398
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
4399
|
+
break;
|
|
4400
|
+
}
|
|
4401
|
+
deps.logger.error("Fatal poll error; detaching", {
|
|
4402
|
+
error: error.message
|
|
4403
|
+
});
|
|
4404
|
+
detachRequested = true;
|
|
4405
|
+
break;
|
|
4406
|
+
}
|
|
4407
|
+
if (batch.length === 0) {
|
|
4408
|
+
await deps.sleep(config.poll_interval_seconds * 1e3);
|
|
4409
|
+
continue;
|
|
4410
|
+
}
|
|
4411
|
+
for (const polled of batch) {
|
|
4412
|
+
if (detachRequested) {
|
|
4413
|
+
break batchLoop;
|
|
4414
|
+
}
|
|
4415
|
+
if (config.chat_id !== void 0 && polled.chat_id !== config.chat_id) {
|
|
4416
|
+
deps.logger.warn("Ignoring message for unbound chat", {
|
|
4417
|
+
polled_chat_id: polled.chat_id,
|
|
4418
|
+
bound_chat_id: config.chat_id
|
|
4419
|
+
});
|
|
4420
|
+
continue;
|
|
4421
|
+
}
|
|
4422
|
+
const target = {
|
|
4423
|
+
chatId: polled.chat_id,
|
|
4424
|
+
bot: config.bot ?? polled.bot
|
|
4425
|
+
};
|
|
4426
|
+
const text = polled.text.trim();
|
|
4427
|
+
deps.logger.info("Polled message", {
|
|
4428
|
+
chat_id: polled.chat_id,
|
|
4429
|
+
bot: polled.bot,
|
|
4430
|
+
text_length: polled.text.length,
|
|
4431
|
+
preview: text.slice(0, 80)
|
|
4432
|
+
});
|
|
4433
|
+
if (text.length === 0) {
|
|
4434
|
+
deps.logger.warn("Skipping empty message", {
|
|
4435
|
+
chat_id: polled.chat_id
|
|
4436
|
+
});
|
|
4437
|
+
await postBestEffort(
|
|
4438
|
+
deps,
|
|
4439
|
+
config,
|
|
4440
|
+
target,
|
|
4441
|
+
"⚠️ Empty message ignored. Send some text or `/new` to start over."
|
|
4442
|
+
);
|
|
4443
|
+
continue;
|
|
4444
|
+
}
|
|
4445
|
+
if (text.toLowerCase() === "/new") {
|
|
4446
|
+
await deps.clearSession(polled.chat_id);
|
|
4447
|
+
try {
|
|
4448
|
+
await deps.respond(
|
|
4449
|
+
config,
|
|
4450
|
+
{
|
|
4451
|
+
chatId: target.chatId,
|
|
4452
|
+
bot: target.bot,
|
|
4453
|
+
text: "🆕 Started a new conversation."
|
|
4454
|
+
},
|
|
4455
|
+
{ logger: deps.logger }
|
|
4456
|
+
);
|
|
4457
|
+
} catch (error) {
|
|
4458
|
+
if (error instanceof TelegramBadRequestError) {
|
|
4459
|
+
deps.logger.warn("Respond 4xx on /new ack", { status: error.status });
|
|
4460
|
+
} else {
|
|
4461
|
+
throw error;
|
|
4462
|
+
}
|
|
4463
|
+
}
|
|
4464
|
+
continue;
|
|
4465
|
+
}
|
|
4466
|
+
try {
|
|
4467
|
+
await handleTurn(deps, config, target, polled.text, abortController.signal);
|
|
4468
|
+
} catch (error) {
|
|
4469
|
+
if (error instanceof TelegramAuthError) {
|
|
4470
|
+
deps.logger.error("Auth error during respond; detaching", {
|
|
4471
|
+
status: error.status
|
|
4472
|
+
});
|
|
4473
|
+
detachRequested = true;
|
|
4474
|
+
process.exitCode = 1;
|
|
4475
|
+
break batchLoop;
|
|
4476
|
+
}
|
|
4477
|
+
if (error instanceof TelegramBadRequestError) {
|
|
4478
|
+
deps.logger.warn("Respond 4xx; dropping chunk", { status: error.status });
|
|
4479
|
+
continue;
|
|
4480
|
+
}
|
|
4481
|
+
deps.logger.error("Turn failed", { error: error.message });
|
|
4482
|
+
await postBestEffort(
|
|
4483
|
+
deps,
|
|
4484
|
+
config,
|
|
4485
|
+
target,
|
|
4486
|
+
`⚠️ Local agent error: ${truncate(error.message, 500)}`
|
|
4487
|
+
);
|
|
4488
|
+
}
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
await announceDetach(detachAnnounced ? "already-announced" : "loop-exit");
|
|
4492
|
+
};
|
|
4493
|
+
const done = loop();
|
|
4494
|
+
return {
|
|
4495
|
+
done,
|
|
4496
|
+
detach
|
|
4497
|
+
};
|
|
4498
|
+
}
|
|
4499
|
+
async function runRemoteSession(overrides = {}) {
|
|
4500
|
+
const config = await loadRemoteSessionConfig(overrides);
|
|
4501
|
+
const logger2 = new RemoteSessionLogger();
|
|
4502
|
+
const logPath = getRemoteSessionLogPath();
|
|
4503
|
+
logger2.info("Remote session starting", {
|
|
4504
|
+
base_url: config.base_url,
|
|
4505
|
+
has_chat_id: config.chat_id !== void 0,
|
|
4506
|
+
bot: config.bot,
|
|
4507
|
+
poll_interval_seconds: config.poll_interval_seconds,
|
|
4508
|
+
long_poll_timeout_seconds: config.long_poll_timeout_seconds,
|
|
4509
|
+
turn_timeout_seconds: config.turn_timeout_seconds,
|
|
4510
|
+
debug: process.env.STUDIO_REMOTE_DEBUG === "1"
|
|
4511
|
+
});
|
|
4512
|
+
process.stdout.write(`Remote session log: ${logPath}
|
|
4513
|
+
`);
|
|
4514
|
+
const { done, detach } = await runPollLoop({
|
|
4515
|
+
config,
|
|
4516
|
+
deps: { logger: logger2 },
|
|
4517
|
+
onAttached: () => {
|
|
4518
|
+
const target = config.chat_id !== void 0 ? `chat ${config.chat_id}` : "any chat authorized by the bearer";
|
|
4519
|
+
process.stdout.write(`Remote session attached → ${target}.
|
|
4520
|
+
Press Ctrl-C to detach.
|
|
4521
|
+
`);
|
|
4522
|
+
}
|
|
4523
|
+
});
|
|
4524
|
+
const signalCleanup = [];
|
|
4525
|
+
const installSignal = (signal) => {
|
|
4526
|
+
const handler = () => {
|
|
4527
|
+
logger2.info("Signal received; detaching", { signal });
|
|
4528
|
+
void detach();
|
|
4529
|
+
};
|
|
4530
|
+
process.on(signal, handler);
|
|
4531
|
+
signalCleanup.push(() => process.off(signal, handler));
|
|
4532
|
+
};
|
|
4533
|
+
installSignal("SIGINT");
|
|
4534
|
+
installSignal("SIGTERM");
|
|
4535
|
+
const onExit = () => {
|
|
4536
|
+
if (config.chat_id === void 0) {
|
|
4537
|
+
return;
|
|
4538
|
+
}
|
|
4539
|
+
const controller = new AbortController();
|
|
4540
|
+
const timer = setTimeout(() => controller.abort(), 2e3);
|
|
4541
|
+
void respondMessage(
|
|
4542
|
+
config,
|
|
4543
|
+
{
|
|
4544
|
+
chatId: config.chat_id,
|
|
4545
|
+
bot: config.bot,
|
|
4546
|
+
text: "🔴 Local agent ended (process exit)."
|
|
4547
|
+
},
|
|
4548
|
+
{ signal: controller.signal, maxRetries: 0, logger: logger2 }
|
|
4549
|
+
).catch(() => void 0).finally(() => clearTimeout(timer));
|
|
4550
|
+
};
|
|
4551
|
+
process.once("beforeExit", onExit);
|
|
4552
|
+
try {
|
|
4553
|
+
await done;
|
|
4554
|
+
process.stdout.write("Remote session detached.\n");
|
|
4555
|
+
} finally {
|
|
4556
|
+
for (const cleanup of signalCleanup) {
|
|
4557
|
+
cleanup();
|
|
4558
|
+
}
|
|
4559
|
+
process.off("beforeExit", onExit);
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4562
|
+
const logger = new Logger();
|
|
4563
|
+
function isPromptAbortError(error) {
|
|
4564
|
+
return error instanceof Error && ["AbortPromptError", "CancelPromptError", "ExitPromptError"].includes(error.name);
|
|
4565
|
+
}
|
|
4566
|
+
function getErrorMessage(error) {
|
|
4567
|
+
if (error instanceof Error) {
|
|
4568
|
+
return error.message;
|
|
4569
|
+
}
|
|
4570
|
+
return String(error);
|
|
4571
|
+
}
|
|
4572
|
+
async function readAllStdin() {
|
|
4573
|
+
const chunks = [];
|
|
4574
|
+
for await (const chunk of process.stdin) {
|
|
4575
|
+
chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk);
|
|
4576
|
+
}
|
|
4577
|
+
return Buffer.concat(chunks).toString("utf8").trim();
|
|
4578
|
+
}
|
|
4579
|
+
async function runCommand(options) {
|
|
4580
|
+
const ui = options.adapter;
|
|
4581
|
+
const isJsonMode = ui instanceof JsonAdapter;
|
|
4582
|
+
const resumeContext = resolveResumeSessionContext(options.resumeSession);
|
|
4583
|
+
let currentProvider = resumeContext.provider ?? await resolveInitialAiProvider();
|
|
4584
|
+
let currentModel = resumeContext.model ?? DEFAULT_MODEL;
|
|
4585
|
+
ui.currentProvider = currentProvider;
|
|
4586
|
+
ui.currentModel = currentModel;
|
|
4587
|
+
if (options.activeSite) {
|
|
4588
|
+
ui.activeSite = {
|
|
4589
|
+
name: options.activeSite.name,
|
|
4590
|
+
path: options.activeSite.path,
|
|
4591
|
+
running: options.activeSite.running ?? false,
|
|
4592
|
+
remote: options.activeSite.remote,
|
|
4593
|
+
url: options.activeSite.url,
|
|
4594
|
+
wpcomSiteId: options.activeSite.wpcomSiteId
|
|
4595
|
+
};
|
|
4596
|
+
}
|
|
4597
|
+
ui.start();
|
|
4598
|
+
ui.showWelcome();
|
|
4599
|
+
if (options.showLegacyCommandNotice && !isJsonMode) {
|
|
4600
|
+
ui.showInfo(__('ⓘ The "studio ai" command is now "studio code".'));
|
|
4601
|
+
}
|
|
4602
|
+
let sessionRecorder;
|
|
4603
|
+
let didDisableSessionPersistence = options.noSessionPersistence === true;
|
|
4604
|
+
let sessionId = options.resumeSessionId ?? resumeContext.sessionId;
|
|
4605
|
+
let persistQueue = Promise.resolve();
|
|
4606
|
+
if (options.noSessionPersistence) {
|
|
4607
|
+
ui.showInfo(__("Session persistence disabled (--no-session-persistence)."));
|
|
4608
|
+
}
|
|
4609
|
+
const ensureSessionRecorder = async () => {
|
|
4610
|
+
if (didDisableSessionPersistence) {
|
|
4611
|
+
return void 0;
|
|
4612
|
+
}
|
|
4613
|
+
if (sessionRecorder) {
|
|
4614
|
+
return sessionRecorder;
|
|
4615
|
+
}
|
|
4616
|
+
try {
|
|
4617
|
+
if (options.resumeSession) {
|
|
4618
|
+
sessionRecorder = await AiSessionRecorder.open({
|
|
4619
|
+
sessionId: options.resumeSession.summary.id,
|
|
4620
|
+
filePath: options.resumeSession.summary.filePath,
|
|
4621
|
+
linkedAgentSessionIds: options.resumeSession.summary.linkedAgentSessionIds
|
|
4622
|
+
});
|
|
4623
|
+
} else if (options.resumeSessionId) {
|
|
4624
|
+
const sessions = await listAiSessions(getAiSessionsRootDirectory());
|
|
4625
|
+
const existing = sessions.find(
|
|
4626
|
+
(s) => s.linkedAgentSessionIds.includes(options.resumeSessionId)
|
|
4627
|
+
);
|
|
4628
|
+
if (!existing) {
|
|
4629
|
+
throw new Error(
|
|
4630
|
+
sprintf(
|
|
4631
|
+
/* translators: %s: agent session ID */
|
|
4632
|
+
__("No AI session found for resume ID: %s"),
|
|
4633
|
+
options.resumeSessionId
|
|
4634
|
+
)
|
|
4635
|
+
);
|
|
4636
|
+
}
|
|
4637
|
+
sessionRecorder = await AiSessionRecorder.open({
|
|
4638
|
+
sessionId: existing.id,
|
|
4639
|
+
filePath: existing.filePath,
|
|
4640
|
+
linkedAgentSessionIds: existing.linkedAgentSessionIds
|
|
4641
|
+
});
|
|
4642
|
+
} else {
|
|
4643
|
+
sessionRecorder = await AiSessionRecorder.create();
|
|
4644
|
+
}
|
|
4645
|
+
} catch (error) {
|
|
4646
|
+
didDisableSessionPersistence = true;
|
|
4647
|
+
ui.showError(
|
|
4648
|
+
sprintf(
|
|
4649
|
+
/* translators: %s: error message */
|
|
4650
|
+
__("Session persistence disabled: %s"),
|
|
4651
|
+
getErrorMessage(error)
|
|
4652
|
+
)
|
|
4653
|
+
);
|
|
4654
|
+
}
|
|
4655
|
+
return sessionRecorder;
|
|
4656
|
+
};
|
|
4657
|
+
const persist = (callback) => {
|
|
4658
|
+
persistQueue = persistQueue.then(async () => {
|
|
4659
|
+
const recorder = await ensureSessionRecorder();
|
|
4660
|
+
if (!recorder) {
|
|
4661
|
+
return;
|
|
4662
|
+
}
|
|
4663
|
+
try {
|
|
4664
|
+
await callback(recorder);
|
|
4665
|
+
} catch (error) {
|
|
4666
|
+
sessionRecorder = void 0;
|
|
4667
|
+
if (!didDisableSessionPersistence) {
|
|
4668
|
+
didDisableSessionPersistence = true;
|
|
4669
|
+
ui.showError(
|
|
4670
|
+
sprintf(
|
|
3409
4671
|
/* translators: %s: error message */
|
|
3410
4672
|
__("Session persistence disabled: %s"),
|
|
3411
4673
|
getErrorMessage(error)
|
|
@@ -3654,73 +4916,70 @@ ${prompt}`;
|
|
|
3654
4916
|
env,
|
|
3655
4917
|
model: currentModel,
|
|
3656
4918
|
resume: sessionId,
|
|
3657
|
-
autoApprove: options.autoApprove ?? isJsonMode,
|
|
3658
4919
|
activeSite: site,
|
|
3659
4920
|
wpcomAccessToken,
|
|
3660
4921
|
onAskUser: (questions) => askUserAndPersistAnswers(questions)
|
|
3661
4922
|
});
|
|
4923
|
+
let interruptRequested = false;
|
|
4924
|
+
let resolveInterrupt = () => void 0;
|
|
4925
|
+
const interruptPromise = new Promise((resolve) => {
|
|
4926
|
+
resolveInterrupt = () => resolve("interrupted");
|
|
4927
|
+
});
|
|
3662
4928
|
ui.onInterrupt = () => {
|
|
4929
|
+
if (interruptRequested) {
|
|
4930
|
+
return;
|
|
4931
|
+
}
|
|
4932
|
+
interruptRequested = true;
|
|
3663
4933
|
void agentQuery.interrupt();
|
|
4934
|
+
resolveInterrupt();
|
|
3664
4935
|
};
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
try {
|
|
4936
|
+
const turnState = { status: "interrupted" };
|
|
4937
|
+
const consumeAgentTurn = async () => {
|
|
3668
4938
|
for await (const message of agentQuery) {
|
|
3669
4939
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
4940
|
+
if (interruptRequested) {
|
|
4941
|
+
continue;
|
|
4942
|
+
}
|
|
3670
4943
|
const result = ui.handleMessage(message);
|
|
3671
4944
|
await persist((recorder2) => recorder2.recordSdkMessage(message, timestamp));
|
|
3672
4945
|
if (result) {
|
|
3673
4946
|
sessionId = result.sessionId;
|
|
3674
4947
|
await persist((recorder2) => recorder2.recordAgentSessionId(result.sessionId));
|
|
3675
|
-
if (result.
|
|
3676
|
-
|
|
3677
|
-
numTurns: result.numTurns
|
|
3678
|
-
};
|
|
3679
|
-
turnStatus = "max_turns";
|
|
3680
|
-
} else if (result.interrupted) {
|
|
3681
|
-
turnStatus = "interrupted";
|
|
4948
|
+
if (result.interrupted) {
|
|
4949
|
+
turnState.status = "interrupted";
|
|
3682
4950
|
} else {
|
|
3683
|
-
|
|
4951
|
+
turnState.status = result.success ? "success" : "error";
|
|
3684
4952
|
}
|
|
3685
4953
|
}
|
|
3686
4954
|
}
|
|
3687
|
-
}
|
|
3688
|
-
|
|
3689
|
-
if (
|
|
3690
|
-
|
|
4955
|
+
};
|
|
4956
|
+
const consumeAgentTurnResult = consumeAgentTurn().catch((error) => {
|
|
4957
|
+
if (interruptRequested) {
|
|
4958
|
+
turnState.status = "interrupted";
|
|
4959
|
+
return;
|
|
3691
4960
|
}
|
|
4961
|
+
turnState.status = "error";
|
|
3692
4962
|
if (!(ui instanceof AiChatUI && ui.hasErrorBeenSurfaced())) {
|
|
3693
4963
|
ui.showError(getErrorMessage(error));
|
|
3694
4964
|
}
|
|
3695
|
-
|
|
3696
|
-
|
|
3697
|
-
|
|
3698
|
-
}
|
|
3699
|
-
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
_n("Used %d turn", "Used %d turns", maxTurnsResult.numTurns),
|
|
3704
|
-
maxTurnsResult.numTurns
|
|
3705
|
-
)
|
|
3706
|
-
);
|
|
3707
|
-
const answer = await ui.askUser([
|
|
3708
|
-
{
|
|
3709
|
-
question: __("Reached the turn limit. Continue?"),
|
|
3710
|
-
options: [
|
|
3711
|
-
{ label: "Yes", description: __("Resume where the agent left off") },
|
|
3712
|
-
{ label: "No", description: __("Stop here") }
|
|
3713
|
-
]
|
|
3714
|
-
}
|
|
4965
|
+
if (isJsonMode) {
|
|
4966
|
+
throw error;
|
|
4967
|
+
}
|
|
4968
|
+
});
|
|
4969
|
+
try {
|
|
4970
|
+
const result = await Promise.race([
|
|
4971
|
+
consumeAgentTurnResult.then(() => "completed"),
|
|
4972
|
+
interruptPromise
|
|
3715
4973
|
]);
|
|
3716
|
-
|
|
3717
|
-
|
|
3718
|
-
ui.addUserMessage("Continue");
|
|
3719
|
-
return runAgentTurn("Continue from where you left off.");
|
|
4974
|
+
if (result === "interrupted") {
|
|
4975
|
+
turnState.status = "interrupted";
|
|
3720
4976
|
}
|
|
4977
|
+
} finally {
|
|
4978
|
+
await persist((recorder2) => recorder2.recordTurnClosed(turnState.status));
|
|
4979
|
+
ui.endAgentTurn();
|
|
3721
4980
|
}
|
|
3722
4981
|
const hasTerminalError = ui instanceof AiChatUI && ui.hasErrorBeenSurfaced();
|
|
3723
|
-
if (
|
|
4982
|
+
if (turnState.status === "error" && !isJsonMode && !hasTerminalError) {
|
|
3724
4983
|
if (retryAttempt >= MAX_RETRY_ATTEMPTS) {
|
|
3725
4984
|
ui.showInfo(
|
|
3726
4985
|
__("The server has not recovered after multiple attempts. Please try again later.")
|
|
@@ -3747,8 +5006,7 @@ ${prompt}`;
|
|
|
3747
5006
|
}
|
|
3748
5007
|
}
|
|
3749
5008
|
return {
|
|
3750
|
-
status:
|
|
3751
|
-
usage: maxTurnsResult
|
|
5009
|
+
status: turnState.status
|
|
3752
5010
|
};
|
|
3753
5011
|
}
|
|
3754
5012
|
if (isJsonMode && options.initialMessage) {
|
|
@@ -3756,7 +5014,7 @@ ${prompt}`;
|
|
|
3756
5014
|
ui.addUserMessage(options.initialMessage);
|
|
3757
5015
|
const result = await runAgentTurn(options.initialMessage);
|
|
3758
5016
|
const jsonStatus = result.status === "interrupted" ? "error" : result.status;
|
|
3759
|
-
ui.emitTurnCompleted(jsonStatus
|
|
5017
|
+
ui.emitTurnCompleted(jsonStatus);
|
|
3760
5018
|
} catch (error) {
|
|
3761
5019
|
process.exitCode = 1;
|
|
3762
5020
|
handleAgentTurnError(error);
|
|
@@ -3827,7 +5085,7 @@ ${prompt}`;
|
|
|
3827
5085
|
} else {
|
|
3828
5086
|
ui.addUserMessage(prompt);
|
|
3829
5087
|
try {
|
|
3830
|
-
await runAgentTurn(
|
|
5088
|
+
await runAgentTurn(buildSkillInvocationPrompt(cmd.name));
|
|
3831
5089
|
} catch (error) {
|
|
3832
5090
|
handleAgentTurnError(error);
|
|
3833
5091
|
}
|
|
@@ -3852,7 +5110,7 @@ const registerCommand = (yargs) => {
|
|
|
3852
5110
|
command: "$0 [message]",
|
|
3853
5111
|
describe: __("AI agent for building WordPress"),
|
|
3854
5112
|
builder: (yargs2) => {
|
|
3855
|
-
|
|
5113
|
+
let chain = yargs2.positional("message", {
|
|
3856
5114
|
type: "string",
|
|
3857
5115
|
description: __("Initial message to send to the AI agent")
|
|
3858
5116
|
}).option("path", {
|
|
@@ -3865,9 +5123,6 @@ const registerCommand = (yargs) => {
|
|
|
3865
5123
|
type: "boolean",
|
|
3866
5124
|
default: false,
|
|
3867
5125
|
description: __("Output events as NDJSON to stdout (headless mode)")
|
|
3868
|
-
}).option("auto-approve", {
|
|
3869
|
-
type: "boolean",
|
|
3870
|
-
description: __("Auto-approve all tool calls (defaults to true in --json mode)")
|
|
3871
5126
|
}).option("resume-session", {
|
|
3872
5127
|
type: "string",
|
|
3873
5128
|
hidden: true,
|
|
@@ -3880,8 +5135,27 @@ const registerCommand = (yargs) => {
|
|
|
3880
5135
|
type: "boolean",
|
|
3881
5136
|
default: true,
|
|
3882
5137
|
description: __("Record this code session to disk")
|
|
3883
|
-
})
|
|
3884
|
-
|
|
5138
|
+
});
|
|
5139
|
+
if (isRemoteSessionEnabled()) {
|
|
5140
|
+
chain = chain.option("remote-session", {
|
|
5141
|
+
type: "boolean",
|
|
5142
|
+
default: false,
|
|
5143
|
+
description: __("Attach to Telegram and drive studio code remotely")
|
|
5144
|
+
}).option("remote-chat-id", {
|
|
5145
|
+
type: "number",
|
|
5146
|
+
description: __("Override the Telegram chat id to bind to")
|
|
5147
|
+
}).option("remote-bot", {
|
|
5148
|
+
type: "string",
|
|
5149
|
+
description: __("Override the Telegram bot name to use for replies")
|
|
5150
|
+
}).option("message-from-stdin", {
|
|
5151
|
+
type: "boolean",
|
|
5152
|
+
hidden: true,
|
|
5153
|
+
default: false,
|
|
5154
|
+
description: __("Read the initial message from stdin (for headless drivers)")
|
|
5155
|
+
});
|
|
5156
|
+
}
|
|
5157
|
+
return chain.check((argv) => {
|
|
5158
|
+
if (argv.json && !argv.message && !argv.remoteSession && !argv.messageFromStdin) {
|
|
3885
5159
|
throw new Error(__("--json requires an initial message argument"));
|
|
3886
5160
|
}
|
|
3887
5161
|
return true;
|
|
@@ -3890,20 +5164,57 @@ const registerCommand = (yargs) => {
|
|
|
3890
5164
|
handler: async (argv) => {
|
|
3891
5165
|
try {
|
|
3892
5166
|
const typedArgv = argv;
|
|
5167
|
+
if (typedArgv.remoteSession && isRemoteSessionEnabled()) {
|
|
5168
|
+
try {
|
|
5169
|
+
await runRemoteSession({
|
|
5170
|
+
chat_id: typedArgv.remoteChatId,
|
|
5171
|
+
bot: typedArgv.remoteBot
|
|
5172
|
+
});
|
|
5173
|
+
} catch (error) {
|
|
5174
|
+
if (error instanceof RemoteSessionConfigError) {
|
|
5175
|
+
process.stderr.write(`${error.message}
|
|
5176
|
+
`);
|
|
5177
|
+
process.exitCode = 1;
|
|
5178
|
+
return;
|
|
5179
|
+
}
|
|
5180
|
+
throw error;
|
|
5181
|
+
}
|
|
5182
|
+
return;
|
|
5183
|
+
}
|
|
3893
5184
|
const noSessionPersistence = typedArgv.sessionPersistence === false;
|
|
3894
5185
|
const adapter = typedArgv.json ? new JsonAdapter() : new AiChatUI();
|
|
5186
|
+
let initialMessage = typedArgv.message;
|
|
5187
|
+
if (typedArgv.messageFromStdin && isRemoteSessionEnabled()) {
|
|
5188
|
+
initialMessage = await readAllStdin();
|
|
5189
|
+
if (!initialMessage) {
|
|
5190
|
+
process.stderr.write(
|
|
5191
|
+
`${__("--message-from-stdin requires non-empty input on stdin")}
|
|
5192
|
+
`
|
|
5193
|
+
);
|
|
5194
|
+
process.exitCode = 1;
|
|
5195
|
+
return;
|
|
5196
|
+
}
|
|
5197
|
+
}
|
|
3895
5198
|
if (adapter instanceof JsonAdapter && typedArgv.permissionResponse) {
|
|
3896
5199
|
adapter.permissionResponse = JSON.parse(typedArgv.permissionResponse);
|
|
3897
5200
|
}
|
|
3898
5201
|
const sitePath = typeof argv.path === "string" ? argv.path : void 0;
|
|
5202
|
+
let activeSite;
|
|
5203
|
+
if (sitePath && typedArgv.siteName) {
|
|
5204
|
+
activeSite = { name: typedArgv.siteName, path: sitePath };
|
|
5205
|
+
} else if (sitePath) {
|
|
5206
|
+
const matchedSite = await findSiteByFolder(sitePath);
|
|
5207
|
+
if (matchedSite) {
|
|
5208
|
+
activeSite = { name: matchedSite.name, path: matchedSite.path };
|
|
5209
|
+
}
|
|
5210
|
+
}
|
|
3899
5211
|
await runCommand({
|
|
3900
5212
|
adapter,
|
|
3901
|
-
initialMessage
|
|
5213
|
+
initialMessage,
|
|
3902
5214
|
resumeSessionId: typedArgv.resumeSession,
|
|
3903
5215
|
noSessionPersistence,
|
|
3904
|
-
autoApprove: typedArgv.autoApprove,
|
|
3905
5216
|
showLegacyCommandNotice: argv._[0] === "ai",
|
|
3906
|
-
activeSite
|
|
5217
|
+
activeSite
|
|
3907
5218
|
});
|
|
3908
5219
|
} catch (error) {
|
|
3909
5220
|
if (error instanceof LoggerError) {
|