oh-my-opencode 4.12.0 → 4.13.0
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/README.md +1 -1
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/dist/agents/sisyphus-agent-factory.d.ts +9 -0
- package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +31 -0
- package/dist/cli/index.js +916 -670
- package/dist/cli-node/index.js +916 -670
- package/dist/config/schema/codegraph.d.ts +1 -0
- package/dist/config/schema/oh-my-opencode-config.d.ts +2 -0
- package/dist/config/schema/runtime-fallback.d.ts +1 -0
- package/dist/features/background-agent/background-task-marker.d.ts +8 -0
- package/dist/features/background-agent/fallback-retry-handler.d.ts +1 -0
- package/dist/features/background-agent/manager.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-dedupe.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-notifier-types.d.ts +2 -0
- package/dist/features/background-agent/parent-wake-notifier.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-window-recovery.d.ts +2 -0
- package/dist/hooks/runtime-fallback/auto-retry-dispatch.d.ts +2 -2
- package/dist/hooks/runtime-fallback/auto-retry-timeout.d.ts +2 -2
- package/dist/hooks/runtime-fallback/auto-retry.d.ts +1 -1
- package/dist/hooks/runtime-fallback/fallback-state-snapshot.d.ts +13 -0
- package/dist/hooks/runtime-fallback/types.d.ts +8 -0
- package/dist/index.js +1042 -640
- package/dist/oh-my-opencode.schema.json +8 -0
- package/dist/plugin/runtime-skill-resolver.d.ts +35 -0
- package/dist/plugin/skill-context.d.ts +9 -0
- package/dist/skills/frontend/ATTRIBUTION.md +32 -8
- package/dist/skills/frontend/references/design/airbnb.md +3 -0
- package/dist/skills/frontend/references/design/airtable.md +3 -0
- package/dist/skills/frontend/references/design/apple.md +3 -0
- package/dist/skills/frontend/references/design/binance.md +3 -0
- package/dist/skills/frontend/references/design/bmw.md +3 -0
- package/dist/skills/frontend/references/design/bugatti.md +3 -0
- package/dist/skills/frontend/references/design/cal.md +3 -0
- package/dist/skills/frontend/references/design/claude.md +3 -0
- package/dist/skills/frontend/references/design/clay.md +3 -0
- package/dist/skills/frontend/references/design/clickhouse.md +3 -0
- package/dist/skills/frontend/references/design/cohere.md +3 -0
- package/dist/skills/frontend/references/design/coinbase.md +3 -0
- package/dist/skills/frontend/references/design/composio.md +3 -0
- package/dist/skills/frontend/references/design/cursor.md +3 -0
- package/dist/skills/frontend/references/design/elevenlabs.md +3 -0
- package/dist/skills/frontend/references/design/expo.md +3 -0
- package/dist/skills/frontend/references/design/ferrari.md +3 -0
- package/dist/skills/frontend/references/design/figma.md +3 -0
- package/dist/skills/frontend/references/design/framer.md +3 -0
- package/dist/skills/frontend/references/design/hashicorp.md +3 -0
- package/dist/skills/frontend/references/design/ibm.md +3 -0
- package/dist/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
- package/dist/skills/frontend/references/design/intercom.md +3 -0
- package/dist/skills/frontend/references/design/kraken.md +3 -0
- package/dist/skills/frontend/references/design/lamborghini.md +3 -0
- package/dist/skills/frontend/references/design/linear.app.md +3 -0
- package/dist/skills/frontend/references/design/lovable.md +3 -0
- package/dist/skills/frontend/references/design/mastercard.md +3 -0
- package/dist/skills/frontend/references/design/meta.md +3 -0
- package/dist/skills/frontend/references/design/minimax.md +3 -0
- package/dist/skills/frontend/references/design/mintlify.md +3 -0
- package/dist/skills/frontend/references/design/miro.md +3 -0
- package/dist/skills/frontend/references/design/mistral.ai.md +3 -0
- package/dist/skills/frontend/references/design/mongodb.md +3 -0
- package/dist/skills/frontend/references/design/nike.md +3 -0
- package/dist/skills/frontend/references/design/notion.md +3 -0
- package/dist/skills/frontend/references/design/nvidia.md +3 -0
- package/dist/skills/frontend/references/design/ollama.md +3 -0
- package/dist/skills/frontend/references/design/opencode.ai.md +3 -0
- package/dist/skills/frontend/references/design/pinterest.md +3 -0
- package/dist/skills/frontend/references/design/playstation.md +3 -0
- package/dist/skills/frontend/references/design/posthog.md +3 -0
- package/dist/skills/frontend/references/design/raycast.md +3 -0
- package/dist/skills/frontend/references/design/renault.md +3 -0
- package/dist/skills/frontend/references/design/replicate.md +3 -0
- package/dist/skills/frontend/references/design/resend.md +3 -0
- package/dist/skills/frontend/references/design/revolut.md +3 -0
- package/dist/skills/frontend/references/design/runwayml.md +3 -0
- package/dist/skills/frontend/references/design/sanity.md +3 -0
- package/dist/skills/frontend/references/design/sentry.md +3 -0
- package/dist/skills/frontend/references/design/shopify.md +3 -0
- package/dist/skills/frontend/references/design/spacex.md +3 -0
- package/dist/skills/frontend/references/design/spotify.md +3 -0
- package/dist/skills/frontend/references/design/starbucks.md +3 -0
- package/dist/skills/frontend/references/design/stitch-skill.md +1 -1
- package/dist/skills/frontend/references/design/stripe.md +3 -0
- package/dist/skills/frontend/references/design/supabase.md +3 -0
- package/dist/skills/frontend/references/design/superhuman.md +3 -0
- package/dist/skills/frontend/references/design/taste-skill.md +1188 -208
- package/dist/skills/frontend/references/design/tesla.md +3 -0
- package/dist/skills/frontend/references/design/theverge.md +3 -0
- package/dist/skills/frontend/references/design/together.ai.md +3 -0
- package/dist/skills/frontend/references/design/uber.md +3 -0
- package/dist/skills/frontend/references/design/vercel.md +3 -0
- package/dist/skills/frontend/references/design/vodafone.md +3 -0
- package/dist/skills/frontend/references/design/voltagent.md +3 -0
- package/dist/skills/frontend/references/design/warp.md +3 -0
- package/dist/skills/frontend/references/design/webflow.md +3 -0
- package/dist/skills/frontend/references/design/wired.md +3 -0
- package/dist/skills/frontend/references/design/wise.md +3 -0
- package/dist/skills/frontend/references/design/x.ai.md +3 -0
- package/dist/skills/frontend/references/design/zapier.md +3 -0
- package/dist/skills/frontend/references/ui-ux-db/README.md +501 -115
- package/dist/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
- package/dist/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
- package/dist/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
- package/dist/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
- package/dist/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
- package/dist/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
- package/dist/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
- package/dist/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
- package/dist/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
- package/dist/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
- package/dist/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
- package/dist/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
- package/dist/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
- package/dist/skills/lcx-doctor/SKILL.md +1 -1
- package/dist/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
- package/dist/skills/ultimate-browsing/SKILL.md +140 -0
- package/dist/skills/ultimate-browsing/engine/__init__.py +24 -0
- package/dist/skills/ultimate-browsing/engine/__main__.py +106 -0
- package/dist/skills/ultimate-browsing/engine/bias_check.py +174 -0
- package/dist/skills/ultimate-browsing/engine/curl_probe.py +91 -0
- package/dist/skills/ultimate-browsing/engine/executor.py +192 -0
- package/dist/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
- package/dist/skills/ultimate-browsing/engine/referers.py +15 -0
- package/dist/skills/ultimate-browsing/engine/result_schema.py +45 -0
- package/dist/skills/ultimate-browsing/engine/summary.py +37 -0
- package/dist/skills/ultimate-browsing/engine/templates/package.json +11 -0
- package/dist/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
- package/dist/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
- package/dist/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
- package/dist/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
- package/dist/skills/ultimate-browsing/engine/url_transforms.py +98 -0
- package/dist/skills/ultimate-browsing/engine/validators.py +216 -0
- package/dist/skills/ultimate-browsing/engine/waf_detector.py +214 -0
- package/dist/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
- package/dist/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
- package/dist/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
- package/dist/skills/ultimate-browsing/references/insane-search/README.md +319 -0
- package/dist/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
- package/dist/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
- package/dist/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
- package/dist/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
- package/dist/skills/ultimate-browsing/references/insane-search/media.md +123 -0
- package/dist/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
- package/dist/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
- package/dist/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
- package/dist/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
- package/dist/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
- package/dist/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
- package/dist/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
- package/dist/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
- package/dist/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
- package/dist/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
- package/dist/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
- package/dist/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
- package/dist/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
- package/dist/skills/ultraresearch/ATTRIBUTION.md +49 -0
- package/dist/skills/ultraresearch/SKILL.md +34 -6
- package/dist/skills/ulw-plan/SKILL.md +4 -1
- package/dist/tools/background-task/constants.d.ts +1 -1
- package/dist/tools/delegate-task/sync-task-deps.d.ts +8 -6
- package/dist/tools/skill-mcp/tools.d.ts +1 -1
- package/dist/tui.js +18 -4
- package/package.json +16 -14
- package/packages/omo-codex/THIRD-PARTY-NOTICES.md +27 -4
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +3 -1
- package/packages/omo-codex/plugin/README.md +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +134 -42
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/codegraph/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/codegraph/NODE-RUNTIME-LICENSES.md +2951 -0
- package/packages/omo-codex/plugin/components/codegraph/NOTICE +16 -0
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +633 -193
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +561 -44
- package/packages/omo-codex/plugin/components/codegraph/package.json +9 -3
- package/packages/omo-codex/plugin/components/codegraph/src/cli.ts +11 -0
- package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +12 -0
- package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +34 -0
- package/packages/omo-codex/plugin/components/codegraph/src/mcp-unavailable.ts +75 -0
- package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +66 -13
- package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +26 -12
- package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +50 -330
- package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +91 -0
- package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +2 -2
- package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +68 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve-node-support.test.ts +11 -1
- package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +48 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +133 -0
- package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +1 -112
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +149 -0
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +63 -0
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-availability.test.ts +106 -0
- package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +150 -0
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/dist/cli.js +3 -3
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/src/sparkshell-awareness.ts +3 -3
- package/packages/omo-codex/plugin/components/rules/test/sparkshell-awareness.test.ts +33 -9
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/dist/cli.js +94 -0
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +17 -0
- package/packages/omo-codex/plugin/components/teammode/package.json +26 -0
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/SKILL.md +59 -32
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-guide.mjs +17 -16
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-state.mjs +70 -3
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team-worktree.mjs +113 -0
- package/packages/omo-codex/plugin/components/teammode/skills/teammode/scripts/team.mjs +63 -4
- package/packages/omo-codex/plugin/components/teammode/src/cli.ts +12 -0
- package/packages/omo-codex/plugin/components/teammode/src/codex-hook.ts +125 -0
- package/packages/omo-codex/plugin/components/teammode/test/thread-title-hook.test.ts +116 -0
- package/packages/omo-codex/plugin/components/teammode/tsconfig.json +25 -0
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +5 -4
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +24 -3
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/references/full-workflow.md +8 -7
- package/packages/omo-codex/plugin/components/ulw-loop/test/skill-contract.test.ts +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +17 -0
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +17 -0
- package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +129 -12
- package/packages/omo-codex/plugin/package.json +3 -2
- package/packages/omo-codex/plugin/scripts/auto-update-plan.mjs +133 -0
- package/packages/omo-codex/plugin/scripts/auto-update-release-notes.mjs +135 -0
- package/packages/omo-codex/plugin/scripts/auto-update.mjs +33 -133
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +1 -0
- package/packages/omo-codex/plugin/scripts/materialize-shared-upstreams.mjs +41 -0
- package/packages/omo-codex/plugin/shared/src/config-loader.ts +20 -2
- package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +16 -0
- package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +32 -8
- package/packages/omo-codex/plugin/skills/frontend/references/design/airbnb.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/airtable.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/apple.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/binance.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/bmw.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/bugatti.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/cal.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/claude.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/clay.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/clickhouse.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/cohere.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/coinbase.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/composio.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/cursor.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/elevenlabs.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/expo.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/ferrari.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/figma.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/framer.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/hashicorp.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/ibm.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
- package/packages/omo-codex/plugin/skills/frontend/references/design/intercom.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/kraken.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/lamborghini.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/linear.app.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/lovable.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/mastercard.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/meta.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/minimax.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/mintlify.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/miro.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/mistral.ai.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/mongodb.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/nike.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/notion.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/nvidia.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/ollama.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/opencode.ai.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/pinterest.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/playstation.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/posthog.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/raycast.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/renault.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/replicate.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/resend.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/revolut.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/runwayml.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/sanity.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/sentry.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/shopify.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/spacex.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/spotify.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/starbucks.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/stitch-skill.md +1 -1
- package/packages/omo-codex/plugin/skills/frontend/references/design/stripe.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/supabase.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/superhuman.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/taste-skill.md +1188 -208
- package/packages/omo-codex/plugin/skills/frontend/references/design/tesla.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/theverge.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/together.ai.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/uber.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/vercel.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/vodafone.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/voltagent.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/warp.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/webflow.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/wired.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/wise.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/x.ai.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/design/zapier.md +3 -0
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/README.md +501 -115
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
- package/packages/omo-codex/plugin/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
- package/packages/omo-codex/plugin/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/teammode/SKILL.md +59 -32
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-guide.mjs +17 -16
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-state.mjs +70 -3
- package/packages/omo-codex/plugin/skills/teammode/scripts/team-worktree.mjs +113 -0
- package/packages/omo-codex/plugin/skills/teammode/scripts/team.mjs +63 -4
- package/packages/omo-codex/plugin/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/SKILL.md +140 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/agents/openai.yaml +2 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__init__.py +24 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/__main__.py +106 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/bias_check.py +174 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/curl_probe.py +91 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/executor.py +192 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/referers.py +15 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/result_schema.py +45 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/summary.py +37 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/package.json +11 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/url_transforms.py +98 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/validators.py +216 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_detector.py +214 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/README.md +319 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/media.md +123 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
- package/packages/omo-codex/plugin/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
- package/packages/omo-codex/plugin/skills/ultraresearch/ATTRIBUTION.md +49 -0
- package/packages/omo-codex/plugin/skills/ultraresearch/SKILL.md +34 -6
- package/packages/omo-codex/plugin/skills/ulw-loop/references/full-workflow.md +8 -7
- package/packages/omo-codex/plugin/test/aggregate-build.test.mjs +2 -1
- package/packages/omo-codex/plugin/test/aggregate-hooks.test.mjs +36 -0
- package/packages/omo-codex/plugin/test/aggregate-manifest.test.mjs +2 -1
- package/packages/omo-codex/plugin/test/aggregate-plugin-fixture.mjs +1 -1
- package/packages/omo-codex/plugin/test/auto-update-release-notes.test.mjs +95 -0
- package/packages/omo-codex/plugin/test/auto-update-restart-notice.test.mjs +12 -3
- package/packages/omo-codex/plugin/test/component-bundled-cli.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/component-codegraph-mcp-smoke.test.mjs +76 -0
- package/packages/omo-codex/plugin/test/component-hook-contract-cases.mjs +24 -0
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +1 -0
- package/packages/omo-codex/plugin/test/sync-skills-test-support.mjs +1 -0
- package/packages/omo-codex/plugin/test/teammode-communication.test.mjs +87 -0
- package/packages/omo-codex/plugin/test/teammode-thread-title.test.mjs +169 -0
- package/packages/omo-codex/plugin/test/teammode-worktree.test.mjs +246 -0
- package/packages/omo-codex/plugin/test/ultraresearch-skill-contract.test.mjs +78 -0
- package/packages/omo-codex/scripts/install-cli-args.test.mjs +1 -1
- package/packages/omo-codex/scripts/install-config-git-bash.test.mjs +23 -0
- package/packages/omo-codex/scripts/install-delegated-command.test.mjs +76 -4
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +531 -214
- package/packages/omo-codex/scripts/install-local-entrypoint.test.mjs +40 -3
- package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +32 -8
- package/packages/shared-skills/skills/frontend/references/design/airbnb.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/airtable.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/apple.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/binance.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/bmw.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/bugatti.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/cal.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/claude.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/clay.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/clickhouse.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/cohere.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/coinbase.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/composio.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/cursor.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/elevenlabs.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/expo.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/ferrari.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/figma.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/framer.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/hashicorp.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/ibm.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/imagegen-frontend-web.md +380 -79
- package/packages/shared-skills/skills/frontend/references/design/intercom.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/kraken.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/lamborghini.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/linear.app.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/lovable.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/mastercard.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/meta.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/minimax.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/mintlify.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/miro.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/mistral.ai.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/mongodb.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/nike.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/notion.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/nvidia.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/ollama.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/opencode.ai.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/pinterest.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/playstation.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/posthog.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/raycast.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/renault.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/replicate.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/resend.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/revolut.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/runwayml.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/sanity.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/sentry.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/shopify.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/spacex.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/spotify.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/starbucks.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/stitch-skill.md +1 -1
- package/packages/shared-skills/skills/frontend/references/design/stripe.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/supabase.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/superhuman.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/taste-skill.md +1188 -208
- package/packages/shared-skills/skills/frontend/references/design/tesla.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/theverge.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/together.ai.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/uber.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/vercel.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/vodafone.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/voltagent.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/warp.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/webflow.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/wired.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/wise.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/x.ai.md +3 -0
- package/packages/shared-skills/skills/frontend/references/design/zapier.md +3 -0
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/README.md +501 -115
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/charts.csv +26 -26
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/colors.csv +162 -97
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/icons.csv +105 -100
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/landing.csv +22 -18
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/products.csv +162 -97
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/flutter.csv +53 -53
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -56
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/nextjs.csv +53 -53
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/react.csv +54 -54
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/svelte.csv +54 -54
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/swiftui.csv +51 -51
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/stacks/vue.csv +50 -50
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/styles.csv +17 -0
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/typography.csv +17 -1
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/ui-reasoning.csv +162 -101
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/data/web-interface.csv +30 -30
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/core.py +31 -22
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/design_system.py +150 -69
- package/packages/shared-skills/skills/frontend/references/ui-ux-db/scripts/search.py +3 -3
- package/packages/shared-skills/skills/lcx-doctor/SKILL.md +1 -1
- package/packages/shared-skills/skills/ultimate-browsing/ATTRIBUTION.md +105 -0
- package/packages/shared-skills/skills/ultimate-browsing/SKILL.md +140 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/__init__.py +24 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/__main__.py +106 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/bias_check.py +174 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/curl_probe.py +91 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/executor.py +192 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/fetch_chain.py +268 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/referers.py +15 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/result_schema.py +45 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/summary.py +37 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/package.json +11 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_mobile_chrome.js +129 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/templates/playwright_real_chrome.js +167 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_fetch_chain.py +77 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/tests/test_playwright_templates.py +282 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/url_transforms.py +98 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/validators.py +216 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/waf_detector.py +214 -0
- package/packages/shared-skills/skills/ultimate-browsing/engine/waf_profiles.yaml +162 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/README.md +79 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/career.md +29 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/dev.md +62 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/search.md +33 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/social.md +207 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/video.md +115 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/agent-reach/web.md +76 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/chrome-stealth.md +120 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/README.md +319 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/cache-archive.md +83 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/fallback.md +159 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/jina.md +130 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/json-api.md +133 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/media.md +123 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/metadata.md +116 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/naver.md +107 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/playwright.md +142 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/public-api.md +119 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/rss.md +123 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/tls-impersonate.md +186 -0
- package/packages/shared-skills/skills/ultimate-browsing/references/insane-search/twitter.md +104 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_crypto.py +75 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_domains.py +38 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/cookie_paths.py +112 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/extract_cookies.py +280 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_cookie_domain_filter.py +110 -0
- package/packages/shared-skills/skills/ultimate-browsing/scripts/tests/test_extract_cookies.py +245 -0
- package/packages/shared-skills/skills/ultraresearch/ATTRIBUTION.md +49 -0
- package/packages/shared-skills/skills/ultraresearch/SKILL.md +34 -6
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +4 -1
- package/packages/omo-codex/plugin/components/codegraph/dist/cli.d.ts +0 -2
- package/packages/omo-codex/plugin/components/codegraph/dist/serve.d.ts +0 -32
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
// src/serve.ts
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
5
|
-
import { existsSync as
|
|
6
|
-
import { homedir as
|
|
7
|
-
import { basename as
|
|
5
|
+
import { existsSync as existsSync5, realpathSync } from "node:fs";
|
|
6
|
+
import { homedir as homedir6 } from "node:os";
|
|
7
|
+
import { basename as basename3, extname, join as join6, resolve as resolve2 } from "node:path";
|
|
8
8
|
import {
|
|
9
9
|
cwd as processCwd,
|
|
10
10
|
env as processEnv,
|
|
11
11
|
execPath as processExecPath,
|
|
12
|
-
|
|
12
|
+
stdin as processStdin,
|
|
13
|
+
stderr as processStderr,
|
|
14
|
+
stdout as processStdout
|
|
13
15
|
} from "node:process";
|
|
14
16
|
import { fileURLToPath } from "node:url";
|
|
15
17
|
|
|
@@ -59,16 +61,235 @@ function parseNodeMajor(version) {
|
|
|
59
61
|
return Number.isNaN(major) ? 0 : major;
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
// ../../../../utils/src/codegraph/
|
|
64
|
+
// ../../../../utils/src/codegraph/provision.ts
|
|
65
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
66
|
+
import { execFile } from "node:child_process";
|
|
67
|
+
import { chmod, mkdir, readdir, readFile, rename, rm, rmdir, stat, writeFile } from "node:fs/promises";
|
|
63
68
|
import { existsSync } from "node:fs";
|
|
64
|
-
import { homedir as homedir2 } from "node:os";
|
|
69
|
+
import { homedir as homedir2, hostname } from "node:os";
|
|
70
|
+
import { basename, join as join2 } from "node:path";
|
|
71
|
+
import { promisify } from "node:util";
|
|
72
|
+
|
|
73
|
+
// ../../../../utils/src/codegraph/manifest.ts
|
|
74
|
+
var CODEGRAPH_PROVISION_MANIFEST = {
|
|
75
|
+
assets: {
|
|
76
|
+
"darwin-arm64": {
|
|
77
|
+
executableName: "codegraph",
|
|
78
|
+
sha256: "95bb27bf6382b69659e158e0c04d71cc394778951e1317d582be7807e7866908",
|
|
79
|
+
url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-darwin-arm64.tar.gz"
|
|
80
|
+
},
|
|
81
|
+
"darwin-x64": {
|
|
82
|
+
executableName: "codegraph",
|
|
83
|
+
sha256: "3311cc1d1f0f0ad742709b6a43d8a9187b1ef0af0dd30e0b58008dc673e29478",
|
|
84
|
+
url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-darwin-x64.tar.gz"
|
|
85
|
+
},
|
|
86
|
+
"linux-arm64": {
|
|
87
|
+
executableName: "codegraph",
|
|
88
|
+
sha256: "e16f612bc96c2ebccd04574cbed500c9939147c80666ad6bb024398dff7992ae",
|
|
89
|
+
url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-linux-arm64.tar.gz"
|
|
90
|
+
},
|
|
91
|
+
"linux-x64": {
|
|
92
|
+
executableName: "codegraph",
|
|
93
|
+
sha256: "d45a068f44596a85c7ba7d0ef924eaf7103fbbf3cafbeb668127daff60a52228",
|
|
94
|
+
url: "https://github.com/colbymchenry/codegraph/releases/download/v1.0.1/codegraph-linux-x64.tar.gz"
|
|
95
|
+
},
|
|
96
|
+
"win32-arm64": {
|
|
97
|
+
executableName: "codegraph.cmd",
|
|
98
|
+
sha256: "8d57ced73b24d35f758f2ede2318e80e1d7241987f37a999e3d80edb6fddf961",
|
|
99
|
+
url: "https://registry.npmjs.org/@colbymchenry/codegraph-win32-arm64/-/codegraph-win32-arm64-1.0.1.tgz"
|
|
100
|
+
},
|
|
101
|
+
"win32-x64": {
|
|
102
|
+
executableName: "codegraph.cmd",
|
|
103
|
+
sha256: "52607fe73b05e741fd1087da2ceca9d3c8f565e36bf1a7070600bdbdf3931e32",
|
|
104
|
+
url: "https://registry.npmjs.org/@colbymchenry/codegraph-win32-x64/-/codegraph-win32-x64-1.0.1.tgz"
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
version: "1.0.1"
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
// ../../../../utils/src/codegraph/provision.ts
|
|
111
|
+
var DEFAULT_LOCK_WAIT_MS = 5000;
|
|
112
|
+
var DEFAULT_LOCK_STALE_MS = 120000;
|
|
113
|
+
var DEFAULT_DOWNLOAD_TIMEOUT_MS = 60000;
|
|
114
|
+
var execFileAsync = promisify(execFile);
|
|
115
|
+
function platformKey() {
|
|
116
|
+
return `${process.platform}-${process.arch}`;
|
|
117
|
+
}
|
|
118
|
+
function markerPath(installDir, version) {
|
|
119
|
+
return join2(installDir, ".provisioned", `codegraph-${version}.json`);
|
|
120
|
+
}
|
|
121
|
+
function defaultInstallDir() {
|
|
122
|
+
return join2(homedir2(), ".omo", "codegraph");
|
|
123
|
+
}
|
|
124
|
+
function sha256(bytes) {
|
|
125
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
126
|
+
}
|
|
127
|
+
function isErrnoException(error) {
|
|
128
|
+
return error instanceof Error && "code" in error;
|
|
129
|
+
}
|
|
130
|
+
async function removeEmptyDirectory(path) {
|
|
131
|
+
try {
|
|
132
|
+
await rmdir(path);
|
|
133
|
+
} catch (error) {
|
|
134
|
+
if (isErrnoException(error) && error.code === "ENOENT")
|
|
135
|
+
return;
|
|
136
|
+
if (isErrnoException(error) && error.code === "ENOTEMPTY")
|
|
137
|
+
return;
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function sleep(ms) {
|
|
142
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
143
|
+
}
|
|
144
|
+
async function defaultDownloader(asset, timeoutMs = DEFAULT_DOWNLOAD_TIMEOUT_MS) {
|
|
145
|
+
const response = await fetch(asset.url, { signal: AbortSignal.timeout(timeoutMs) });
|
|
146
|
+
if (!response.ok)
|
|
147
|
+
throw new Error(`download failed with HTTP ${response.status}`);
|
|
148
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
149
|
+
}
|
|
150
|
+
function forcedBadChecksumOptions(options) {
|
|
151
|
+
if (options.forceBadChecksum !== true)
|
|
152
|
+
return null;
|
|
153
|
+
const key = options.platformKey ?? platformKey();
|
|
154
|
+
return {
|
|
155
|
+
downloader: async () => new TextEncoder().encode("checksum mismatch"),
|
|
156
|
+
installDir: options.installDir ?? join2(options.lockDir, "codegraph-force-bad-checksum"),
|
|
157
|
+
manifest: {
|
|
158
|
+
assets: {
|
|
159
|
+
[key]: { executableName: process.platform === "win32" ? "codegraph.cmd" : "codegraph", sha256: "0000", url: "memory://bad" }
|
|
160
|
+
},
|
|
161
|
+
version: options.version
|
|
162
|
+
},
|
|
163
|
+
platformKey: key
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
async function readMarker(path) {
|
|
167
|
+
if (!existsSync(path))
|
|
168
|
+
return null;
|
|
169
|
+
try {
|
|
170
|
+
const raw = JSON.parse(await readFile(path, "utf8"));
|
|
171
|
+
if (typeof raw === "object" && raw !== null && "binPath" in raw) {
|
|
172
|
+
const value = raw.binPath;
|
|
173
|
+
return typeof value === "string" && existsSync(value) ? value : null;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
} catch (error) {
|
|
177
|
+
if (error instanceof Error)
|
|
178
|
+
return null;
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function acquireLock(lockPath, waitMs, staleMs) {
|
|
183
|
+
const startedAt = Date.now();
|
|
184
|
+
await mkdir(join2(lockPath, ".."), { recursive: true });
|
|
185
|
+
while (Date.now() - startedAt <= waitMs) {
|
|
186
|
+
try {
|
|
187
|
+
await mkdir(lockPath);
|
|
188
|
+
return () => rm(lockPath, { force: true, recursive: true });
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (!isErrnoException(error) || error.code !== "EEXIST")
|
|
191
|
+
throw error;
|
|
192
|
+
const lockStat = await stat(lockPath).catch(() => null);
|
|
193
|
+
if (lockStat !== null && Date.now() - lockStat.mtimeMs > staleMs) {
|
|
194
|
+
await rm(lockPath, { force: true, recursive: true });
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
await sleep(25);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
async function extractTarGz(archivePath, destinationDir) {
|
|
203
|
+
await execFileAsync("tar", ["-xzf", archivePath, "-C", destinationDir]);
|
|
204
|
+
}
|
|
205
|
+
async function installExtractedBundle(extractDir, installDir, executableName) {
|
|
206
|
+
const roots = await readdir(extractDir);
|
|
207
|
+
if (roots.length !== 1)
|
|
208
|
+
throw new Error(`CodeGraph archive should contain one root directory, found ${roots.length}`);
|
|
209
|
+
const bundleDir = join2(extractDir, roots[0] ?? "");
|
|
210
|
+
const bundleEntries = await readdir(bundleDir);
|
|
211
|
+
await mkdir(installDir, { recursive: true });
|
|
212
|
+
for (const entry of bundleEntries) {
|
|
213
|
+
await rm(join2(installDir, entry), { force: true, recursive: true });
|
|
214
|
+
await rename(join2(bundleDir, entry), join2(installDir, entry));
|
|
215
|
+
}
|
|
216
|
+
const destination = join2(installDir, "bin", executableName);
|
|
217
|
+
if (!existsSync(destination))
|
|
218
|
+
throw new Error(`CodeGraph archive did not contain bin/${executableName}`);
|
|
219
|
+
await chmod(destination, 493);
|
|
220
|
+
return destination;
|
|
221
|
+
}
|
|
222
|
+
async function installAsset(layout) {
|
|
223
|
+
const { asset, downloader, installDir, version } = layout;
|
|
224
|
+
const stagingDir = join2(installDir, ".staging", randomUUID());
|
|
225
|
+
const archivePath = join2(stagingDir, basename(asset.url));
|
|
226
|
+
const extractDir = join2(stagingDir, "extract");
|
|
227
|
+
try {
|
|
228
|
+
await mkdir(extractDir, { recursive: true });
|
|
229
|
+
const bytes = await downloader(asset);
|
|
230
|
+
const actualChecksum = sha256(bytes);
|
|
231
|
+
if (actualChecksum !== asset.sha256) {
|
|
232
|
+
throw new Error(`checksum mismatch for ${basename(asset.url)}: expected ${asset.sha256}, got ${actualChecksum}`);
|
|
233
|
+
}
|
|
234
|
+
if (!asset.url.endsWith(".tar.gz") && !asset.url.endsWith(".tgz")) {
|
|
235
|
+
throw new Error(`unsupported CodeGraph archive type for ${basename(asset.url)}`);
|
|
236
|
+
}
|
|
237
|
+
await writeFile(archivePath, bytes);
|
|
238
|
+
await extractTarGz(archivePath, extractDir);
|
|
239
|
+
const destination = await installExtractedBundle(extractDir, installDir, asset.executableName);
|
|
240
|
+
await mkdir(join2(installDir, ".provisioned"), { recursive: true });
|
|
241
|
+
await writeFile(markerPath(installDir, version), `${JSON.stringify({ binPath: destination, version })}
|
|
242
|
+
`);
|
|
243
|
+
return destination;
|
|
244
|
+
} finally {
|
|
245
|
+
await rm(stagingDir, { force: true, recursive: true });
|
|
246
|
+
await removeEmptyDirectory(join2(installDir, ".staging"));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
async function ensureCodegraphProvisioned(options) {
|
|
250
|
+
const forced = forcedBadChecksumOptions(options);
|
|
251
|
+
const installDir = forced?.installDir ?? options.installDir ?? defaultInstallDir();
|
|
252
|
+
const manifest = forced?.manifest ?? options.manifest ?? CODEGRAPH_PROVISION_MANIFEST;
|
|
253
|
+
const activePlatformKey = forced?.platformKey ?? options.platformKey ?? platformKey();
|
|
254
|
+
const downloader = forced?.downloader ?? options.downloader ?? ((asset) => defaultDownloader(asset, options.downloadTimeoutMs));
|
|
255
|
+
const marker = markerPath(installDir, options.version);
|
|
256
|
+
const existing = await readMarker(marker);
|
|
257
|
+
if (existing !== null)
|
|
258
|
+
return { binPath: existing, provisioned: true };
|
|
259
|
+
const lockPath = join2(options.lockDir, `codegraph-${hostname()}.lock`);
|
|
260
|
+
const release = await acquireLock(lockPath, options.lockWaitMs ?? DEFAULT_LOCK_WAIT_MS, options.lockStaleMs ?? DEFAULT_LOCK_STALE_MS);
|
|
261
|
+
if (release === null)
|
|
262
|
+
return { error: "timed out waiting for codegraph provisioning lock", provisioned: false };
|
|
263
|
+
try {
|
|
264
|
+
const lockedExisting = await readMarker(marker);
|
|
265
|
+
if (lockedExisting !== null)
|
|
266
|
+
return { binPath: lockedExisting, provisioned: true };
|
|
267
|
+
if (manifest.version !== options.version) {
|
|
268
|
+
return { error: `manifest version ${manifest.version} does not match requested ${options.version}`, provisioned: false };
|
|
269
|
+
}
|
|
270
|
+
const asset = manifest.assets[activePlatformKey];
|
|
271
|
+
if (asset === undefined) {
|
|
272
|
+
return { error: `no CodeGraph ${options.version} asset for ${activePlatformKey}`, provisioned: false };
|
|
273
|
+
}
|
|
274
|
+
const binPath = await installAsset({ asset, downloader, installDir, version: options.version });
|
|
275
|
+
return { binPath, provisioned: true };
|
|
276
|
+
} catch (error) {
|
|
277
|
+
return { error: error instanceof Error ? error.message : String(error), provisioned: false };
|
|
278
|
+
} finally {
|
|
279
|
+
await release();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// ../../../../utils/src/codegraph/resolve.ts
|
|
284
|
+
import { existsSync as existsSync2 } from "node:fs";
|
|
285
|
+
import { homedir as homedir3 } from "node:os";
|
|
65
286
|
import { spawnSync } from "node:child_process";
|
|
66
|
-
import { basename, dirname, join as
|
|
287
|
+
import { basename as basename2, dirname, join as join4 } from "node:path";
|
|
67
288
|
import { createRequire } from "node:module";
|
|
68
289
|
|
|
69
290
|
// ../../../../utils/src/runtime/which.ts
|
|
70
291
|
import { accessSync, constants } from "node:fs";
|
|
71
|
-
import { delimiter, join as
|
|
292
|
+
import { delimiter, join as join3 } from "node:path";
|
|
72
293
|
var runtime = globalThis;
|
|
73
294
|
function isUnsafeCommandName(commandName) {
|
|
74
295
|
if (commandName.includes("/") || commandName.includes("\\"))
|
|
@@ -123,7 +344,7 @@ function bunWhich(commandName) {
|
|
|
123
344
|
return null;
|
|
124
345
|
for (const pathEntry of pathEntries) {
|
|
125
346
|
for (const candidateName of candidateNames) {
|
|
126
|
-
const candidatePath =
|
|
347
|
+
const candidatePath = join3(pathEntry, candidateName);
|
|
127
348
|
if (isExecutable(candidatePath))
|
|
128
349
|
return candidatePath;
|
|
129
350
|
}
|
|
@@ -164,7 +385,7 @@ ${result.stderr}`.trim().split(/\s+/)[0];
|
|
|
164
385
|
}
|
|
165
386
|
}
|
|
166
387
|
function isNodeExecutableName(filePath) {
|
|
167
|
-
const executable =
|
|
388
|
+
const executable = basename2(filePath).toLowerCase();
|
|
168
389
|
return executable === "node" || executable === "node.exe" || /^node\d+(\.exe)?$/.test(executable);
|
|
169
390
|
}
|
|
170
391
|
function looksLikePath(command) {
|
|
@@ -204,8 +425,8 @@ function defaultNodeRuntime(env, fileExists, which, nodeVersion) {
|
|
|
204
425
|
function defaultProvisionedBin(homeDir, fileExists) {
|
|
205
426
|
const binaryName = process.platform === "win32" ? "codegraph.cmd" : "codegraph";
|
|
206
427
|
const candidates = [
|
|
207
|
-
|
|
208
|
-
|
|
428
|
+
join4(homeDir, ".omo", "codegraph", "bin", binaryName),
|
|
429
|
+
join4(homeDir, ".omo", "codegraph", "node-servers", "node_modules", ".bin", binaryName)
|
|
209
430
|
];
|
|
210
431
|
return candidates.find((candidate) => fileExists(candidate)) ?? null;
|
|
211
432
|
}
|
|
@@ -213,7 +434,7 @@ function resolveBundledShim(requireResolve, fileExists) {
|
|
|
213
434
|
try {
|
|
214
435
|
const packageJson = requireResolve(`${CODEGRAPH_PACKAGE}/package.json`);
|
|
215
436
|
const packageRoot = dirname(packageJson);
|
|
216
|
-
const candidates = [
|
|
437
|
+
const candidates = [join4(packageRoot, "bin", "codegraph.js"), join4(packageRoot, "npm-shim.js")];
|
|
217
438
|
return candidates.find((candidate) => fileExists(candidate)) ?? null;
|
|
218
439
|
} catch (error) {
|
|
219
440
|
if (error instanceof Error)
|
|
@@ -229,7 +450,7 @@ function resolveBundledShim(requireResolve, fileExists) {
|
|
|
229
450
|
}
|
|
230
451
|
function resolveCodegraphCommand(options = {}) {
|
|
231
452
|
const env = options.env ?? process.env;
|
|
232
|
-
const fileExists = options.fileExists ??
|
|
453
|
+
const fileExists = options.fileExists ?? existsSync2;
|
|
233
454
|
const configuredBin = env[CODEGRAPH_ENV_BIN]?.trim() || env[CODEGRAPH_LEGACY_ENV_BIN]?.trim();
|
|
234
455
|
if (configuredBin !== undefined && configuredBin.length > 0) {
|
|
235
456
|
return { argsPrefix: [], command: configuredBin, exists: fileExists(configuredBin), source: "env" };
|
|
@@ -241,7 +462,7 @@ function resolveCodegraphCommand(options = {}) {
|
|
|
241
462
|
if (bundled !== null && runtime2 !== null) {
|
|
242
463
|
return { argsPrefix: [bundled], command: runtime2, exists: true, source: "bundled" };
|
|
243
464
|
}
|
|
244
|
-
const provisioned = options.provisioned?.() ?? defaultProvisionedBin(options.homeDir ??
|
|
465
|
+
const provisioned = options.provisioned?.() ?? defaultProvisionedBin(options.homeDir ?? homedir3(), fileExists);
|
|
245
466
|
if (provisioned !== null && fileExists(provisioned)) {
|
|
246
467
|
return { argsPrefix: [], command: provisioned, exists: true, source: "provisioned" };
|
|
247
468
|
}
|
|
@@ -254,9 +475,12 @@ function resolveCodegraphCommand(options = {}) {
|
|
|
254
475
|
};
|
|
255
476
|
}
|
|
256
477
|
|
|
478
|
+
// ../../shared/src/config-loader.ts
|
|
479
|
+
import { homedir as homedir5 } from "node:os";
|
|
480
|
+
|
|
257
481
|
// ../../../../utils/src/omo-config/loader.ts
|
|
258
|
-
import { existsSync as
|
|
259
|
-
import { homedir as
|
|
482
|
+
import { existsSync as existsSync4, readFileSync } from "node:fs";
|
|
483
|
+
import { homedir as homedir4 } from "node:os";
|
|
260
484
|
|
|
261
485
|
// ../../../../utils/src/deep-merge.ts
|
|
262
486
|
var DANGEROUS_KEYS = new Set(["__proto__", "constructor", "prototype"]);
|
|
@@ -1212,8 +1436,8 @@ function buildEnvOverrides(harness, env, warnings, merge) {
|
|
|
1212
1436
|
}
|
|
1213
1437
|
|
|
1214
1438
|
// ../../../../utils/src/omo-config/resolve.ts
|
|
1215
|
-
import { existsSync as
|
|
1216
|
-
import { dirname as dirname2, isAbsolute, join as
|
|
1439
|
+
import { existsSync as existsSync3 } from "node:fs";
|
|
1440
|
+
import { dirname as dirname2, isAbsolute, join as join5, relative, resolve } from "node:path";
|
|
1217
1441
|
function containsPath(parent, child) {
|
|
1218
1442
|
const pathToChild = relative(parent, child);
|
|
1219
1443
|
return pathToChild === "" || !pathToChild.startsWith("..") && !isAbsolute(pathToChild);
|
|
@@ -1226,8 +1450,8 @@ function findProjectConfigPathsNearestFirst(cwd, homeDir) {
|
|
|
1226
1450
|
while (true) {
|
|
1227
1451
|
if (stopBeforeDir !== null && currentDir === stopBeforeDir)
|
|
1228
1452
|
break;
|
|
1229
|
-
const configPath =
|
|
1230
|
-
if (
|
|
1453
|
+
const configPath = join5(currentDir, ".omo", "config.jsonc");
|
|
1454
|
+
if (existsSync3(configPath)) {
|
|
1231
1455
|
paths.push(configPath);
|
|
1232
1456
|
}
|
|
1233
1457
|
const parentDir = dirname2(currentDir);
|
|
@@ -1238,7 +1462,7 @@ function findProjectConfigPathsNearestFirst(cwd, homeDir) {
|
|
|
1238
1462
|
return paths;
|
|
1239
1463
|
}
|
|
1240
1464
|
function resolveOmoConfigPaths(options) {
|
|
1241
|
-
const globalPath =
|
|
1465
|
+
const globalPath = join5(resolve(options.homeDir), ".omo", "config.jsonc");
|
|
1242
1466
|
const projectPathsFarthestFirst = findProjectConfigPathsNearestFirst(options.cwd, options.homeDir).reverse();
|
|
1243
1467
|
return [
|
|
1244
1468
|
{ path: globalPath, scope: "global" },
|
|
@@ -1449,13 +1673,13 @@ function validateHarnessApplicability(config, harness) {
|
|
|
1449
1673
|
}
|
|
1450
1674
|
function loadOmoConfig(options) {
|
|
1451
1675
|
const cwd = options.cwd ?? process.cwd();
|
|
1452
|
-
const homeDir = options.homeDir ?? process.env["HOME"] ?? process.env["USERPROFILE"] ??
|
|
1676
|
+
const homeDir = options.homeDir ?? process.env["HOME"] ?? process.env["USERPROFILE"] ?? homedir4();
|
|
1453
1677
|
const env = options.env ?? process.env;
|
|
1454
1678
|
let config = BUILT_IN_DEFAULTS;
|
|
1455
1679
|
const sources = [];
|
|
1456
1680
|
const warnings = [];
|
|
1457
1681
|
for (const candidate of resolveOmoConfigPaths({ cwd, homeDir })) {
|
|
1458
|
-
if (!
|
|
1682
|
+
if (!existsSync4(candidate.path)) {
|
|
1459
1683
|
if (candidate.scope === "global") {
|
|
1460
1684
|
sources.push(toMissingSource(candidate));
|
|
1461
1685
|
}
|
|
@@ -1479,56 +1703,324 @@ function loadOmoConfig(options) {
|
|
|
1479
1703
|
|
|
1480
1704
|
// ../../shared/src/config-loader.ts
|
|
1481
1705
|
function getCodexOmoConfig(options = {}) {
|
|
1706
|
+
const env = options.env ?? process.env;
|
|
1707
|
+
const homeDir = resolveHomeDir(options);
|
|
1482
1708
|
const result = loadOmoConfig({
|
|
1483
1709
|
...options.cwd === undefined ? {} : { cwd: options.cwd },
|
|
1484
|
-
|
|
1485
|
-
|
|
1710
|
+
env,
|
|
1711
|
+
homeDir,
|
|
1486
1712
|
harness: "codex"
|
|
1487
1713
|
});
|
|
1714
|
+
const trustedConfig = loadOmoConfig({
|
|
1715
|
+
cwd: homeDir,
|
|
1716
|
+
env,
|
|
1717
|
+
homeDir,
|
|
1718
|
+
harness: "codex"
|
|
1719
|
+
});
|
|
1720
|
+
const trustedCodegraphInstallDir = trustedConfig.config.codegraph?.install_dir;
|
|
1488
1721
|
return {
|
|
1489
1722
|
...result.config,
|
|
1490
1723
|
sources: result.sources,
|
|
1724
|
+
...trustedCodegraphInstallDir === undefined ? {} : { trustedCodegraphInstallDir },
|
|
1491
1725
|
warnings: result.warnings
|
|
1492
1726
|
};
|
|
1493
1727
|
}
|
|
1728
|
+
function resolveHomeDir(options) {
|
|
1729
|
+
const env = options.env ?? process.env;
|
|
1730
|
+
return options.homeDir ?? env["HOME"] ?? env["USERPROFILE"] ?? homedir5();
|
|
1731
|
+
}
|
|
1732
|
+
|
|
1733
|
+
// ../../../../mcp-stdio-core/src/record.ts
|
|
1734
|
+
function isPlainRecord(value) {
|
|
1735
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1736
|
+
}
|
|
1737
|
+
// ../../../../mcp-stdio-core/src/responses.ts
|
|
1738
|
+
function successResponse(id, result) {
|
|
1739
|
+
return { jsonrpc: "2.0", id, result };
|
|
1740
|
+
}
|
|
1741
|
+
function errorResponse(id, code, message, data) {
|
|
1742
|
+
return { jsonrpc: "2.0", id, error: data === undefined ? { code, message } : { code, message, data } };
|
|
1743
|
+
}
|
|
1744
|
+
function jsonRpcId(value) {
|
|
1745
|
+
return typeof value === "string" || typeof value === "number" || value === null ? value : null;
|
|
1746
|
+
}
|
|
1747
|
+
// ../../../../mcp-stdio-core/src/transport.ts
|
|
1748
|
+
var HEADER_SEPARATOR = Buffer.from(`\r
|
|
1749
|
+
\r
|
|
1750
|
+
`);
|
|
1751
|
+
async function* readStdioJsonRpcMessages(input) {
|
|
1752
|
+
let buffer = Buffer.alloc(0);
|
|
1753
|
+
for await (const chunk of input) {
|
|
1754
|
+
buffer = Buffer.concat([buffer, bufferFromChunk(chunk)]);
|
|
1755
|
+
while (true) {
|
|
1756
|
+
const result = readNextMessage(buffer);
|
|
1757
|
+
if (result.kind === "incomplete")
|
|
1758
|
+
break;
|
|
1759
|
+
buffer = result.remaining;
|
|
1760
|
+
if (result.message)
|
|
1761
|
+
yield result.message;
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
const trailing = buffer.toString("utf8").trim();
|
|
1765
|
+
if (trailing.length > 0) {
|
|
1766
|
+
yield parseJsonPayload(trailing, "line");
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
function writeStdioJsonRpcResponse(output, response, responseMode) {
|
|
1770
|
+
const body = JSON.stringify(response);
|
|
1771
|
+
if (responseMode === "framed") {
|
|
1772
|
+
output.write(`Content-Length: ${Buffer.byteLength(body, "utf8")}\r
|
|
1773
|
+
\r
|
|
1774
|
+
${body}`);
|
|
1775
|
+
return;
|
|
1776
|
+
}
|
|
1777
|
+
output.write(`${body}
|
|
1778
|
+
`);
|
|
1779
|
+
}
|
|
1780
|
+
function readNextMessage(buffer) {
|
|
1781
|
+
if (buffer.length === 0)
|
|
1782
|
+
return { kind: "incomplete" };
|
|
1783
|
+
return startsWithContentLength(buffer) ? readFramedMessage(buffer) : readLineMessage(buffer);
|
|
1784
|
+
}
|
|
1785
|
+
function readLineMessage(buffer) {
|
|
1786
|
+
const newlineIndex = buffer.indexOf(10);
|
|
1787
|
+
if (newlineIndex === -1)
|
|
1788
|
+
return { kind: "incomplete" };
|
|
1789
|
+
const line = buffer.subarray(0, newlineIndex).toString("utf8").replace(/\r$/, "");
|
|
1790
|
+
if (line.trim().length === 0) {
|
|
1791
|
+
return { kind: "complete", remaining: buffer.subarray(newlineIndex + 1) };
|
|
1792
|
+
}
|
|
1793
|
+
return {
|
|
1794
|
+
kind: "complete",
|
|
1795
|
+
message: parseJsonPayload(line, "line"),
|
|
1796
|
+
remaining: buffer.subarray(newlineIndex + 1)
|
|
1797
|
+
};
|
|
1798
|
+
}
|
|
1799
|
+
function readFramedMessage(buffer) {
|
|
1800
|
+
const separatorIndex = buffer.indexOf(HEADER_SEPARATOR);
|
|
1801
|
+
if (separatorIndex === -1)
|
|
1802
|
+
return { kind: "incomplete" };
|
|
1803
|
+
const headers = buffer.subarray(0, separatorIndex).toString("ascii");
|
|
1804
|
+
const contentLength = parseContentLength(headers);
|
|
1805
|
+
const bodyStart = separatorIndex + HEADER_SEPARATOR.length;
|
|
1806
|
+
if (contentLength === undefined) {
|
|
1807
|
+
return {
|
|
1808
|
+
kind: "complete",
|
|
1809
|
+
message: {
|
|
1810
|
+
kind: "parse_error",
|
|
1811
|
+
message: "Missing or invalid Content-Length header",
|
|
1812
|
+
responseMode: "framed"
|
|
1813
|
+
},
|
|
1814
|
+
remaining: buffer.subarray(bodyStart)
|
|
1815
|
+
};
|
|
1816
|
+
}
|
|
1817
|
+
const bodyEnd = bodyStart + contentLength;
|
|
1818
|
+
if (buffer.length < bodyEnd)
|
|
1819
|
+
return { kind: "incomplete" };
|
|
1820
|
+
const body = buffer.subarray(bodyStart, bodyEnd).toString("utf8");
|
|
1821
|
+
return {
|
|
1822
|
+
kind: "complete",
|
|
1823
|
+
message: parseJsonPayload(body, "framed"),
|
|
1824
|
+
remaining: buffer.subarray(bodyEnd)
|
|
1825
|
+
};
|
|
1826
|
+
}
|
|
1827
|
+
function startsWithContentLength(buffer) {
|
|
1828
|
+
const prefix = buffer.subarray(0, "content-length:".length).toString("ascii").toLowerCase();
|
|
1829
|
+
return prefix === "content-length:";
|
|
1830
|
+
}
|
|
1831
|
+
function parseContentLength(headers) {
|
|
1832
|
+
for (const line of headers.split(`\r
|
|
1833
|
+
`)) {
|
|
1834
|
+
const match = /^content-length:\s*(\d+)$/i.exec(line);
|
|
1835
|
+
if (match === null)
|
|
1836
|
+
continue;
|
|
1837
|
+
const value = match[1];
|
|
1838
|
+
if (value === undefined)
|
|
1839
|
+
return;
|
|
1840
|
+
return Number(value);
|
|
1841
|
+
}
|
|
1842
|
+
return;
|
|
1843
|
+
}
|
|
1844
|
+
function parseJsonPayload(payload, responseMode) {
|
|
1845
|
+
try {
|
|
1846
|
+
return { kind: "request", payload: JSON.parse(payload), responseMode };
|
|
1847
|
+
} catch (error) {
|
|
1848
|
+
return { kind: "parse_error", message: error instanceof Error ? error.message : String(error), responseMode };
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
function bufferFromChunk(chunk) {
|
|
1852
|
+
if (Buffer.isBuffer(chunk))
|
|
1853
|
+
return chunk;
|
|
1854
|
+
if (typeof chunk === "string")
|
|
1855
|
+
return Buffer.from(chunk);
|
|
1856
|
+
throw new TypeError(`Unsupported stdio chunk type: ${typeof chunk}`);
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
// ../../../../mcp-stdio-core/src/server.ts
|
|
1860
|
+
var DEFAULT_IDLE_TIMEOUT_MS = 10 * 60000;
|
|
1861
|
+
var noopLog = () => {};
|
|
1862
|
+
async function runJsonRpcStdioServer(config) {
|
|
1863
|
+
const log = config.log ?? noopLog;
|
|
1864
|
+
const idleTimeoutMs = config.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
|
|
1865
|
+
const idleTimer = createIdleTimer(idleTimeoutMs, log, config.onIdleTimeout);
|
|
1866
|
+
log("stdio_started", { cwd: process.cwd(), idle_timeout_ms: idleTimeoutMs });
|
|
1867
|
+
idleTimer.arm();
|
|
1868
|
+
try {
|
|
1869
|
+
for await (const message of readStdioJsonRpcMessages(config.input)) {
|
|
1870
|
+
if (idleTimer.closed())
|
|
1871
|
+
break;
|
|
1872
|
+
idleTimer.arm();
|
|
1873
|
+
if (message.kind === "parse_error") {
|
|
1874
|
+
handleParseError(message, config, log);
|
|
1875
|
+
continue;
|
|
1876
|
+
}
|
|
1877
|
+
await handleRequest(message, config, log);
|
|
1878
|
+
}
|
|
1879
|
+
} finally {
|
|
1880
|
+
idleTimer.clear();
|
|
1881
|
+
log("stdio_stopped");
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
function handleParseError(message, config, log) {
|
|
1885
|
+
log("parse_error", { message: message.message });
|
|
1886
|
+
const response = config.parseErrorResponse?.(message.message) ?? errorResponse(null, -32700, "Parse error", message.message);
|
|
1887
|
+
if (response !== undefined) {
|
|
1888
|
+
writeStdioJsonRpcResponse(config.output, response, message.responseMode);
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1891
|
+
async function handleRequest(message, config, log) {
|
|
1892
|
+
const parsed = message.payload;
|
|
1893
|
+
const id = isPlainRecord(parsed) ? jsonRpcId(parsed["id"]) : null;
|
|
1894
|
+
const method = isPlainRecord(parsed) && typeof parsed["method"] === "string" ? parsed["method"] : null;
|
|
1895
|
+
log("request", { id: id === null ? null : String(id), method });
|
|
1896
|
+
try {
|
|
1897
|
+
const response = await config.handler(parsed, config.handlerOptions);
|
|
1898
|
+
if (response === undefined)
|
|
1899
|
+
return;
|
|
1900
|
+
writeStdioJsonRpcResponse(config.output, response, message.responseMode);
|
|
1901
|
+
log("response", { id: String(response.id), method, is_error: response.error !== undefined });
|
|
1902
|
+
} catch (error) {
|
|
1903
|
+
if (config.onHandlerError === undefined)
|
|
1904
|
+
throw error;
|
|
1905
|
+
config.onHandlerError(error);
|
|
1906
|
+
}
|
|
1907
|
+
}
|
|
1908
|
+
function createIdleTimer(idleTimeoutMs, log, onIdleTimeout) {
|
|
1909
|
+
let timer = null;
|
|
1910
|
+
let isClosed = false;
|
|
1911
|
+
return {
|
|
1912
|
+
arm: () => {
|
|
1913
|
+
if (timer !== null)
|
|
1914
|
+
clearTimeout(timer);
|
|
1915
|
+
if (idleTimeoutMs <= 0)
|
|
1916
|
+
return;
|
|
1917
|
+
timer = setTimeout(() => {
|
|
1918
|
+
isClosed = true;
|
|
1919
|
+
log("idle_timeout", { idle_timeout_ms: idleTimeoutMs });
|
|
1920
|
+
onIdleTimeout?.();
|
|
1921
|
+
}, idleTimeoutMs);
|
|
1922
|
+
timer.unref();
|
|
1923
|
+
},
|
|
1924
|
+
clear: () => {
|
|
1925
|
+
if (timer === null)
|
|
1926
|
+
return;
|
|
1927
|
+
clearTimeout(timer);
|
|
1928
|
+
timer = null;
|
|
1929
|
+
},
|
|
1930
|
+
closed: () => isClosed
|
|
1931
|
+
};
|
|
1932
|
+
}
|
|
1933
|
+
// src/mcp-unavailable.ts
|
|
1934
|
+
async function runUnavailableCodegraphMcpServer(options) {
|
|
1935
|
+
await runJsonRpcStdioServer({
|
|
1936
|
+
handler: handleUnavailableCodegraphMcpRequest,
|
|
1937
|
+
handlerOptions: {
|
|
1938
|
+
reason: options.reason.trim(),
|
|
1939
|
+
serverVersion: options.serverVersion
|
|
1940
|
+
},
|
|
1941
|
+
input: options.input,
|
|
1942
|
+
output: options.output
|
|
1943
|
+
});
|
|
1944
|
+
}
|
|
1945
|
+
async function handleUnavailableCodegraphMcpRequest(input, options) {
|
|
1946
|
+
if (!isPlainRecord(input)) {
|
|
1947
|
+
return errorResponse(null, -32600, "Invalid Request");
|
|
1948
|
+
}
|
|
1949
|
+
const id = jsonRpcId(input["id"]);
|
|
1950
|
+
const method = input["method"];
|
|
1951
|
+
if (method === "notifications/initialized")
|
|
1952
|
+
return;
|
|
1953
|
+
if (method === "ping")
|
|
1954
|
+
return successResponse(id, {});
|
|
1955
|
+
if (method === "initialize") {
|
|
1956
|
+
return successResponse(id, {
|
|
1957
|
+
capabilities: { tools: { listChanged: false } },
|
|
1958
|
+
protocolVersion: requestedProtocolVersion(input["params"]),
|
|
1959
|
+
serverInfo: { name: "codegraph", version: options.serverVersion }
|
|
1960
|
+
});
|
|
1961
|
+
}
|
|
1962
|
+
if (method === "tools/list") {
|
|
1963
|
+
return successResponse(id, { tools: [] });
|
|
1964
|
+
}
|
|
1965
|
+
if (method === "tools/call") {
|
|
1966
|
+
return successResponse(id, {
|
|
1967
|
+
content: [{ text: options.reason, type: "text" }],
|
|
1968
|
+
isError: true
|
|
1969
|
+
});
|
|
1970
|
+
}
|
|
1971
|
+
return errorResponse(id, -32601, `Method not found: ${String(method)}`);
|
|
1972
|
+
}
|
|
1973
|
+
function requestedProtocolVersion(params) {
|
|
1974
|
+
if (!isPlainRecord(params) || typeof params["protocolVersion"] !== "string")
|
|
1975
|
+
return "2024-11-05";
|
|
1976
|
+
return params["protocolVersion"];
|
|
1977
|
+
}
|
|
1494
1978
|
|
|
1495
1979
|
// src/serve.ts
|
|
1496
1980
|
var CODEGRAPH_SKIP_HINT = `CodeGraph MCP skipped: codegraph binary not found. Install CodeGraph or set OMO_CODEGRAPH_BIN.
|
|
1497
1981
|
`;
|
|
1498
1982
|
var CODEGRAPH_DISABLED_HINT = `CodeGraph MCP skipped: disabled by OMO SOT config. Set [codex].codegraph.enabled=true to enable it.
|
|
1499
1983
|
`;
|
|
1984
|
+
var CODEGRAPH_VERSION = "1.0.1";
|
|
1500
1985
|
var WINDOWS_CMD_EXTENSIONS = new Set([".bat", ".cmd"]);
|
|
1501
1986
|
var WINDOWS_NODE_SCRIPT_EXTENSIONS = new Set([".cjs", ".js", ".mjs"]);
|
|
1502
1987
|
async function runCodegraphServe(options = {}) {
|
|
1503
1988
|
const env = options.env ?? processEnv;
|
|
1504
|
-
const homeDir = options.homeDir ??
|
|
1989
|
+
const homeDir = options.homeDir ?? homedir6();
|
|
1505
1990
|
const config = options.config ?? getCodexOmoConfig({ cwd: options.cwd ?? processCwd(), env, homeDir });
|
|
1506
1991
|
const codegraphConfig = config.codegraph ?? {};
|
|
1507
1992
|
if (codegraphConfig.enabled === false) {
|
|
1508
|
-
|
|
1509
|
-
return 1;
|
|
1993
|
+
return runUnavailableMcp(CODEGRAPH_DISABLED_HINT, options);
|
|
1510
1994
|
}
|
|
1995
|
+
const trustedInstallDir = config.trustedCodegraphInstallDir;
|
|
1511
1996
|
const resolutionOptions = {
|
|
1512
1997
|
env,
|
|
1513
1998
|
homeDir,
|
|
1514
|
-
provisioned: () => provisionedBinFromInstallDir(
|
|
1999
|
+
provisioned: () => provisionedBinFromInstallDir(trustedInstallDir)
|
|
1515
2000
|
};
|
|
1516
|
-
|
|
2001
|
+
let resolution = options.resolve?.(resolutionOptions) ?? resolveCodegraphCommand(resolutionOptions);
|
|
1517
2002
|
const nodeSupport = evaluateCodegraphNodeSupport({ env, nodeVersion: options.nodeVersion });
|
|
1518
|
-
if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ??
|
|
2003
|
+
if (!resolution.exists || shouldSkipResolvedCommand(resolution, options.commandExists ?? existsSync5)) {
|
|
1519
2004
|
if (resolution.source === "path" && !nodeSupport.supported) {
|
|
1520
|
-
|
|
1521
|
-
return 1;
|
|
2005
|
+
return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
|
|
1522
2006
|
}
|
|
1523
|
-
|
|
1524
|
-
|
|
2007
|
+
const provisioned = await provisionMissingCodegraph({
|
|
2008
|
+
config: codegraphConfig,
|
|
2009
|
+
ensureProvisioned: options.ensureProvisioned ?? ensureCodegraphProvisioned,
|
|
2010
|
+
homeDir,
|
|
2011
|
+
resolution,
|
|
2012
|
+
...trustedInstallDir === undefined ? {} : { trustedInstallDir }
|
|
2013
|
+
});
|
|
2014
|
+
if (provisioned === null) {
|
|
2015
|
+
return runUnavailableMcp(CODEGRAPH_SKIP_HINT, options);
|
|
2016
|
+
}
|
|
2017
|
+
resolution = provisioned;
|
|
1525
2018
|
}
|
|
1526
2019
|
if (codegraphCommandRequiresSupportedLocalNode(resolution) && !nodeSupport.supported) {
|
|
1527
|
-
|
|
1528
|
-
return 1;
|
|
2020
|
+
return runUnavailableMcp(buildCodegraphNodeSkipHint(nodeSupport), options);
|
|
1529
2021
|
}
|
|
1530
2022
|
const runProcess = options.runProcess ?? runChildProcess;
|
|
1531
|
-
const codegraphEnv = codegraphEnvForConfig(
|
|
2023
|
+
const codegraphEnv = codegraphEnvForConfig(trustedInstallDir, homeDir, options.buildEnv);
|
|
1532
2024
|
const mergedEnv = {
|
|
1533
2025
|
...env,
|
|
1534
2026
|
...codegraphEnv
|
|
@@ -1538,6 +2030,31 @@ async function runCodegraphServe(options = {}) {
|
|
|
1538
2030
|
stdio: "inherit"
|
|
1539
2031
|
});
|
|
1540
2032
|
}
|
|
2033
|
+
async function runUnavailableMcp(reason, options) {
|
|
2034
|
+
(options.stderr ?? processStderr).write(reason);
|
|
2035
|
+
await runUnavailableCodegraphMcpServer({
|
|
2036
|
+
input: options.stdin ?? processStdin,
|
|
2037
|
+
output: options.stdout ?? processStdout,
|
|
2038
|
+
reason,
|
|
2039
|
+
serverVersion: CODEGRAPH_VERSION
|
|
2040
|
+
});
|
|
2041
|
+
return 0;
|
|
2042
|
+
}
|
|
2043
|
+
async function provisionMissingCodegraph(options) {
|
|
2044
|
+
if (options.resolution.source === "env")
|
|
2045
|
+
return null;
|
|
2046
|
+
if (options.config.auto_provision === false)
|
|
2047
|
+
return null;
|
|
2048
|
+
const installDir = options.trustedInstallDir ?? join6(options.homeDir, ".omo", "codegraph");
|
|
2049
|
+
const result = await options.ensureProvisioned({
|
|
2050
|
+
installDir,
|
|
2051
|
+
lockDir: join6(installDir, ".locks"),
|
|
2052
|
+
version: CODEGRAPH_VERSION
|
|
2053
|
+
});
|
|
2054
|
+
if (!result.provisioned || result.binPath === undefined)
|
|
2055
|
+
return null;
|
|
2056
|
+
return { argsPrefix: [], command: result.binPath, exists: true, source: "provisioned" };
|
|
2057
|
+
}
|
|
1541
2058
|
function shouldSkipResolvedCommand(resolution, commandExists) {
|
|
1542
2059
|
if (resolution.source !== "env")
|
|
1543
2060
|
return false;
|
|
@@ -1548,15 +2065,15 @@ function shouldSkipResolvedCommand(resolution, commandExists) {
|
|
|
1548
2065
|
function looksLikePath2(command) {
|
|
1549
2066
|
return command.includes("/") || command.includes("\\");
|
|
1550
2067
|
}
|
|
1551
|
-
function codegraphEnvForConfig(
|
|
2068
|
+
function codegraphEnvForConfig(trustedInstallDir, homeDir, buildEnv) {
|
|
1552
2069
|
const env = buildEnv?.({ homeDir }) ?? buildCodegraphEnv({ homeDir });
|
|
1553
|
-
return
|
|
2070
|
+
return trustedInstallDir === undefined ? env : { ...env, CODEGRAPH_INSTALL_DIR: trustedInstallDir };
|
|
1554
2071
|
}
|
|
1555
2072
|
function provisionedBinFromInstallDir(installDir) {
|
|
1556
2073
|
if (installDir === undefined)
|
|
1557
2074
|
return null;
|
|
1558
|
-
const candidate =
|
|
1559
|
-
return
|
|
2075
|
+
const candidate = join6(installDir, "bin", process.platform === "win32" ? "codegraph.cmd" : "codegraph");
|
|
2076
|
+
return existsSync5(candidate) ? candidate : null;
|
|
1560
2077
|
}
|
|
1561
2078
|
async function runCodegraphServeCli() {
|
|
1562
2079
|
process.exitCode = await runCodegraphServe();
|
|
@@ -1598,7 +2115,7 @@ function isDirectInvocation(argvPath) {
|
|
|
1598
2115
|
if (argvPath === undefined)
|
|
1599
2116
|
return false;
|
|
1600
2117
|
const modulePath = fileURLToPath(import.meta.url);
|
|
1601
|
-
const moduleName =
|
|
2118
|
+
const moduleName = basename3(modulePath);
|
|
1602
2119
|
if (moduleName !== "serve.js" && moduleName !== "serve.ts")
|
|
1603
2120
|
return false;
|
|
1604
2121
|
return realpathSync(resolve2(argvPath)) === realpathSync(modulePath);
|