@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
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L4: which scope a source is read under, and changing it. The one place the CLI (`align connect`, `align sync`) and the MCP tool
|
|
3
|
+
* (`align_scope`) both decide and write, so a change made by an agent takes exactly the path a person's does.
|
|
4
|
+
*
|
|
5
|
+
* Scope is one of two things per source (Decision 7): "yours" (items you are involved in) or "team" (everyone's, in a NAMED place the
|
|
6
|
+
* token can see: a repo, Jira projects, Linear teams, a GitLab project, Confluence spaces). There is no "everything": a team scope
|
|
7
|
+
* always has a name. Zoom is always yours; Slack, Notion and Teams already read all the token can see and have nothing to name.
|
|
8
|
+
*
|
|
9
|
+
* Where it lives:
|
|
10
|
+
* - the CHOICE is in the config store beside the token (config.ts `getConnectorScope`), so forgetting the connector removes it;
|
|
11
|
+
* - each scope has its own `source_sync` row, keyed by `scopeKeyOf`, with the source's window and its own watermark.
|
|
12
|
+
* Changing scope adds or reuses a row and never touches another one, and never deletes an imported item.
|
|
13
|
+
*
|
|
14
|
+
* Fail direction: an unreadable, missing or unknown choice reads as "yours", the narrower scope. The only blocked case is Confluence
|
|
15
|
+
* with no spaces, which has no "yours" to fall back to (its API lists whatever the token can read).
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'node:fs';
|
|
18
|
+
import { CAPTURE_SOURCES } from './capture-sources.js';
|
|
19
|
+
import { findConfluenceSpace, findJiraProject, findLinearTeam, githubRepoVisibility, gitlabProjectVisibility, listConfluenceSpaces, listJiraProjects, listLinearTeams, ScopeLookupError, } from './scope-choices.js';
|
|
20
|
+
import { describeScopeKey, disclosureText, fetchOptsFor, FIXED_SCOPES, normaliseScopeValues, SCOPED_SOURCES, scopeKeyOf, ScopeValueError, YOURS_KEY, } from './scope-values.js';
|
|
21
|
+
import { adoptScope, readRows } from './sync/sync-state.js';
|
|
22
|
+
import { inheritedWindowSince } from './sync/window.js';
|
|
23
|
+
/**
|
|
24
|
+
* The disclosure was shown to a person for this scope: remember it, and if an agent's choice of exactly this scope was waiting
|
|
25
|
+
* for that, it is active now. The one place a pending scope becomes active.
|
|
26
|
+
*/
|
|
27
|
+
export function markTold(store, source, scopeKey) {
|
|
28
|
+
store.markDisclosed(source, scopeKey);
|
|
29
|
+
const s = store.getScope(source);
|
|
30
|
+
if (s?.kind === 'team' && s.pending && isScoped(source) && scopeKeyOf(source, s.labels) === scopeKey) {
|
|
31
|
+
store.saveScope(source, { kind: 'team', values: s.values, labels: s.labels });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const YOURS_LABEL = 'your own items';
|
|
35
|
+
const labelOf = (source) => CAPTURE_SOURCES[source]?.label ?? source;
|
|
36
|
+
const isScoped = (source) => SCOPED_SOURCES.includes(source);
|
|
37
|
+
function yours(origin, note) {
|
|
38
|
+
return { scope: 'yours', scopeKey: YOURS_KEY, extras: {}, label: YOURS_LABEL, origin, ...(note !== undefined ? { note } : {}) };
|
|
39
|
+
}
|
|
40
|
+
function team(source, values, labels, origin, deps, foreground) {
|
|
41
|
+
const scopeKey = scopeKeyOf(source, labels);
|
|
42
|
+
return {
|
|
43
|
+
scope: 'team', scopeKey, extras: fetchOptsFor(source, values), label: describeScopeKey(source, scopeKey, 'team'), origin,
|
|
44
|
+
...(source === 'github' ? { repo: values[0] } : {}),
|
|
45
|
+
...(foreground && !deps.store.isDisclosed(source, scopeKey) ? { disclosure: disclosureText(source, labels) } : {}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** The line for a repo or project the token cannot see (P0 measured GitHub answering 422 for a private repo). */
|
|
49
|
+
export function cannotSeeNote(source, place) {
|
|
50
|
+
return source === 'github'
|
|
51
|
+
? `Your GitHub token cannot see ${place}, so only items you are involved in were imported. Reconnect with repo access: align connect github`
|
|
52
|
+
: `Your GitLab token cannot see ${place}, so only your own merge requests were imported. Reconnect with access: align connect gitlab`;
|
|
53
|
+
}
|
|
54
|
+
/** Confluence has no "only yours": with no chosen spaces it reads nothing. */
|
|
55
|
+
export const CONFLUENCE_NEEDS_SPACES = 'Confluence reads only the spaces you choose, and none are chosen yet. Pick them: align connect --source confluence --spaces ENG,OPS';
|
|
56
|
+
const WIDEN_FLAG = { jira: '--projects KEYS', linear: '--teams KEYS' };
|
|
57
|
+
/**
|
|
58
|
+
* Which scope a source is read under right now. `foreground` is a person at a terminal (`align connect`, `align sync`): only there is
|
|
59
|
+
* a disclosure returned, and only there is an auto-detected team scope read before the disclosure was shown. A background run reads
|
|
60
|
+
* what a person chose, or what they were already told about, and otherwise stays at yours.
|
|
61
|
+
*/
|
|
62
|
+
export async function resolveScope(source, deps, o) {
|
|
63
|
+
if (!isScoped(source))
|
|
64
|
+
return yours('default');
|
|
65
|
+
const stored = deps.store.getScope(source);
|
|
66
|
+
// "Foreground" means a person at a terminal: without one nothing is announced, confirmed or widened by the folder.
|
|
67
|
+
o = { foreground: o.foreground && deps.isTty() };
|
|
68
|
+
if (stored?.kind === 'team' && stored.pending) {
|
|
69
|
+
const person = o.foreground;
|
|
70
|
+
// Only a person at a terminal is shown the disclosure and asked. Anything else keeps what was in force. A pending scope is NEVER
|
|
71
|
+
// promoted silently: the disclosure is shown every time, even if this scope was told before, and the caller must get an explicit Yes.
|
|
72
|
+
if (person) {
|
|
73
|
+
return { ...team(source, stored.values, stored.labels, 'chosen', deps, true), disclosure: disclosureText(source, stored.labels), activates: true };
|
|
74
|
+
}
|
|
75
|
+
const kept = await resolveFrom(source, stored.pending.previous, deps, { foreground: false });
|
|
76
|
+
return { ...kept, pendingConfirm: true, note: `Team scope for ${source} is waiting for you to confirm: run \`align sync ${source}\` (it will show what it reads)` };
|
|
77
|
+
}
|
|
78
|
+
return resolveFrom(source, stored, deps, o);
|
|
79
|
+
}
|
|
80
|
+
async function resolveFrom(source, stored, deps, o) {
|
|
81
|
+
if (stored?.kind === 'team')
|
|
82
|
+
return team(source, stored.values, stored.labels, 'chosen', deps, o.foreground);
|
|
83
|
+
if (source === 'confluence') {
|
|
84
|
+
return {
|
|
85
|
+
...yours('default'),
|
|
86
|
+
blocked: CONFLUENCE_NEEDS_SPACES,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (stored?.kind === 'yours')
|
|
90
|
+
return yours('chosen');
|
|
91
|
+
if (source === 'github' || source === 'gitlab')
|
|
92
|
+
return autoDetected(source, deps, o.foreground);
|
|
93
|
+
return yours('default', `Reading only your own items. To read a team's: align connect --source ${source} ${WIDEN_FLAG[source] ?? ''}`.trim());
|
|
94
|
+
}
|
|
95
|
+
/** The folder's remote is gitlab.com; a token saved for another host would read a different project of the same path. */
|
|
96
|
+
function selfManagedGitlab(deps, source) {
|
|
97
|
+
const domain = deps.store.fields(source)?.['domain'];
|
|
98
|
+
return source === 'gitlab' && !!domain && domain !== 'gitlab.com';
|
|
99
|
+
}
|
|
100
|
+
async function autoDetected(source, deps, foreground) {
|
|
101
|
+
const place = selfManagedGitlab(deps, source) ? undefined : source === 'github' ? await deps.cwdRepo() : await deps.cwdGitlabProject();
|
|
102
|
+
if (place === undefined) {
|
|
103
|
+
return yours('default', source === 'github'
|
|
104
|
+
? "Reading only your own GitHub items (this folder is not a GitHub repo). To read everyone's in a repo: align connect --source github --repo owner/repo"
|
|
105
|
+
: "Reading only your own merge requests (this folder is not a GitLab project). To read everyone's in a project: align connect --source gitlab --gitlab-project group/project");
|
|
106
|
+
}
|
|
107
|
+
// A background run must not widen by itself: until the person has been told what a team read is, it stays at yours.
|
|
108
|
+
if (!foreground && !deps.store.isDisclosed(source, scopeKeyOf(source, [place])))
|
|
109
|
+
return yours('default');
|
|
110
|
+
const fields = deps.store.fields(source);
|
|
111
|
+
const seen = fields?.['token']
|
|
112
|
+
? source === 'github' ? await githubRepoVisibility(fields['token'], place, deps.fetch) : await gitlabProjectVisibility(fields, place, deps.fetch)
|
|
113
|
+
: 'unknown';
|
|
114
|
+
if (seen === 'invisible')
|
|
115
|
+
return yours('default', cannotSeeNote(source, place));
|
|
116
|
+
// 'unknown' proceeds: a probe that could not answer is not evidence of a refusal, and the fetch reports its own.
|
|
117
|
+
return team(source, [place], [place], 'detected', deps, foreground);
|
|
118
|
+
}
|
|
119
|
+
/** A change that was refused. The message is written for the person and never carries a value that was refused. */
|
|
120
|
+
export class ScopeRefusal extends Error {
|
|
121
|
+
kind;
|
|
122
|
+
constructor(message, kind) {
|
|
123
|
+
super(message);
|
|
124
|
+
this.kind = kind;
|
|
125
|
+
this.name = 'ScopeRefusal';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const day = (iso) => iso.slice(0, 10);
|
|
129
|
+
async function verify(source, raw, deps, fields) {
|
|
130
|
+
let given;
|
|
131
|
+
try {
|
|
132
|
+
given = normaliseScopeValues(source, raw);
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
if (e instanceof ScopeValueError)
|
|
136
|
+
throw new ScopeRefusal(`${e.message} Nothing was changed.`, 'invalid');
|
|
137
|
+
throw e;
|
|
138
|
+
}
|
|
139
|
+
const name = labelOf(source);
|
|
140
|
+
try {
|
|
141
|
+
switch (source) {
|
|
142
|
+
case 'github': {
|
|
143
|
+
const seen = await githubRepoVisibility(fields['token'] ?? '', given[0], deps.fetch);
|
|
144
|
+
if (seen === 'invisible')
|
|
145
|
+
throw new ScopeRefusal(`Your GitHub token cannot see the repo you named. Nothing was changed. Reconnect with repo access: align connect github`, 'invisible');
|
|
146
|
+
if (seen === 'unknown')
|
|
147
|
+
throw new ScopeRefusal(`Align could not check whether your GitHub token can see the repo you named (GitHub did not answer clearly). Nothing was changed; try again.`, 'unverified');
|
|
148
|
+
return { values: given, labels: given };
|
|
149
|
+
}
|
|
150
|
+
case 'gitlab': {
|
|
151
|
+
const seen = await gitlabProjectVisibility(fields, given[0], deps.fetch);
|
|
152
|
+
if (seen === 'invisible')
|
|
153
|
+
throw new ScopeRefusal(`Your GitLab token cannot see the project you named. Nothing was changed.`, 'not_visible');
|
|
154
|
+
if (seen === 'unknown')
|
|
155
|
+
throw new ScopeRefusal(`Align could not check whether your GitLab token can see the project you named. Nothing was changed; try again.`, 'unverified');
|
|
156
|
+
return { values: given, labels: given };
|
|
157
|
+
}
|
|
158
|
+
case 'jira':
|
|
159
|
+
case 'confluence': {
|
|
160
|
+
const cap = deps.listMax !== undefined ? { max: deps.listMax } : {};
|
|
161
|
+
const listed = source === 'jira' ? await listJiraProjects(fields, deps.fetch, cap) : await listConfluenceSpaces(fields, deps.fetch, cap);
|
|
162
|
+
const visible = new Set(listed.items.map((x) => x.key));
|
|
163
|
+
let missing = given.filter((g) => !visible.has(g));
|
|
164
|
+
// A truncated list cannot say a key is invisible: ask for each missing key directly.
|
|
165
|
+
if (listed.truncated && missing.length > 0) {
|
|
166
|
+
const still = [];
|
|
167
|
+
for (const k of missing)
|
|
168
|
+
if (!(source === 'jira' ? await findJiraProject(fields, k, deps.fetch) : await findConfluenceSpace(fields, k, deps.fetch)))
|
|
169
|
+
still.push(k);
|
|
170
|
+
missing = still;
|
|
171
|
+
}
|
|
172
|
+
if (missing.length > 0) {
|
|
173
|
+
throw new ScopeRefusal(`Your ${name} token cannot see ${missing.length} of the ${source === 'jira' ? 'projects' : 'spaces'} you gave (the values are not printed back).${listed.truncated ? ` The list was cut off after ${listed.items.length}, so each was also asked for directly.` : ''} Nothing was changed.`, 'not_visible');
|
|
174
|
+
}
|
|
175
|
+
return { values: given, labels: given };
|
|
176
|
+
}
|
|
177
|
+
case 'linear': {
|
|
178
|
+
const listed = await listLinearTeams(fields, deps.fetch);
|
|
179
|
+
const found = given.map((g) => listed.items.find((t) => t.id === g || t.key === g));
|
|
180
|
+
if (listed.truncated) {
|
|
181
|
+
for (let i = 0; i < given.length; i++)
|
|
182
|
+
if (found[i] === undefined)
|
|
183
|
+
found[i] = await findLinearTeam(fields, given[i], deps.fetch);
|
|
184
|
+
}
|
|
185
|
+
const missing = given.filter((_, i) => found[i] === undefined);
|
|
186
|
+
if (missing.length > 0) {
|
|
187
|
+
throw new ScopeRefusal(`Your Linear token cannot see ${missing.length} of the teams you gave (the values are not printed back).${listed.truncated ? ` The list was cut off after ${listed.items.length}, so each key was also asked for directly.` : ''} Nothing was changed.`, 'not_visible');
|
|
188
|
+
}
|
|
189
|
+
const hits = found;
|
|
190
|
+
return { values: hits.map((t) => t.id), labels: hits.map((t) => t.key) };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (e) {
|
|
195
|
+
if (e instanceof ScopeLookupError)
|
|
196
|
+
throw new ScopeRefusal(`${e.message} Nothing was changed.`, 'lookup');
|
|
197
|
+
throw e;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check a requested scope WITHOUT writing anything: refuses (ScopeRefusal) what is unknown, fixed, not connected, malformed, or not
|
|
202
|
+
* visible to the token. `fields` are the connector fields to check with - the saved ones, or the in-flight ones of a connect whose
|
|
203
|
+
* token is not saved yet.
|
|
204
|
+
*/
|
|
205
|
+
export async function chooseScope(deps, source, input, fields) {
|
|
206
|
+
if (!isScoped(source)) {
|
|
207
|
+
const fixed = FIXED_SCOPES[source];
|
|
208
|
+
if (fixed)
|
|
209
|
+
throw new ScopeRefusal(`${labelOf(source)} reads ${fixed.text}. There is no scope to choose for it.`, 'fixed');
|
|
210
|
+
throw new ScopeRefusal(`Unknown source. A scope can be set for: ${SCOPED_SOURCES.join(', ')}.`, 'unknown_source');
|
|
211
|
+
}
|
|
212
|
+
if (!fields?.['token']) {
|
|
213
|
+
throw new ScopeRefusal(`${labelOf(source)} is not connected, so its scope cannot be set. Connecting needs a token only the person can supply: align connect ${source}`, 'not_connected');
|
|
214
|
+
}
|
|
215
|
+
if (input.scope === 'yours') {
|
|
216
|
+
if (source === 'confluence') {
|
|
217
|
+
throw new ScopeRefusal('Confluence has no "only yours" scope: it reads the spaces you choose. Name them: align connect --source confluence --spaces ENG,OPS', 'no_yours');
|
|
218
|
+
}
|
|
219
|
+
return { source, scope: 'yours', scopeKey: YOURS_KEY, label: YOURS_LABEL, values: [], labels: [] };
|
|
220
|
+
}
|
|
221
|
+
const v = await verify(source, input.values, deps, fields);
|
|
222
|
+
const scopeKey = scopeKeyOf(source, v.labels);
|
|
223
|
+
return { source, scope: 'team', scopeKey, label: describeScopeKey(source, scopeKey, 'team'), values: v.values, labels: v.labels };
|
|
224
|
+
}
|
|
225
|
+
/** Write a checked choice: the stored preference, and the scope's own `source_sync` row (the source's window, no watermark). Deletes nothing. */
|
|
226
|
+
/**
|
|
227
|
+
* `windowSince` is the window a connect actually READ (its `--since`), given only when the person gave one; it becomes the window of a NEW
|
|
228
|
+
* scope row so the next sync does not read it all again. An existing row keeps its own. Absent: the source's window.
|
|
229
|
+
*/
|
|
230
|
+
export function commitScope(deps, source, choice, by, windowSince) {
|
|
231
|
+
if (choice.scope === 'team') {
|
|
232
|
+
// An AGENT's team choice waits for a person (the disclosure at a terminal); what was in force stays in force until then.
|
|
233
|
+
// Re-choosing the scope that is already active is not a change, so it needs no confirmation.
|
|
234
|
+
const current = deps.store.getScope(source);
|
|
235
|
+
const active = current === null ? null : current.kind === 'team' && current.pending ? current.pending.previous : current.kind === 'team' ? { kind: 'team', values: current.values, labels: current.labels } : current;
|
|
236
|
+
const same = active?.kind === 'team' && scopeKeyOf(source, active.labels) === choice.scopeKey;
|
|
237
|
+
const waits = by.via === 'mcp' || by.unattended === true;
|
|
238
|
+
deps.store.saveScope(source, waits && !same
|
|
239
|
+
? { kind: 'team', values: choice.values, labels: choice.labels, pending: { previous: active } }
|
|
240
|
+
: { kind: 'team', values: choice.values, labels: choice.labels });
|
|
241
|
+
}
|
|
242
|
+
// "Yours" is written down for every source that has one: otherwise GitHub and GitLab widen again from the folder's remote, and Jira
|
|
243
|
+
// and Linear from the keys local decisions cite, as if nothing had been chosen.
|
|
244
|
+
else {
|
|
245
|
+
deps.store.saveScope(source, { kind: 'yours' });
|
|
246
|
+
// Narrowed: a wider scope chosen later is announced again.
|
|
247
|
+
deps.store.clearDisclosed(source);
|
|
248
|
+
}
|
|
249
|
+
const pending = deps.store.getScope(source)?.kind === 'team' && deps.store.getScope(source).pending !== undefined;
|
|
250
|
+
if (deps.dbPath === undefined || !fs.existsSync(deps.dbPath))
|
|
251
|
+
return { newRow: true, pending };
|
|
252
|
+
const window = windowSince !== undefined ? windowSince : inheritedWindowSince(readRows(deps.dbPath, source), deps.now());
|
|
253
|
+
const adopted = adoptScope(deps.dbPath, { source, scopeKey: choice.scopeKey, scope: choice.scope }, window, { via: by.via, agent: by.via === 'mcp' ? by.agent : null });
|
|
254
|
+
return { newRow: adopted.created, pending, row: adopted.row };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Set a source's scope. The ONE writer: `align_scope set` ends here, and `align connect --scope ...` ends in the same
|
|
258
|
+
* chooseScope + commitScope pair. Refuses (ScopeRefusal) rather than guessing, and stores nothing on any refusal.
|
|
259
|
+
* Never deletes an item.
|
|
260
|
+
*/
|
|
261
|
+
export async function setScope(deps, source, input, by) {
|
|
262
|
+
const choice = await chooseScope(deps, source, input, deps.store.fields(source));
|
|
263
|
+
const { newRow: created, pending, row } = commitScope(deps, choice.source, choice, by);
|
|
264
|
+
const name = labelOf(choice.source);
|
|
265
|
+
const result = { source: choice.source, scope: choice.scope, scopeKey: choice.scopeKey, label: choice.label, newRow: created, text: '' };
|
|
266
|
+
if (choice.scope === 'yours') {
|
|
267
|
+
result.text = `${name} now reads only your own items. Items already imported from the wider scope stay in your graph; they are no longer refreshed.`;
|
|
268
|
+
return result;
|
|
269
|
+
}
|
|
270
|
+
const back = row?.high_water ? day(row.high_water) : undefined;
|
|
271
|
+
const reach = row === undefined || row.window_since === null
|
|
272
|
+
? `for all the history its ceiling allows`
|
|
273
|
+
: `back to ${day(row.window_since)}`;
|
|
274
|
+
result.text = created || back === undefined
|
|
275
|
+
? `${name} now reads ${choice.label}. This scope has not been read before, so the next sync re-reads ${name} ${reach} for it. That can take a few minutes and uses part of your ${name} rate limit. Nothing already imported is deleted.`
|
|
276
|
+
: `${name} now reads ${choice.label}. This scope was read before, so the next sync catches up since ${back}. Nothing already imported is deleted.`;
|
|
277
|
+
result.disclosure = disclosureText(choice.source, choice.labels);
|
|
278
|
+
if (pending) {
|
|
279
|
+
result.pending = true;
|
|
280
|
+
result.text = `${name} will read ${choice.label} once the person confirms it. It is waiting for the person: nothing reads it in the background, or when an agent runs a sync, until they run \`align sync ${choice.source}\` at a terminal, which shows what it reads first. Until then ${name} keeps its current scope. When confirmed, the first sync re-reads ${name} ${reach} for this scope (a few minutes, some of its rate limit). Nothing already imported is deleted.`;
|
|
281
|
+
}
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
const VIEW_ORDER = ['github', 'jira', 'confluence', 'slack', 'teams', 'gitlab', 'linear', 'notion', 'zoom'];
|
|
285
|
+
/**
|
|
286
|
+
* Each connected source's scope as a sync here would read it. Makes no network call: a GitHub repo found from the folder is reported as
|
|
287
|
+
* what the next sync will try, and the sync itself checks the token can see it.
|
|
288
|
+
*/
|
|
289
|
+
export async function viewScopes(deps) {
|
|
290
|
+
const out = [];
|
|
291
|
+
for (const source of VIEW_ORDER) {
|
|
292
|
+
if (!deps.store.fields(source)?.['token'])
|
|
293
|
+
continue;
|
|
294
|
+
const fixed = FIXED_SCOPES[source];
|
|
295
|
+
if (fixed) {
|
|
296
|
+
out.push({ source, kind: fixed.scope, scope_key: YOURS_KEY, label: fixed.text, can_set: false, origin: 'fixed' });
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const raw = deps.store.getScope(source);
|
|
300
|
+
// A waiting agent choice is not in force: show what is, and what is waiting.
|
|
301
|
+
const waitingKey = raw?.kind === 'team' && raw.pending ? raw : undefined;
|
|
302
|
+
const stored = waitingKey ? waitingKey.pending.previous : raw;
|
|
303
|
+
const waiting = waitingKey ? { waiting: describeScopeKey(source, scopeKeyOf(source, waitingKey.labels), 'team') } : {};
|
|
304
|
+
const push = (v) => { out.push({ ...v, ...waiting }); };
|
|
305
|
+
if (stored?.kind === 'team') {
|
|
306
|
+
push({ source, kind: 'team', scope_key: scopeKeyOf(source, stored.labels), label: describeScopeKey(source, scopeKeyOf(source, stored.labels), 'team'), values: stored.labels, can_set: true, origin: 'chosen' });
|
|
307
|
+
}
|
|
308
|
+
else if (source === 'confluence') {
|
|
309
|
+
push({ source, kind: 'unset', scope_key: YOURS_KEY, label: 'no spaces chosen, so nothing is read', can_set: true, origin: 'default' });
|
|
310
|
+
}
|
|
311
|
+
else if (stored?.kind === 'yours') {
|
|
312
|
+
push({ source, kind: 'yours', scope_key: YOURS_KEY, label: YOURS_LABEL, can_set: true, origin: 'chosen' });
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
const place = selfManagedGitlab(deps, source) ? undefined : source === 'github' ? await deps.cwdRepo() : source === 'gitlab' ? await deps.cwdGitlabProject() : undefined;
|
|
316
|
+
push(place !== undefined
|
|
317
|
+
? { source, kind: 'team', scope_key: scopeKeyOf(source, [place]), label: describeScopeKey(source, scopeKeyOf(source, [place]), 'team'), values: [place], can_set: true, origin: 'detected' }
|
|
318
|
+
: { source, kind: 'yours', scope_key: YOURS_KEY, label: YOURS_LABEL, can_set: true, origin: 'default' });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return out;
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/lib/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type EnvironmentConfig } from '../config.js';
|
|
2
|
+
import { type ShareClient } from './run.js';
|
|
3
|
+
import type { Judge } from '../curation/judgements-db.js';
|
|
4
|
+
export interface ShareOptions {
|
|
5
|
+
ids: string[];
|
|
6
|
+
allRatified?: boolean;
|
|
7
|
+
/** An already-parsed lower bound (ISO), for --since. */
|
|
8
|
+
sinceIso?: string;
|
|
9
|
+
confirm?: string;
|
|
10
|
+
retract?: string;
|
|
11
|
+
envName: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ShareDeps {
|
|
14
|
+
cloudEnv: EnvironmentConfig;
|
|
15
|
+
/** This install's salt for the opaque client_key. */
|
|
16
|
+
salt: string;
|
|
17
|
+
/** The environment's default gateway URL: anything else is shown in the preview. */
|
|
18
|
+
defaultGatewayUrl: string;
|
|
19
|
+
localDbPath: string | null;
|
|
20
|
+
client: () => ShareClient;
|
|
21
|
+
judge: () => Promise<Judge>;
|
|
22
|
+
/** The person's own git identity: `--all-ratified` shares only what they ratified. */
|
|
23
|
+
owner: () => Promise<string>;
|
|
24
|
+
/** True inside an agent that `align` launched (ALIGN_WRAPPED): a share is then refused, as a speed bump. */
|
|
25
|
+
wrapped: boolean;
|
|
26
|
+
/** Show `shown` and ask on the controlling terminal; null when there is no interactive terminal. */
|
|
27
|
+
ttyConfirm: (shown: string, question: string) => Promise<boolean | null>;
|
|
28
|
+
out: (line: string) => void;
|
|
29
|
+
err: (line: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare function runShare(opts: ShareOptions, deps: ShareDeps): Promise<number>;
|
|
32
|
+
//# sourceMappingURL=command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAqG,KAAK,WAAW,EAAc,MAAM,UAAU,CAAC;AAC3J,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,sFAAsF;IACtF,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,4GAA4G;IAC5G,OAAO,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzE,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAID,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA4FnF"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L9: `align share` as a function of injected dependencies, returning an exit code. The commander
|
|
3
|
+
* wrapper (commands/share.ts) wires the real config, gateway client and prompts; tests wire fakes.
|
|
4
|
+
*
|
|
5
|
+
* Who may complete a share: a person at a terminal. EVERY path (a plain `align share` and
|
|
6
|
+
* `align share --confirm <code>`) shows the preview on the CONTROLLING terminal and needs a typed
|
|
7
|
+
* yes there (default No). There is no `--yes`: a flag is exactly what an agent would pass. A caller
|
|
8
|
+
* with no controlling terminal is refused. The known gap (an agent that allocates its own
|
|
9
|
+
* pseudo-terminal) is stated in SECURITY.md.
|
|
10
|
+
*/
|
|
11
|
+
import { visible } from './visible.js';
|
|
12
|
+
import { teamCtaLine } from '../team-cta.js';
|
|
13
|
+
import { combinedHash, consumeCode, lookupCode, sweepPending } from './pending.js';
|
|
14
|
+
import { prepare, ratifiedRows, renderResults, renderTeamText, retract, secretRefusal, send, ShareError } from './run.js';
|
|
15
|
+
const NO_TERMINAL = 'Confirm this in your own terminal: there is no interactive terminal here (an agent shell, a pipe and a hook have none). Nothing was sent.';
|
|
16
|
+
export async function runShare(opts, deps) {
|
|
17
|
+
// Every line this prints can carry text a stranger wrote (a remote id, a tenant name, a server error, a
|
|
18
|
+
// pending file's env). visible() is idempotent, so lines that were already escaped pass through unchanged.
|
|
19
|
+
const out = (l) => deps.out(visible(l, { keepNewline: true }));
|
|
20
|
+
const err = (l) => deps.err(visible(l, { keepNewline: true }));
|
|
21
|
+
if (deps.wrapped) {
|
|
22
|
+
err('align share is not run from inside an agent that align launched. Open a normal terminal of your own and run it there. Nothing was sent.');
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
if (deps.cloudEnv.mode === 'demo') {
|
|
26
|
+
err('align share needs a team account, and this environment is in demo mode. Run: align login');
|
|
27
|
+
return 1;
|
|
28
|
+
}
|
|
29
|
+
if (deps.cloudEnv.mode === 'local-embedded' || !deps.cloudEnv.authToken) {
|
|
30
|
+
err(`align share sends decisions from your local graph to your team's.\n ${teamCtaLine()}\n Already have a team? Run: align login`);
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
if (!deps.localDbPath) {
|
|
34
|
+
err('There is no local graph on this machine to share from. `align setup --local` creates one.');
|
|
35
|
+
return 1;
|
|
36
|
+
}
|
|
37
|
+
const dbPath = deps.localDbPath;
|
|
38
|
+
sweepPending(); // codes are 10 minutes; a file a day old is leftover
|
|
39
|
+
const ctx = async () => ({ dbPath, envName: opts.envName, client: deps.client(), judge: await deps.judge(), salt: deps.salt, gatewayUrl: deps.cloudEnv.gatewayUrl, defaultGatewayUrl: deps.defaultGatewayUrl });
|
|
40
|
+
try {
|
|
41
|
+
if (opts.retract !== undefined) {
|
|
42
|
+
const r = await retract(await ctx(), opts.retract);
|
|
43
|
+
(r.ok ? out : err)(r.message);
|
|
44
|
+
return r.ok ? 0 : 1;
|
|
45
|
+
}
|
|
46
|
+
let ids = opts.ids;
|
|
47
|
+
let pendingCode;
|
|
48
|
+
if (opts.confirm !== undefined) {
|
|
49
|
+
const found = lookupCode(opts.confirm);
|
|
50
|
+
if (!found.ok) {
|
|
51
|
+
err(found.reason === 'expired' ? 'That confirmation code has expired. Ask your agent to start the share again.' : 'That confirmation code is not valid (unknown, malformed or already used). Nothing was sent.');
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
if (found.pending.envName !== opts.envName) {
|
|
55
|
+
err(`That code was issued for ${found.pending.envName}, not ${opts.envName}. Nothing was sent.`);
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
ids = found.pending.localIds;
|
|
59
|
+
pendingCode = opts.confirm;
|
|
60
|
+
}
|
|
61
|
+
else if (ids.length === 0) {
|
|
62
|
+
if (!opts.allRatified && opts.sinceIso === undefined) {
|
|
63
|
+
err('Name what to share: align share <id> [<id>...], or --all-ratified, or --since <30d|2w|6m>.');
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
ids = ratifiedRows(dbPath, { owner: await deps.owner(), sinceIso: opts.sinceIso }).map((r) => r.id);
|
|
67
|
+
if (ids.length === 0) {
|
|
68
|
+
out('Nothing to share: you have no ratified decisions in that range.');
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const c = await ctx();
|
|
73
|
+
const prep = await prepare(c, ids);
|
|
74
|
+
if (prep.secrets.length) {
|
|
75
|
+
err(secretRefusal(prep.secrets));
|
|
76
|
+
return 1;
|
|
77
|
+
}
|
|
78
|
+
for (const a of prep.already)
|
|
79
|
+
out(`Already shared as ${visible(a.remoteId)}: ${visible(a.title)}`);
|
|
80
|
+
if (prep.payloads.length === 0)
|
|
81
|
+
return 0;
|
|
82
|
+
if (pendingCode !== undefined) {
|
|
83
|
+
const found = lookupCode(pendingCode);
|
|
84
|
+
if (!found.ok) {
|
|
85
|
+
err('That confirmation code is no longer valid. Nothing was sent.');
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
if (found.pending.hash !== combinedHash(prep.payloads, prep)) {
|
|
89
|
+
err('What would be shared, or where it would go (the workspace or the gateway), has changed since your agent previewed it. Nothing was sent. Ask your agent to start again.');
|
|
90
|
+
return 1;
|
|
91
|
+
}
|
|
92
|
+
const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)}?`);
|
|
93
|
+
if (yes === null) {
|
|
94
|
+
err(NO_TERMINAL);
|
|
95
|
+
return 1;
|
|
96
|
+
}
|
|
97
|
+
if (!yes) {
|
|
98
|
+
out('Nothing was sent.');
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
if (!consumeCode(pendingCode)) {
|
|
102
|
+
err('That code was already used. Nothing was sent.');
|
|
103
|
+
return 1;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const yes = await deps.ttyConfirm(prep.preview, `Share ${prep.payloads.length} decision${prep.payloads.length === 1 ? '' : 's'} with ${visible(prep.dest.workspace)}?`);
|
|
108
|
+
if (yes === null) {
|
|
109
|
+
err(NO_TERMINAL);
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
if (!yes) {
|
|
113
|
+
out('Nothing was sent.');
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const results = await send(c, prep, {
|
|
118
|
+
confirmTeamText: async (i) => {
|
|
119
|
+
const shown = `"${visible(i.title)}" is already on your team graph, as:\n${renderTeamText(i.team)}\nYour ratification would put your name on THAT text, not on yours.`;
|
|
120
|
+
return (await deps.ttyConfirm(shown, 'Do you stand behind the team\'s text?')) === true;
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
out(`\n${renderResults(results)}`);
|
|
124
|
+
const failed = results.some((r) => r.outcome.kind === 'refused' || r.outcome.kind === 'unknown');
|
|
125
|
+
return failed ? 1 : 0;
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
if (e instanceof ShareError) {
|
|
129
|
+
err(e.message);
|
|
130
|
+
return e.exitCode;
|
|
131
|
+
}
|
|
132
|
+
err(e.message);
|
|
133
|
+
return 1;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/lib/share/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export interface Promotion {
|
|
2
|
+
localId: string;
|
|
3
|
+
env: string;
|
|
4
|
+
tenantId: string;
|
|
5
|
+
remoteId: string;
|
|
6
|
+
contentHash: string;
|
|
7
|
+
/** The share attached to a decision the team already held. Retracting it must NOT archive that decision. */
|
|
8
|
+
matched: boolean;
|
|
9
|
+
/** The opaque idempotency key sent as `client_key` at the first share; reused for every later one. */
|
|
10
|
+
clientKey: string;
|
|
11
|
+
/** Hashes of judgements already stored in that workspace. */
|
|
12
|
+
sent: string[];
|
|
13
|
+
/** A matched share whose ratify/supersede still waits for the person to confirm the team's text. */
|
|
14
|
+
confirmPending: boolean;
|
|
15
|
+
sharedAt: string;
|
|
16
|
+
retractedAt: string | null;
|
|
17
|
+
}
|
|
18
|
+
/** The write side of a ledger row: the clock columns are the database's. */
|
|
19
|
+
export interface PromotionWrite {
|
|
20
|
+
localId: string;
|
|
21
|
+
env: string;
|
|
22
|
+
tenantId: string;
|
|
23
|
+
remoteId: string;
|
|
24
|
+
contentHash: string;
|
|
25
|
+
matched: boolean;
|
|
26
|
+
clientKey: string;
|
|
27
|
+
sent: string[];
|
|
28
|
+
confirmPending: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface LedgerRow {
|
|
31
|
+
local_id: string;
|
|
32
|
+
env: string;
|
|
33
|
+
tenant_id: string;
|
|
34
|
+
remote_id: string;
|
|
35
|
+
content_hash: string;
|
|
36
|
+
matched: number;
|
|
37
|
+
client_key: string;
|
|
38
|
+
sent: string;
|
|
39
|
+
confirm_pending: number;
|
|
40
|
+
shared_at: string;
|
|
41
|
+
retracted_at: string | null;
|
|
42
|
+
}
|
|
43
|
+
export declare function getPromotion(dbPath: string, localId: string, env: string, tenantId: string): Promotion | null;
|
|
44
|
+
/** A row `align push` left before the ledger existed: it names no workspace. */
|
|
45
|
+
export declare function getLegacyPromotion(dbPath: string, localId: string, env: string): Promotion | null;
|
|
46
|
+
/** Insert, or replace the hash and remote id of an existing row; a re-share clears an earlier retraction. */
|
|
47
|
+
export declare function recordPromotion(dbPath: string, p: PromotionWrite): void;
|
|
48
|
+
/** Several rows in ONE transaction: all of them land or none do. */
|
|
49
|
+
export declare function recordPromotions(dbPath: string, rows: readonly PromotionWrite[]): void;
|
|
50
|
+
export declare function markRetracted(dbPath: string, localId: string, env: string, tenantId: string): void;
|
|
51
|
+
/** Every live (not retracted) share into one workspace, keyed by local id. */
|
|
52
|
+
export declare function listPromotions(dbPath: string, env: string, tenantId: string): Map<string, Promotion>;
|
|
53
|
+
/** Every ledger row, raw, so a reset can carry the record of what was shared across a wipe. [] when there is none. */
|
|
54
|
+
export declare function exportLedger(dbPath: string): LedgerRow[];
|
|
55
|
+
/** Put exported rows back (replay-safe: the key is the table's primary key). */
|
|
56
|
+
export declare function restoreLedger(dbPath: string, rows: readonly LedgerRow[]): void;
|
|
57
|
+
/** True when the ledger table has every column this code uses. A share checks it BEFORE any request. */
|
|
58
|
+
export declare function ledgerReady(dbPath: string): boolean;
|
|
59
|
+
//# sourceMappingURL=ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../../src/lib/share/ledger.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,4GAA4G;IAC5G,OAAO,EAAE,OAAO,CAAC;IACjB,sGAAsG;IACtG,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oGAAoG;IACpG,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IAAG,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAqCpP,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAK7G;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjG;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,GAAG,IAAI,CAUvE;AAQD,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAUtF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIlG;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAKpG;AAED,sHAAsH;AACtH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAExD;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAa9E;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAMnD"}
|