cuelo 0.10.52 → 0.10.53
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 +35 -35
- package/.next/build-manifest.json +4 -4
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +549 -561
- package/.next/required-server-files.js +25 -25
- package/.next/required-server-files.json +25 -25
- package/.next/server/app/_global-error/page.js +3 -3
- 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 +2 -2
- package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- 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 +1 -1
- package/.next/server/app/api/agent/[id]/account/route.js +1 -1
- package/.next/server/app/api/agent/[id]/account/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +2 -2
- package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/new/route.js +1 -1
- package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agent/running/route.js +1 -1
- package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/attachment-settings/route.js +1 -1
- package/.next/server/app/api/attachment-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/attachments/[id]/transcription/route.js +2 -2
- package/.next/server/app/api/attachments/[id]/transcription/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/attachments/draft/route.js +1 -1
- package/.next/server/app/api/attachments/draft/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/attachments/route.js +2 -2
- package/.next/server/app/api/attachments/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/all-providers/route.js +1 -1
- package/.next/server/app/api/auth/all-providers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
- package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/providers/route.js +1 -1
- package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/character-mode/route.js +1 -2
- package/.next/server/app/api/character-mode/route.js.nft.json +1 -1
- package/.next/server/app/api/character-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/browse/route.js +1 -1
- package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/display-settings/route.js +1 -1
- package/.next/server/app/api/display-settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/document-text/route.js +2 -2
- package/.next/server/app/api/document-text/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/experiments/route.js +1 -1
- package/.next/server/app/api/experiments/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/diff/route.js +1 -1
- package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/status/route.js +2 -2
- package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/github/projects/route.js +1 -1
- package/.next/server/app/api/github/projects/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/gpt6/handles/route.js +1 -1
- package/.next/server/app/api/gpt6/handles/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/gpt6/reply/route.js +1 -1
- package/.next/server/app/api/gpt6/reply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/gpt6/token/route.js +1 -1
- package/.next/server/app/api/gpt6/token/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route.js +1 -1
- package/.next/server/app/api/gpt6/web6-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/home/route.js +1 -1
- package/.next/server/app/api/home/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/live/call/[callId]/route.js +2 -2
- package/.next/server/app/api/live/call/[callId]/route.js.nft.json +1 -1
- package/.next/server/app/api/live/call/[callId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/live/events/route.js +2 -2
- package/.next/server/app/api/live/events/route.js.nft.json +1 -1
- package/.next/server/app/api/live/events/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/live/interpret/route.js +2 -2
- package/.next/server/app/api/live/interpret/route.js.nft.json +1 -1
- package/.next/server/app/api/live/interpret/route_client-reference-manifest.js +1 -1
- 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/offer/route_client-reference-manifest.js +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/live/voices/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/mcp/route.js +2 -2
- package/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/model-roles/route.js +1 -1
- package/.next/server/app/api/model-roles/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/catalog/route.js +1 -1
- package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/discover/route.js +1 -1
- package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/route.js +3 -3
- package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models-config/test/route.js +1 -1
- package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/office-characters/[...path]/route.js +1 -2
- package/.next/server/app/api/office-characters/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/office-characters/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/project-docs/route.js +1 -1
- package/.next/server/app/api/project-docs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/route.js +2 -2
- package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/[runId]/prelude/route.js +1 -1
- package/.next/server/app/api/runs/[runId]/prelude/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/[runId]/turns/route.js +1 -1
- package/.next/server/app/api/runs/[runId]/turns/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/runs/route.js +1 -1
- package/.next/server/app/api/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/search/route.js +1 -1
- package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/route.js +1 -1
- package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidecars/[service]/[...path]/route.js +1 -1
- package/.next/server/app/api/sidecars/[service]/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/install/route.js +2 -2
- package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/search/route.js +1 -1
- package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/subagents/eta/route.js +1 -1
- package/.next/server/app/api/subagents/eta/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/theme/route.js +1 -1
- package/.next/server/app/api/theme/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tool-image/route.js +1 -1
- package/.next/server/app/api/tool-image/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/update-maintenance/route.js +2 -2
- package/.next/server/app/api/update-maintenance/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/updates/route.js +1 -1
- package/.next/server/app/api/updates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/web-access/recovery/route.js +1 -1
- package/.next/server/app/api/web-access/recovery/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/web-access/route.js +1 -1
- package/.next/server/app/api/web-access/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/web6/consults/route.js +1 -1
- package/.next/server/app/api/web6/consults/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.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 +4 -4
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +5 -5
- 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 +2 -2
- package/.next/server/app/recover.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/recover.segments/recover/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/recover.segments/recover.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +35 -35
- package/.next/server/chunks/1008.js +2 -2
- package/.next/server/chunks/1966.js +2 -0
- package/.next/server/chunks/319.js +3 -3
- package/.next/server/chunks/6429.js +2 -2
- package/.next/server/chunks/6775.js +7 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/middleware.js +9 -9
- 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/chunks/app/_not-found/page-041b64675adcdf82.js +1 -0
- package/.next/static/chunks/app/layout-3b1f8b74c7fc5e77.js +1 -0
- package/.next/static/chunks/app/{page-3640086c732eb87d.js → page-efae4fdcf84b7a14.js} +4 -4
- package/.next/static/chunks/app/recover/{page-c0c40b3c215078a4.js → page-2bcd6a351f3eda3d.js} +1 -1
- package/.next/static/chunks/{main-app-fbc4aa3c15d48613.js → main-app-ca46ab75db2b4e4b.js} +1 -1
- package/.next/static/chunks/main-dd4c9daba44bef88.js +5 -0
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-dac2a58a3b9eb28e.js +1 -0
- package/.next/static/chunks/webpack-546c8221d1906945.js +1 -0
- package/.next/trace +107 -107
- package/.next/trace-build +1 -1
- package/.next/types/app/api/agent/[id]/account/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/bash-output/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/events/route.ts +1 -1
- package/.next/types/app/api/agent/[id]/route.ts +1 -1
- package/.next/types/app/api/agent/new/route.ts +1 -1
- package/.next/types/app/api/agent/running/route.ts +1 -1
- package/.next/types/app/api/attachment-settings/route.ts +1 -1
- package/.next/types/app/api/attachments/[id]/transcription/route.ts +1 -1
- package/.next/types/app/api/attachments/draft/route.ts +1 -1
- package/.next/types/app/api/attachments/route.ts +1 -1
- package/.next/types/app/api/auth/all-providers/route.ts +1 -1
- package/.next/types/app/api/auth/api-key/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/login/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/logout/[provider]/route.ts +1 -1
- package/.next/types/app/api/auth/providers/route.ts +1 -1
- package/.next/types/app/api/character-mode/route.ts +1 -1
- package/.next/types/app/api/cwd/browse/route.ts +1 -1
- package/.next/types/app/api/cwd/validate/route.ts +1 -1
- package/.next/types/app/api/default-cwd/route.ts +1 -1
- package/.next/types/app/api/display-settings/route.ts +1 -1
- package/.next/types/app/api/document-text/route.ts +1 -1
- package/.next/types/app/api/experiments/route.ts +1 -1
- package/.next/types/app/api/file-index/route.ts +1 -1
- package/.next/types/app/api/files/[...path]/route.ts +1 -1
- package/.next/types/app/api/git/diff/route.ts +1 -1
- package/.next/types/app/api/git/status/route.ts +1 -1
- package/.next/types/app/api/github/projects/route.ts +1 -1
- package/.next/types/app/api/gpt6/handles/route.ts +1 -1
- package/.next/types/app/api/gpt6/reply/route.ts +1 -1
- package/.next/types/app/api/gpt6/token/route.ts +1 -1
- package/.next/types/app/api/gpt6/web6-session/route.ts +1 -1
- package/.next/types/app/api/home/route.ts +1 -1
- package/.next/types/app/api/live/call/[callId]/route.ts +1 -1
- package/.next/types/app/api/live/events/route.ts +1 -1
- package/.next/types/app/api/live/interpret/route.ts +1 -1
- package/.next/types/app/api/live/offer/route.ts +1 -1
- package/.next/types/app/api/live/voices/route.ts +1 -1
- package/.next/types/app/api/mcp/route.ts +1 -1
- package/.next/types/app/api/model-roles/route.ts +1 -1
- package/.next/types/app/api/models/route.ts +1 -1
- package/.next/types/app/api/models-config/catalog/route.ts +1 -1
- package/.next/types/app/api/models-config/discover/route.ts +1 -1
- package/.next/types/app/api/models-config/route.ts +1 -1
- package/.next/types/app/api/models-config/test/route.ts +1 -1
- package/.next/types/app/api/office-characters/[...path]/route.ts +1 -1
- package/.next/types/app/api/plugins/route.ts +1 -1
- package/.next/types/app/api/project-docs/route.ts +1 -1
- package/.next/types/app/api/project-trust/route.ts +1 -1
- package/.next/types/app/api/projects/route.ts +1 -1
- package/.next/types/app/api/runs/[runId]/prelude/route.ts +1 -1
- package/.next/types/app/api/runs/[runId]/route.ts +1 -1
- package/.next/types/app/api/runs/[runId]/turns/route.ts +1 -1
- package/.next/types/app/api/runs/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/auto-name/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/context/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/export/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/route.ts +1 -1
- package/.next/types/app/api/sessions/[id]/state/route.ts +1 -1
- package/.next/types/app/api/sessions/route.ts +1 -1
- package/.next/types/app/api/sessions/search/route.ts +1 -1
- package/.next/types/app/api/settings/route.ts +1 -1
- package/.next/types/app/api/sidecars/[service]/[...path]/route.ts +1 -1
- package/.next/types/app/api/skills/check/route.ts +1 -1
- package/.next/types/app/api/skills/install/route.ts +1 -1
- package/.next/types/app/api/skills/route.ts +1 -1
- package/.next/types/app/api/skills/search/route.ts +1 -1
- package/.next/types/app/api/skills/update/route.ts +1 -1
- package/.next/types/app/api/subagents/eta/route.ts +1 -1
- package/.next/types/app/api/theme/route.ts +1 -1
- package/.next/types/app/api/tool-image/route.ts +1 -1
- package/.next/types/app/api/update-maintenance/route.ts +1 -1
- package/.next/types/app/api/updates/route.ts +1 -1
- package/.next/types/app/api/web-access/recovery/route.ts +1 -1
- package/.next/types/app/api/web-access/route.ts +1 -1
- package/.next/types/app/api/web6/consults/route.ts +1 -1
- package/.next/types/app/api/worktrees/route.ts +1 -1
- package/.next/types/app/layout.ts +1 -1
- package/.next/types/app/page.ts +1 -1
- package/.next/types/app/recover/page.ts +1 -1
- package/LICENSE +22 -22
- package/README.md +273 -271
- package/Tools/CUELO_Setup/files/btw-server.js +346 -346
- package/Tools/CUELO_Setup/files/native-runtime-patch.js +238 -238
- package/Tools/CUELO_Setup/files/subagent-server.js +587 -587
- package/Tools/CUELO_Setup/files/usage-server.js +1057 -1057
- package/Tools/OMP_Global_Config/agent/AGENTS.md +144 -144
- package/Tools/OMP_Global_Config/agent/RULES.md +140 -140
- package/Tools/OMP_Global_Config/agent/TITLE_SYSTEM.md +17 -17
- package/Tools/OMP_Global_Config/agent/WATCHDOG.md +55 -55
- package/Tools/OMP_Global_Config/agent/agents/maker.md +413 -413
- package/Tools/OMP_Global_Config/agent/extensions/character-voice.ts +1035 -1035
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/index.ts +1110 -1110
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/interop-hint.ts +133 -133
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/matcher.ts +2258 -2258
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/powershell-syntax.ts +210 -210
- package/Tools/OMP_Global_Config/agent/extensions/command-guard/task-guard.ts +1137 -1121
- package/Tools/OMP_Global_Config/agent/extensions/cross-review.ts +132 -132
- package/Tools/OMP_Global_Config/agent/extensions/docmap-route.ts +133 -133
- package/Tools/OMP_Global_Config/agent/extensions/draft/markdown.ts +226 -226
- package/Tools/OMP_Global_Config/agent/extensions/draft/ooxml.ts +222 -222
- package/Tools/OMP_Global_Config/agent/extensions/draft/pdf.ts +63 -63
- package/Tools/OMP_Global_Config/agent/extensions/draft/zip.ts +73 -73
- package/Tools/OMP_Global_Config/agent/extensions/draft.ts +204 -204
- package/Tools/OMP_Global_Config/agent/extensions/edit-lessons.ts +159 -159
- package/Tools/OMP_Global_Config/agent/extensions/external-advice-check.ts +36 -36
- package/Tools/OMP_Global_Config/agent/extensions/gitnexus-autosync.ts +406 -406
- package/Tools/OMP_Global_Config/agent/extensions/image-question-router.ts +55 -55
- package/Tools/OMP_Global_Config/agent/extensions/jev-runtime.ts +2700 -2700
- package/Tools/OMP_Global_Config/agent/extensions/korean-reply-guard.ts +190 -190
- package/Tools/OMP_Global_Config/agent/extensions/lib/cross-review.ts +1208 -1208
- package/Tools/OMP_Global_Config/agent/extensions/lib/docmap-search.ts +612 -612
- package/Tools/OMP_Global_Config/agent/extensions/lib/job-observation.ts +182 -182
- package/Tools/OMP_Global_Config/agent/extensions/lib/maker-routing.ts +1332 -1332
- package/Tools/OMP_Global_Config/agent/extensions/lib/mcp-selection.ts +361 -361
- package/Tools/OMP_Global_Config/agent/extensions/lib/memory-excerpt.ts +5 -5
- package/Tools/OMP_Global_Config/agent/extensions/lib/native-judge.ts +113 -113
- package/Tools/OMP_Global_Config/agent/extensions/lib/prepared-task.ts +211 -211
- package/Tools/OMP_Global_Config/agent/extensions/lib/routing-ledger.ts +538 -538
- package/Tools/OMP_Global_Config/agent/extensions/lib/session-identity.ts +34 -34
- package/Tools/OMP_Global_Config/agent/extensions/lib/task-progress.ts +492 -492
- package/Tools/OMP_Global_Config/agent/extensions/mcp-selection.ts +301 -301
- package/Tools/OMP_Global_Config/agent/extensions/prompt-compact.ts +67 -67
- package/Tools/OMP_Global_Config/agent/extensions/report-chart-guard.ts +102 -102
- package/Tools/OMP_Global_Config/agent/extensions/skim.ts +332 -332
- package/Tools/OMP_Global_Config/agent/extensions/steering-reply-gate.ts +207 -207
- package/Tools/OMP_Global_Config/agent/extensions/todo-nudge.ts +80 -80
- package/Tools/OMP_Global_Config/agent/extensions/turn-end-guard.ts +421 -421
- package/Tools/OMP_Global_Config/agent/prompt-copies/AGENTS.en.md +147 -147
- package/Tools/OMP_Global_Config/agent/prompt-copies/RULES.en.md +49 -49
- package/Tools/OMP_Global_Config/agent/rules/docs-handoff.md +39 -39
- package/Tools/OMP_Global_Config/agent/rules/frontend.md +74 -74
- package/Tools/OMP_Global_Config/agent/rules/harness-policy.json +1224 -1224
- package/Tools/OMP_Global_Config/agent/rules/legacy-encoding.md +21 -21
- package/Tools/OMP_Global_Config/agent/rules/meta-harness.md +45 -45
- package/Tools/OMP_Global_Config/agent/rules/omp-harness.md +151 -151
- package/Tools/OMP_Global_Config/agent/rules/subagent.md +750 -750
- package/Tools/OMP_Global_Config/agent/rules/task-guard.md +62 -62
- package/Tools/OMP_Global_Config/agent/rules/verdict.md +210 -210
- package/Tools/OMP_Global_Config/agent/rules/web6-consult.md +83 -83
- package/Tools/OMP_Global_Config/agent/sop/_common.md +136 -136
- package/Tools/OMP_Global_Config/agent/sop/_writer.md +259 -259
- package/Tools/OMP_Global_Config/agent/sop/maker.md +9 -9
- package/Tools/OMP_Global_Config/agent/tools/git-finalizer/finalizer.ps1 +409 -409
- package/Tools/OMP_Global_Config/agent/tools/git-finalizer/index.ts +303 -303
- package/Tools/OMP_Global_Config/agent/tools/git-finalizer/sync-checkout.ts +184 -184
- package/Tools/OMP_Global_Config/agent/tools/git-finalizer/wsl-git.ts +96 -96
- package/Tools/OMP_Global_Config/agent/tools/windows-build/index.ts +387 -387
- package/Tools/OMP_Global_Config/agent/tools/windows-control/control.ps1 +200 -200
- package/Tools/OMP_Global_Config/agent/tools/windows-control/index.ts +255 -255
- package/Tools/OMP_Global_Config/notices/orchestrate.md +26 -26
- package/Tools/OMP_Global_Config/notices/ultrathink.md +9 -9
- package/Tools/OMP_Global_Config/notices/workflow.md +16 -16
- package/Tools/OMP_Global_Config/patches/apply-core-patch.mjs +18339 -18304
- package/Tools/OMP_Global_Config/patches/apply-notices.mjs +135 -135
- package/bin/cuelo-options.js +38 -38
- package/bin/cuelo.js +273 -273
- package/bin/docker-entrypoint.mjs +19 -19
- package/bin/password-prompt.js +100 -100
- package/bin/prepare-runtime.js +112 -112
- package/bin/runtime.js +134 -134
- package/bin/web-auth-store.d.ts +104 -104
- package/bin/web-auth-store.js +593 -593
- package/install.mjs +427 -427
- package/next.config.ts +104 -104
- package/package.json +141 -141
- package/public/audio/completion/voices.json +1393 -1393
- package/public/fonts/cuelo-display/NOTICE.txt +15 -15
- package/public/fonts/fonts.css +288 -288
- package/public/fonts/jetbrains-mono/OFL.txt +93 -93
- package/public/fonts/wanted-sans/OFL.txt +93 -93
- package/public/icons/catppuccin/LICENSE +22 -22
- package/public/icons/catppuccin/README.md +8 -8
- package/public/icons/catppuccin/latte/_file.svg +3 -3
- package/public/icons/catppuccin/latte/_folder.svg +3 -3
- package/public/icons/catppuccin/latte/_folder_open.svg +3 -3
- package/public/icons/catppuccin/latte/bash.svg +7 -7
- package/public/icons/catppuccin/latte/bun-lock.svg +8 -8
- package/public/icons/catppuccin/latte/config.svg +3 -3
- package/public/icons/catppuccin/latte/css.svg +6 -6
- package/public/icons/catppuccin/latte/database.svg +3 -3
- package/public/icons/catppuccin/latte/docker.svg +3 -3
- package/public/icons/catppuccin/latte/env.svg +3 -3
- package/public/icons/catppuccin/latte/eslint.svg +6 -6
- package/public/icons/catppuccin/latte/git.svg +6 -6
- package/public/icons/catppuccin/latte/go.svg +3 -3
- package/public/icons/catppuccin/latte/graphql.svg +3 -3
- package/public/icons/catppuccin/latte/html.svg +6 -6
- package/public/icons/catppuccin/latte/javascript-react.svg +8 -8
- package/public/icons/catppuccin/latte/javascript.svg +6 -6
- package/public/icons/catppuccin/latte/json.svg +3 -3
- package/public/icons/catppuccin/latte/lock.svg +3 -3
- package/public/icons/catppuccin/latte/markdown.svg +3 -3
- package/public/icons/catppuccin/latte/ms-word.svg +6 -6
- package/public/icons/catppuccin/latte/next.svg +6 -6
- package/public/icons/catppuccin/latte/npm-lock.svg +7 -7
- package/public/icons/catppuccin/latte/pdf.svg +3 -3
- package/public/icons/catppuccin/latte/python.svg +8 -8
- package/public/icons/catppuccin/latte/rust.svg +6 -6
- package/public/icons/catppuccin/latte/sass.svg +3 -3
- package/public/icons/catppuccin/latte/terraform.svg +3 -3
- package/public/icons/catppuccin/latte/toml.svg +3 -3
- package/public/icons/catppuccin/latte/typescript-react.svg +8 -8
- package/public/icons/catppuccin/latte/typescript.svg +6 -6
- package/public/icons/catppuccin/latte/yaml.svg +3 -3
- package/public/icons/catppuccin/mocha/_file.svg +3 -3
- package/public/icons/catppuccin/mocha/_folder.svg +3 -3
- package/public/icons/catppuccin/mocha/_folder_open.svg +3 -3
- package/public/icons/catppuccin/mocha/bash.svg +7 -7
- package/public/icons/catppuccin/mocha/bun-lock.svg +8 -8
- package/public/icons/catppuccin/mocha/config.svg +3 -3
- package/public/icons/catppuccin/mocha/css.svg +6 -6
- package/public/icons/catppuccin/mocha/database.svg +3 -3
- package/public/icons/catppuccin/mocha/docker.svg +3 -3
- package/public/icons/catppuccin/mocha/env.svg +3 -3
- package/public/icons/catppuccin/mocha/eslint.svg +6 -6
- package/public/icons/catppuccin/mocha/git.svg +6 -6
- package/public/icons/catppuccin/mocha/go.svg +3 -3
- package/public/icons/catppuccin/mocha/graphql.svg +3 -3
- package/public/icons/catppuccin/mocha/html.svg +6 -6
- package/public/icons/catppuccin/mocha/javascript-react.svg +8 -8
- package/public/icons/catppuccin/mocha/javascript.svg +6 -6
- package/public/icons/catppuccin/mocha/json.svg +3 -3
- package/public/icons/catppuccin/mocha/lock.svg +3 -3
- package/public/icons/catppuccin/mocha/markdown.svg +3 -3
- package/public/icons/catppuccin/mocha/ms-word.svg +6 -6
- package/public/icons/catppuccin/mocha/next.svg +6 -6
- package/public/icons/catppuccin/mocha/npm-lock.svg +7 -7
- package/public/icons/catppuccin/mocha/pdf.svg +3 -3
- package/public/icons/catppuccin/mocha/python.svg +8 -8
- package/public/icons/catppuccin/mocha/rust.svg +6 -6
- package/public/icons/catppuccin/mocha/sass.svg +3 -3
- package/public/icons/catppuccin/mocha/terraform.svg +3 -3
- package/public/icons/catppuccin/mocha/toml.svg +3 -3
- package/public/icons/catppuccin/mocha/typescript-react.svg +8 -8
- package/public/icons/catppuccin/mocha/typescript.svg +6 -6
- package/public/icons/catppuccin/mocha/yaml.svg +3 -3
- package/public/icons/cuelo-icon.svg +8 -8
- package/public/offline.html +145 -145
- package/public/sw.js +135 -135
- package/.next/server/chunks/205.js +0 -7
- package/.next/server/chunks/7738.js +0 -1
- package/.next/static/chunks/1966.b8f83f7ba376c962.js +0 -1
- package/.next/static/chunks/3899.3f761f7e3a944e8c.js +0 -1
- package/.next/static/chunks/app/_not-found/page-9e5295df095e2e41.js +0 -1
- package/.next/static/chunks/app/layout-8b29ba206a96135e.js +0 -1
- package/.next/static/chunks/main-1ddb405481ce21f6.js +0 -5
- package/.next/static/chunks/next/dist/client/components/builtin/global-error-50782c8c9c06c8b5.js +0 -1
- package/.next/static/chunks/webpack-7b514b9855bd748c.js +0 -1
- /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_buildManifest.js +0 -0
- /package/.next/static/{dQA--5NX6NZt_A6pLZUde → -mDQEyWQ8VQsAfLpiACIP}/_ssgManifest.js +0 -0
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
// 규칙 원문(AGENTS.md·RULES.md)은 한국어 정본으로 두고, 모델에 싣는 사본만 영어 압축본(prompt-copies/)으로 바꾼다.
|
|
2
|
-
// Opus 토크나이저에서 한국어 규칙은 약 1.2자/토큰, 영어는 약 4자/토큰이라 같은 규칙이 요청마다 3배 가까이 든다.
|
|
3
|
-
// 사본 첫 줄의 source 지문이 현재 원문과 다르면(원문만 고치고 사본을 갱신하지 않음) 그 원문은 그대로 싣는다.
|
|
4
|
-
import { readFileSync } from "node:fs";
|
|
5
|
-
import { join } from "node:path";
|
|
6
|
-
|
|
7
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
8
|
-
|
|
9
|
-
const AGENT_DIR = join(import.meta.dir, "..");
|
|
10
|
-
const HEADER = /^<!-- source-fingerprint: ([0-9a-f]+) -->\r?\n/;
|
|
11
|
-
|
|
12
|
-
/** 원문 지문. 줄바꿈 차이와 앞뒤 공백은 무시한다. 사본 갱신 시 이 값을 사본 첫 줄에 적는다. */
|
|
13
|
-
export function sourceFingerprint(text: string): string {
|
|
14
|
-
return Bun.hash(text.replace(/\r\n/g, "\n").trim()).toString(16);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** 사본이 현재 원문에서 만든 것이면 본문을, 아니면 undefined를 돌려준다. */
|
|
18
|
-
export function freshCopy(source: string, copy: string): string | undefined {
|
|
19
|
-
const header = HEADER.exec(copy);
|
|
20
|
-
if (!header || header[1] !== sourceFingerprint(source)) return undefined;
|
|
21
|
-
return copy.slice(header[0].length).trim();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** block 안에서 open 태그 뒤부터 close 태그 앞까지를 body로 바꾼다. 태그가 없으면 block을 그대로 돌려준다. */
|
|
25
|
-
export function replaceBetween(block: string, open: string, close: string, body: string): string {
|
|
26
|
-
const start = block.indexOf(open);
|
|
27
|
-
if (start < 0) return block;
|
|
28
|
-
const from = start + open.length;
|
|
29
|
-
const end = block.indexOf(close, from);
|
|
30
|
-
if (end < 0) return block;
|
|
31
|
-
return `${block.slice(0, from)}\n${body}\n${block.slice(end)}`;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface CompactTarget {
|
|
35
|
-
source: string;
|
|
36
|
-
copy: string;
|
|
37
|
-
open: string;
|
|
38
|
-
close: string;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export const TARGETS: readonly CompactTarget[] = [
|
|
42
|
-
// 코어는 전역 AGENTS.md를 <file path="…"> 안에 싣고 표 공백을 다듬는다. 경로 태그로 찾아 본문만 바꾼다.
|
|
43
|
-
{ source: "AGENTS.md", copy: "prompt-copies/AGENTS.en.md", open: `<file path="${join(AGENT_DIR, "AGENTS.md")}">`, close: "</file>" },
|
|
44
|
-
{ source: "RULES.md", copy: "prompt-copies/RULES.en.md", open: "<generic-rules>", close: "</generic-rules>" },
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
export function loadSwaps(agentDir: string, targets: readonly CompactTarget[]): Array<CompactTarget & { body: string }> {
|
|
48
|
-
return targets.flatMap((target) => {
|
|
49
|
-
try {
|
|
50
|
-
const body = freshCopy(readFileSync(join(agentDir, target.source), "utf8"), readFileSync(join(agentDir, target.copy), "utf8"));
|
|
51
|
-
return body ? [{ ...target, body }] : [];
|
|
52
|
-
} catch {
|
|
53
|
-
return [];
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export default function promptCompact(pi: ExtensionAPI): void {
|
|
59
|
-
// 코어도 AGENTS.md·RULES.md를 시작할 때 한 번 읽으므로 사본도 같은 시점에 한 번만 읽는다.
|
|
60
|
-
const swaps = loadSwaps(AGENT_DIR, TARGETS);
|
|
61
|
-
if (swaps.length === 0) return;
|
|
62
|
-
pi.on("before_agent_start", (event) => ({
|
|
63
|
-
systemPrompt: event.systemPrompt.map((block) =>
|
|
64
|
-
swaps.reduce((current, swap) => replaceBetween(current, swap.open, swap.close, swap.body), block),
|
|
65
|
-
),
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
1
|
+
// 규칙 원문(AGENTS.md·RULES.md)은 한국어 정본으로 두고, 모델에 싣는 사본만 영어 압축본(prompt-copies/)으로 바꾼다.
|
|
2
|
+
// Opus 토크나이저에서 한국어 규칙은 약 1.2자/토큰, 영어는 약 4자/토큰이라 같은 규칙이 요청마다 3배 가까이 든다.
|
|
3
|
+
// 사본 첫 줄의 source 지문이 현재 원문과 다르면(원문만 고치고 사본을 갱신하지 않음) 그 원문은 그대로 싣는다.
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
|
|
7
|
+
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
8
|
+
|
|
9
|
+
const AGENT_DIR = join(import.meta.dir, "..");
|
|
10
|
+
const HEADER = /^<!-- source-fingerprint: ([0-9a-f]+) -->\r?\n/;
|
|
11
|
+
|
|
12
|
+
/** 원문 지문. 줄바꿈 차이와 앞뒤 공백은 무시한다. 사본 갱신 시 이 값을 사본 첫 줄에 적는다. */
|
|
13
|
+
export function sourceFingerprint(text: string): string {
|
|
14
|
+
return Bun.hash(text.replace(/\r\n/g, "\n").trim()).toString(16);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** 사본이 현재 원문에서 만든 것이면 본문을, 아니면 undefined를 돌려준다. */
|
|
18
|
+
export function freshCopy(source: string, copy: string): string | undefined {
|
|
19
|
+
const header = HEADER.exec(copy);
|
|
20
|
+
if (!header || header[1] !== sourceFingerprint(source)) return undefined;
|
|
21
|
+
return copy.slice(header[0].length).trim();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** block 안에서 open 태그 뒤부터 close 태그 앞까지를 body로 바꾼다. 태그가 없으면 block을 그대로 돌려준다. */
|
|
25
|
+
export function replaceBetween(block: string, open: string, close: string, body: string): string {
|
|
26
|
+
const start = block.indexOf(open);
|
|
27
|
+
if (start < 0) return block;
|
|
28
|
+
const from = start + open.length;
|
|
29
|
+
const end = block.indexOf(close, from);
|
|
30
|
+
if (end < 0) return block;
|
|
31
|
+
return `${block.slice(0, from)}\n${body}\n${block.slice(end)}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface CompactTarget {
|
|
35
|
+
source: string;
|
|
36
|
+
copy: string;
|
|
37
|
+
open: string;
|
|
38
|
+
close: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const TARGETS: readonly CompactTarget[] = [
|
|
42
|
+
// 코어는 전역 AGENTS.md를 <file path="…"> 안에 싣고 표 공백을 다듬는다. 경로 태그로 찾아 본문만 바꾼다.
|
|
43
|
+
{ source: "AGENTS.md", copy: "prompt-copies/AGENTS.en.md", open: `<file path="${join(AGENT_DIR, "AGENTS.md")}">`, close: "</file>" },
|
|
44
|
+
{ source: "RULES.md", copy: "prompt-copies/RULES.en.md", open: "<generic-rules>", close: "</generic-rules>" },
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
export function loadSwaps(agentDir: string, targets: readonly CompactTarget[]): Array<CompactTarget & { body: string }> {
|
|
48
|
+
return targets.flatMap((target) => {
|
|
49
|
+
try {
|
|
50
|
+
const body = freshCopy(readFileSync(join(agentDir, target.source), "utf8"), readFileSync(join(agentDir, target.copy), "utf8"));
|
|
51
|
+
return body ? [{ ...target, body }] : [];
|
|
52
|
+
} catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default function promptCompact(pi: ExtensionAPI): void {
|
|
59
|
+
// 코어도 AGENTS.md·RULES.md를 시작할 때 한 번 읽으므로 사본도 같은 시점에 한 번만 읽는다.
|
|
60
|
+
const swaps = loadSwaps(AGENT_DIR, TARGETS);
|
|
61
|
+
if (swaps.length === 0) return;
|
|
62
|
+
pi.on("before_agent_start", (event) => ({
|
|
63
|
+
systemPrompt: event.systemPrompt.map((block) =>
|
|
64
|
+
swaps.reduce((current, swap) => replaceBetween(current, swap.open, swap.close, swap.body), block),
|
|
65
|
+
),
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
2
|
-
import { onSessionLifecycle } from "./lib/session-identity";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* 보고 차트 누락 알림. 2026-10-19 사용자 결정(전역 `AGENTS.md` 「사용자 보고」): 기록 수치의 비교·추이·분해에 값이
|
|
6
|
-
* 셋 이상이면 Mermaid 차트 하나를 붙인다. 같은 날 Main이 조각 세 개의 실행 시간(20.8분·34.6분·42.0분)을 `ask` 바로 앞
|
|
7
|
-
* 한 문장에 적고 차트를 빠뜨렸다. 규칙은 문맥에 있었으므로 문구만 고쳐서는 재발을 막지 못한다고 보고, 본문에서 같은 종류의
|
|
8
|
-
* 수치 셋 이상을 결정론적으로 찾아 한 번 일깨운다. 차트를 그릴지는 모델이 수치의 출처·비교 여부로 정한다(알림은 차단이 아니다).
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
export const REMINDER_TYPE = "report-chart-guard";
|
|
12
|
-
export const MIN_VALUES = 3;
|
|
13
|
-
|
|
14
|
-
type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string };
|
|
15
|
-
|
|
16
|
-
// 단위를 같은 종류로 묶는다. 시간끼리, 크기끼리는 단위가 달라도 같은 축에 놓일 수 있다.
|
|
17
|
-
// 셈 단위(건·회)는 서로 다른 것을 세는 일이 많아 따로 묶는다(2026-10-19 재생: "1건, 11회, 2건" 같은 나열 오탐).
|
|
18
|
-
const UNIT_KIND: Readonly<Record<string, string>> = {
|
|
19
|
-
ms: "time", s: "time", "초": "time", "분": "time", "시간": "time",
|
|
20
|
-
"%": "percent", "배": "ratio", "건": "count-건", "회": "count-회",
|
|
21
|
-
KB: "size", MB: "size", GB: "size", KiB: "size", MiB: "size", GiB: "size",
|
|
22
|
-
};
|
|
23
|
-
// 버전(0.10.38)·시각(04:48)·날짜(10-19)·경로 조각 안의 숫자는 수치로 보지 않는다(앞뒤 문자 경계).
|
|
24
|
-
// 단위 바로 뒤에 다른 낱말이 붙으면(배포·분석·회의·초기·건너…) 단위가 아니다.
|
|
25
|
-
const QUANTITY =
|
|
26
|
-
/(?<![\d.:/\-A-Za-z_])(\d+(?:\.\d+)?)\s?(ms|s|초|분|시간|%|배|건|회|KiB|MiB|GiB|KB|MB|GB)(?![A-Za-z\d])(?!(?:포|치|열|석|류|기|화|의|수|복|너|당|위|면|산|간|리|야|장|별)[가-힣])/g;
|
|
27
|
-
|
|
28
|
-
function textOf(content: unknown): string {
|
|
29
|
-
if (typeof content === "string") return content;
|
|
30
|
-
if (!Array.isArray(content)) return "";
|
|
31
|
-
return content
|
|
32
|
-
.filter((block): block is { type: string; text: string } => block?.type === "text" && typeof block.text === "string")
|
|
33
|
-
.map((block) => block.text)
|
|
34
|
-
.join("\n");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** 값이 셋 이상인 같은 종류의 수치 묶음. 없으면 null. Mermaid 블록이 이미 있으면 판정하지 않는다. */
|
|
38
|
-
export function chartCandidate(text: string): { kind: string; values: string[] } | null {
|
|
39
|
-
if (/```\s*mermaid\b/i.test(text)) return null;
|
|
40
|
-
const groups = new Map<string, string[]>();
|
|
41
|
-
// 코드 블록·인라인 코드 안의 수치(명령·로그)는 보고 수치로 세지 않는다.
|
|
42
|
-
const prose = text.replace(/```[\s\S]*?(?:```|$)/g, "\n").replace(/`[^`\n]*`/g, " ");
|
|
43
|
-
for (const match of prose.matchAll(QUANTITY)) {
|
|
44
|
-
const kind = UNIT_KIND[match[2]!];
|
|
45
|
-
if (!kind) continue;
|
|
46
|
-
const value = `${match[1]}${match[2]}`;
|
|
47
|
-
const list = groups.get(kind) ?? [];
|
|
48
|
-
if (!list.includes(value)) list.push(value);
|
|
49
|
-
groups.set(kind, list);
|
|
50
|
-
}
|
|
51
|
-
let best: { kind: string; values: string[] } | null = null;
|
|
52
|
-
for (const [kind, values] of groups) {
|
|
53
|
-
if (values.length >= MIN_VALUES && (!best || values.length > best.values.length)) best = { kind, values };
|
|
54
|
-
}
|
|
55
|
-
return best;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export function reminderText(candidate: { values: string[] }): string {
|
|
59
|
-
const shown = candidate.values.slice(0, 6).join(", ");
|
|
60
|
-
return `직전 사용자 표시 문장에 같은 종류의 수치가 ${candidate.values.length}개 있었다(${shown}). 그런데 Mermaid 차트가 없었다. `
|
|
61
|
-
+ "이 값들이 도구 출력·실행 기록·측정 산출물에서 온 비교·추이·분해라면, 바로 다음 응답에 출처와 함께 차트 하나(`xychart-beta` 막대, `gantt` 시간선 등)를 붙인다. "
|
|
62
|
-
+ "`ask` 질문 앞 근거 문장, 진행 중 중간 보고도 보고다. 비교가 아니거나(서로 무관한 값의 나열) 추정치라면 차트를 그리지 않는다. 그때 답이 이미 끝났다면 아무 문장도 덧붙이지 말고 끝내고, 어느 경우든 이 알림을 사용자에게 언급하지 않는다.";
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export default function reportChartGuard(pi: ExtensionAPI): void {
|
|
66
|
-
let reminded = false;
|
|
67
|
-
// 같은 응답의 `ask` 호출을 막을 때 쓰는 알림. 수치를 보여 주고 바로 결정을 묻는 경우는 차트 없이 결정하게 두지 않는다.
|
|
68
|
-
let askHold: string | undefined;
|
|
69
|
-
const reset = () => { reminded = false; askHold = undefined; };
|
|
70
|
-
onSessionLifecycle(pi, { start: reset });
|
|
71
|
-
pi.on("session_shutdown", reset);
|
|
72
|
-
// 사용자 직접 입력 하나에 한 번만 알린다. 알림이 만든 이어 가기 응답이 다시 차트 없이 끝나도 반복하지 않는다.
|
|
73
|
-
pi.on("message_start", (event) => {
|
|
74
|
-
const message = event.message as Message;
|
|
75
|
-
if (message.role === "user" && message.synthetic !== true && message.attribution !== "agent") reset();
|
|
76
|
-
});
|
|
77
|
-
pi.on("message_end", (event, ctx) => {
|
|
78
|
-
const message = event.message as Message;
|
|
79
|
-
if (reminded || message.role !== "assistant" || ctx.agent.kind !== "main") return;
|
|
80
|
-
const candidate = chartCandidate(textOf(message.content));
|
|
81
|
-
if (!candidate) return;
|
|
82
|
-
reminded = true;
|
|
83
|
-
const calls = Array.isArray(message.content)
|
|
84
|
-
? message.content.filter((block): block is { type: string; name?: string } => block?.type === "toolCall")
|
|
85
|
-
: [];
|
|
86
|
-
if (calls.some((call) => call.name === "ask")) {
|
|
87
|
-
askHold = `[report-chart-guard] 질문을 보내지 않았다. ${reminderText(candidate)} 차트가 필요하면 차트를 붙인 응답에서 같은 질문을 다시 보낸다. 필요 없으면 같은 질문을 그대로 다시 보낸다.`;
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
// 도구를 부르는 중이면 다음 단계 경계에서, 답이 끝났으면 바로 이어 가는 내부 continuation으로 전달한다.
|
|
91
|
-
pi.sendMessage(
|
|
92
|
-
{ customType: REMINDER_TYPE, content: reminderText(candidate), display: false, attribution: "agent" },
|
|
93
|
-
calls.length > 0 ? { deliverAs: "aside" } : { deliverAs: "nextTurn", triggerTurn: true },
|
|
94
|
-
);
|
|
95
|
-
});
|
|
96
|
-
pi.on("tool_call", (event) => {
|
|
97
|
-
if (event.toolName !== "ask" || askHold === undefined) return;
|
|
98
|
-
const reason = askHold;
|
|
99
|
-
askHold = undefined;
|
|
100
|
-
return { block: true, reason };
|
|
101
|
-
});
|
|
102
|
-
}
|
|
1
|
+
import type { ExtensionAPI } from "@oh-my-pi/pi-coding-agent";
|
|
2
|
+
import { onSessionLifecycle } from "./lib/session-identity";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 보고 차트 누락 알림. 2026-10-19 사용자 결정(전역 `AGENTS.md` 「사용자 보고」): 기록 수치의 비교·추이·분해에 값이
|
|
6
|
+
* 셋 이상이면 Mermaid 차트 하나를 붙인다. 같은 날 Main이 조각 세 개의 실행 시간(20.8분·34.6분·42.0분)을 `ask` 바로 앞
|
|
7
|
+
* 한 문장에 적고 차트를 빠뜨렸다. 규칙은 문맥에 있었으므로 문구만 고쳐서는 재발을 막지 못한다고 보고, 본문에서 같은 종류의
|
|
8
|
+
* 수치 셋 이상을 결정론적으로 찾아 한 번 일깨운다. 차트를 그릴지는 모델이 수치의 출처·비교 여부로 정한다(알림은 차단이 아니다).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const REMINDER_TYPE = "report-chart-guard";
|
|
12
|
+
export const MIN_VALUES = 3;
|
|
13
|
+
|
|
14
|
+
type Message = { role?: string; content?: unknown; synthetic?: boolean; attribution?: string };
|
|
15
|
+
|
|
16
|
+
// 단위를 같은 종류로 묶는다. 시간끼리, 크기끼리는 단위가 달라도 같은 축에 놓일 수 있다.
|
|
17
|
+
// 셈 단위(건·회)는 서로 다른 것을 세는 일이 많아 따로 묶는다(2026-10-19 재생: "1건, 11회, 2건" 같은 나열 오탐).
|
|
18
|
+
const UNIT_KIND: Readonly<Record<string, string>> = {
|
|
19
|
+
ms: "time", s: "time", "초": "time", "분": "time", "시간": "time",
|
|
20
|
+
"%": "percent", "배": "ratio", "건": "count-건", "회": "count-회",
|
|
21
|
+
KB: "size", MB: "size", GB: "size", KiB: "size", MiB: "size", GiB: "size",
|
|
22
|
+
};
|
|
23
|
+
// 버전(0.10.38)·시각(04:48)·날짜(10-19)·경로 조각 안의 숫자는 수치로 보지 않는다(앞뒤 문자 경계).
|
|
24
|
+
// 단위 바로 뒤에 다른 낱말이 붙으면(배포·분석·회의·초기·건너…) 단위가 아니다.
|
|
25
|
+
const QUANTITY =
|
|
26
|
+
/(?<![\d.:/\-A-Za-z_])(\d+(?:\.\d+)?)\s?(ms|s|초|분|시간|%|배|건|회|KiB|MiB|GiB|KB|MB|GB)(?![A-Za-z\d])(?!(?:포|치|열|석|류|기|화|의|수|복|너|당|위|면|산|간|리|야|장|별)[가-힣])/g;
|
|
27
|
+
|
|
28
|
+
function textOf(content: unknown): string {
|
|
29
|
+
if (typeof content === "string") return content;
|
|
30
|
+
if (!Array.isArray(content)) return "";
|
|
31
|
+
return content
|
|
32
|
+
.filter((block): block is { type: string; text: string } => block?.type === "text" && typeof block.text === "string")
|
|
33
|
+
.map((block) => block.text)
|
|
34
|
+
.join("\n");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** 값이 셋 이상인 같은 종류의 수치 묶음. 없으면 null. Mermaid 블록이 이미 있으면 판정하지 않는다. */
|
|
38
|
+
export function chartCandidate(text: string): { kind: string; values: string[] } | null {
|
|
39
|
+
if (/```\s*mermaid\b/i.test(text)) return null;
|
|
40
|
+
const groups = new Map<string, string[]>();
|
|
41
|
+
// 코드 블록·인라인 코드 안의 수치(명령·로그)는 보고 수치로 세지 않는다.
|
|
42
|
+
const prose = text.replace(/```[\s\S]*?(?:```|$)/g, "\n").replace(/`[^`\n]*`/g, " ");
|
|
43
|
+
for (const match of prose.matchAll(QUANTITY)) {
|
|
44
|
+
const kind = UNIT_KIND[match[2]!];
|
|
45
|
+
if (!kind) continue;
|
|
46
|
+
const value = `${match[1]}${match[2]}`;
|
|
47
|
+
const list = groups.get(kind) ?? [];
|
|
48
|
+
if (!list.includes(value)) list.push(value);
|
|
49
|
+
groups.set(kind, list);
|
|
50
|
+
}
|
|
51
|
+
let best: { kind: string; values: string[] } | null = null;
|
|
52
|
+
for (const [kind, values] of groups) {
|
|
53
|
+
if (values.length >= MIN_VALUES && (!best || values.length > best.values.length)) best = { kind, values };
|
|
54
|
+
}
|
|
55
|
+
return best;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function reminderText(candidate: { values: string[] }): string {
|
|
59
|
+
const shown = candidate.values.slice(0, 6).join(", ");
|
|
60
|
+
return `직전 사용자 표시 문장에 같은 종류의 수치가 ${candidate.values.length}개 있었다(${shown}). 그런데 Mermaid 차트가 없었다. `
|
|
61
|
+
+ "이 값들이 도구 출력·실행 기록·측정 산출물에서 온 비교·추이·분해라면, 바로 다음 응답에 출처와 함께 차트 하나(`xychart-beta` 막대, `gantt` 시간선 등)를 붙인다. "
|
|
62
|
+
+ "`ask` 질문 앞 근거 문장, 진행 중 중간 보고도 보고다. 비교가 아니거나(서로 무관한 값의 나열) 추정치라면 차트를 그리지 않는다. 그때 답이 이미 끝났다면 아무 문장도 덧붙이지 말고 끝내고, 어느 경우든 이 알림을 사용자에게 언급하지 않는다.";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export default function reportChartGuard(pi: ExtensionAPI): void {
|
|
66
|
+
let reminded = false;
|
|
67
|
+
// 같은 응답의 `ask` 호출을 막을 때 쓰는 알림. 수치를 보여 주고 바로 결정을 묻는 경우는 차트 없이 결정하게 두지 않는다.
|
|
68
|
+
let askHold: string | undefined;
|
|
69
|
+
const reset = () => { reminded = false; askHold = undefined; };
|
|
70
|
+
onSessionLifecycle(pi, { start: reset });
|
|
71
|
+
pi.on("session_shutdown", reset);
|
|
72
|
+
// 사용자 직접 입력 하나에 한 번만 알린다. 알림이 만든 이어 가기 응답이 다시 차트 없이 끝나도 반복하지 않는다.
|
|
73
|
+
pi.on("message_start", (event) => {
|
|
74
|
+
const message = event.message as Message;
|
|
75
|
+
if (message.role === "user" && message.synthetic !== true && message.attribution !== "agent") reset();
|
|
76
|
+
});
|
|
77
|
+
pi.on("message_end", (event, ctx) => {
|
|
78
|
+
const message = event.message as Message;
|
|
79
|
+
if (reminded || message.role !== "assistant" || ctx.agent.kind !== "main") return;
|
|
80
|
+
const candidate = chartCandidate(textOf(message.content));
|
|
81
|
+
if (!candidate) return;
|
|
82
|
+
reminded = true;
|
|
83
|
+
const calls = Array.isArray(message.content)
|
|
84
|
+
? message.content.filter((block): block is { type: string; name?: string } => block?.type === "toolCall")
|
|
85
|
+
: [];
|
|
86
|
+
if (calls.some((call) => call.name === "ask")) {
|
|
87
|
+
askHold = `[report-chart-guard] 질문을 보내지 않았다. ${reminderText(candidate)} 차트가 필요하면 차트를 붙인 응답에서 같은 질문을 다시 보낸다. 필요 없으면 같은 질문을 그대로 다시 보낸다.`;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// 도구를 부르는 중이면 다음 단계 경계에서, 답이 끝났으면 바로 이어 가는 내부 continuation으로 전달한다.
|
|
91
|
+
pi.sendMessage(
|
|
92
|
+
{ customType: REMINDER_TYPE, content: reminderText(candidate), display: false, attribution: "agent" },
|
|
93
|
+
calls.length > 0 ? { deliverAs: "aside" } : { deliverAs: "nextTurn", triggerTurn: true },
|
|
94
|
+
);
|
|
95
|
+
});
|
|
96
|
+
pi.on("tool_call", (event) => {
|
|
97
|
+
if (event.toolName !== "ask" || askHold === undefined) return;
|
|
98
|
+
const reason = askHold;
|
|
99
|
+
askHold = undefined;
|
|
100
|
+
return { block: true, reason };
|
|
101
|
+
});
|
|
102
|
+
}
|