@aligndottech/cli 0.48.0 → 0.50.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 +10 -8
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +35 -26
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +7 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/ai.d.ts +11 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +121 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +18 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/connect.d.ts +5 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +24 -0
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/default-action.js +2 -2
- package/dist/commands/default-action.js.map +1 -1
- package/dist/commands/import/confluence.d.ts.map +1 -1
- package/dist/commands/import/confluence.js +24 -5
- package/dist/commands/import/confluence.js.map +1 -1
- package/dist/commands/import/docs.js +2 -2
- package/dist/commands/import/git.d.ts.map +1 -1
- package/dist/commands/import/git.js +15 -5
- package/dist/commands/import/git.js.map +1 -1
- package/dist/commands/import/github.d.ts.map +1 -1
- package/dist/commands/import/github.js +34 -7
- package/dist/commands/import/github.js.map +1 -1
- package/dist/commands/import/gitlab.d.ts.map +1 -1
- package/dist/commands/import/gitlab.js +10 -5
- package/dist/commands/import/gitlab.js.map +1 -1
- package/dist/commands/import/jira.d.ts.map +1 -1
- package/dist/commands/import/jira.js +10 -5
- package/dist/commands/import/jira.js.map +1 -1
- package/dist/commands/import/linear.d.ts.map +1 -1
- package/dist/commands/import/linear.js +10 -5
- package/dist/commands/import/linear.js.map +1 -1
- package/dist/commands/import/notion.d.ts.map +1 -1
- package/dist/commands/import/notion.js +10 -5
- package/dist/commands/import/notion.js.map +1 -1
- package/dist/commands/import/sessions.js +2 -2
- package/dist/commands/import/slack.d.ts.map +1 -1
- package/dist/commands/import/slack.js +12 -7
- package/dist/commands/import/slack.js.map +1 -1
- package/dist/commands/import/teams.d.ts.map +1 -1
- package/dist/commands/import/teams.js +10 -5
- package/dist/commands/import/teams.js.map +1 -1
- package/dist/commands/import/zoom.d.ts.map +1 -1
- package/dist/commands/import/zoom.js +10 -5
- package/dist/commands/import/zoom.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +43 -1
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/local.d.ts.map +1 -1
- package/dist/commands/local.js +76 -4
- package/dist/commands/local.js.map +1 -1
- package/dist/commands/mark.d.ts +37 -0
- package/dist/commands/mark.d.ts.map +1 -0
- package/dist/commands/mark.js +105 -0
- package/dist/commands/mark.js.map +1 -0
- package/dist/commands/mcp.d.ts +141 -2
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +72 -14
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +12 -2
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/setup.d.ts +39 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +118 -241
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/share.d.ts +7 -0
- package/dist/commands/share.d.ts.map +1 -0
- package/dist/commands/share.js +60 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/sync.d.ts +55 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +278 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/telemetry.d.ts +3 -3
- package/dist/commands/telemetry.js +6 -6
- package/dist/commands/telemetry.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +27 -1
- package/dist/commands/why.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ask-key-offer.d.ts +38 -0
- package/dist/lib/ask-key-offer.d.ts.map +1 -0
- package/dist/lib/ask-key-offer.js +130 -0
- package/dist/lib/ask-key-offer.js.map +1 -0
- package/dist/lib/backfill-state.d.ts +116 -0
- package/dist/lib/backfill-state.d.ts.map +1 -0
- package/dist/lib/backfill-state.js +342 -0
- package/dist/lib/backfill-state.js.map +1 -0
- package/dist/lib/backup-copy.d.ts +17 -0
- package/dist/lib/backup-copy.d.ts.map +1 -0
- package/dist/lib/backup-copy.js +13 -0
- package/dist/lib/backup-copy.js.map +1 -0
- package/dist/lib/capture-report.d.ts +22 -18
- package/dist/lib/capture-report.d.ts.map +1 -1
- package/dist/lib/capture-report.js +64 -2
- package/dist/lib/capture-report.js.map +1 -1
- package/dist/lib/config.d.ts +56 -24
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +176 -45
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/confirm-timeout.d.ts +8 -0
- package/dist/lib/confirm-timeout.d.ts.map +1 -0
- package/dist/lib/confirm-timeout.js +18 -0
- package/dist/lib/confirm-timeout.js.map +1 -0
- package/dist/lib/curation/check-marks.d.ts +48 -0
- package/dist/lib/curation/check-marks.d.ts.map +1 -0
- package/dist/lib/curation/check-marks.js +81 -0
- package/dist/lib/curation/check-marks.js.map +1 -0
- package/dist/lib/curation/guardrail.d.ts +39 -0
- package/dist/lib/curation/guardrail.d.ts.map +1 -0
- package/dist/lib/curation/guardrail.js +93 -0
- package/dist/lib/curation/guardrail.js.map +1 -0
- package/dist/lib/curation/judge.d.ts +3 -0
- package/dist/lib/curation/judge.d.ts.map +1 -0
- package/dist/lib/curation/judge.js +9 -0
- package/dist/lib/curation/judge.js.map +1 -0
- package/dist/lib/curation/judgements-db.d.ts +96 -0
- package/dist/lib/curation/judgements-db.d.ts.map +1 -0
- package/dist/lib/curation/judgements-db.js +200 -0
- package/dist/lib/curation/judgements-db.js.map +1 -0
- package/dist/lib/curation/last-check.d.ts +32 -0
- package/dist/lib/curation/last-check.d.ts.map +1 -0
- package/dist/lib/curation/last-check.js +81 -0
- package/dist/lib/curation/last-check.js.map +1 -0
- package/dist/lib/curation/mark.d.ts +76 -0
- package/dist/lib/curation/mark.d.ts.map +1 -0
- package/dist/lib/curation/mark.js +359 -0
- package/dist/lib/curation/mark.js.map +1 -0
- package/dist/lib/curation/text.d.ts +6 -0
- package/dist/lib/curation/text.d.ts.map +1 -0
- package/dist/lib/curation/text.js +35 -0
- package/dist/lib/curation/text.js.map +1 -0
- package/dist/lib/fetchers/capture.d.ts +49 -2
- package/dist/lib/fetchers/capture.d.ts.map +1 -1
- package/dist/lib/fetchers/capture.js +7 -1
- package/dist/lib/fetchers/capture.js.map +1 -1
- package/dist/lib/fetchers/confluence.d.ts +2 -2
- package/dist/lib/fetchers/confluence.d.ts.map +1 -1
- package/dist/lib/fetchers/confluence.js.map +1 -1
- package/dist/lib/fetchers/git.d.ts +1 -0
- package/dist/lib/fetchers/git.d.ts.map +1 -1
- package/dist/lib/fetchers/git.js +3 -1
- package/dist/lib/fetchers/git.js.map +1 -1
- package/dist/lib/fetchers/github.d.ts +44 -5
- package/dist/lib/fetchers/github.d.ts.map +1 -1
- package/dist/lib/fetchers/github.js +122 -5
- package/dist/lib/fetchers/github.js.map +1 -1
- package/dist/lib/fetchers/gitlab.d.ts +2 -2
- package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
- package/dist/lib/fetchers/gitlab.js.map +1 -1
- package/dist/lib/fetchers/jira.d.ts +2 -2
- package/dist/lib/fetchers/jira.d.ts.map +1 -1
- package/dist/lib/fetchers/jira.js.map +1 -1
- package/dist/lib/fetchers/linear.d.ts +2 -2
- package/dist/lib/fetchers/linear.d.ts.map +1 -1
- package/dist/lib/fetchers/linear.js.map +1 -1
- package/dist/lib/fetchers/notion.d.ts +2 -2
- package/dist/lib/fetchers/notion.d.ts.map +1 -1
- package/dist/lib/fetchers/notion.js.map +1 -1
- package/dist/lib/fetchers/slack.d.ts +2 -3
- package/dist/lib/fetchers/slack.d.ts.map +1 -1
- package/dist/lib/fetchers/slack.js.map +1 -1
- package/dist/lib/fetchers/teams.d.ts +2 -2
- package/dist/lib/fetchers/teams.d.ts.map +1 -1
- package/dist/lib/fetchers/teams.js.map +1 -1
- package/dist/lib/fetchers/zoom.d.ts +2 -2
- package/dist/lib/fetchers/zoom.d.ts.map +1 -1
- package/dist/lib/fetchers/zoom.js.map +1 -1
- package/dist/lib/gateway-client.d.ts +34 -0
- package/dist/lib/gateway-client.d.ts.map +1 -1
- package/dist/lib/gateway-client.js +19 -1
- package/dist/lib/gateway-client.js.map +1 -1
- package/dist/lib/github-text.d.ts +3 -0
- package/dist/lib/github-text.d.ts.map +1 -0
- package/dist/lib/github-text.js +18 -0
- package/dist/lib/github-text.js.map +1 -0
- package/dist/lib/hook-context.d.ts +10 -0
- package/dist/lib/hook-context.d.ts.map +1 -1
- package/dist/lib/hook-context.js +14 -0
- package/dist/lib/hook-context.js.map +1 -1
- package/dist/lib/import-defaults.d.ts +39 -23
- package/dist/lib/import-defaults.d.ts.map +1 -1
- package/dist/lib/import-defaults.js +28 -26
- package/dist/lib/import-defaults.js.map +1 -1
- package/dist/lib/launch/adapters/aider.d.ts +17 -0
- package/dist/lib/launch/adapters/aider.d.ts.map +1 -0
- package/dist/lib/launch/adapters/aider.js +30 -0
- package/dist/lib/launch/adapters/aider.js.map +1 -0
- package/dist/lib/launch/adapters/amp.d.ts +18 -0
- package/dist/lib/launch/adapters/amp.d.ts.map +1 -0
- package/dist/lib/launch/adapters/amp.js +29 -0
- package/dist/lib/launch/adapters/amp.js.map +1 -0
- package/dist/lib/launch/adapters/auggie.d.ts +18 -0
- package/dist/lib/launch/adapters/auggie.d.ts.map +1 -0
- package/dist/lib/launch/adapters/auggie.js +34 -0
- package/dist/lib/launch/adapters/auggie.js.map +1 -0
- package/dist/lib/launch/adapters/cline.d.ts +10 -0
- package/dist/lib/launch/adapters/cline.d.ts.map +1 -0
- package/dist/lib/launch/adapters/cline.js +41 -0
- package/dist/lib/launch/adapters/cline.js.map +1 -0
- package/dist/lib/launch/adapters/continue.d.ts +22 -0
- package/dist/lib/launch/adapters/continue.d.ts.map +1 -0
- package/dist/lib/launch/adapters/continue.js +46 -0
- package/dist/lib/launch/adapters/continue.js.map +1 -0
- package/dist/lib/launch/adapters/droid.d.ts +19 -0
- package/dist/lib/launch/adapters/droid.d.ts.map +1 -0
- package/dist/lib/launch/adapters/droid.js +38 -0
- package/dist/lib/launch/adapters/droid.js.map +1 -0
- package/dist/lib/launch/adapters/gemini-cli.d.ts +13 -14
- package/dist/lib/launch/adapters/gemini-cli.d.ts.map +1 -1
- package/dist/lib/launch/adapters/gemini-cli.js +38 -53
- package/dist/lib/launch/adapters/gemini-cli.js.map +1 -1
- package/dist/lib/launch/adapters/goose.d.ts +20 -0
- package/dist/lib/launch/adapters/goose.d.ts.map +1 -0
- package/dist/lib/launch/adapters/goose.js +47 -0
- package/dist/lib/launch/adapters/goose.js.map +1 -0
- package/dist/lib/launch/adapters/grok-build.d.ts +16 -0
- package/dist/lib/launch/adapters/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/adapters/grok-build.js +25 -0
- package/dist/lib/launch/adapters/grok-build.js.map +1 -0
- package/dist/lib/launch/adapters/kiro.d.ts +17 -0
- package/dist/lib/launch/adapters/kiro.d.ts.map +1 -0
- package/dist/lib/launch/adapters/kiro.js +25 -0
- package/dist/lib/launch/adapters/kiro.js.map +1 -0
- package/dist/lib/launch/adapters/notes.d.ts +7 -0
- package/dist/lib/launch/adapters/notes.d.ts.map +1 -0
- package/dist/lib/launch/adapters/notes.js +5 -0
- package/dist/lib/launch/adapters/notes.js.map +1 -0
- package/dist/lib/launch/adapters/qwen.d.ts +25 -0
- package/dist/lib/launch/adapters/qwen.d.ts.map +1 -0
- package/dist/lib/launch/adapters/qwen.js +67 -0
- package/dist/lib/launch/adapters/qwen.js.map +1 -0
- package/dist/lib/launch/agents.d.ts +6 -1
- package/dist/lib/launch/agents.d.ts.map +1 -1
- package/dist/lib/launch/agents.js +12 -4
- package/dist/lib/launch/agents.js.map +1 -1
- package/dist/lib/launch/amp-state.d.ts +21 -0
- package/dist/lib/launch/amp-state.d.ts.map +1 -0
- package/dist/lib/launch/amp-state.js +61 -0
- package/dist/lib/launch/amp-state.js.map +1 -0
- package/dist/lib/launch/auggie-state.d.ts +25 -0
- package/dist/lib/launch/auggie-state.d.ts.map +1 -0
- package/dist/lib/launch/auggie-state.js +74 -0
- package/dist/lib/launch/auggie-state.js.map +1 -0
- package/dist/lib/launch/cline-state.d.ts +32 -0
- package/dist/lib/launch/cline-state.d.ts.map +1 -0
- package/dist/lib/launch/cline-state.js +108 -0
- package/dist/lib/launch/cline-state.js.map +1 -0
- package/dist/lib/launch/config-writes.d.ts +11 -1
- package/dist/lib/launch/config-writes.d.ts.map +1 -1
- package/dist/lib/launch/config-writes.js +66 -8
- package/dist/lib/launch/config-writes.js.map +1 -1
- package/dist/lib/launch/continue-state.d.ts +41 -0
- package/dist/lib/launch/continue-state.d.ts.map +1 -0
- package/dist/lib/launch/continue-state.js +142 -0
- package/dist/lib/launch/continue-state.js.map +1 -0
- package/dist/lib/launch/detect.d.ts.map +1 -1
- package/dist/lib/launch/detect.js +5 -2
- package/dist/lib/launch/detect.js.map +1 -1
- package/dist/lib/launch/droid-state.d.ts +24 -0
- package/dist/lib/launch/droid-state.d.ts.map +1 -0
- package/dist/lib/launch/droid-state.js +74 -0
- package/dist/lib/launch/droid-state.js.map +1 -0
- package/dist/lib/launch/gemini-state.d.ts +26 -20
- package/dist/lib/launch/gemini-state.d.ts.map +1 -1
- package/dist/lib/launch/gemini-state.js +95 -37
- package/dist/lib/launch/gemini-state.js.map +1 -1
- package/dist/lib/launch/gemini-system-file.d.ts +17 -0
- package/dist/lib/launch/gemini-system-file.d.ts.map +1 -0
- package/dist/lib/launch/gemini-system-file.js +55 -0
- package/dist/lib/launch/gemini-system-file.js.map +1 -0
- package/dist/lib/launch/gemini-trust.d.ts +3 -1
- package/dist/lib/launch/gemini-trust.d.ts.map +1 -1
- package/dist/lib/launch/gemini-trust.js +10 -3
- package/dist/lib/launch/gemini-trust.js.map +1 -1
- package/dist/lib/launch/goose-state.d.ts +53 -0
- package/dist/lib/launch/goose-state.d.ts.map +1 -0
- package/dist/lib/launch/goose-state.js +137 -0
- package/dist/lib/launch/goose-state.js.map +1 -0
- package/dist/lib/launch/grok-state.d.ts +42 -0
- package/dist/lib/launch/grok-state.d.ts.map +1 -0
- package/dist/lib/launch/grok-state.js +128 -0
- package/dist/lib/launch/grok-state.js.map +1 -0
- package/dist/lib/launch/kiro-state.d.ts +22 -0
- package/dist/lib/launch/kiro-state.d.ts.map +1 -0
- package/dist/lib/launch/kiro-state.js +59 -0
- package/dist/lib/launch/kiro-state.js.map +1 -0
- package/dist/lib/launch/launch-files.d.ts.map +1 -1
- package/dist/lib/launch/launch-files.js +3 -2
- package/dist/lib/launch/launch-files.js.map +1 -1
- package/dist/lib/launch/launch.d.ts +51 -2
- package/dist/lib/launch/launch.d.ts.map +1 -1
- package/dist/lib/launch/launch.js +70 -6
- package/dist/lib/launch/launch.js.map +1 -1
- package/dist/lib/launch/layer-files.d.ts +12 -0
- package/dist/lib/launch/layer-files.d.ts.map +1 -0
- package/dist/lib/launch/layer-files.js +43 -0
- package/dist/lib/launch/layer-files.js.map +1 -0
- package/dist/lib/launch/mcp-child-env.d.ts +30 -0
- package/dist/lib/launch/mcp-child-env.d.ts.map +1 -0
- package/dist/lib/launch/mcp-child-env.js +151 -0
- package/dist/lib/launch/mcp-child-env.js.map +1 -0
- package/dist/lib/launch/pick-agent.d.ts.map +1 -1
- package/dist/lib/launch/pick-agent.js +7 -6
- package/dist/lib/launch/pick-agent.js.map +1 -1
- package/dist/lib/launch/picker-options.d.ts.map +1 -1
- package/dist/lib/launch/picker-options.js +7 -2
- package/dist/lib/launch/picker-options.js.map +1 -1
- package/dist/lib/launch/qwen-state.d.ts +30 -0
- package/dist/lib/launch/qwen-state.d.ts.map +1 -0
- package/dist/lib/launch/qwen-state.js +57 -0
- package/dist/lib/launch/qwen-state.js.map +1 -0
- package/dist/lib/launch/qwen-trust.d.ts +24 -0
- package/dist/lib/launch/qwen-trust.d.ts.map +1 -0
- package/dist/lib/launch/qwen-trust.js +100 -0
- package/dist/lib/launch/qwen-trust.js.map +1 -0
- package/dist/lib/launch/registry/agents/aider.d.ts +3 -0
- package/dist/lib/launch/registry/agents/aider.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/aider.js +13 -0
- package/dist/lib/launch/registry/agents/aider.js.map +1 -0
- package/dist/lib/launch/registry/agents/amp.d.ts +3 -0
- package/dist/lib/launch/registry/agents/amp.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/amp.js +14 -0
- package/dist/lib/launch/registry/agents/amp.js.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts +3 -0
- package/dist/lib/launch/registry/agents/auggie.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/auggie.js +11 -0
- package/dist/lib/launch/registry/agents/auggie.js.map +1 -0
- package/dist/lib/launch/registry/agents/cline.d.ts +3 -0
- package/dist/lib/launch/registry/agents/cline.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/cline.js +19 -0
- package/dist/lib/launch/registry/agents/cline.js.map +1 -0
- package/dist/lib/launch/registry/agents/continue.d.ts +3 -0
- package/dist/lib/launch/registry/agents/continue.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/continue.js +20 -0
- package/dist/lib/launch/registry/agents/continue.js.map +1 -0
- package/dist/lib/launch/registry/agents/droid.d.ts +3 -0
- package/dist/lib/launch/registry/agents/droid.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/droid.js +13 -0
- package/dist/lib/launch/registry/agents/droid.js.map +1 -0
- package/dist/lib/launch/registry/agents/gemini-cli.js +2 -2
- package/dist/lib/launch/registry/agents/gemini-cli.js.map +1 -1
- package/dist/lib/launch/registry/agents/goose.d.ts +3 -0
- package/dist/lib/launch/registry/agents/goose.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/goose.js +20 -0
- package/dist/lib/launch/registry/agents/goose.js.map +1 -0
- package/dist/lib/launch/registry/agents/grok-build.d.ts +3 -0
- package/dist/lib/launch/registry/agents/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/grok-build.js +14 -0
- package/dist/lib/launch/registry/agents/grok-build.js.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts +3 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.js +11 -0
- package/dist/lib/launch/registry/agents/kiro.js.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts +3 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.js +11 -0
- package/dist/lib/launch/registry/agents/qwen.js.map +1 -0
- package/dist/lib/launch/registry/index.d.ts +4 -1
- package/dist/lib/launch/registry/index.d.ts.map +1 -1
- package/dist/lib/launch/registry/index.js +15 -2
- package/dist/lib/launch/registry/index.js.map +1 -1
- package/dist/lib/launch/registry/types.d.ts +17 -1
- package/dist/lib/launch/registry/types.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.d.ts +11 -0
- package/dist/lib/launch/run-agent.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.js +22 -1
- package/dist/lib/launch/run-agent.js.map +1 -1
- package/dist/lib/launch/strict-entry.d.ts +22 -2
- package/dist/lib/launch/strict-entry.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.js +82 -2
- package/dist/lib/launch/strict-entry.js.map +1 -1
- package/dist/lib/launch/yaml-scan.d.ts +59 -0
- package/dist/lib/launch/yaml-scan.d.ts.map +1 -0
- package/dist/lib/launch/yaml-scan.js +275 -0
- package/dist/lib/launch/yaml-scan.js.map +1 -0
- package/dist/lib/llm-providers.d.ts +66 -0
- package/dist/lib/llm-providers.d.ts.map +1 -0
- package/dist/lib/llm-providers.js +150 -0
- package/dist/lib/llm-providers.js.map +1 -0
- package/dist/lib/local-db-epoch.d.ts +4 -0
- package/dist/lib/local-db-epoch.d.ts.map +1 -0
- package/dist/lib/local-db-epoch.js +19 -0
- package/dist/lib/local-db-epoch.js.map +1 -0
- package/dist/lib/local-db-migrate.d.ts +85 -0
- package/dist/lib/local-db-migrate.d.ts.map +1 -0
- package/dist/lib/local-db-migrate.js +484 -0
- package/dist/lib/local-db-migrate.js.map +1 -0
- package/dist/lib/local-db-v10.d.ts +28 -0
- package/dist/lib/local-db-v10.d.ts.map +1 -0
- package/dist/lib/local-db-v10.js +49 -0
- package/dist/lib/local-db-v10.js.map +1 -0
- package/dist/lib/local-db-v11.d.ts +24 -0
- package/dist/lib/local-db-v11.d.ts.map +1 -0
- package/dist/lib/local-db-v11.js +25 -0
- package/dist/lib/local-db-v11.js.map +1 -0
- package/dist/lib/local-db-v7.d.ts +30 -0
- package/dist/lib/local-db-v7.d.ts.map +1 -0
- package/dist/lib/local-db-v7.js +285 -0
- package/dist/lib/local-db-v7.js.map +1 -0
- package/dist/lib/local-db-v8.d.ts +22 -0
- package/dist/lib/local-db-v8.d.ts.map +1 -0
- package/dist/lib/local-db-v8.js +33 -0
- package/dist/lib/local-db-v8.js.map +1 -0
- package/dist/lib/local-db-v9.d.ts +10 -0
- package/dist/lib/local-db-v9.d.ts.map +1 -0
- package/dist/lib/local-db-v9.js +8 -0
- package/dist/lib/local-db-v9.js.map +1 -0
- package/dist/lib/local-db.d.ts +61 -11
- package/dist/lib/local-db.d.ts.map +1 -1
- package/dist/lib/local-db.js +186 -371
- package/dist/lib/local-db.js.map +1 -1
- package/dist/lib/local-embeddings.d.ts.map +1 -1
- package/dist/lib/local-embeddings.js +2 -2
- package/dist/lib/local-embeddings.js.map +1 -1
- package/dist/lib/local-gateway-client.d.ts +30 -87
- package/dist/lib/local-gateway-client.d.ts.map +1 -1
- package/dist/lib/local-gateway-client.js +182 -171
- package/dist/lib/local-gateway-client.js.map +1 -1
- package/dist/lib/local-ingest.d.ts +129 -0
- package/dist/lib/local-ingest.d.ts.map +1 -0
- package/dist/lib/local-ingest.js +81 -0
- package/dist/lib/local-ingest.js.map +1 -0
- package/dist/lib/local-link-pass.d.ts +15 -0
- package/dist/lib/local-link-pass.d.ts.map +1 -0
- package/dist/lib/local-link-pass.js +61 -0
- package/dist/lib/local-link-pass.js.map +1 -0
- package/dist/lib/local-llm.d.ts +63 -12
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +229 -104
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/local-mode.d.ts +4 -1
- package/dist/lib/local-mode.d.ts.map +1 -1
- package/dist/lib/local-mode.js +16 -1
- package/dist/lib/local-mode.js.map +1 -1
- package/dist/lib/local-provenance.d.ts +14 -0
- package/dist/lib/local-provenance.d.ts.map +1 -0
- package/dist/lib/local-provenance.js +14 -0
- package/dist/lib/local-provenance.js.map +1 -0
- package/dist/lib/local-thresholds.d.ts +70 -0
- package/dist/lib/local-thresholds.d.ts.map +1 -0
- package/dist/lib/local-thresholds.js +79 -0
- package/dist/lib/local-thresholds.js.map +1 -0
- package/dist/lib/mcp/mark-tool.d.ts +27 -0
- package/dist/lib/mcp/mark-tool.d.ts.map +1 -0
- package/dist/lib/mcp/mark-tool.js +103 -0
- package/dist/lib/mcp/mark-tool.js.map +1 -0
- package/dist/lib/mcp/share-tool.d.ts +46 -0
- package/dist/lib/mcp/share-tool.d.ts.map +1 -0
- package/dist/lib/mcp/share-tool.js +68 -0
- package/dist/lib/mcp/share-tool.js.map +1 -0
- package/dist/lib/mcp/tool-rules.d.ts +30 -0
- package/dist/lib/mcp/tool-rules.d.ts.map +1 -0
- package/dist/lib/mcp/tool-rules.js +84 -0
- package/dist/lib/mcp/tool-rules.js.map +1 -0
- package/dist/lib/mcp-backfill.d.ts +89 -0
- package/dist/lib/mcp-backfill.d.ts.map +1 -0
- package/dist/lib/mcp-backfill.js +194 -0
- package/dist/lib/mcp-backfill.js.map +1 -0
- package/dist/lib/mcp-scope.d.ts +90 -0
- package/dist/lib/mcp-scope.d.ts.map +1 -0
- package/dist/lib/mcp-scope.js +125 -0
- package/dist/lib/mcp-scope.js.map +1 -0
- package/dist/lib/mcp-sync.d.ts +64 -0
- package/dist/lib/mcp-sync.d.ts.map +1 -0
- package/dist/lib/mcp-sync.js +183 -0
- package/dist/lib/mcp-sync.js.map +1 -0
- package/dist/lib/personal-import.d.ts +7 -0
- package/dist/lib/personal-import.d.ts.map +1 -1
- package/dist/lib/personal-import.js +13 -1
- package/dist/lib/personal-import.js.map +1 -1
- package/dist/lib/safe-config-write.d.ts +12 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +162 -9
- package/dist/lib/safe-config-write.js.map +1 -1
- package/dist/lib/scope-choices.d.ts +51 -0
- package/dist/lib/scope-choices.d.ts.map +1 -0
- package/dist/lib/scope-choices.js +193 -0
- package/dist/lib/scope-choices.js.map +1 -0
- package/dist/lib/scope-connect.d.ts +82 -0
- package/dist/lib/scope-connect.d.ts.map +1 -0
- package/dist/lib/scope-connect.js +258 -0
- package/dist/lib/scope-connect.js.map +1 -0
- package/dist/lib/scope-defaults.d.ts +3 -0
- package/dist/lib/scope-defaults.d.ts.map +1 -0
- package/dist/lib/scope-defaults.js +42 -0
- package/dist/lib/scope-defaults.js.map +1 -0
- package/dist/lib/scope-real.d.ts +223 -0
- package/dist/lib/scope-real.d.ts.map +1 -0
- package/dist/lib/scope-real.js +58 -0
- package/dist/lib/scope-real.js.map +1 -0
- package/dist/lib/scope-values.d.ts +76 -0
- package/dist/lib/scope-values.d.ts.map +1 -0
- package/dist/lib/scope-values.js +169 -0
- package/dist/lib/scope-values.js.map +1 -0
- package/dist/lib/scope.d.ts +161 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +323 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/share/command.d.ts +32 -0
- package/dist/lib/share/command.d.ts.map +1 -0
- package/dist/lib/share/command.js +136 -0
- package/dist/lib/share/command.js.map +1 -0
- package/dist/lib/share/ledger.d.ts +59 -0
- package/dist/lib/share/ledger.d.ts.map +1 -0
- package/dist/lib/share/ledger.js +135 -0
- package/dist/lib/share/ledger.js.map +1 -0
- package/dist/lib/share/payload.d.ts +92 -0
- package/dist/lib/share/payload.d.ts.map +1 -0
- package/dist/lib/share/payload.js +138 -0
- package/dist/lib/share/payload.js.map +1 -0
- package/dist/lib/share/pending.d.ts +48 -0
- package/dist/lib/share/pending.d.ts.map +1 -0
- package/dist/lib/share/pending.js +130 -0
- package/dist/lib/share/pending.js.map +1 -0
- package/dist/lib/share/preview.d.ts +18 -0
- package/dist/lib/share/preview.d.ts.map +1 -0
- package/dist/lib/share/preview.js +72 -0
- package/dist/lib/share/preview.js.map +1 -0
- package/dist/lib/share/run.d.ts +115 -0
- package/dist/lib/share/run.d.ts.map +1 -0
- package/dist/lib/share/run.js +261 -0
- package/dist/lib/share/run.js.map +1 -0
- package/dist/lib/share/salt.d.ts +2 -0
- package/dist/lib/share/salt.d.ts.map +1 -0
- package/dist/lib/share/salt.js +44 -0
- package/dist/lib/share/salt.js.map +1 -0
- package/dist/lib/share/secret-patterns.json +100 -0
- package/dist/lib/share/secret-scan.d.ts +19 -0
- package/dist/lib/share/secret-scan.d.ts.map +1 -0
- package/dist/lib/share/secret-scan.js +75 -0
- package/dist/lib/share/secret-scan.js.map +1 -0
- package/dist/lib/share/tty.d.ts +4 -0
- package/dist/lib/share/tty.d.ts.map +1 -0
- package/dist/lib/share/tty.js +57 -0
- package/dist/lib/share/tty.js.map +1 -0
- package/dist/lib/share/visible.d.ts +4 -0
- package/dist/lib/share/visible.d.ts.map +1 -0
- package/dist/lib/share/visible.js +30 -0
- package/dist/lib/share/visible.js.map +1 -0
- package/dist/lib/share/wire.d.ts +98 -0
- package/dist/lib/share/wire.d.ts.map +1 -0
- package/dist/lib/share/wire.js +43 -0
- package/dist/lib/share/wire.js.map +1 -0
- package/dist/lib/similarity/embedding-matrix.d.ts +64 -0
- package/dist/lib/similarity/embedding-matrix.d.ts.map +1 -0
- package/dist/lib/similarity/embedding-matrix.js +119 -0
- package/dist/lib/similarity/embedding-matrix.js.map +1 -0
- package/dist/lib/since-flag.d.ts +11 -0
- package/dist/lib/since-flag.d.ts.map +1 -0
- package/dist/lib/since-flag.js +24 -0
- package/dist/lib/since-flag.js.map +1 -0
- package/dist/lib/since.d.ts +59 -0
- package/dist/lib/since.d.ts.map +1 -0
- package/dist/lib/since.js +86 -0
- package/dist/lib/since.js.map +1 -0
- package/dist/lib/source-key.d.ts +13 -0
- package/dist/lib/source-key.d.ts.map +1 -0
- package/dist/lib/source-key.js +60 -0
- package/dist/lib/source-key.js.map +1 -0
- package/dist/lib/source-sync-state.d.ts +12 -0
- package/dist/lib/source-sync-state.d.ts.map +1 -0
- package/dist/lib/source-sync-state.js +43 -0
- package/dist/lib/source-sync-state.js.map +1 -0
- package/dist/lib/startup-backfill-track.d.ts +2 -0
- package/dist/lib/startup-backfill-track.d.ts.map +1 -0
- package/dist/lib/startup-backfill-track.js +6 -0
- package/dist/lib/startup-backfill-track.js.map +1 -0
- package/dist/lib/startup-env.d.ts +8 -0
- package/dist/lib/startup-env.d.ts.map +1 -0
- package/dist/lib/startup-env.js +8 -0
- package/dist/lib/startup-env.js.map +1 -0
- package/dist/lib/startup-xdg.d.ts +2 -0
- package/dist/lib/startup-xdg.d.ts.map +1 -0
- package/dist/lib/startup-xdg.js +9 -0
- package/dist/lib/startup-xdg.js.map +1 -0
- package/dist/lib/sync/after-connect.d.ts +2 -0
- package/dist/lib/sync/after-connect.d.ts.map +1 -0
- package/dist/lib/sync/after-connect.js +18 -0
- package/dist/lib/sync/after-connect.js.map +1 -0
- package/dist/lib/sync/bg-claim.d.ts +14 -0
- package/dist/lib/sync/bg-claim.d.ts.map +1 -0
- package/dist/lib/sync/bg-claim.js +97 -0
- package/dist/lib/sync/bg-claim.js.map +1 -0
- package/dist/lib/sync/blocked.d.ts +8 -0
- package/dist/lib/sync/blocked.d.ts.map +1 -0
- package/dist/lib/sync/blocked.js +44 -0
- package/dist/lib/sync/blocked.js.map +1 -0
- package/dist/lib/sync/classify.d.ts +34 -0
- package/dist/lib/sync/classify.d.ts.map +1 -0
- package/dist/lib/sync/classify.js +91 -0
- package/dist/lib/sync/classify.js.map +1 -0
- package/dist/lib/sync/drain.d.ts +16 -0
- package/dist/lib/sync/drain.d.ts.map +1 -0
- package/dist/lib/sync/drain.js +33 -0
- package/dist/lib/sync/drain.js.map +1 -0
- package/dist/lib/sync/forget.d.ts +12 -0
- package/dist/lib/sync/forget.d.ts.map +1 -0
- package/dist/lib/sync/forget.js +32 -0
- package/dist/lib/sync/forget.js.map +1 -0
- package/dist/lib/sync/launch-hook.d.ts +42 -0
- package/dist/lib/sync/launch-hook.d.ts.map +1 -0
- package/dist/lib/sync/launch-hook.js +117 -0
- package/dist/lib/sync/launch-hook.js.map +1 -0
- package/dist/lib/sync/lock.d.ts +35 -0
- package/dist/lib/sync/lock.d.ts.map +1 -0
- package/dist/lib/sync/lock.js +175 -0
- package/dist/lib/sync/lock.js.map +1 -0
- package/dist/lib/sync/purge.d.ts +38 -0
- package/dist/lib/sync/purge.d.ts.map +1 -0
- package/dist/lib/sync/purge.js +61 -0
- package/dist/lib/sync/purge.js.map +1 -0
- package/dist/lib/sync/real-env.d.ts +208 -0
- package/dist/lib/sync/real-env.d.ts.map +1 -0
- package/dist/lib/sync/real-env.js +47 -0
- package/dist/lib/sync/real-env.js.map +1 -0
- package/dist/lib/sync/relink.d.ts +14 -0
- package/dist/lib/sync/relink.d.ts.map +1 -0
- package/dist/lib/sync/relink.js +36 -0
- package/dist/lib/sync/relink.js.map +1 -0
- package/dist/lib/sync/report.d.ts +3 -0
- package/dist/lib/sync/report.d.ts.map +1 -0
- package/dist/lib/sync/report.js +54 -0
- package/dist/lib/sync/report.js.map +1 -0
- package/dist/lib/sync/run-all.d.ts +23 -0
- package/dist/lib/sync/run-all.d.ts.map +1 -0
- package/dist/lib/sync/run-all.js +30 -0
- package/dist/lib/sync/run-all.js.map +1 -0
- package/dist/lib/sync/run-source.d.ts +73 -0
- package/dist/lib/sync/run-source.d.ts.map +1 -0
- package/dist/lib/sync/run-source.js +262 -0
- package/dist/lib/sync/run-source.js.map +1 -0
- package/dist/lib/sync/safe-read.d.ts +4 -0
- package/dist/lib/sync/safe-read.d.ts.map +1 -0
- package/dist/lib/sync/safe-read.js +40 -0
- package/dist/lib/sync/safe-read.js.map +1 -0
- package/dist/lib/sync/should-background-sync.d.ts +31 -0
- package/dist/lib/sync/should-background-sync.d.ts.map +1 -0
- package/dist/lib/sync/should-background-sync.js +69 -0
- package/dist/lib/sync/should-background-sync.js.map +1 -0
- package/dist/lib/sync/source-ids.d.ts +10 -0
- package/dist/lib/sync/source-ids.d.ts.map +1 -0
- package/dist/lib/sync/source-ids.js +9 -0
- package/dist/lib/sync/source-ids.js.map +1 -0
- package/dist/lib/sync/sources.d.ts +33 -0
- package/dist/lib/sync/sources.d.ts.map +1 -0
- package/dist/lib/sync/sources.js +37 -0
- package/dist/lib/sync/sources.js.map +1 -0
- package/dist/lib/sync/spawn-background.d.ts +27 -0
- package/dist/lib/sync/spawn-background.d.ts.map +1 -0
- package/dist/lib/sync/spawn-background.js +66 -0
- package/dist/lib/sync/spawn-background.js.map +1 -0
- package/dist/lib/sync/status.d.ts +57 -0
- package/dist/lib/sync/status.d.ts.map +1 -0
- package/dist/lib/sync/status.js +166 -0
- package/dist/lib/sync/status.js.map +1 -0
- package/dist/lib/sync/summary-read.d.ts +19 -0
- package/dist/lib/sync/summary-read.d.ts.map +1 -0
- package/dist/lib/sync/summary-read.js +39 -0
- package/dist/lib/sync/summary-read.js.map +1 -0
- package/dist/lib/sync/summary.d.ts +10 -0
- package/dist/lib/sync/summary.d.ts.map +1 -0
- package/dist/lib/sync/summary.js +80 -0
- package/dist/lib/sync/summary.js.map +1 -0
- package/dist/lib/sync/sync-state.d.ts +128 -0
- package/dist/lib/sync/sync-state.d.ts.map +1 -0
- package/dist/lib/sync/sync-state.js +253 -0
- package/dist/lib/sync/sync-state.js.map +1 -0
- package/dist/lib/sync/telemetry.d.ts +20 -0
- package/dist/lib/sync/telemetry.d.ts.map +1 -0
- package/dist/lib/sync/telemetry.js +31 -0
- package/dist/lib/sync/telemetry.js.map +1 -0
- package/dist/lib/sync/threads.d.ts +48 -0
- package/dist/lib/sync/threads.d.ts.map +1 -0
- package/dist/lib/sync/threads.js +82 -0
- package/dist/lib/sync/threads.js.map +1 -0
- package/dist/lib/sync/window.d.ts +72 -0
- package/dist/lib/sync/window.d.ts.map +1 -0
- package/dist/lib/sync/window.js +112 -0
- package/dist/lib/sync/window.js.map +1 -0
- package/dist/lib/team-cta.d.ts +11 -0
- package/dist/lib/team-cta.d.ts.map +1 -0
- package/dist/lib/team-cta.js +16 -0
- package/dist/lib/team-cta.js.map +1 -0
- package/dist/lib/telemetry-ci.d.ts +2 -0
- package/dist/lib/telemetry-ci.d.ts.map +1 -0
- package/dist/lib/telemetry-ci.js +21 -0
- package/dist/lib/telemetry-ci.js.map +1 -0
- package/dist/lib/telemetry-consent.d.ts +44 -23
- package/dist/lib/telemetry-consent.d.ts.map +1 -1
- package/dist/lib/telemetry-consent.js +74 -35
- package/dist/lib/telemetry-consent.js.map +1 -1
- package/dist/lib/telemetry-env.d.ts +1 -1
- package/dist/lib/usage-telemetry.d.ts +87 -22
- package/dist/lib/usage-telemetry.d.ts.map +1 -1
- package/dist/lib/usage-telemetry.js +263 -74
- package/dist/lib/usage-telemetry.js.map +1 -1
- package/dist/lib/xdg.d.ts +27 -0
- package/dist/lib/xdg.d.ts.map +1 -0
- package/dist/lib/xdg.js +56 -0
- package/dist/lib/xdg.js.map +1 -0
- package/package.json +3 -2
- package/dist/commands/push.d.ts +0 -25
- package/dist/commands/push.d.ts.map +0 -1
- package/dist/commands/push.js +0 -98
- package/dist/commands/push.js.map +0 -1
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
1
|
import { readFileSync } from 'node:fs';
|
|
3
2
|
import path from 'node:path';
|
|
3
|
+
import { geminiSystemFileRejection } from './gemini-system-file.js';
|
|
4
4
|
import { geminiDir, geminiFolderTrust, geminiSystemDefaultsPath, geminiSystemSettingsPath } from './gemini-trust.js';
|
|
5
5
|
import { foldLayers, isCanonicalLocalEntry, parseJsonc } from './strict-entry.js';
|
|
6
6
|
/**
|
|
7
|
-
* The launch-cache
|
|
8
|
-
*
|
|
7
|
+
* The launch-cache prefix of the merged system-settings copies align 0.49 to 0.51 wrote. Gemini
|
|
8
|
+
* skips such a copy (see gemini-system-file.ts), so nothing writes one now; the prefix is kept so
|
|
9
|
+
* the old ones, which hold the admin's settings, are aged out of the cache.
|
|
9
10
|
*/
|
|
10
11
|
export const COPY_PREFIX = 'gemini-system-settings-';
|
|
11
|
-
export function geminiCopyName(source) {
|
|
12
|
-
return `${COPY_PREFIX}${createHash('sha256').update(path.resolve(source)).digest('hex').slice(0, 12)}.json`;
|
|
13
|
-
}
|
|
14
|
-
function readSystem(file) {
|
|
15
|
-
try {
|
|
16
|
-
return { path: file, text: readFileSync(file, 'utf8'), unreadable: false };
|
|
17
|
-
}
|
|
18
|
-
catch (e) {
|
|
19
|
-
return { path: file, text: null, unreadable: e.code !== 'ENOENT' };
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
12
|
function readText(file) {
|
|
23
13
|
try {
|
|
24
14
|
return readFileSync(file, 'utf8');
|
|
@@ -27,33 +17,101 @@ function readText(file) {
|
|
|
27
17
|
return null;
|
|
28
18
|
}
|
|
29
19
|
}
|
|
30
|
-
const
|
|
20
|
+
const isObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
21
|
+
const NAME = 'align-local';
|
|
22
|
+
const names = (v) => (Array.isArray(v) ? v.filter((x) => typeof x === 'string') : null);
|
|
23
|
+
const FLAGS = ['--allowed-mcp-server-names', '--allowedMcpServerNames'];
|
|
24
|
+
/**
|
|
25
|
+
* The user's own --allowed-mcp-server-names. It REPLACES every settings allowlist and DROPS
|
|
26
|
+
* excluded (measured, 0.63.0). `--flag=a,b` gives both names; the space form gives only the FIRST
|
|
27
|
+
* value (`--flag other align-local` blocked align-local). null when the flag is absent.
|
|
28
|
+
*/
|
|
29
|
+
function flagList(passthrough) {
|
|
30
|
+
const end = passthrough.indexOf('--');
|
|
31
|
+
const args = end < 0 ? passthrough : passthrough.slice(0, end);
|
|
32
|
+
let found = null;
|
|
33
|
+
args.forEach((a, i) => {
|
|
34
|
+
const hit = FLAGS.find((f) => a === f || a.startsWith(`${f}=`));
|
|
35
|
+
if (!hit)
|
|
36
|
+
return;
|
|
37
|
+
const raw = a === hit ? args[i + 1] : a.slice(hit.length + 1);
|
|
38
|
+
found = { flag: hit, list: raw === undefined || (a === hit && raw.startsWith('-')) ? [] : raw.split(',') };
|
|
39
|
+
});
|
|
40
|
+
return found;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Settings that make a live Gemini session drop align-local although the entry is there, copied
|
|
44
|
+
* from McpClientManager.isBlockedBySettings (0.63.0, NOT `gemini mcp list`, which disagrees):
|
|
45
|
+
* EXACT-case matching, no trimming; excluded is a union over the loaded layers; allowed is an
|
|
46
|
+
* intersection across layers and an EMPTY result allows all. Not a blocker for a live session
|
|
47
|
+
* (measured): admin.mcp.enabled in user or workspace settings. NOT read: the system tier's
|
|
48
|
+
* admin.mcp.enabled and ~/.gemini/mcp-server-enablement.json - UNVERIFIED.
|
|
49
|
+
*/
|
|
50
|
+
function blockedBy(files, passthrough) {
|
|
51
|
+
const flag = flagList(passthrough);
|
|
52
|
+
if (flag) {
|
|
53
|
+
return flag.list.length === 0 || flag.list.includes(NAME) ? undefined : { file: flag.flag, why: 'it does not list align-local' };
|
|
54
|
+
}
|
|
55
|
+
for (const { file, settings } of files) {
|
|
56
|
+
const mcp = settings?.['mcp'];
|
|
57
|
+
if (isObject(mcp) && names(mcp['excluded'])?.includes(NAME))
|
|
58
|
+
return { file, why: 'mcp.excluded lists align-local' };
|
|
59
|
+
}
|
|
60
|
+
let allowed = null;
|
|
61
|
+
let from = '';
|
|
62
|
+
for (const { file, settings } of files) {
|
|
63
|
+
const mcp = settings?.['mcp'];
|
|
64
|
+
const list = isObject(mcp) ? names(mcp['allowed']) : null;
|
|
65
|
+
if (!list)
|
|
66
|
+
continue;
|
|
67
|
+
allowed = allowed === null ? list : allowed.filter((x) => list.includes(x));
|
|
68
|
+
from = file;
|
|
69
|
+
}
|
|
70
|
+
if (allowed !== null && allowed.length > 0 && !allowed.includes(NAME)) {
|
|
71
|
+
// Name the layer that narrowed it last; with one layer that is the only one.
|
|
72
|
+
return { file: from, why: 'mcp.allowed does not list align-local' };
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
31
76
|
/**
|
|
32
|
-
* What Gemini CLI would already load here, in its merge order (gemini 0.
|
|
33
|
-
* system-defaults, user, workspace, system
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
77
|
+
* What Gemini CLI would already load here, in its merge order (gemini 0.63.0 mergeSettings:
|
|
78
|
+
* system-defaults, user, workspace, system; mcpServers merges shallowly, LAST layer wins per name):
|
|
79
|
+
* - system-defaults and system files, ONLY when Gemini will read them (root-owned tree, see
|
|
80
|
+
* gemini-system-file.ts; `rejects` is a parameter so a test can name the answer);
|
|
81
|
+
* - the user settings file;
|
|
82
|
+
* - the project's .gemini/settings.json. It is ALWAYS folded for the conflict check, because
|
|
83
|
+
* Gemini also trusts a folder through a connected IDE, which align cannot see; a false
|
|
84
|
+
* conflict in a folder that really is untrusted is harmless. It counts as "present" only when
|
|
85
|
+
* align's own verdict is trusted/off, and its mcp.allowed/excluded only then too.
|
|
86
|
+
* Repo config is untrusted input: per name only the effective (last) entry counts, so a repo
|
|
87
|
+
* `align` that replaces the user's canonical one is a conflict naming the repo file.
|
|
88
|
+
* Files are JSONC, as Gemini reads them. Align adds an entry; it never edits one that is there.
|
|
38
89
|
*/
|
|
39
|
-
export function readGeminiState(cwd, home, opts, env, platform) {
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const userPath = path.join(geminiDir(home, env), 'settings.json');
|
|
90
|
+
export function readGeminiState(cwd, home, opts, env, platform, rejects = geminiSystemFileRejection, passthrough = []) {
|
|
91
|
+
const systemPath = geminiSystemSettingsPath(env, platform);
|
|
92
|
+
const defaultsPath = env['GEMINI_CLI_SYSTEM_DEFAULTS_PATH'] ? env['GEMINI_CLI_SYSTEM_DEFAULTS_PATH'] : geminiSystemDefaultsPath(systemPath, platform);
|
|
93
|
+
const settingsFile = path.join(geminiDir(home, env), 'settings.json');
|
|
44
94
|
const workspacePath = path.join(cwd, '.gemini', 'settings.json');
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
95
|
+
const trust = geminiFolderTrust(cwd, home, env, platform, rejects);
|
|
96
|
+
const workspaceLoads = trust === 'trusted' || trust === 'off';
|
|
97
|
+
const text = (file, isSystem) => (isSystem && rejects(file, platform) !== null ? null : readText(file));
|
|
98
|
+
const sources = [
|
|
99
|
+
{ file: defaultsPath, text: text(defaultsPath, true), live: true },
|
|
100
|
+
{ file: settingsFile, text: text(settingsFile, false), live: true },
|
|
101
|
+
{ file: workspacePath, text: readText(workspacePath), live: workspaceLoads },
|
|
102
|
+
{ file: systemPath, text: text(systemPath, true), live: true },
|
|
50
103
|
];
|
|
104
|
+
const parsed = sources.map((s) => ({ ...s, json: parseJsonc(s.text) }));
|
|
105
|
+
const layers = parsed.map((s) => ({ file: s.file, servers: s.json?.['mcpServers'] }));
|
|
51
106
|
const o = { ...opts, platform, host: 'mcpServers' };
|
|
52
|
-
const {
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
107
|
+
const { present, conflict } = foldLayers(layers, o, () => false, { lastWins: true, countsAsPresent: (f) => f !== workspacePath || workspaceLoads });
|
|
108
|
+
// The effective `align` is the last layer that names it. From a LOADED workspace, and not
|
|
109
|
+
// already the conflict, it is something the repo chose and the user did not.
|
|
110
|
+
const aligns = layers.filter((l) => isObject(l.servers) && 'align' in l.servers);
|
|
111
|
+
const effective = aligns[aligns.length - 1];
|
|
112
|
+
const repoAlign = workspaceLoads && effective?.file === workspacePath && conflict !== workspacePath
|
|
113
|
+
&& !isCanonicalLocalEntry(effective.servers['align'], o) ? workspacePath : undefined;
|
|
114
|
+
const blocked = blockedBy(parsed.filter((s) => s.live).map((s) => ({ file: s.file, settings: s.json })), passthrough);
|
|
115
|
+
return { present, ...(conflict !== undefined ? { conflict } : {}), settingsFile, trust, ...(blocked ? { blocked } : {}), ...(repoAlign ? { repoAlign } : {}) };
|
|
58
116
|
}
|
|
59
117
|
//# sourceMappingURL=gemini-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-state.js","sourceRoot":"","sources":["../../../src/lib/launch/gemini-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gemini-state.js","sourceRoot":"","sources":["../../../src/lib/launch/gemini-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini CLI's rule for a SYSTEM settings or system-defaults file (0.63.0,
|
|
3
|
+
* isFileAndDirectorySecureSync in its bundle): the file is read only when the file AND every
|
|
4
|
+
* directory above it is owned by root (uid 0) and not writable by group or others, and no
|
|
5
|
+
* symlink on the way is owned by anyone else. Otherwise Gemini skips it with
|
|
6
|
+
* "Security Warning: Skipping system settings file ... not owned by root".
|
|
7
|
+
*
|
|
8
|
+
* Nothing under a user's home or cache dir can pass, so align can never hand Gemini a system
|
|
9
|
+
* tier file of its own. align reads the same rule only to know which of the machine's real
|
|
10
|
+
* system files Gemini will load, so a rejected one is not mistaken for config that applies.
|
|
11
|
+
*
|
|
12
|
+
* Returns why Gemini rejects the file, or null when it will read it (or the file does not
|
|
13
|
+
* exist, which Gemini does not check). Not judged on win32: Gemini checks ACLs through
|
|
14
|
+
* PowerShell there, and a wrong "rejected" would hide a file that is loaded.
|
|
15
|
+
*/
|
|
16
|
+
export declare function geminiSystemFileRejection(file: string, platform: string): string | null;
|
|
17
|
+
//# sourceMappingURL=gemini-system-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-system-file.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/gemini-system-file.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6BvF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { existsSync, lstatSync, realpathSync, statSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Gemini CLI's rule for a SYSTEM settings or system-defaults file (0.63.0,
|
|
5
|
+
* isFileAndDirectorySecureSync in its bundle): the file is read only when the file AND every
|
|
6
|
+
* directory above it is owned by root (uid 0) and not writable by group or others, and no
|
|
7
|
+
* symlink on the way is owned by anyone else. Otherwise Gemini skips it with
|
|
8
|
+
* "Security Warning: Skipping system settings file ... not owned by root".
|
|
9
|
+
*
|
|
10
|
+
* Nothing under a user's home or cache dir can pass, so align can never hand Gemini a system
|
|
11
|
+
* tier file of its own. align reads the same rule only to know which of the machine's real
|
|
12
|
+
* system files Gemini will load, so a rejected one is not mistaken for config that applies.
|
|
13
|
+
*
|
|
14
|
+
* Returns why Gemini rejects the file, or null when it will read it (or the file does not
|
|
15
|
+
* exist, which Gemini does not check). Not judged on win32: Gemini checks ACLs through
|
|
16
|
+
* PowerShell there, and a wrong "rejected" would hide a file that is loaded.
|
|
17
|
+
*/
|
|
18
|
+
export function geminiSystemFileRejection(file, platform) {
|
|
19
|
+
if (platform === 'win32' || !existsSync(file))
|
|
20
|
+
return null;
|
|
21
|
+
const abs = path.resolve(file);
|
|
22
|
+
let canonical = abs;
|
|
23
|
+
try {
|
|
24
|
+
canonical = realpathSync(abs);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// keep the lexical path
|
|
28
|
+
}
|
|
29
|
+
const paths = new Set();
|
|
30
|
+
for (const p of [abs, canonical]) {
|
|
31
|
+
paths.add(p);
|
|
32
|
+
for (let dir = path.dirname(p);; dir = path.dirname(dir)) {
|
|
33
|
+
paths.add(dir);
|
|
34
|
+
if (path.dirname(dir) === dir)
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
for (const p of paths) {
|
|
39
|
+
try {
|
|
40
|
+
const link = lstatSync(p);
|
|
41
|
+
if (link.isSymbolicLink() && link.uid !== 0)
|
|
42
|
+
return `symlink ${p} is not owned by root`;
|
|
43
|
+
const st = statSync(p);
|
|
44
|
+
if (st.uid !== 0)
|
|
45
|
+
return `${p} is not owned by root`;
|
|
46
|
+
if ((st.mode & 0o022) !== 0)
|
|
47
|
+
return `${p} is writable by group or others`;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return `${p} could not be checked`;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=gemini-system-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-system-file.js","sourceRoot":"","sources":["../../../src/lib/launch/gemini-system-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,QAAgB;IACtE,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC;QACH,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG;gBAAE,MAAM;QACvC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;gBAAE,OAAO,WAAW,CAAC,uBAAuB,CAAC;YACxF,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC,uBAAuB,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,GAAG,CAAC,iCAAiC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC,uBAAuB,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -12,6 +12,7 @@ export declare function geminiSystemSettingsPath(env: Record<string, string | un
|
|
|
12
12
|
export declare function geminiSystemDefaultsPath(systemSettingsPath: string, platform: string): string;
|
|
13
13
|
/** ~/.gemini, or $GEMINI_CLI_HOME/.gemini when set. */
|
|
14
14
|
export declare function geminiDir(home: string, env: Record<string, string | undefined>): string;
|
|
15
|
+
type Rejects = (file: string, platform: string) => string | null;
|
|
15
16
|
/**
|
|
16
17
|
* Gemini CLI 0.58.0's folder-trust verdict for `cwd`, read from its own files and never written
|
|
17
18
|
* (packages/core/src/utils/trust.ts, cli/src/config/trustedFolders.ts):
|
|
@@ -22,5 +23,6 @@ export declare function geminiDir(home: string, env: Record<string, string | und
|
|
|
22
23
|
* Gemini also accepts a trust decision from a connected IDE; align cannot see that, so in an IDE
|
|
23
24
|
* terminal this can say untrusted for a folder Gemini will treat as trusted (one extra line).
|
|
24
25
|
*/
|
|
25
|
-
export declare function geminiFolderTrust(cwd: string, home: string, env: Record<string, string | undefined>, platform: string): GeminiTrust;
|
|
26
|
+
export declare function geminiFolderTrust(cwd: string, home: string, env: Record<string, string | undefined>, platform: string, rejects?: Rejects): GeminiTrust;
|
|
27
|
+
export {};
|
|
26
28
|
//# sourceMappingURL=gemini-trust.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-trust.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/gemini-trust.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gemini-trust.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/gemini-trust.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,GAAG,SAAS,CAAC;AAgBtE,qGAAqG;AACrG,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK1G;AAED,oGAAoG;AACpG,wBAAgB,wBAAwB,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG7F;AAED,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAEvF;AAED,KAAK,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAsCjE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,OAAmC,GAAG,WAAW,CAyBjL"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readFileSync, realpathSync } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { geminiSystemFileRejection } from './gemini-system-file.js';
|
|
3
4
|
import { parseJsonc } from './strict-entry.js';
|
|
4
5
|
const LEVELS = new Set(['TRUST_FOLDER', 'TRUST_PARENT', 'DO_NOT_TRUST']);
|
|
5
6
|
/** Gemini reads these files through strip-json-comments, so comments are allowed. */
|
|
@@ -33,11 +34,14 @@ export function geminiDir(home, env) {
|
|
|
33
34
|
}
|
|
34
35
|
const folderTrustSetting = (s) => s?.['security']?.['folderTrust']?.['enabled'];
|
|
35
36
|
/** security.folderTrust.enabled, merged system-defaults < user < system as Gemini does; default on. */
|
|
36
|
-
function folderTrustEnabled(home, env, platform) {
|
|
37
|
+
function folderTrustEnabled(home, env, platform, rejects) {
|
|
37
38
|
const system = geminiSystemSettingsPath(env, platform);
|
|
38
39
|
const defaults = env['GEMINI_CLI_SYSTEM_DEFAULTS_PATH'] ? env['GEMINI_CLI_SYSTEM_DEFAULTS_PATH'] : geminiSystemDefaultsPath(system, platform);
|
|
39
40
|
let enabled = true;
|
|
41
|
+
// The two system tiers are skipped by Gemini unless root-owned; the user file is never checked.
|
|
40
42
|
for (const file of [defaults, path.join(geminiDir(home, env), 'settings.json'), system]) {
|
|
43
|
+
if ((file === defaults || file === system) && rejects(file, platform) !== null)
|
|
44
|
+
continue;
|
|
41
45
|
const v = folderTrustSetting(readJson(file));
|
|
42
46
|
if (typeof v === 'boolean')
|
|
43
47
|
enabled = v;
|
|
@@ -73,12 +77,15 @@ function isSubpath(parent, child, platform) {
|
|
|
73
77
|
* Gemini also accepts a trust decision from a connected IDE; align cannot see that, so in an IDE
|
|
74
78
|
* terminal this can say untrusted for a folder Gemini will treat as trusted (one extra line).
|
|
75
79
|
*/
|
|
76
|
-
export function geminiFolderTrust(cwd, home, env, platform) {
|
|
80
|
+
export function geminiFolderTrust(cwd, home, env, platform, rejects = geminiSystemFileRejection) {
|
|
81
|
+
// Gemini checks GEMINI_RESTRICTED_MODE before GEMINI_CLI_TRUST_WORKSPACE (checkPathTrust, 0.63.0).
|
|
82
|
+
if (env['GEMINI_RESTRICTED_MODE'] === 'true')
|
|
83
|
+
return 'untrusted';
|
|
77
84
|
if (env['GEMINI_CLI_TRUST_WORKSPACE'] === 'true')
|
|
78
85
|
return 'trusted';
|
|
79
86
|
if (env['GEMINI_CLI_TRUST_WORKSPACE'] === 'false')
|
|
80
87
|
return 'untrusted';
|
|
81
|
-
if (!folderTrustEnabled(home, env, platform))
|
|
88
|
+
if (!folderTrustEnabled(home, env, platform, rejects))
|
|
82
89
|
return 'off';
|
|
83
90
|
const file = env['GEMINI_CLI_TRUSTED_FOLDERS_PATH'] ? env['GEMINI_CLI_TRUSTED_FOLDERS_PATH'] : path.join(geminiDir(home, env), 'trustedFolders.json');
|
|
84
91
|
if (!existsSync(file))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-trust.js","sourceRoot":"","sources":["../../../src/lib/launch/gemini-trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAY/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;AAEzE,qFAAqF;AACrF,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEvF,qGAAqG;AACrG,MAAM,UAAU,wBAAwB,CAAC,GAAuC,EAAE,QAAgB;IAChG,IAAI,GAAG,CAAC,iCAAiC,CAAC;QAAE,OAAO,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC1F,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,sDAAsD,CAAC;IACzF,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,4CAA4C,CAAC;IAC9E,OAAO,+BAA+B,CAAC;AACzC,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,wBAAwB,CAAC,kBAA0B,EAAE,QAAgB;IACnF,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,CAAC;AACvE,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAuC;IAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtF,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini-trust.js","sourceRoot":"","sources":["../../../src/lib/launch/gemini-trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { AlignLocalState } from './strict-entry.js';
|
|
2
|
+
export interface GooseProjectState extends Pick<AlignLocalState, 'present' | 'conflict'> {
|
|
3
|
+
/** The config could not be read with certainty: where, and why. */
|
|
4
|
+
unreadable?: {
|
|
5
|
+
file: string;
|
|
6
|
+
line: number;
|
|
7
|
+
reason: string;
|
|
8
|
+
};
|
|
9
|
+
/** The config.yaml Goose reads: where a clashing extension would sit. Read only, never written. */
|
|
10
|
+
configFile: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Whether a `goose` on PATH is Block's agent. `goose` is also pressly/goose, a common Go
|
|
14
|
+
* database-migration CLI, and Homebrew ships both under bin/goose (formula `goose` is pressly's,
|
|
15
|
+
* `block-goose-cli` is Block's). So it counts only from Block's documented install places, judged
|
|
16
|
+
* on the real path (a link in an allowed dir to pressly's binary does not pass):
|
|
17
|
+
* - the installer's $GOOSE_BIN_DIR (download_cli.sh: default ~/.local/bin, %USERPROFILE%\goose
|
|
18
|
+
* on Windows);
|
|
19
|
+
* - Homebrew's Cellar/block-goose-cli.
|
|
20
|
+
* Nothing is executed. A Block goose installed any other way is not detected (fail closed).
|
|
21
|
+
*/
|
|
22
|
+
export declare function isGooseBin(found: string, env: Record<string, string | undefined>, platform: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Goose's config.yaml (goose 1.54.0, `goose info` in a sandbox): GOOSE_PATH_ROOT/config, else the
|
|
25
|
+
* XDG config dir (Linux and macOS alike: `$XDG_CONFIG_HOME/goose`, default ~/.config/goose). On
|
|
26
|
+
* Windows %APPDATA%\Block\goose\config (goose docs, config files guide; not run on Windows).
|
|
27
|
+
*/
|
|
28
|
+
export declare function gooseConfigFile(home: string, env: Record<string, string | undefined>, platform: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Whether Goose's config.yaml already holds an `align-local` extension (goose 1.54.0, seen in a
|
|
31
|
+
* sandbox): an ENABLED one with the same name makes goose refuse to start when Align adds its own
|
|
32
|
+
* ("extension name 'align-local' is already in use"); a disabled one does not clash.
|
|
33
|
+
* - absent: no align-local, or a disabled one;
|
|
34
|
+
* - present: enabled and exactly `align mcp --env local` (a bare `align mcp` where that reads the
|
|
35
|
+
* local graph), with no key that could change what runs;
|
|
36
|
+
* - conflict: anything else, including any mention this reader cannot place.
|
|
37
|
+
*/
|
|
38
|
+
export type YamlVerdict = 'absent' | 'present' | 'conflict' | 'unreadable';
|
|
39
|
+
export declare function gooseAlignLocal(text: string | null, o: {
|
|
40
|
+
localIsDefault: boolean;
|
|
41
|
+
platform: string;
|
|
42
|
+
}): YamlVerdict;
|
|
43
|
+
/** What Goose would already load for align: its one config.yaml (it has no project-level extension config). */
|
|
44
|
+
export declare function readGooseState(_cwd: string, home: string, opts: {
|
|
45
|
+
localIsDefault: boolean;
|
|
46
|
+
}, env: Record<string, string | undefined>, platform: string): GooseProjectState;
|
|
47
|
+
/**
|
|
48
|
+
* A recipe the user runs (`--recipe <file>`) that names align-local: goose would refuse to start
|
|
49
|
+
* if Align added its own under that name. Returns that file. Only a recipe given as a readable
|
|
50
|
+
* path is checked; a recipe named by its title is resolved by goose and not read here.
|
|
51
|
+
*/
|
|
52
|
+
export declare function gooseRecipeMentions(cwd: string, passthrough: string[]): string | undefined;
|
|
53
|
+
//# sourceMappingURL=goose-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goose-state.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/goose-state.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,UAAU,CAAC;IACtF,mEAAmE;IACnE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS5G;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK/G;AAgBD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAE3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CAElH;AA2CD,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAK1K;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAK1F"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { optionValue, readText } from './layer-files.js';
|
|
5
|
+
import { isCanonicalLocalEntry } from './strict-entry.js';
|
|
6
|
+
import { fields, listValue, scalarValue, scanYaml, topLevelBlock } from './yaml-scan.js';
|
|
7
|
+
const pathFor = (platform) => (platform === 'win32' ? path.win32 : path.posix);
|
|
8
|
+
function real(p) {
|
|
9
|
+
try {
|
|
10
|
+
return realpathSync(p);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return p;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Whether a `goose` on PATH is Block's agent. `goose` is also pressly/goose, a common Go
|
|
18
|
+
* database-migration CLI, and Homebrew ships both under bin/goose (formula `goose` is pressly's,
|
|
19
|
+
* `block-goose-cli` is Block's). So it counts only from Block's documented install places, judged
|
|
20
|
+
* on the real path (a link in an allowed dir to pressly's binary does not pass):
|
|
21
|
+
* - the installer's $GOOSE_BIN_DIR (download_cli.sh: default ~/.local/bin, %USERPROFILE%\goose
|
|
22
|
+
* on Windows);
|
|
23
|
+
* - Homebrew's Cellar/block-goose-cli.
|
|
24
|
+
* Nothing is executed. A Block goose installed any other way is not detected (fail closed).
|
|
25
|
+
*/
|
|
26
|
+
export function isGooseBin(found, env, platform) {
|
|
27
|
+
const p = pathFor(platform);
|
|
28
|
+
const resolved = platform === 'win32' ? found : real(found);
|
|
29
|
+
if (resolved.split(p.sep).join('/').includes('/Cellar/block-goose-cli/'))
|
|
30
|
+
return true;
|
|
31
|
+
const home = (platform === 'win32' ? env['USERPROFILE'] || env['HOME'] : env['HOME']) || os.homedir();
|
|
32
|
+
const dir = env['GOOSE_BIN_DIR'] ? p.resolve(env['GOOSE_BIN_DIR']) : platform === 'win32' ? p.join(home, 'goose') : p.join(home, '.local', 'bin');
|
|
33
|
+
const allowed = platform === 'win32' ? dir.toLowerCase() : real(dir);
|
|
34
|
+
const actual = platform === 'win32' ? p.dirname(resolved).toLowerCase() : p.dirname(resolved);
|
|
35
|
+
return actual === allowed;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Goose's config.yaml (goose 1.54.0, `goose info` in a sandbox): GOOSE_PATH_ROOT/config, else the
|
|
39
|
+
* XDG config dir (Linux and macOS alike: `$XDG_CONFIG_HOME/goose`, default ~/.config/goose). On
|
|
40
|
+
* Windows %APPDATA%\Block\goose\config (goose docs, config files guide; not run on Windows).
|
|
41
|
+
*/
|
|
42
|
+
export function gooseConfigFile(home, env, platform) {
|
|
43
|
+
const p = pathFor(platform);
|
|
44
|
+
if (env['GOOSE_PATH_ROOT'])
|
|
45
|
+
return p.join(p.resolve(env['GOOSE_PATH_ROOT']), 'config', 'config.yaml');
|
|
46
|
+
if (platform === 'win32')
|
|
47
|
+
return p.join(env['APPDATA'] || p.join(home, 'AppData', 'Roaming'), 'Block', 'goose', 'config', 'config.yaml');
|
|
48
|
+
return p.join(env['XDG_CONFIG_HOME'] || p.join(home, '.config'), 'goose', 'config.yaml');
|
|
49
|
+
}
|
|
50
|
+
/** The keys a goose stdio extension may carry and still be exactly Align's own, and what they must hold. */
|
|
51
|
+
const ALLOWED = {
|
|
52
|
+
enabled: (f) => scalarValue(f) === 'true',
|
|
53
|
+
type: (f) => scalarValue(f) === 'stdio',
|
|
54
|
+
cmd: (f) => scalarValue(f) !== null,
|
|
55
|
+
args: (f) => listValue(f) !== null,
|
|
56
|
+
timeout: (f) => /^\d+$/.test(scalarValue(f) ?? ''),
|
|
57
|
+
description: (f) => f.children.length === 0,
|
|
58
|
+
bundled: (f) => ['null', '~', 'false'].includes(scalarValue(f) ?? '') || (f.inline === '' && f.children.length === 0),
|
|
59
|
+
envs: (f) => f.inline === '{}' && f.children.length === 0,
|
|
60
|
+
env_keys: (f) => f.inline === '[]' && f.children.length === 0,
|
|
61
|
+
available_tools: (f) => f.inline === '[]' && f.children.length === 0,
|
|
62
|
+
};
|
|
63
|
+
export function gooseAlignLocal(text, o) {
|
|
64
|
+
return gooseVerdict(text, o).verdict;
|
|
65
|
+
}
|
|
66
|
+
/** The verdict, and for `unreadable` the line and reason. */
|
|
67
|
+
function gooseVerdict(text, o) {
|
|
68
|
+
if (text === null)
|
|
69
|
+
return { verdict: 'absent' };
|
|
70
|
+
const scanned = scanYaml(text);
|
|
71
|
+
if ('unreadable' in scanned)
|
|
72
|
+
return { verdict: 'unreadable', detail: scanned.unreadable };
|
|
73
|
+
const lines = scanned.lines;
|
|
74
|
+
const firstMention = (ls) => ls.find((l) => l.text.includes('align-local'));
|
|
75
|
+
const layout = (ls) => {
|
|
76
|
+
const m = firstMention(ls);
|
|
77
|
+
return m ? { verdict: 'unreadable', detail: { line: m.n, reason: 'a layout Align does not read' } } : { verdict: 'absent' };
|
|
78
|
+
};
|
|
79
|
+
const block = topLevelBlock(lines, 'extensions');
|
|
80
|
+
if (block === 'inline' || block === null)
|
|
81
|
+
return layout(lines);
|
|
82
|
+
const exts = fields(block);
|
|
83
|
+
if (!exts)
|
|
84
|
+
return layout(block);
|
|
85
|
+
// A mention of align-local anywhere but its own key: a `name:` field may rename an extension.
|
|
86
|
+
for (const [key, f] of exts)
|
|
87
|
+
if (key !== 'align-local' && (firstMention(f.children) || f.inline.includes('align-local')))
|
|
88
|
+
return { verdict: 'conflict' };
|
|
89
|
+
const local = exts.has('align-local') ? extension(exts.get('align-local'), 'align-local', o) : 'absent';
|
|
90
|
+
if (local === 'conflict')
|
|
91
|
+
return { verdict: 'conflict' };
|
|
92
|
+
// An enabled, exactly-ours extension under either name already serves the graph.
|
|
93
|
+
const align = exts.has('align') ? extension(exts.get('align'), 'align', o) : 'absent';
|
|
94
|
+
return { verdict: local === 'present' || align === 'present' ? 'present' : 'absent' };
|
|
95
|
+
}
|
|
96
|
+
/** One extension's verdict: disabled is absent, exactly Align's own is present, anything else a conflict. */
|
|
97
|
+
function extension(f, name, o) {
|
|
98
|
+
if (f.inline !== '')
|
|
99
|
+
return 'conflict';
|
|
100
|
+
const body = fields(f.children);
|
|
101
|
+
if (!body)
|
|
102
|
+
return 'conflict';
|
|
103
|
+
const enabled = scalarValue(body.get('enabled'));
|
|
104
|
+
if (enabled === 'false')
|
|
105
|
+
return 'absent';
|
|
106
|
+
if (enabled !== 'true')
|
|
107
|
+
return 'conflict';
|
|
108
|
+
for (const [key, v] of body) {
|
|
109
|
+
if (key === 'name' ? scalarValue(v) !== name : !Object.hasOwn(ALLOWED, key) || !ALLOWED[key](v))
|
|
110
|
+
return 'conflict';
|
|
111
|
+
}
|
|
112
|
+
const cmd = scalarValue(body.get('cmd'));
|
|
113
|
+
const args = body.has('args') ? listValue(body.get('args')) : [];
|
|
114
|
+
const ours = isCanonicalLocalEntry({ command: cmd, args }, { localIsDefault: o.localIsDefault, platform: o.platform, host: 'mcpServers' });
|
|
115
|
+
return ours ? 'present' : 'conflict';
|
|
116
|
+
}
|
|
117
|
+
/** What Goose would already load for align: its one config.yaml (it has no project-level extension config). */
|
|
118
|
+
export function readGooseState(_cwd, home, opts, env, platform) {
|
|
119
|
+
const configFile = gooseConfigFile(home, env, platform);
|
|
120
|
+
const { verdict, detail } = gooseVerdict(readText(configFile), { ...opts, platform });
|
|
121
|
+
if (verdict === 'unreadable')
|
|
122
|
+
return { present: false, configFile, unreadable: { file: configFile, ...detail } };
|
|
123
|
+
return verdict === 'conflict' ? { present: false, conflict: configFile, configFile } : { present: verdict === 'present', configFile };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A recipe the user runs (`--recipe <file>`) that names align-local: goose would refuse to start
|
|
127
|
+
* if Align added its own under that name. Returns that file. Only a recipe given as a readable
|
|
128
|
+
* path is checked; a recipe named by its title is resolved by goose and not read here.
|
|
129
|
+
*/
|
|
130
|
+
export function gooseRecipeMentions(cwd, passthrough) {
|
|
131
|
+
const r = optionValue(passthrough, '--recipe');
|
|
132
|
+
if (!r)
|
|
133
|
+
return undefined;
|
|
134
|
+
const file = path.resolve(cwd, r);
|
|
135
|
+
return readText(file)?.includes('align-local') ? file : undefined;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=goose-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goose-state.js","sourceRoot":"","sources":["../../../src/lib/launch/goose-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type AlignLocalState } from './strict-entry.js';
|
|
2
|
+
export interface GrokProjectState extends AlignLocalState {
|
|
3
|
+
/** $GROK_HOME/config.toml (else ~/.grok/config.toml): the file align adds to. */
|
|
4
|
+
configFile: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* $GROK_HOME verbatim when non-empty, else `<home>/.grok` with the home's symlinks resolved, as
|
|
8
|
+
* Grok Build's own installer and `grok_home()` do (xai-org/grok-build xai-dirs, npm postinstall.js).
|
|
9
|
+
*/
|
|
10
|
+
export declare function grokHome(env: Record<string, string | undefined>, platform: string, home?: string): string;
|
|
11
|
+
export interface BinFs {
|
|
12
|
+
realpath(p: string): string;
|
|
13
|
+
exists(p: string): boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `grok` is a generic name, so a `grok` on PATH is Grok Build only when its realpath sits where
|
|
17
|
+
* Grok Build's own installers put it:
|
|
18
|
+
* - the install script (x.ai/cli/install.sh): `$GROK_HOME/downloads/grok-<platform>`, linked from
|
|
19
|
+
* `$GROK_HOME/bin/grok` (and from `$GROK_BIN_DIR` or ~/.local/bin, which resolve to the same);
|
|
20
|
+
* - its Windows script: a copy at `%USERPROFILE%\.grok\bin\grok.exe`;
|
|
21
|
+
* - the npm package `@xai-official/grok`: its postinstall installs into `$GROK_HOME/bin`, and the
|
|
22
|
+
* npm entry itself lives in `node_modules/@xai-official/grok[-<platform>]/`. On Windows npm's
|
|
23
|
+
* `grok.cmd` shim sits beside `node_modules`, so it counts when that package is next to it.
|
|
24
|
+
* Anything else (another tool's `grok`) is not Grok Build, and counts as not installed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isGrokBuildBin(found: string, env: Record<string, string | undefined>, platform: string, fsx?: BinFs): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* What Grok Build (grok 1.0.50) would already load for align, measured with `grok mcp list` and
|
|
29
|
+
* `grok inspect` in a sandbox:
|
|
30
|
+
* - `$GROK_HOME/config.toml` `[mcp_servers.*]`: the user file align writes to;
|
|
31
|
+
* - a project `.grok/config.toml` (repo root down to the cwd; every ancestor is read here):
|
|
32
|
+
* "A project file entirely replaces a same-named server from the user config", so a
|
|
33
|
+
* non-canonical align-local there would replace ours: a conflict, nothing is written;
|
|
34
|
+
* - ~/.claude.json and ~/.cursor/mcp.json (Grok imports them): a same-named server there LOSES
|
|
35
|
+
* to config.toml (verified), so it is no conflict; a canonical local `align` there is present.
|
|
36
|
+
* A project `.mcp.json` is repo input and never counts as present. The project is `--cwd` when
|
|
37
|
+
* the user passes one.
|
|
38
|
+
*/
|
|
39
|
+
export declare function readGrokState(cwd: string, home: string, opts: {
|
|
40
|
+
localIsDefault: boolean;
|
|
41
|
+
}, env: Record<string, string | undefined>, platform: string, passthrough?: string[]): GrokProjectState;
|
|
42
|
+
//# sourceMappingURL=grok-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grok-state.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/grok-state.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,mBAAmB,CAAC;AAE5F,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;CACpB;AAqBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,SAAwB,GAAG,MAAM,CAGxH;AASD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B;AAGD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAE,KAAc,GAAG,OAAO,CAkBrI;AAaD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,EACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,MAAM,EAAO,GACzB,gBAAgB,CA0BlB"}
|