fix(deploy): restore namespace and register menu commands at top-level #5
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/deploy/restore-namespace-and-menu"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
vite.config.ts:10—@namespaceвозвращён наhttps://github.com/slaid098/opencode-voice-dictation(старый, как идентификатор скрипта).@updateURL/@downloadURL/@iconостались на Forgejo (PR#3, рабочие).vite.config.ts:11+package.json:3.src/index.ts—registerMenuCommands({...})вынесен изinit()(после gate) на top-level. Теперь 7 menu-команд (Set Groq API Key,Set STT Endpointи др.) регистрируются на любой странице сразу при установке, не только на OpenCode.setupUI/setupKeyboardShortcut/checkFirstRunостались вinit()после gate (зависят от DOM).AGENTS.md— добавлена секция## @namespaceс правилом: идентификатор, не URL, не менять при миграции хоста.Почему
Дубликат скрипта: PR#3 сменил
@namespaceсgithub.com/...наgit.slaid098.dev/.... Tampermonkey/Violentmonkey идентифицируют скрипт по паре@name+@namespace(Greasemonkey-стандарт). Смена = менеджер видит «новый» скрипт → создал дубликат вместо обновления.@namespace— это opaque string-ID, менеджеры НЕ резолвят его как URL. Возврат к старому = обновление существующего скрипта.Пустое меню: 7
GM_registerMenuCommandвызывались внутриinit()послеisOpencodePage()gate (index.ts:207-211). На не-OpenCode странице gate →false→ retry loop → команды не регистрировались → popup показывал только Edit/Delete. Вынос на top-level = меню доступно сразу после установки на любой странице. Callbacks используютGM_setValue(работает везде) +ui?.toast(optional chaining, no-op без UI) — безопасно.Watch out
@updateURL(raw.githubusercontent.com → 404) НЕ автоапдейтнится. Пользователь должен один раз перейти по install-ссылке из README → TM предложит «обновить» (namespace совпадёт) → 1.0.4 → 1.0.7, без дубликата. После этого новый@updateURL(Forgejo) заработает для будущих автоапдейтов.GM_setValueсработает (config сохранится),ui?.toastno-op (нет UI). Пользователь не увидит toast-подтверждения, но значение сохранится. При переходе на OpenCode страницу config подхватится.@updateURL/@downloadURL/@iconНЕ откатаны на GitHub — они рабочие на Forgejo (PR#3). Меняется только@namespace(ID).Pending
—
Closes #4
Code Review Summary
PR восстанавливает
@namespace(ID скрипта для userscript-менеджеров) на старый GitHub-URL и выноситregisterMenuCommandsна top-level, чтобы 7 menu-команд регистрировались на любой странице сразу при установке, а не только послеisOpencodePage()gate. Version bump 1.0.6 → 1.0.7 синхронно в обоих файлах. Изменения точечные (4 файла, +17/−13), соответствуют issue #4.Positives
@namespaceкорректно возвращён наhttps://github.com/slaid098/opencode-voice-dictation(opaque ID, не URL).@updateURL/@downloadURL/@iconостались на Forgejo (строки 19-23) — не откатаны.@connect *(строка 17) не сужен. Соответствует AGENTS.md правилам## @connectи## @namespace.## Version bump). Без рассинхрона — auto-update сработает.registerMenuCommands({...})вынесен на top-level послеinit()(строка 240). 7 callbacks переданы с теми же аргументами. Все callbacks —functiondeclarations (строки 122-196), hoisted → в scope на top-level, безопасно вызывать доinit().setupUI/setupKeyboardShortcut/checkFirstRunостались ВНУТРИinit()послеisOpencodePage()gate (зависят от DOM). Корректное разделение: menu-команды (работают везде черезGM_setValue) на top-level, UI (нужен DOM) — после gate.## @namespaceс правилом: идентификатор, не URL, не менять при миграции хоста. Соответствует фактическому поведению кода.docs/decisions/**не отредактированы (не в changed files: AGENTS.md, package.json, src/index.ts, vite.config.ts).fix(deploy): restore namespace and register menu commands at top-level(conventional, ≤72). Body содержит 4 heading'а (## Что сделано,## Почему,## Watch out,## Pending), осмысленно заполнены.## Pending=—(допустимо). Closes #4.registerMenuCommandssignature не изменилась (7 callbacks, те же ключи).tests/config.test.tsтестируетregisterMenuCommandsчерез mock callbacks — контракт сохранён, тесты не сломаются.src/config.ts(экспорт) не в diff.Suggestions (info, not blocking)
console.log("[ocvd] OpenCode page not detected, retrying in 1.5s...")и строка 212 — debug-логи в production. Не в scope этого PR (pre-existing), но стоит вынести в отдельный issue для замены наGM_logили удаления.Verdict: APPROVE