From f10496645c6d609361ef0652ecd0b06b31c47893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 27 Nov 2025 18:43:00 +0900 Subject: [PATCH] =?UTF-8?q?fix(frontend/aiscript):=20=E5=90=84=E7=A8=AE?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E3=81=AE=E5=BC=95=E6=95=B0=E3=81=A7=E6=98=8E?= =?UTF-8?q?=E7=A4=BA=E7=9A=84=E3=81=ABnull=E3=81=8C=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84=E3=82=8B=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=81=AE=E3=83=8F=E3=83=B3=E3=83=89=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=20(#16838)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend/aiscript): MkDialogのtitle, textでnull値を許容するように * fix * update aiscript and use new api * fix * fix --- packages/frontend/package.json | 2 +- packages/frontend/src/aiscript/api.ts | 94 +++++++++++++++++++++------ pnpm-lock.yaml | 10 +-- pnpm-workspace.yaml | 1 + 4 files changed, 82 insertions(+), 25 deletions(-) diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 3f634a0d80..b6906e130a 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -25,7 +25,7 @@ "@rollup/plugin-replace": "6.0.3", "@rollup/pluginutils": "5.3.0", "@sentry/vue": "10.26.0", - "@syuilo/aiscript": "1.1.2", + "@syuilo/aiscript": "1.2.0", "@syuilo/aiscript-0-19-0": "npm:@syuilo/aiscript@^0.19.0", "@twemoji/parser": "16.0.0", "@vitejs/plugin-vue": "6.0.2", diff --git a/packages/frontend/src/aiscript/api.ts b/packages/frontend/src/aiscript/api.ts index dc84925375..3a476787fe 100644 --- a/packages/frontend/src/aiscript/api.ts +++ b/packages/frontend/src/aiscript/api.ts @@ -40,29 +40,77 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string }) CUSTOM_EMOJIS: utils.jsToVal(customEmojis.value), LOCALE: values.STR(lang), SERVER_URL: values.STR(url), - 'Mk:dialog': values.FN_NATIVE(async ([title, text, type]) => { - utils.assertString(title); - utils.assertString(text); - if (type != null) { - assertStringAndIsIn(type, DIALOG_TYPES); + 'Mk:dialog': values.FN_NATIVE(async ([_title, _text, _type]) => { + let title: string | undefined = undefined; + let text: string | undefined = undefined; + let type: typeof DIALOG_TYPES[number] = 'info'; + + if (_title != null) { + if (utils.isString(_title)) { + title = _title.value; + } else { + utils.assertNull(_title); + } } + + if (_text != null) { + if (utils.isString(_text)) { + text = _text.value; + } else { + utils.assertNull(_text); + } + } + + if (_type != null) { + if (utils.isString(_type)) { + assertStringAndIsIn(_type, DIALOG_TYPES); + type = _type.value; + } else { + utils.assertNull(_type); + } + } + await os.alert({ - type: type ? type.value : 'info', - title: title.value, - text: text.value, + type, + title, + text, }); return values.NULL; }), - 'Mk:confirm': values.FN_NATIVE(async ([title, text, type]) => { - utils.assertString(title); - utils.assertString(text); - if (type != null) { - assertStringAndIsIn(type, DIALOG_TYPES); + 'Mk:confirm': values.FN_NATIVE(async ([_title, _text, _type]) => { + let title: string | undefined = undefined; + let text: string | undefined = undefined; + let type: typeof DIALOG_TYPES[number] = 'question'; + + if (_title != null) { + if (utils.isString(_title)) { + title = _title.value; + } else { + utils.assertNull(_title); + } } + + if (_text != null) { + if (utils.isString(_text)) { + text = _text.value; + } else { + utils.assertNull(_text); + } + } + + if (_type != null) { + if (utils.isString(_type)) { + assertStringAndIsIn(_type, DIALOG_TYPES); + type = _type.value; + } else { + utils.assertNull(_type); + } + } + const confirm = await os.confirm({ - type: type ? type.value : 'question', - title: title.value, - text: text.value, + type, + title, + text, }); return confirm.canceled ? values.FALSE : values.TRUE; }), @@ -76,15 +124,23 @@ export function createAiScriptEnv(opts: { storageKey: string, token?: string }) if (ep.value.includes('://') || ep.value.includes('..')) { throw new errors.AiScriptRuntimeError('invalid endpoint'); } - if (token) { + + let actualToken: string | null = null; + if (token != null && !utils.isNull(token)) { utils.assertString(token); // バグがあればundefinedもあり得るため念のため - if (typeof token.value !== 'string') throw new Error('invalid token'); + if (typeof token.value !== 'string') throw new errors.AiScriptRuntimeError('invalid token'); + actualToken = token.value; } - const actualToken: string | null = token?.value ?? opts.token ?? null; + + if (actualToken == null) { + actualToken = opts.token ?? null; + } + if (param == null) { throw new errors.AiScriptRuntimeError('expected param'); } + utils.assertObject(param); return misskeyApi(ep.value as keyof Misskey.Endpoints, utils.valToJs(param) as object, actualToken).then(res => { return utils.jsToVal(res); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfc71f5256..519ea8a7e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -729,8 +729,8 @@ importers: specifier: 10.26.0 version: 10.26.0(vue@3.5.24(typescript@5.9.3)) '@syuilo/aiscript': - specifier: 1.1.2 - version: 1.1.2 + specifier: 1.2.0 + version: 1.2.0 '@syuilo/aiscript-0-19-0': specifier: npm:@syuilo/aiscript@^0.19.0 version: '@syuilo/aiscript@0.19.0' @@ -4459,8 +4459,8 @@ packages: '@syuilo/aiscript@0.19.0': resolution: {integrity: sha512-ZWG4s1m6RrFjE7NeIMaxFz769YO1jW5ReTrOROrEO4IHheOrjxxJ/Ffe2TUNqX9/XxDloMwfWplKhfSzx8LGMA==} - '@syuilo/aiscript@1.1.2': - resolution: {integrity: sha512-cijsHTiMjeECocElyjRIcWMPGDhZIX3YfCOyzI6AZM8ajxRQ2hSqJwEh9pDr4mVTml9kLMHWDHmgfHkTHRJ1sg==} + '@syuilo/aiscript@1.2.0': + resolution: {integrity: sha512-3MkKfqDftqHyouINgHEIHnoTVWEeL0L1o7Y7Y9d8qb5h5vZKphzH/KVG3R2iI6CHtmO1mWHHJx5A499f80H9FA==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -14858,7 +14858,7 @@ snapshots: stringz: 2.1.0 uuid: 9.0.1 - '@syuilo/aiscript@1.1.2': + '@syuilo/aiscript@1.2.0': dependencies: seedrandom: 3.0.5 stringz: 2.1.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8757f8dc26..8f7fdf13c8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,3 +32,4 @@ onlyBuiltDependencies: ignorePatchFailures: false minimumReleaseAge: 10080 # delay 7days to mitigate supply-chain attack minimumReleaseAgeExclude: + - '@syuilo/aiscript'