概要
翻訳拡張(#857 /#858 )は現在 translate 専用 Lambda (/scratch-api-proxy/translate)経由だが、
text2speech(#859 /#861 ) と同じ共通 cors-proxy 経由 に統一する。これにより translate 専用 Lambda は
obsolete(使わない) になる。#861 の実装を雛形にする。
関連: #861 (synthesis を共通 cors-proxy に。雛形), #857 /#858 (translate を専用 Lambda にした・本 issue で置換)。
現状 vs 目標
修正方針(#861 の text2speech を踏襲)
packages/scratch-vm/src/extensions/scratch3_translate/index.js:
serverURL を upstream の値に戻す : https://translate-service.scratch.mit.edu/
(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同じ設計思想: upstream 定数は変えず、fetch 直前でラップ する。upstream merge の衝突を最小化)。
CORS_PROXY_HOST = 'https://api.smalruby.app/cors-proxy' を追加(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同一)。
翻訳 URL 組み立て箇所(urlBase = ${serverURL}translate?language=... → 最終 URL に text 付与後)で、
url = ${CORS_PROXY_HOST}?url=${encodeURIComponent(最終URL)} にラップしてから fetch する。
Smalruby マーカーで囲む(既存の translate CORS proxy マーカーを更新)。
マーカー一覧 docs/maintenance/smalruby-markers-vm.md を更新。
cors-proxy はテキスト応答をそのまま返す(binary は base64)。翻訳レスポンスのパースが通ることを確認
(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 は arrayBuffer で成功済み。translate は JSON/text)。unit テスト
test/unit/extension_translate_proxy.js を追加(extension_text2speech_proxy.js を雛形に、
fetch URL が cors-proxy?url= 経由になること)。
translate 専用 Lambda の obsolete 化(ドキュメント)
⚠️ .claude/rules/infra/smalruby-api.md への obsolete 明記は autopilot では行わない 。
.claude/ 配下の編集は権限プロンプトで stall する(#820 )。その部分は人間(メンテナ)が手で追記する 。
autopilot は コード + docs/ + docs/maintenance/ + テスト まで担当する。
進め方
DoD
概要
翻訳拡張(#857/#858)は現在 translate 専用 Lambda(
/scratch-api-proxy/translate)経由だが、text2speech(#859/#861) と同じ共通
cors-proxy経由に統一する。これにより translate 専用 Lambda はobsolete(使わない) になる。#861 の実装を雛形にする。
関連: #861(synthesis を共通 cors-proxy に。雛形), #857/#858(translate を専用 Lambda にした・本 issue で置換)。
現状 vs 目標
scratch3_translate/index.jsのserverURL='https://api.smalruby.app/scratch-api-proxy/'で
${serverURL}translate?language=&text=を叩く(専用 Lambda)。GET https://api.smalruby.app/cors-proxy?url=<encoded 実URL>経由。修正方針(#861 の text2speech を踏襲)
packages/scratch-vm/src/extensions/scratch3_translate/index.js:serverURLを upstream の値に戻す:https://translate-service.scratch.mit.edu/(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同じ設計思想: upstream 定数は変えず、fetch 直前でラップする。upstream merge の衝突を最小化)。
CORS_PROXY_HOST = 'https://api.smalruby.app/cors-proxy'を追加(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同一)。urlBase = ${serverURL}translate?language=...→ 最終 URL に text 付与後)で、url = ${CORS_PROXY_HOST}?url=${encodeURIComponent(最終URL)}にラップしてから fetch する。translate CORS proxyマーカーを更新)。マーカー一覧
docs/maintenance/smalruby-markers-vm.mdを更新。(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 は arrayBuffer で成功済み。translate は JSON/text)。unit テスト
test/unit/extension_translate_proxy.jsを追加(extension_text2speech_proxy.jsを雛形に、fetch URL が
cors-proxy?url=経由になること)。translate 専用 Lambda の obsolete 化(ドキュメント)
docs/infra/smalruby-api.mdの/scratch-api-proxy/translate行に 「obsolete。translate は共通cors-proxy 経由に統一(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同方式)。新規開発で使わない」 と明記する。
lambda/scratch-api-translate.ts)と CDK スタック定義は 今回は削除しない(削除は deploy を伴うため別作業)。ドキュメント上 obsolete と分かればよい。
進め方
cdk deployはしない(AWS SSO 認証が要る人間作業)。既存 cors-proxy を使うだけなのでインフラ変更・deploy 不要。DoD
scratch3_translateが共通 cors-proxy 経由になる(serverURLは upstream 値、fetch 直前にラップ)docs/maintenance/smalruby-markers-vm.md追記test/unit/extension_translate_proxy.js追加(cors-proxy 経由を検証)、cd packages/scratch-vm && npm exec tap ...緑docs/infra/smalruby-api.mdに translate 専用 Lambda が obsolete である旨を明記.claude/rules/infra/smalruby-api.mdにも obsolete 明記(autopilot は触らない)