@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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5: the thread side of a sync - which stored Slack threads to ask the SDK to re-read (a reply to
|
|
3
|
+
* an old thread never shows up in a date-ordered channel listing), and how a re-read that holds
|
|
4
|
+
* only the NEW messages is folded into the stored thread.
|
|
5
|
+
*
|
|
6
|
+
* Pure. The SDK marks such an item `partial: true`; Review addendum 3 binds this file: a partial
|
|
7
|
+
* item is merged into the stored row and never replaces it.
|
|
8
|
+
*/
|
|
9
|
+
/** A thread with a reply inside this many days is re-read by every run. */
|
|
10
|
+
export declare const HOT_THREAD_DAYS = 30;
|
|
11
|
+
/** Each re-read costs a vendor request, so a run reads at most this many; newest activity first. */
|
|
12
|
+
export declare const HOT_THREAD_LIMIT = 100;
|
|
13
|
+
/** The channel id and thread-root ts out of the URL connector-core writes for a thread. */
|
|
14
|
+
export declare function parseSlackPermalink(url: string): {
|
|
15
|
+
channel: string;
|
|
16
|
+
ts: string;
|
|
17
|
+
} | undefined;
|
|
18
|
+
export interface HotSelection {
|
|
19
|
+
hot: Array<{
|
|
20
|
+
channel: string;
|
|
21
|
+
ts: string;
|
|
22
|
+
}>;
|
|
23
|
+
/** Threads held with no reply inside the window. The report names this limit once. */
|
|
24
|
+
quiet: number;
|
|
25
|
+
/** Threads that were hot but did not fit under the per-run limit. */
|
|
26
|
+
capped: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function selectHotThreads(rows: ReadonlyArray<{
|
|
29
|
+
source_url: string;
|
|
30
|
+
last_activity: string | null;
|
|
31
|
+
}>, now: Date, o?: {
|
|
32
|
+
limit?: number;
|
|
33
|
+
}): HotSelection;
|
|
34
|
+
/**
|
|
35
|
+
* The stored thread plus whatever the partial read holds that it does not. The SDK's text is the
|
|
36
|
+
* thread's messages joined by newlines with no timestamps, so "already there" can only be judged
|
|
37
|
+
* by comparing runs of lines:
|
|
38
|
+
* 1. the longest tail of the stored thread that the partial also holds contiguously: everything
|
|
39
|
+
* after that run in the partial is new;
|
|
40
|
+
* 2. else the partial wholly inside the stored thread: nothing is new;
|
|
41
|
+
* 3. else drop the partial's leading lines that repeat the stored thread's opening (the root,
|
|
42
|
+
* which Slack returns again) and append the rest.
|
|
43
|
+
* A message that repeats an earlier line word for word (an "ok") is the one thing this cannot
|
|
44
|
+
* tell from an overlap; the longest-run rule makes that need a run, not one line, to confuse it.
|
|
45
|
+
* The stored text is never altered, so a merge can only add.
|
|
46
|
+
*/
|
|
47
|
+
export declare function mergePartialThread(stored: string, partial: string): string;
|
|
48
|
+
//# sourceMappingURL=threads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/threads.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,oGAAoG;AACpG,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAGpC,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAG5F;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EACzE,GAAG,EAAE,IAAI,EACT,CAAC,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACzB,YAAY,CAed;AAcD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAY1E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5: the thread side of a sync - which stored Slack threads to ask the SDK to re-read (a reply to
|
|
3
|
+
* an old thread never shows up in a date-ordered channel listing), and how a re-read that holds
|
|
4
|
+
* only the NEW messages is folded into the stored thread.
|
|
5
|
+
*
|
|
6
|
+
* Pure. The SDK marks such an item `partial: true`; Review addendum 3 binds this file: a partial
|
|
7
|
+
* item is merged into the stored row and never replaces it.
|
|
8
|
+
*/
|
|
9
|
+
/** A thread with a reply inside this many days is re-read by every run. */
|
|
10
|
+
export const HOT_THREAD_DAYS = 30;
|
|
11
|
+
/** Each re-read costs a vendor request, so a run reads at most this many; newest activity first. */
|
|
12
|
+
export const HOT_THREAD_LIMIT = 100;
|
|
13
|
+
const DAY_MS = 86_400_000;
|
|
14
|
+
/** The channel id and thread-root ts out of the URL connector-core writes for a thread. */
|
|
15
|
+
export function parseSlackPermalink(url) {
|
|
16
|
+
const m = /^https:\/\/slack\.com\/archives\/([A-Z0-9]+)\/p(\d{10})(\d{6})$/.exec(url);
|
|
17
|
+
return m ? { channel: m[1], ts: `${m[2]}.${m[3]}` } : undefined;
|
|
18
|
+
}
|
|
19
|
+
export function selectHotThreads(rows, now, o = {}) {
|
|
20
|
+
const cutoff = now.getTime() - HOT_THREAD_DAYS * DAY_MS;
|
|
21
|
+
const hot = [];
|
|
22
|
+
let quiet = 0;
|
|
23
|
+
for (const row of rows) {
|
|
24
|
+
const thread = parseSlackPermalink(row.source_url);
|
|
25
|
+
if (thread === undefined)
|
|
26
|
+
continue;
|
|
27
|
+
const at = row.last_activity === null ? Number.NaN : Date.parse(row.last_activity);
|
|
28
|
+
// NaN (no activity recorded, or a stamp nobody can read) is quiet, not hot: a hot thread costs a request.
|
|
29
|
+
if (Number.isNaN(at) || at < cutoff)
|
|
30
|
+
quiet += 1;
|
|
31
|
+
else
|
|
32
|
+
hot.push({ ...thread, at });
|
|
33
|
+
}
|
|
34
|
+
hot.sort((a, b) => b.at - a.at);
|
|
35
|
+
const limit = o.limit ?? HOT_THREAD_LIMIT;
|
|
36
|
+
return { hot: hot.slice(0, limit).map(({ channel, ts }) => ({ channel, ts })), quiet, capped: Math.max(0, hot.length - limit) };
|
|
37
|
+
}
|
|
38
|
+
const HEADER = /^\[#[^\]\n]*\] Thread:$/;
|
|
39
|
+
function bodyLines(text) {
|
|
40
|
+
const all = text.split('\n');
|
|
41
|
+
return HEADER.test(all[0] ?? '') ? { header: all[0], lines: all.slice(1) } : { header: undefined, lines: all };
|
|
42
|
+
}
|
|
43
|
+
function sameRun(a, aAt, b, bAt, n) {
|
|
44
|
+
for (let i = 0; i < n; i++)
|
|
45
|
+
if (a[aAt + i] !== b[bAt + i])
|
|
46
|
+
return false;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The stored thread plus whatever the partial read holds that it does not. The SDK's text is the
|
|
51
|
+
* thread's messages joined by newlines with no timestamps, so "already there" can only be judged
|
|
52
|
+
* by comparing runs of lines:
|
|
53
|
+
* 1. the longest tail of the stored thread that the partial also holds contiguously: everything
|
|
54
|
+
* after that run in the partial is new;
|
|
55
|
+
* 2. else the partial wholly inside the stored thread: nothing is new;
|
|
56
|
+
* 3. else drop the partial's leading lines that repeat the stored thread's opening (the root,
|
|
57
|
+
* which Slack returns again) and append the rest.
|
|
58
|
+
* A message that repeats an earlier line word for word (an "ok") is the one thing this cannot
|
|
59
|
+
* tell from an overlap; the longest-run rule makes that need a run, not one line, to confuse it.
|
|
60
|
+
* The stored text is never altered, so a merge can only add.
|
|
61
|
+
*/
|
|
62
|
+
export function mergePartialThread(stored, partial) {
|
|
63
|
+
const s = bodyLines(stored).lines;
|
|
64
|
+
const p = bodyLines(partial).lines;
|
|
65
|
+
for (let k = Math.min(s.length, p.length); k >= 1; k--) {
|
|
66
|
+
for (let j = 0; j + k <= p.length; j++) {
|
|
67
|
+
if (sameRun(s, s.length - k, p, j, k))
|
|
68
|
+
return append(stored, p.slice(j + k));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (let at = 0; at + p.length <= s.length; at++)
|
|
72
|
+
if (p.length > 0 && sameRun(s, at, p, 0, p.length))
|
|
73
|
+
return stored;
|
|
74
|
+
let head = 0;
|
|
75
|
+
while (head < p.length && head < s.length && p[head] === s[head])
|
|
76
|
+
head++;
|
|
77
|
+
return append(stored, p.slice(head));
|
|
78
|
+
}
|
|
79
|
+
function append(stored, added) {
|
|
80
|
+
return added.length === 0 ? stored : `${stored}\n${added.join('\n')}`;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../../src/lib/sync/threads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/** Each run reads from a day before the watermark, so an item edited between two runs while the
|
|
2
|
+
* vendor was behind on its own indexing is not missed. */
|
|
3
|
+
export declare const OVERLAP_DAYS = 1;
|
|
4
|
+
/** A hole that ended this many consecutive runs the same way is called persistent. */
|
|
5
|
+
export declare const PERSISTENT_HOLE_RUNS = 5;
|
|
6
|
+
/** The slice of a `source_sync` row the next-window decision reads. */
|
|
7
|
+
export interface WindowState {
|
|
8
|
+
/** Lower bound the user asked for. `null` on an EXISTING row means "all" (L3's record of `since: all`). */
|
|
9
|
+
window_since: string | null;
|
|
10
|
+
high_water: string | null;
|
|
11
|
+
pending_until: string | null;
|
|
12
|
+
/** Consecutive runs that ended on the same hole. While it is above zero the re-read is bounded (see nextWindow). */
|
|
13
|
+
hole_streak?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The window a NEW scope row starts with: the one the person asked for on this source, which is the `yours` row's (L3 records
|
|
17
|
+
* `since: all` as NULL there, and "all" stays all). A source with no `yours` row yet starts at the default window.
|
|
18
|
+
* The one writer: the sync's first run on a scope and a scope change from `align connect` or `align_scope` both call it.
|
|
19
|
+
*/
|
|
20
|
+
export declare function inheritedWindowSince(rows: ReadonlyArray<{
|
|
21
|
+
scope_key: string;
|
|
22
|
+
window_since: string | null;
|
|
23
|
+
}>, now: Date): string | null;
|
|
24
|
+
export declare function minusDays(iso: string, days: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* What the next run asks the vendor for.
|
|
27
|
+
* - No row: the default window back from now (the first sync of a source).
|
|
28
|
+
* - A high_water: one overlap day before it. Otherwise the row's own window_since, untouched.
|
|
29
|
+
* - A pending_until: also an `until` there, so a run that a ceiling cut finishes the OLDER part.
|
|
30
|
+
* An unparseable stored stamp reads as absent, which can only widen the read.
|
|
31
|
+
*/
|
|
32
|
+
export declare function nextWindow(s: WindowState | undefined, now: Date): {
|
|
33
|
+
since?: string;
|
|
34
|
+
until?: string;
|
|
35
|
+
};
|
|
36
|
+
export interface RunFinish {
|
|
37
|
+
complete: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Incomplete BECAUSE the listing was cut in date order (a vendor ceiling, an item ceiling or a
|
|
40
|
+
* time budget on a newest-first listing): everything newer than `oldestReached` was read, so the
|
|
41
|
+
* next run can finish the older part with `until`. Any other incompleteness is a HOLE (a channel
|
|
42
|
+
* that would not open, a refused repo, a thread read that hit its page cap): no date line
|
|
43
|
+
* separates read from unread, so no `until` is set and the next run re-reads from the watermark.
|
|
44
|
+
*/
|
|
45
|
+
cut?: boolean;
|
|
46
|
+
/** This hole has now come back often enough (see PERSISTENT_HOLE_RUNS) that the watermark stops waiting for it. */
|
|
47
|
+
persistent?: boolean;
|
|
48
|
+
highWater?: string;
|
|
49
|
+
oldestReached?: string;
|
|
50
|
+
/** The newest `updated_at` stored for this source across the whole cycle, for the final run of
|
|
51
|
+
* a pending cycle: its own highWater is clamped to `until` and would pull the mark back. */
|
|
52
|
+
cycleNewest?: string;
|
|
53
|
+
/** When given, a stamp more than a day AFTER it is ignored: a watermark in the future would
|
|
54
|
+
* hide every later change from every later run. */
|
|
55
|
+
now?: Date;
|
|
56
|
+
}
|
|
57
|
+
export declare function later(a: string | null | undefined, b: string | null | undefined): string | null;
|
|
58
|
+
export declare function plausible(iso: string | undefined, now: Date | undefined): string | undefined;
|
|
59
|
+
export declare function finishRun(prev: Pick<WindowState, 'high_water' | 'pending_until'>, r: RunFinish): {
|
|
60
|
+
high_water: string | null;
|
|
61
|
+
pending_until: string | null;
|
|
62
|
+
status: 'ok' | 'partial';
|
|
63
|
+
};
|
|
64
|
+
/** Oldest first. A kill after batch N then leaves every older item committed, so a watermark equal
|
|
65
|
+
* to the newest committed stamp never sits above an unread one. Items with no stamp lead. */
|
|
66
|
+
export declare function ascendingByUpdated<T extends {
|
|
67
|
+
updated_at?: string;
|
|
68
|
+
}>(items: readonly T[]): T[];
|
|
69
|
+
export declare function newestUpdated(items: ReadonlyArray<{
|
|
70
|
+
updated_at?: string;
|
|
71
|
+
}>, now?: Date): string | undefined;
|
|
72
|
+
//# sourceMappingURL=window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/lib/sync/window.ts"],"names":[],"mappings":"AAWA;2DAC2D;AAC3D,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAGtC,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,2GAA2G;IAC3G,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oHAAoH;IACpH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAGtI;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYpG;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mHAAmH;IACnH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;iGAC6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;wDACoD;IACpD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAM/F;AAUD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI5F;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,eAAe,CAAC,EACvD,CAAC,EAAE,SAAS,GACX;IAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,CAWvF;AAED;8FAC8F;AAC9F,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAK9F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAI3G"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L5: the pure decisions of an incremental sync - which window to read next and where the
|
|
3
|
+
* watermark stands after a run. No database, no clock of its own, no network.
|
|
4
|
+
*
|
|
5
|
+
* The watermark is the vendor's own `updated_at` (Decision 4), taken from the SDK's report, and
|
|
6
|
+
* it moves only on a COMPLETE read that carried one. Anything else leaves it where it was: a
|
|
7
|
+
* watermark that moved past data nobody read loses that data for good, while one that stays put
|
|
8
|
+
* costs a re-read the unchanged-skip makes cheap.
|
|
9
|
+
*/
|
|
10
|
+
import { SYNC_WINDOW_DEFAULT_DAYS } from '../import-defaults.js';
|
|
11
|
+
/** Each run reads from a day before the watermark, so an item edited between two runs while the
|
|
12
|
+
* vendor was behind on its own indexing is not missed. */
|
|
13
|
+
export const OVERLAP_DAYS = 1;
|
|
14
|
+
/** A hole that ended this many consecutive runs the same way is called persistent. */
|
|
15
|
+
export const PERSISTENT_HOLE_RUNS = 5;
|
|
16
|
+
const DAY_MS = 86_400_000;
|
|
17
|
+
function parse(iso) {
|
|
18
|
+
if (iso === null || iso === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
const ms = Date.parse(iso);
|
|
21
|
+
// NaN compares false with everything, in both directions (verification.md): refuse it here.
|
|
22
|
+
return Number.isNaN(ms) ? undefined : ms;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The window a NEW scope row starts with: the one the person asked for on this source, which is the `yours` row's (L3 records
|
|
26
|
+
* `since: all` as NULL there, and "all" stays all). A source with no `yours` row yet starts at the default window.
|
|
27
|
+
* The one writer: the sync's first run on a scope and a scope change from `align connect` or `align_scope` both call it.
|
|
28
|
+
*/
|
|
29
|
+
export function inheritedWindowSince(rows, now) {
|
|
30
|
+
const yours = rows.find((r) => r.scope_key === 'yours');
|
|
31
|
+
return yours ? yours.window_since : nextWindow(undefined, now).since;
|
|
32
|
+
}
|
|
33
|
+
export function minusDays(iso, days) {
|
|
34
|
+
const ms = parse(iso);
|
|
35
|
+
if (ms === undefined)
|
|
36
|
+
throw new Error(`Cannot read "${iso.slice(0, 40)}" as a date.`);
|
|
37
|
+
return new Date(ms - days * DAY_MS).toISOString();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* What the next run asks the vendor for.
|
|
41
|
+
* - No row: the default window back from now (the first sync of a source).
|
|
42
|
+
* - A high_water: one overlap day before it. Otherwise the row's own window_since, untouched.
|
|
43
|
+
* - A pending_until: also an `until` there, so a run that a ceiling cut finishes the OLDER part.
|
|
44
|
+
* An unparseable stored stamp reads as absent, which can only widen the read.
|
|
45
|
+
*/
|
|
46
|
+
export function nextWindow(s, now) {
|
|
47
|
+
if (s === undefined)
|
|
48
|
+
return { since: new Date(now.getTime() - SYNC_WINDOW_DEFAULT_DAYS * DAY_MS).toISOString() };
|
|
49
|
+
// A stored watermark from the future (written by an older build, or by a clock that was wrong) is
|
|
50
|
+
// repaired by ignoring it: the read widens to the window, and the run's own result replaces it.
|
|
51
|
+
const hw = plausible(s.high_water ?? undefined, now) === undefined ? undefined : s.high_water;
|
|
52
|
+
const floor = hw !== undefined ? minusDays(hw, OVERLAP_DAYS) : parse(s.window_since) === undefined ? undefined : s.window_since;
|
|
53
|
+
const until = parse(s.pending_until) === undefined ? undefined : s.pending_until;
|
|
54
|
+
// A hole that keeps coming back keeps the watermark where it was, so the re-read would grow every day, and a source that
|
|
55
|
+
// reads more each time is more likely to hit its budget again. Bound it to the default window while a hole is open.
|
|
56
|
+
const bound = (s.hole_streak ?? 0) > 0 ? new Date(now.getTime() - SYNC_WINDOW_DEFAULT_DAYS * DAY_MS).toISOString() : undefined;
|
|
57
|
+
const since = bound !== undefined && (floor === undefined || Date.parse(floor) < Date.parse(bound)) ? bound : floor;
|
|
58
|
+
return { ...(since !== undefined ? { since } : {}), ...(until !== undefined ? { until } : {}) };
|
|
59
|
+
}
|
|
60
|
+
export function later(a, b) {
|
|
61
|
+
const pa = parse(a);
|
|
62
|
+
const pb = parse(b);
|
|
63
|
+
if (pa === undefined)
|
|
64
|
+
return pb === undefined ? null : b;
|
|
65
|
+
if (pb === undefined)
|
|
66
|
+
return a;
|
|
67
|
+
return pb > pa ? b : a;
|
|
68
|
+
}
|
|
69
|
+
function earlier(a, b) {
|
|
70
|
+
const pa = parse(a);
|
|
71
|
+
const pb = parse(b);
|
|
72
|
+
if (pa === undefined)
|
|
73
|
+
return pb === undefined ? null : b;
|
|
74
|
+
if (pb === undefined)
|
|
75
|
+
return a;
|
|
76
|
+
return pb < pa ? b : a;
|
|
77
|
+
}
|
|
78
|
+
export function plausible(iso, now) {
|
|
79
|
+
const t = parse(iso);
|
|
80
|
+
if (t === undefined)
|
|
81
|
+
return undefined;
|
|
82
|
+
return now !== undefined && t > now.getTime() + DAY_MS ? undefined : iso;
|
|
83
|
+
}
|
|
84
|
+
export function finishRun(prev, r) {
|
|
85
|
+
const prevHigh = plausible(prev.high_water ?? undefined, r.now) === undefined ? null : prev.high_water;
|
|
86
|
+
if (r.complete) {
|
|
87
|
+
return { high_water: later(later(prevHigh, plausible(r.highWater, r.now)), plausible(r.cycleNewest, r.now)), pending_until: null, status: 'ok' };
|
|
88
|
+
}
|
|
89
|
+
if (r.persistent === true) {
|
|
90
|
+
// The other streams are read and committed; only the hole is not. Say so in the status, and move on.
|
|
91
|
+
return { high_water: later(later(prevHigh, plausible(r.highWater, r.now)), plausible(r.cycleNewest, r.now)), pending_until: null, status: 'partial' };
|
|
92
|
+
}
|
|
93
|
+
if (r.cut === true)
|
|
94
|
+
return { high_water: prevHigh, pending_until: earlier(prev.pending_until, r.oldestReached), status: 'partial' };
|
|
95
|
+
return { high_water: prevHigh, pending_until: null, status: 'partial' };
|
|
96
|
+
}
|
|
97
|
+
/** Oldest first. A kill after batch N then leaves every older item committed, so a watermark equal
|
|
98
|
+
* to the newest committed stamp never sits above an unread one. Items with no stamp lead. */
|
|
99
|
+
export function ascendingByUpdated(items) {
|
|
100
|
+
const stamp = (i) => parse(i.updated_at) ?? Number.NEGATIVE_INFINITY;
|
|
101
|
+
return items.map((item, index) => ({ item, index }))
|
|
102
|
+
.sort((a, b) => (stamp(a.item) - stamp(b.item) || a.index - b.index) || 0)
|
|
103
|
+
.map((e) => e.item);
|
|
104
|
+
}
|
|
105
|
+
export function newestUpdated(items, now) {
|
|
106
|
+
let best;
|
|
107
|
+
for (const i of items)
|
|
108
|
+
if (plausible(i.updated_at, now) !== undefined)
|
|
109
|
+
best = later(best, i.updated_at) ?? best;
|
|
110
|
+
return best;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../src/lib/sync/window.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE;2DAC2D;AAC3D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,sFAAsF;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,MAAM,GAAG,UAAU,CAAC;AAY1B,SAAS,KAAK,CAAC,GAA8B;IAC3C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,4FAA4F;IAC5F,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAuE,EAAE,GAAS;IACrH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,KAAM,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY;IACjD,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,EAAE,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;IACtF,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAA0B,EAAE,GAAS;IAC9D,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,wBAAwB,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IACjH,kGAAkG;IAClG,gGAAgG;IAChG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,UAAW,CAAC;IAC/F,MAAM,KAAK,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAa,CAAC;IACjI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,aAAc,CAAC;IAClF,yHAAyH;IACzH,oHAAoH;IACpH,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,wBAAwB,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/H,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpH,OAAO,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAClG,CAAC;AAwBD,MAAM,UAAU,KAAK,CAAC,CAA4B,EAAE,CAA4B;IAC9E,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;IAC1D,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAE,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAE,CAAC;AAC3B,CAAC;AAED,SAAS,OAAO,CAAC,CAA4B,EAAE,CAA4B;IACzE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC;IAC1D,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,CAAE,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAuB,EAAE,GAAqB;IACtE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,IAAuD,EACvD,CAAY;IAEZ,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACvG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnJ,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1B,qGAAqG;QACrG,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACxJ,CAAC;IACD,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpI,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC1E,CAAC;AAED;8FAC8F;AAC9F,MAAM,UAAU,kBAAkB,CAAoC,KAAmB;IACvF,MAAM,KAAK,GAAG,CAAC,CAAI,EAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAChF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACzE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA6C,EAAE,GAAU;IACrF,IAAI,IAAwB,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,SAAS;YAAE,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAChH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one upgrade line the CLI prints, only at the share moment (a team action tried with no team
|
|
3
|
+
* login). One place for the booking link: the CLI links to a redirect Align owns, so routing the
|
|
4
|
+
* call to someone else later is a site change and needs no CLI release (plan 2026-10-09, Open
|
|
5
|
+
* Question 1). Flip TEAM_SIGNUP_OPEN when prod team signup opens.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BOOK_CALL_URL = "https://align.tech/demo?ref=cli";
|
|
8
|
+
export declare const TEAM_SIGNUP_URL = "https://app.align.tech/signup";
|
|
9
|
+
export declare const TEAM_SIGNUP_OPEN = false;
|
|
10
|
+
export declare function teamCtaLine(open?: boolean): string;
|
|
11
|
+
//# sourceMappingURL=team-cta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-cta.d.ts","sourceRoot":"","sources":["../../src/lib/team-cta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa,oCAAoC,CAAC;AAC/D,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAC/D,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,wBAAgB,WAAW,CAAC,IAAI,GAAE,OAA0B,GAAG,MAAM,CAIpE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one upgrade line the CLI prints, only at the share moment (a team action tried with no team
|
|
3
|
+
* login). One place for the booking link: the CLI links to a redirect Align owns, so routing the
|
|
4
|
+
* call to someone else later is a site change and needs no CLI release (plan 2026-10-09, Open
|
|
5
|
+
* Question 1). Flip TEAM_SIGNUP_OPEN when prod team signup opens.
|
|
6
|
+
*/
|
|
7
|
+
// Confirmed by Tom 2026-10-10: align.tech/demo?ref=cli redirects to the 30-minute booking page.
|
|
8
|
+
export const BOOK_CALL_URL = 'https://align.tech/demo?ref=cli';
|
|
9
|
+
export const TEAM_SIGNUP_URL = 'https://app.align.tech/signup';
|
|
10
|
+
export const TEAM_SIGNUP_OPEN = false;
|
|
11
|
+
export function teamCtaLine(open = TEAM_SIGNUP_OPEN) {
|
|
12
|
+
return open
|
|
13
|
+
? `Start a team graph: ${TEAM_SIGNUP_URL}`
|
|
14
|
+
: `Bring this to your team. Book a 30-minute call: ${BOOK_CALL_URL}`;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=team-cta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-cta.js","sourceRoot":"","sources":["../../src/lib/team-cta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,gGAAgG;AAChG,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAC/D,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,MAAM,UAAU,WAAW,CAAC,OAAgB,gBAAgB;IAC1D,OAAO,IAAI;QACT,CAAC,CAAC,uBAAuB,eAAe,EAAE;QAC1C,CAAC,CAAC,mDAAmD,aAAa,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-ci.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-ci.ts"],"names":[],"mappings":"AAiCA,wBAAgB,IAAI,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,OAAO,CAInF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import vendors from 'ci-info/vendors.json' with { type: 'json' };
|
|
2
|
+
/** ci-info's generic flags, in its own order: any one of them set means CI. */
|
|
3
|
+
const GENERIC = ['BUILD_ID', 'BUILD_NUMBER', 'CI', 'CI_APP_ID', 'CI_BUILD_ID', 'CI_BUILD_NUMBER', 'CI_NAME', 'CONTINUOUS_INTEGRATION', 'RUN_ID'];
|
|
4
|
+
function matches(rule, env) {
|
|
5
|
+
if (typeof rule === 'string')
|
|
6
|
+
return Boolean(env[rule]);
|
|
7
|
+
if ('env' in rule && typeof rule.env === 'string' && 'includes' in rule) {
|
|
8
|
+
return Boolean(env[rule.env]?.includes(String(rule.includes)));
|
|
9
|
+
}
|
|
10
|
+
if ('any' in rule && Array.isArray(rule.any))
|
|
11
|
+
return rule.any.some((k) => Boolean(env[k]));
|
|
12
|
+
return Object.entries(rule).every(([k, v]) => env[k] === v);
|
|
13
|
+
}
|
|
14
|
+
export function inCi(env = process.env) {
|
|
15
|
+
if (env['CI'] === 'false')
|
|
16
|
+
return false;
|
|
17
|
+
if (GENERIC.some((k) => Boolean(env[k])))
|
|
18
|
+
return true;
|
|
19
|
+
return vendors.some((v) => (Array.isArray(v.env) ? v.env : [v.env]).every((r) => matches(r, env)));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=telemetry-ci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-ci.js","sourceRoot":"","sources":["../../src/lib/telemetry-ci.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAqBjE,+EAA+E;AAC/E,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,wBAAwB,EAAE,QAAQ,CAAC,CAAC;AAEjJ,SAAS,OAAO,CAAC,IAAa,EAAE,GAAuC;IACrE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACxE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,OAAO,MAAM,CAAC,OAAO,CAAC,IAA8B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAA0C,OAAO,CAAC,GAAG;IACxE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAQ,OAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACnH,CAAC"}
|
|
@@ -1,32 +1,53 @@
|
|
|
1
|
+
import type { TelemetryConsent } from './config.js';
|
|
1
2
|
/**
|
|
2
3
|
* Narrow interface rather than the whole config store, so this module (and its tests) does not
|
|
3
4
|
* carry every unrelated accessor `createConfigStore()` exposes.
|
|
4
5
|
*/
|
|
5
|
-
export interface
|
|
6
|
-
getTelemetryConsent():
|
|
7
|
-
|
|
6
|
+
export interface TelemetryNoticeStore {
|
|
7
|
+
getTelemetryConsent(): TelemetryConsent | undefined;
|
|
8
|
+
getTelemetryNoticeShownAt(): string | undefined;
|
|
9
|
+
markTelemetryNoticeShown(): void;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
*
|
|
12
|
+
* C6: the disclosure. Local-mode telemetry is opt-out, and this notice is what makes it so: it
|
|
13
|
+
* prints once, to stderr, before anything is sent, and nothing that depends on it sends until
|
|
14
|
+
* it has printed (usage-telemetry.ts's localTierAllows). The founder-approved wording - change
|
|
15
|
+
* it only with the privacy page (align.tech/privacy#cli) and docs/telemetry.md in the same PR.
|
|
16
|
+
*/
|
|
17
|
+
export declare const TELEMETRY_NOTICE: string;
|
|
18
|
+
export interface NoticeContext {
|
|
19
|
+
/** The invocation's command path ("ask", "telemetry off", "align" for the bare command). */
|
|
20
|
+
command: string;
|
|
21
|
+
/** Running as an agent hook (`check --hook` / `--advisory`): nobody is reading stderr. */
|
|
22
|
+
hook: boolean;
|
|
23
|
+
/** A cloud login token is in hand: cloud mode has its own, authenticated events. */
|
|
24
|
+
cloudSignedIn: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Shows the notice and marks it shown, or does neither. Skipped, and NOT marked, wherever
|
|
28
|
+
* nobody is reading it or it would be moot: no terminal on stdin and stderr, CI, an agent hook, `align mcp` (an agent's stdio
|
|
29
|
+
* server), a run inside a launched agent (ALIGN_WRAPPED), `align telemetry ...` (the off switch
|
|
30
|
+
* must not be raced by what it switches off), an env switch that already turns everything off,
|
|
31
|
+
* and any stored decision (granted, declined or off - that user was already asked or chose).
|
|
32
|
+
* Because it is not marked, nothing that waits on it sends from those runs either.
|
|
27
33
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
34
|
+
* Returns whether it printed. Never throws: a broken config store costs the notice, which means
|
|
35
|
+
* nothing sends - the safe direction.
|
|
36
|
+
*/
|
|
37
|
+
export declare function maybeShowTelemetryNotice(config: TelemetryNoticeStore, ctx: NoticeContext, write?: (text: string) => void): boolean;
|
|
38
|
+
/** The slice of the config store a sticky env opt-out needs. */
|
|
39
|
+
export interface EnvOptOutStore {
|
|
40
|
+
getTelemetryConsent(): TelemetryConsent | undefined;
|
|
41
|
+
setTelemetryOffByEnv(via: string): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* An explicit env opt-out (DO_NOT_TRACK, ALIGN_TELEMETRY) is made STICKY: stored as 'off' with
|
|
45
|
+
* its reason, so a process that does not inherit the variable still honours it. An MCP server
|
|
46
|
+
* started by an agent gets a trimmed environment, and the detached sync child inherits from that
|
|
47
|
+
* server, so the variable alone never reached them. Bare CI is not a user choice and is never
|
|
48
|
+
* stored (it is checked per process). A stored 'off' or 'declined' is left as it is. Called
|
|
49
|
+
* before anything in this process can send, and not subject to the terminal or hook rules above:
|
|
50
|
+
* a hook run that sees the variable stores it too. Never throws.
|
|
30
51
|
*/
|
|
31
|
-
export declare function
|
|
52
|
+
export declare function storeEnvOptOut(config: EnvOptOutStore): boolean;
|
|
32
53
|
//# sourceMappingURL=telemetry-consent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-consent.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry-consent.d.ts","sourceRoot":"","sources":["../../src/lib/telemetry-consent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACpD,yBAAyB,IAAI,MAAM,GAAG,SAAS,CAAC;IAChD,wBAAwB,IAAI,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAI4D,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,IAAI,EAAE,OAAO,CAAC;IACd,oFAAoF;IACpF,aAAa,EAAE,OAAO,CAAC;CACxB;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,aAAa,EAClB,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAExB,GACA,OAAO,CAqBT;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACpD,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAW9D"}
|