cuelo 0.10.13 → 0.10.15
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +6 -7
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +6 -12
- package/.next/server/app/_global-error/page.js +2 -2
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/account/route.js +1 -1
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/attachment-settings/route.js +1 -1
- package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
- package/.next/server/app/api/attachments/draft/route.js +1 -1
- package/.next/server/app/api/attachments/route.js +3 -3
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +2 -2
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/display-settings/route.js +1 -1
- package/.next/server/app/api/document-text/route.js +2 -2
- package/.next/server/app/api/experiments/route.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/git/diff/route.js +2 -2
- package/.next/server/app/api/git/status/route.js +1 -1
- package/.next/server/app/api/github/projects/route.js +1 -1
- package/.next/server/app/api/gpt6/handles/route.js +1 -1
- package/.next/server/app/api/gpt6/reply/route.js +1 -1
- package/.next/server/app/api/gpt6/token/route.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js +13 -1
- package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
- package/.next/server/app/api/live/character-voice/route.js +1 -1
- package/.next/server/app/api/live/character-voice/route.js.nft.json +1 -1
- package/.next/server/app/api/live/events/route.js +14 -2
- package/.next/server/app/api/live/events/route.js.nft.json +1 -1
- package/.next/server/app/api/live/interpret/route.js +13 -0
- package/.next/server/app/api/live/interpret/route.js.nft.json +1 -0
- package/.next/server/app/api/live/interpret/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/live/offer/route.js +1 -1
- package/.next/server/app/api/live/offer/route.js.nft.json +1 -1
- package/.next/server/app/api/live/voices/route.js +1 -1
- package/.next/server/app/api/live/voices/route.js.nft.json +1 -1
- package/.next/server/app/api/mcp/route.js +2 -2
- package/.next/server/app/api/model-roles/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models-config/catalog/route.js +1 -1
- package/.next/server/app/api/models-config/discover/route.js +1 -1
- package/.next/server/app/api/models-config/route.js +3 -3
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/office-avatars/[id]/route.js +1 -1
- package/.next/server/app/api/office-avatars/route.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/project-docs/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/projects/route.js +2 -2
- package/.next/server/app/api/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/runs/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/install/route.js +2 -2
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/subagents/eta/route.js +1 -1
- package/.next/server/app/api/theme/route.js +1 -1
- package/.next/server/app/api/tool-image/route.js +1 -1
- package/.next/server/app/api/update-maintenance/route.js +3 -3
- package/.next/server/app/api/updates/route.js +1 -1
- package/.next/server/app/api/web-access/recovery/route.js +1 -1
- package/.next/server/app/api/web-access/route.js +1 -1
- package/.next/server/app/api/web6/consults/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/favicon.ico/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +6 -6
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/index.segments/_full.segment.rsc +6 -6
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/.next/server/app/index.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/office/page.js +2 -2
- package/.next/server/app/office/page.js.nft.json +1 -1
- package/.next/server/app/office/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview/page.js +2 -2
- package/.next/server/app/office-preview/page_client-reference-manifest.js +1 -1
- package/.next/server/app/office-preview.html +1 -1
- package/.next/server/app/office-preview.rsc +3 -3
- package/.next/server/app/office-preview.segments/_full.segment.rsc +3 -3
- package/.next/server/app/office-preview.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/_index.segment.rsc +3 -3
- package/.next/server/app/office-preview.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/office-preview.segments/office-preview/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/office-preview.segments/office-preview.segment.rsc +1 -1
- package/.next/server/app/office.html +1 -1
- package/.next/server/app/office.rsc +6 -6
- package/.next/server/app/office.segments/_full.segment.rsc +6 -6
- package/.next/server/app/office.segments/_head.segment.rsc +1 -1
- package/.next/server/app/office.segments/_index.segment.rsc +3 -3
- package/.next/server/app/office.segments/_tree.segment.rsc +3 -3
- package/.next/server/app/office.segments/office/__PAGE__.segment.rsc +4 -4
- package/.next/server/app/office.segments/office.segment.rsc +1 -1
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover/page.js +2 -2
- package/.next/server/app/recover/page_client-reference-manifest.js +1 -1
- package/.next/server/app/recover.html +1 -1
- package/.next/server/app/recover.rsc +3 -3
- package/.next/server/app/recover.segments/_full.segment.rsc +3 -3
- package/.next/server/app/recover.segments/_head.segment.rsc +1 -1
- package/.next/server/app/recover.segments/_index.segment.rsc +3 -3
- package/.next/server/app/recover.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +6 -7
- package/.next/server/chunks/205.js +3 -3
- package/.next/server/chunks/3379.js +1 -1
- package/.next/server/chunks/{5431.js → 3793.js} +2 -2
- package/.next/server/chunks/5489.js +12 -12
- package/.next/server/chunks/7362.js +1 -1
- package/.next/server/chunks/7467.js +3 -0
- package/.next/server/chunks/9108.js +1 -1
- package/.next/server/chunks/9280.js +3 -3
- package/.next/server/functions-config-manifest.json +0 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/ZDnE_0POahsY2h0bWcu9f/_buildManifest.js +1 -0
- package/.next/static/chunks/6110-0dce7f18ec095faa.js +1 -0
- package/.next/static/chunks/6379-7da431a165ac5d41.js +7 -0
- package/.next/static/chunks/9575-222df47a7f11cb57.js +24 -0
- package/.next/static/chunks/app/_global-error/page-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/account/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/events/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/[id]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/new/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/agent/running/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/attachment-settings/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/attachments/[id]/transcription/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/attachments/draft/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/attachments/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/auth/all-providers/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/auth/login/[provider]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/auth/providers/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/cwd/browse/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/cwd/validate/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/default-cwd/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/display-settings/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/document-text/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/experiments/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/file-index/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/files/[...path]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/git/diff/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/git/status/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/github/projects/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/gpt6/handles/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/gpt6/reply/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/gpt6/token/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/gpt6/web6-session/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/home/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/call/[callId]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/character-voice/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/events/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/interpret/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/offer/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/live/voices/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/mcp/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/model-roles/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/models/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/models-config/catalog/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/models-config/discover/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/models-config/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/models-config/test/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/office-avatars/[id]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/office-avatars/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/plugins/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/project-docs/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/project-trust/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/projects/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/runs/[runId]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/runs/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/context/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/export/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/[id]/state/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sessions/search/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/settings/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/skills/check/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/skills/install/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/skills/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/skills/search/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/skills/update/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/subagents/eta/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/theme/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/tool-image/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/update-maintenance/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/updates/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/web-access/recovery/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/web-access/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/web6/consults/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/{layout-4c592bc979a40fac.js → layout-dfbf07d80f807ad7.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/app/office/page-84340f94c2d87fe6.js +1 -0
- package/.next/static/chunks/app/page-293acef3b072c778.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-95aaaafc49522a6b.js +1 -0
- package/.next/static/chunks/{webpack-68986b211ad38cf1.js → webpack-859f6c90bf471cc4.js} +1 -1
- package/.next/static/css/{078ee14f375802c0.css → 792a9d55c2fd2c0c.css} +1 -1
- package/.next/static/css/949fdc99cee51026.css +1 -0
- package/.next/trace +108 -108
- package/.next/trace-build +1 -1
- package/.next/types/app/api/{lounge/events → live/interpret}/route.ts +3 -3
- package/.next/types/routes.d.ts +2 -3
- package/.next/types/validator.ts +9 -18
- package/README.md +7 -9
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +1 -1
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +37 -15
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/interop-hint.ts +122 -0
- package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +11 -5
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +347 -0
- package/package.json +1 -1
- package/.next/server/app/api/lounge/events/route.js +0 -4
- package/.next/server/app/api/lounge/events/route.js.nft.json +0 -1
- package/.next/server/app/api/lounge/events/route_client-reference-manifest.js +0 -1
- package/.next/server/app/api/lounge/route.js +0 -1
- package/.next/server/app/api/lounge/route.js.nft.json +0 -1
- package/.next/server/app/api/lounge/route_client-reference-manifest.js +0 -1
- package/.next/server/chunks/424.js +0 -3
- package/.next/server/chunks/4649.js +0 -1
- package/.next/server/chunks/7310.js +0 -5
- package/.next/static/B90WNxaFZ8Tg4XO_DiNPQ/_buildManifest.js +0 -1
- package/.next/static/chunks/6110-1db5217d11d7c23b.js +0 -1
- package/.next/static/chunks/8579-73b103d96227d1b8.js +0 -7
- package/.next/static/chunks/9575-f75f250a07112d4d.js +0 -24
- package/.next/static/chunks/app/_global-error/page-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/account/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/bash-output/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/events/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/new/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/agent/running/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/attachment-settings/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/attachments/[id]/transcription/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/attachments/draft/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/attachments/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/auth/all-providers/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/auth/api-key/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/auth/login/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/[provider]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/auth/providers/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/cwd/browse/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/cwd/validate/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/default-cwd/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/display-settings/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/document-text/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/experiments/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/file-index/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/files/[...path]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/git/diff/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/git/status/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/github/projects/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/gpt6/handles/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/gpt6/reply/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/gpt6/token/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/gpt6/web6-session/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/home/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/live/call/[callId]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/live/character-voice/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/live/events/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/live/offer/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/live/voices/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/lounge/events/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/lounge/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/mcp/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/model-roles/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/models/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/models-config/catalog/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/models-config/discover/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/models-config/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/models-config/test/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/office-avatars/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/office-avatars/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/plugins/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/project-docs/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/project-trust/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/projects/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/runs/[runId]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/runs/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/context/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/export/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/[id]/state/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sessions/search/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/settings/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/sidecars/[service]/[...path]/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/skills/check/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/skills/install/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/skills/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/skills/search/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/skills/update/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/subagents/eta/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/theme/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/tool-image/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/update-maintenance/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/updates/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/web-access/recovery/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/web-access/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/web6/consults/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/app/office/page-8dc604f9b5e6f220.js +0 -1
- package/.next/static/chunks/app/page-952b1ef4df5ac896.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/app-error-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/not-found-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2fe6bfb5aa68a2a2.js +0 -1
- package/.next/static/css/27857d8746871d52.css +0 -1
- package/.next/types/app/api/lounge/route.ts +0 -351
- /package/.next/static/{B90WNxaFZ8Tg4XO_DiNPQ → ZDnE_0POahsY2h0bWcu9f}/_ssgManifest.js +0 -0
package/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-webpack","duration":
|
|
1
|
+
[{"name":"run-webpack","duration":99280607,"timestamp":676909,"id":14,"parentId":1,"tags":{},"startTime":1791992276436,"traceId":"b04c8895f5bd07bb"},{"name":"run-typescript","duration":17699234,"timestamp":100322529,"id":11105,"parentId":1,"tags":{},"startTime":1791992376083,"traceId":"b04c8895f5bd07bb"},{"name":"static-check","duration":3656023,"timestamp":118114181,"id":11108,"parentId":1,"tags":{},"startTime":1791992393876,"traceId":"b04c8895f5bd07bb"},{"name":"static-generation","duration":10196854,"timestamp":121855723,"id":11282,"parentId":1,"tags":{},"startTime":1791992397617,"traceId":"b04c8895f5bd07bb"},{"name":"collect-build-traces","duration":17566089,"timestamp":121835221,"id":11279,"parentId":1,"tags":{},"startTime":1791992397597,"traceId":"b04c8895f5bd07bb"},{"name":"telemetry-flush","duration":74,"timestamp":139405208,"id":11291,"parentId":1,"tags":{},"startTime":1791992415167,"traceId":"b04c8895f5bd07bb"},{"name":"next-build","duration":138830797,"timestamp":574508,"id":1,"tags":{"buildMode":"default","version":"16.2.12","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1791992276333,"traceId":"b04c8895f5bd07bb"}]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// File: D:\a\CUELO\CUELO\app\api\
|
|
2
|
-
import * as entry from '../../../../../../app/api/
|
|
1
|
+
// File: D:\a\CUELO\CUELO\app\api\live\interpret\route.ts
|
|
2
|
+
import * as entry from '../../../../../../app/api/live/interpret/route.js'
|
|
3
3
|
import type { NextRequest } from 'next/server.js'
|
|
4
4
|
|
|
5
5
|
import type { InstantConfigForTypeCheckInternal } from 'next/dist/build/segment-config/app/app-segment-config.js'
|
|
6
6
|
|
|
7
|
-
type TEntry = typeof import('../../../../../../app/api/
|
|
7
|
+
type TEntry = typeof import('../../../../../../app/api/live/interpret/route.js')
|
|
8
8
|
|
|
9
9
|
type SegmentParams<T extends Object = any> = T extends Record<string, any>
|
|
10
10
|
? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
|
package/.next/types/routes.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Do not edit this file manually
|
|
3
3
|
|
|
4
4
|
type AppRoutes = "/" | "/office" | "/office-preview" | "/recover"
|
|
5
|
-
type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/character-voice" | "/api/live/events" | "/api/live/
|
|
5
|
+
type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/account" | "/api/agent/[id]/bash-output" | "/api/agent/[id]/events" | "/api/agent/new" | "/api/agent/running" | "/api/attachment-settings" | "/api/attachments" | "/api/attachments/[id]/transcription" | "/api/attachments/draft" | "/api/auth/all-providers" | "/api/auth/api-key/[provider]" | "/api/auth/login/[provider]" | "/api/auth/logout/[provider]" | "/api/auth/providers" | "/api/cwd/browse" | "/api/cwd/validate" | "/api/default-cwd" | "/api/display-settings" | "/api/document-text" | "/api/experiments" | "/api/file-index" | "/api/files/[...path]" | "/api/git/diff" | "/api/git/status" | "/api/github/projects" | "/api/gpt6/handles" | "/api/gpt6/reply" | "/api/gpt6/token" | "/api/gpt6/web6-session" | "/api/home" | "/api/live/call/[callId]" | "/api/live/character-voice" | "/api/live/events" | "/api/live/interpret" | "/api/live/offer" | "/api/live/voices" | "/api/mcp" | "/api/model-roles" | "/api/models" | "/api/models-config" | "/api/models-config/catalog" | "/api/models-config/discover" | "/api/models-config/test" | "/api/office-avatars" | "/api/office-avatars/[id]" | "/api/plugins" | "/api/project-docs" | "/api/project-trust" | "/api/projects" | "/api/runs" | "/api/runs/[runId]" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/auto-name" | "/api/sessions/[id]/context" | "/api/sessions/[id]/entries/[entryId]/thinking" | "/api/sessions/[id]/export" | "/api/sessions/[id]/state" | "/api/sessions/search" | "/api/settings" | "/api/sidecars/[service]/[...path]" | "/api/skills" | "/api/skills/check" | "/api/skills/install" | "/api/skills/search" | "/api/skills/update" | "/api/subagents/eta" | "/api/theme" | "/api/tool-image" | "/api/update-maintenance" | "/api/updates" | "/api/web-access" | "/api/web-access/recovery" | "/api/web6/consults" | "/api/worktrees"
|
|
6
6
|
type PageRoutes = never
|
|
7
7
|
type LayoutRoutes = "/"
|
|
8
8
|
type RedirectRoutes = never
|
|
@@ -46,10 +46,9 @@ interface ParamMap {
|
|
|
46
46
|
"/api/live/call/[callId]": { "callId": string; }
|
|
47
47
|
"/api/live/character-voice": {}
|
|
48
48
|
"/api/live/events": {}
|
|
49
|
+
"/api/live/interpret": {}
|
|
49
50
|
"/api/live/offer": {}
|
|
50
51
|
"/api/live/voices": {}
|
|
51
|
-
"/api/lounge": {}
|
|
52
|
-
"/api/lounge/events": {}
|
|
53
52
|
"/api/mcp": {}
|
|
54
53
|
"/api/model-roles": {}
|
|
55
54
|
"/api/models": {}
|
package/.next/types/validator.ts
CHANGED
|
@@ -389,37 +389,28 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
|
|
|
389
389
|
type __Unused = __Check
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
// Validate ../../app/api/live/
|
|
393
|
-
{
|
|
394
|
-
type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/offer">> = Specific
|
|
395
|
-
const handler = {} as typeof import("../../app/api/live/offer/route.js")
|
|
396
|
-
type __Check = __IsExpected<typeof handler>
|
|
397
|
-
// @ts-ignore
|
|
398
|
-
type __Unused = __Check
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// Validate ../../app/api/live/voices/route.ts
|
|
392
|
+
// Validate ../../app/api/live/interpret/route.ts
|
|
402
393
|
{
|
|
403
|
-
type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/
|
|
404
|
-
const handler = {} as typeof import("../../app/api/live/
|
|
394
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/interpret">> = Specific
|
|
395
|
+
const handler = {} as typeof import("../../app/api/live/interpret/route.js")
|
|
405
396
|
type __Check = __IsExpected<typeof handler>
|
|
406
397
|
// @ts-ignore
|
|
407
398
|
type __Unused = __Check
|
|
408
399
|
}
|
|
409
400
|
|
|
410
|
-
// Validate ../../app/api/
|
|
401
|
+
// Validate ../../app/api/live/offer/route.ts
|
|
411
402
|
{
|
|
412
|
-
type __IsExpected<Specific extends RouteHandlerConfig<"/api/
|
|
413
|
-
const handler = {} as typeof import("../../app/api/
|
|
403
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/offer">> = Specific
|
|
404
|
+
const handler = {} as typeof import("../../app/api/live/offer/route.js")
|
|
414
405
|
type __Check = __IsExpected<typeof handler>
|
|
415
406
|
// @ts-ignore
|
|
416
407
|
type __Unused = __Check
|
|
417
408
|
}
|
|
418
409
|
|
|
419
|
-
// Validate ../../app/api/
|
|
410
|
+
// Validate ../../app/api/live/voices/route.ts
|
|
420
411
|
{
|
|
421
|
-
type __IsExpected<Specific extends RouteHandlerConfig<"/api/
|
|
422
|
-
const handler = {} as typeof import("../../app/api/
|
|
412
|
+
type __IsExpected<Specific extends RouteHandlerConfig<"/api/live/voices">> = Specific
|
|
413
|
+
const handler = {} as typeof import("../../app/api/live/voices/route.js")
|
|
423
414
|
type __Check = __IsExpected<typeof handler>
|
|
424
415
|
// @ts-ignore
|
|
425
416
|
type __Unused = __Check
|
package/README.md
CHANGED
|
@@ -105,15 +105,13 @@ Anthropic 구독 계정이 모두 주간 한도에 닿으면, 미리 둔 예비
|
|
|
105
105
|
- ChatGPT 상담(SHION): 로컬 shim이 전용 ChatGPT 탭에서 받은 답을 현재 omp 세션에 투영하고, 상담 기록과 실패 기록이 대화창에 표시됩니다.
|
|
106
106
|
- 실시간 음성: 브라우저 마이크로 Codex live 음성 세션을 엽니다. “끊어”, “알았어, 끊어봐”, “아니 통화 종료하라고”처럼 단독 종료 요청을 말하면 최종 전사를 받은 뒤 마이크와 통화를 종료합니다. 선택 기능인 캐릭터 음성은 **설정 → 통화 음성**에서 Cartesia API 키를 입력하고 음성 준비에 동의하면 현재 Main 캐릭터에 맞춰 적용됩니다. 통화 답변은 실제로 말한 캐릭터의 얼굴과 이름으로 표시되고, 캐릭터 음성 대신 기본 음성으로 말했으면 「기본 음성」이라고 함께 보입니다. 입력창에는 통화 시작·종료 버튼만 남으며, 좁은 화면에서는 모델 선택 등 다른 조작부와 겹치지 않게 줄바꿈합니다. 별도 음성 ID 입력은 필요하지 않으며, 키는 서버에만 보관합니다. 지원 플랜·크레딧 사용·전송 범위는 [캐릭터 통화 설정](./docs/live-voice.md)을 확인하세요.
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- 사이드바의
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
- 자동 수다는 직접 켜야 합니다. 켜 두면 조용할 때 멤버끼리 짧게 주고받습니다(속도에 따라 2·4·6회). 작업 중에는 자동 수다를 쉬고, 호출 상한과 사용량 보호를 적용합니다. 「중단」이나 방 끄기로 진행 중 응답을 멈출 수 있습니다.
|
|
116
|
-
- 한국어로 대화하되 짧은 일본어 표현을 쓸 때는 이어지는 말에서 뜻을 보완하도록 안내합니다. 실제 표현은 참여 모델에 따라 달라집니다. SHION은 상담 전용으로 남습니다.
|
|
108
|
+
**통역**
|
|
109
|
+
|
|
110
|
+
- 사이드바의 「통역」을 고르면 작업 화면 위에 통역 화면이 열립니다. 한국어·영어·베트남어·일본어·태국어 가운데 내 언어와 상대 언어를 고르고 「통역 시작」을 누르면, 휴대폰을 두 사람 사이에 두고 각자 말하기만 하면 됩니다. 누가 말하든 상대 언어로 바로 소리 내어 옮깁니다. 버튼을 번갈아 누를 필요가 없습니다.
|
|
111
|
+
- 통역은 연결된 ChatGPT 계정의 Codex 라이브 음성 통화로 합니다. 통화에는 고른 두 언어로 만든 짧은 통역 지시만 들어가고, 작업 세션·하네스 규칙·대화 기록은 들어가지 않으며 작업을 위임하지도 않습니다. 목소리는 Codex 기본 음성입니다.
|
|
112
|
+
- 화면에는 오간 말이 말풍선 자막으로 쌓입니다. 큰 글씨가 통역, 작은 글씨가 들은 원문입니다. 글자(한글·가나·태국 문자·베트남어 성조 부호 등)로 누가 말했는지 가려 내 말은 오른쪽, 상대 말은 왼쪽에 둡니다. 영어와 베트남어처럼 같은 글자를 쓰는 짝에서 이름·숫자만 말해 가를 수 없으면 왼쪽에 둡니다.
|
|
113
|
+
- 통역 중에 언어를 바꾸면 새 언어 짝으로 다시 연결합니다. 「대화로」를 누르면 통화와 마이크를 끝냅니다. 마이크는 HTTPS 주소에서만 켜지며, 통역 기록은 화면이 열려 있는 동안만 보관하고 서버에 저장하지 않습니다. 직접 입력해 번역하는 칸과 말풍선 다시 듣기는 없습니다.
|
|
114
|
+
- 작업 화면으로 돌아가도 선택한 세션·작성 중인 초안·진행 중인 작업은 그대로입니다.
|
|
117
115
|
|
|
118
116
|
**알림과 표현**
|
|
119
117
|
|
|
@@ -9,7 +9,7 @@ const MEMORY_RE = /(const phase1Model = await resolveMemoryModel\(\{[^}]*?fallba
|
|
|
9
9
|
const MEMORY_DONE = /const phase1Model = await resolveMemoryModel\(\{[^}]*?fallbackRole: "smol"/;
|
|
10
10
|
const EXPECTED = {
|
|
11
11
|
name: 'cuelo',
|
|
12
|
-
version: '0.10.
|
|
12
|
+
version: '0.10.15',
|
|
13
13
|
distribution: 'cuelo',
|
|
14
14
|
coreVersion: '18.10.4',
|
|
15
15
|
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { execFile } from "node:child_process";
|
|
2
|
-
import {
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join, resolve } from "node:path";
|
|
3
5
|
|
|
4
6
|
import { isToolCallEventType, type ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
5
7
|
import { resolveToCwd } from "@oh-my-pi/pi-coding-agent/tools/path-utils";
|
|
@@ -15,6 +17,7 @@ import { resolvePreparedTaskInput } from "../lib/prepared-task";
|
|
|
15
17
|
import { selectGitExecutor, type GitExecutor } from "../../tools/git-finalizer/wsl-git";
|
|
16
18
|
|
|
17
19
|
import { matchBlockedCommand } from "./matcher";
|
|
20
|
+
import { interopHint, windowsOutputCommand } from "./interop-hint";
|
|
18
21
|
import { matchPowerShellSyntax } from "./powershell-syntax";
|
|
19
22
|
import {
|
|
20
23
|
bindSpawnAliases,
|
|
@@ -45,6 +48,16 @@ import {
|
|
|
45
48
|
type TreeSnapshot,
|
|
46
49
|
} from "./task-guard";
|
|
47
50
|
|
|
51
|
+
/** WSL에서 Windows 실행 파일을 부를 수 있는지(binfmt interop 등록). Windows 출력 변환을 이때만 붙인다. */
|
|
52
|
+
const WSL_INTEROP = process.platform === "linux" && existsSync("/proc/sys/fs/binfmt_misc/WSLInterop");
|
|
53
|
+
|
|
54
|
+
/** eval이 자동으로 고르는 관리 Python 환경(코어 `getPythonEnvDir()` 기본값). WSL(Linux)에만 안내한다. */
|
|
55
|
+
function managedPythonPath(): string | undefined {
|
|
56
|
+
if (process.platform !== "linux") return undefined;
|
|
57
|
+
const python = join(homedir(), ".omp", "python-env", "bin", "python");
|
|
58
|
+
return existsSync(python) ? python : undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
48
61
|
function normalizeRepositoryPath(value: string): string {
|
|
49
62
|
return resolve(value).replace(/\\/g, "/").toLowerCase();
|
|
50
63
|
}
|
|
@@ -941,22 +954,25 @@ export default function commandGuard(pi: ExtensionAPI): void {
|
|
|
941
954
|
return false;
|
|
942
955
|
},
|
|
943
956
|
});
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
957
|
+
let reason = preliminaryReason;
|
|
958
|
+
if (targetDirectories.length > 0 || windowsGitTargets.length > 0) {
|
|
959
|
+
const [isSessionRepository, usesWindowsGit] = await Promise.all([
|
|
960
|
+
targetDirectories.length > 0
|
|
961
|
+
? repositoryMatcher(sessionCwd, targetDirectories)
|
|
962
|
+
: (_directory: string) => true,
|
|
963
|
+
windowsGitMatcher(windowsGitTargets),
|
|
964
|
+
]);
|
|
965
|
+
reason = matchBlockedCommand(event.input.command, {
|
|
966
|
+
cwd,
|
|
967
|
+
isSessionRepository,
|
|
968
|
+
usesWindowsGit,
|
|
969
|
+
});
|
|
947
970
|
}
|
|
948
|
-
const [isSessionRepository, usesWindowsGit] = await Promise.all([
|
|
949
|
-
targetDirectories.length > 0
|
|
950
|
-
? repositoryMatcher(sessionCwd, targetDirectories)
|
|
951
|
-
: (_directory: string) => true,
|
|
952
|
-
windowsGitMatcher(windowsGitTargets),
|
|
953
|
-
]);
|
|
954
|
-
const reason = matchBlockedCommand(event.input.command, {
|
|
955
|
-
cwd,
|
|
956
|
-
isSessionRepository,
|
|
957
|
-
usesWindowsGit,
|
|
958
|
-
});
|
|
959
971
|
if (reason) return { block: true, reason };
|
|
972
|
+
// 통과한 명령 중 Windows 실행 파일을 부르는 것은 출력이 UTF-8로 오도록 감싸 실행한다(interop-hint.ts).
|
|
973
|
+
const pty = (event.input as { pty?: unknown }).pty === true;
|
|
974
|
+
const command = windowsOutputCommand(event.input.command, { wsl: WSL_INTEROP, pty });
|
|
975
|
+
return command ? { input: { ...event.input, command } } : undefined;
|
|
960
976
|
});
|
|
961
977
|
|
|
962
978
|
// 실행된 task 호출(tool_result)과 실행 전에 끝난 호출(tool_execution_end)은 같은 항목 단위 정산을 탄다.
|
|
@@ -988,6 +1004,12 @@ export default function commandGuard(pi: ExtensionAPI): void {
|
|
|
988
1004
|
return { content: [...event.content, { type: "text", text: lines.join("\n") }] };
|
|
989
1005
|
}
|
|
990
1006
|
|
|
1007
|
+
if (event.toolName === "bash") {
|
|
1008
|
+
const command = typeof event.input.command === "string" ? event.input.command : "";
|
|
1009
|
+
const output = event.content.map((part) => (part.type === "text" ? part.text : "")).join("\n");
|
|
1010
|
+
const hint = interopHint(command, output, { managedPython: managedPythonPath() });
|
|
1011
|
+
return hint ? { content: [...event.content, { type: "text", text: hint }] } : undefined;
|
|
1012
|
+
}
|
|
991
1013
|
if (event.isError) return;
|
|
992
1014
|
const path = typeof event.input.path === "string" ? event.input.path.trim() : "";
|
|
993
1015
|
// 18.3.0 write/read 결과의 proc:// details는 선언 타입에 없으므로 unknown으로 좁힌다.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WSL bash에서 Windows/Linux 차이로 생기는 실패를 다룬다.
|
|
3
|
+
*
|
|
4
|
+
* 근거(2026-10-14 세션 기록 집계, WSL 이관 10-07 이후):
|
|
5
|
+
* - Windows 실행 파일 출력의 CP949 한글이 U+FFFD로 깨진 호출 66건. pi-natives가 bash 출력을 UTF-8로
|
|
6
|
+
* 손실 해석하므로 결과 쪽에서는 되살릴 수 없다. 그래서 실행 전에 출력이 UTF-8이 되도록 명령을 감싼다
|
|
7
|
+
* ({@link windowsOutputCommand}). 감싸지 못한 명령이 깨지면 다시 실행할 방법을 안내한다.
|
|
8
|
+
* - 시스템 `python3`에 PyMuPDF·openpyxl·Pillow·ezdxf·python-docx가 없어 실패한 호출 28건.
|
|
9
|
+
* 관리 Python 환경(`~/.omp/python-env`, eval이 자동으로 고르는 환경)에는 설치돼 있다.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// 실행 파일 이름 끝의 `.exe`만 본다(`x.exe.log` 같은 인자는 아니다). `powershell`·`pwsh`도 낱말 하나일 때만(`powershell.md`는 아니다).
|
|
13
|
+
const WINDOWS_EXECUTABLE = /\.exe(?=["'\s;&|)<>]|$)|(?<=^|[\s;&|(/"'=])(?:powershell|pwsh)(?=["'\s;&|)<>]|$)/im;
|
|
14
|
+
const MOJIBAKE = /\uFFFD{2,}/;
|
|
15
|
+
const MISSING_PYTHON_MODULE = /ModuleNotFoundError: No module named '([\w.]+)'/;
|
|
16
|
+
// `python3`, `python3.12`, `/usr/bin/python3`, `"/usr/bin/python3"`처럼 경로·따옴표를 붙인 호출도 잡는다.
|
|
17
|
+
const PYTHON_COMMAND = /(?:^|[\s;&|(/"'])python3?(?:\.\d+)?(?=["'\s;&|)]|$)/m;
|
|
18
|
+
|
|
19
|
+
export interface InteropHintContext {
|
|
20
|
+
/** 관리 Python 환경의 python 실행 파일. 없으면 Python 안내를 내지 않는다. */
|
|
21
|
+
managedPython?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 출력 줄이 UTF-8로 읽히면 그대로 두고, 아니면 CP949로 읽어 UTF-8로 낸다. Windows의 UTF-8 출력
|
|
25
|
+
// (`git.exe`, `WSL_UTF8`을 받은 `wsl.exe`, BOM `.ps1`)과 Linux 출력은 바뀌지 않는다.
|
|
26
|
+
const DECODER = [
|
|
27
|
+
"import sys",
|
|
28
|
+
"w = sys.stdout.buffer",
|
|
29
|
+
"for b in iter(sys.stdin.buffer.readline, b''):",
|
|
30
|
+
" try:",
|
|
31
|
+
" t = b.decode('utf-8')",
|
|
32
|
+
" except UnicodeDecodeError:",
|
|
33
|
+
" t = b.decode('cp949', 'replace')",
|
|
34
|
+
" w.write(t.encode('utf-8'))",
|
|
35
|
+
" w.flush()",
|
|
36
|
+
].join("\n");
|
|
37
|
+
// 출력이 변환기 하나를 거치도록 원래 명령을 실제 bash 한 번으로 돌리고, 그 종료 코드를 그대로 돌려준다.
|
|
38
|
+
// 원문과 변환기는 base64로 넘겨 따옴표·heredoc이 어떤 모양이든 그대로 실행된다.
|
|
39
|
+
const RUNNER =
|
|
40
|
+
'c=$(printf %s "$1" | base64 -d) && p=$(printf %s "$2" | base64 -d) || exit 2; ' +
|
|
41
|
+
'bash -c "$c" 2>&1 | python3 -u -c "$p"; exit "${PIPESTATUS[0]}"';
|
|
42
|
+
// 명령에 든 Windows 프로그램 이름(경로 마지막 조각)을 모두 찾는다.
|
|
43
|
+
const WINDOWS_PROGRAM = /[\w.-]*\.exe(?=["'\s;&|)<>]|$)|(?<=^|[\s;&|(/"'=])(?:powershell|pwsh)(?=["'\s;&|)<>]|$)/gim;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* bash 따옴표·이스케이프를 따라가며 따옴표 밖의 백그라운드 `&`가 있는지 본다(`&&`·`&>`·`>&`·`<&`·`|&` 제외).
|
|
47
|
+
* 백그라운드 자식이 출력 파이프를 붙잡으면 감싼 호출이 끝나지 않으므로 그런 명령은 감싸지 않는다.
|
|
48
|
+
* 따옴표 안의 `&`(PowerShell 호출 연산자 등)와 `\&`는 bash 연산자가 아니다.
|
|
49
|
+
*/
|
|
50
|
+
function hasBackgroundAmpersand(command: string): boolean {
|
|
51
|
+
let quote: string | undefined;
|
|
52
|
+
for (let index = 0; index < command.length; index++) {
|
|
53
|
+
const char = command[index];
|
|
54
|
+
if (quote === "'") {
|
|
55
|
+
if (char === "'") quote = undefined;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (char === "\\") {
|
|
59
|
+
index++;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (quote === '"') {
|
|
63
|
+
if (char === '"') quote = undefined;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (char === "'" || char === '"') {
|
|
67
|
+
quote = char;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (char !== "&") continue;
|
|
71
|
+
const previous = command[index - 1] ?? "";
|
|
72
|
+
const next = command[index + 1] ?? "";
|
|
73
|
+
if (next === "&") {
|
|
74
|
+
index++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (next === ">" || previous === ">" || previous === "<" || previous === "|") continue;
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface WindowsOutputContext {
|
|
84
|
+
/** WSL에서 Windows 실행 파일을 부를 수 있을 때만 감싼다. */
|
|
85
|
+
wsl: boolean;
|
|
86
|
+
/** 대화형 pty 실행은 감싸지 않는다. */
|
|
87
|
+
pty?: boolean;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Windows 실행 파일을 부르는 bash 명령을, 출력을 UTF-8로 바꿔 내는 명령으로 감싼다. 감쌀 필요가 없거나
|
|
92
|
+
* 감싸면 동작이 달라질 수 있는 명령은 `undefined`를 돌려준다.
|
|
93
|
+
*
|
|
94
|
+
* 감싼 명령은 지속 셸이 아니라 새 bash에서 돌므로, 그 안의 `cd`·변수 대입은 다음 호출로 이어지지 않는다
|
|
95
|
+
* (export된 환경과 작업 폴더는 물려받는다).
|
|
96
|
+
*/
|
|
97
|
+
export function windowsOutputCommand(command: string, context: WindowsOutputContext): string | undefined {
|
|
98
|
+
if (!context.wsl || context.pty) return undefined;
|
|
99
|
+
if (/\biconv\b/.test(command) || hasBackgroundAmpersand(command)) return undefined;
|
|
100
|
+
// `git.exe`는 UTF-8로 내고 /mnt 저장소에서 가장 자주 부르므로, Windows 프로그램이 그것뿐이면 감싸지 않는다.
|
|
101
|
+
const programs = [...command.matchAll(WINDOWS_PROGRAM)].map((match) => match[0].toLowerCase());
|
|
102
|
+
if (programs.every((program) => program === "git.exe")) return undefined;
|
|
103
|
+
const encodedCommand = Buffer.from(command, "utf8").toString("base64");
|
|
104
|
+
const encodedDecoder = Buffer.from(DECODER, "utf8").toString("base64");
|
|
105
|
+
return `bash -c '${RUNNER}' cuelo-windows-output '${encodedCommand}' '${encodedDecoder}'`;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function interopHint(command: string, output: string, context: InteropHintContext = {}): string | undefined {
|
|
109
|
+
const hints: string[] = [];
|
|
110
|
+
if (WINDOWS_EXECUTABLE.test(command) && !/\biconv\b/.test(command) && MOJIBAKE.test(output)) {
|
|
111
|
+
hints.push(
|
|
112
|
+
"[WSL interop] Windows 프로그램 출력의 한글이 CP949라 깨졌다(�). 자동 UTF-8 변환은 `&` 백그라운드·pty·`iconv`가 든 명령을 감싸지 않는다. 이 결과는 복구할 수 없으니 `| iconv -f cp949 -t utf-8`을 붙여 다시 실행한다. `wsl.exe`는 `WSL_UTF8=1 WSLENV=WSL_UTF8`을 쓴다.",
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
const missing = MISSING_PYTHON_MODULE.exec(output);
|
|
116
|
+
if (missing && context.managedPython && PYTHON_COMMAND.test(command) && !command.includes("python-env/bin/python")) {
|
|
117
|
+
hints.push(
|
|
118
|
+
`[WSL interop] 시스템 python3에는 '${missing[1]}'이 없다. 관리 Python 환경 \`${context.managedPython}\`(eval도 이 환경을 쓴다)으로 다시 실행하고, 그래도 없으면 그 환경에 \`-m pip install\`로 넣는다.`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
return hints.length > 0 ? hints.join("\n") : undefined;
|
|
122
|
+
}
|
|
@@ -40,6 +40,8 @@ export const SLOT: Record<Family, string> = { openai: "crossReviewOpenAI", anthr
|
|
|
40
40
|
export const DELETED_BLOB = "deleted";
|
|
41
41
|
/** 원장에 남기는 reviewer 원문 발췌 길이. 전문은 사본 디렉터리의 raw-<계열>.txt에 둔다. */
|
|
42
42
|
const RAW_EXCERPT_CHARS = 20_000;
|
|
43
|
+
/** 도구 결과로 Main에 돌려주는 발췌 길이. 더 필요하면 rawFile을 읽는다(긴 답을 매번 컨텍스트에 싣지 않는다). */
|
|
44
|
+
const RESULT_EXCERPT_CHARS = 2_000;
|
|
43
45
|
|
|
44
46
|
// ── 계열 매핑 ────────────────────────────────────────────────────────────────
|
|
45
47
|
|
|
@@ -567,7 +569,7 @@ export interface ReviewDeps {
|
|
|
567
569
|
export interface ReviewResult {
|
|
568
570
|
reviewId: string;
|
|
569
571
|
round: 1 | 2;
|
|
570
|
-
reviewers: { family: Family; model: string; status: CrossReviewReviewer["status"]; elapsedSec: number; raw?: string; rawFile?: string; error?: string }[];
|
|
572
|
+
reviewers: { family: Family; model: string; status: CrossReviewReviewer["status"]; elapsedSec: number; raw?: string; rawChars?: number; rawFile?: string; error?: string }[];
|
|
571
573
|
triggers: string[];
|
|
572
574
|
highRisk: boolean;
|
|
573
575
|
findings: CrossReviewFinding[];
|
|
@@ -757,12 +759,12 @@ export async function runReview(input: ReviewInput, deps: ReviewDeps, signal: Ab
|
|
|
757
759
|
|
|
758
760
|
const reviewers: CrossReviewReviewer[] = [];
|
|
759
761
|
const findings: CrossReviewFinding[] = [];
|
|
760
|
-
const
|
|
762
|
+
const rawChars: Partial<Record<Family, number>> = {};
|
|
761
763
|
const keepRaw = (item: { family: Family; text: string }): { raw: string; rawFile: string } => {
|
|
762
|
-
// 답 전문은 사본 디렉터리의 파일로
|
|
764
|
+
// 답 전문은 사본 디렉터리의 파일로 남긴다. 원장에는 앞 20 KB 발췌, 결과에는 앞 2,000자와 전체 길이·경로만 준다.
|
|
763
765
|
const rawFile = join(snapshotDir, `raw-${item.family}.txt`);
|
|
764
766
|
writeFileSync(rawFile, item.text, { mode: 0o600 });
|
|
765
|
-
|
|
767
|
+
rawChars[item.family] = item.text.length;
|
|
766
768
|
return { raw: item.text.slice(0, RAW_EXCERPT_CHARS), rawFile };
|
|
767
769
|
};
|
|
768
770
|
for (const item of settled) {
|
|
@@ -782,7 +784,11 @@ export async function runReview(input: ReviewInput, deps: ReviewDeps, signal: Ab
|
|
|
782
784
|
};
|
|
783
785
|
if (!deps.append(record)) throw new Error(`The review ran but could not be recorded in the routing ledger (${reviewId}); it cannot be resolved. Re-run it.`);
|
|
784
786
|
return {
|
|
785
|
-
reviewId, round, reviewers: reviewers.map((reviewer) => ({
|
|
787
|
+
reviewId, round, reviewers: reviewers.map((reviewer) => ({
|
|
788
|
+
family: reviewer.family, model: reviewer.model, status: reviewer.status, elapsedSec: Math.round(reviewer.elapsedMs / 1000),
|
|
789
|
+
...(reviewer.raw !== undefined ? { raw: reviewer.raw.slice(0, RESULT_EXCERPT_CHARS), rawChars: rawChars[reviewer.family], rawFile: reviewer.rawFile } : {}),
|
|
790
|
+
...(reviewer.error ? { error: reviewer.error } : {}),
|
|
791
|
+
})),
|
|
786
792
|
triggers: record.triggers, highRisk: record.highRisk, findings, skipped, redacted, passable, snapshotDir, nextStep: describeNext(round, passable, findings.length),
|
|
787
793
|
};
|
|
788
794
|
}
|