@aligndottech/cli 0.32.2 → 0.33.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.
Files changed (129) hide show
  1. package/dist/commands/decisions/index.d.ts.map +1 -1
  2. package/dist/commands/decisions/index.js +9 -2
  3. package/dist/commands/decisions/index.js.map +1 -1
  4. package/dist/commands/default-action.d.ts.map +1 -1
  5. package/dist/commands/default-action.js +6 -3
  6. package/dist/commands/default-action.js.map +1 -1
  7. package/dist/commands/import/confluence.d.ts.map +1 -1
  8. package/dist/commands/import/confluence.js +7 -2
  9. package/dist/commands/import/confluence.js.map +1 -1
  10. package/dist/commands/import/docs.d.ts.map +1 -1
  11. package/dist/commands/import/docs.js +7 -2
  12. package/dist/commands/import/docs.js.map +1 -1
  13. package/dist/commands/import/git.d.ts.map +1 -1
  14. package/dist/commands/import/git.js +15 -2
  15. package/dist/commands/import/git.js.map +1 -1
  16. package/dist/commands/import/github.d.ts.map +1 -1
  17. package/dist/commands/import/github.js +7 -2
  18. package/dist/commands/import/github.js.map +1 -1
  19. package/dist/commands/import/gitlab.d.ts.map +1 -1
  20. package/dist/commands/import/gitlab.js +7 -2
  21. package/dist/commands/import/gitlab.js.map +1 -1
  22. package/dist/commands/import/jira.d.ts.map +1 -1
  23. package/dist/commands/import/jira.js +7 -2
  24. package/dist/commands/import/jira.js.map +1 -1
  25. package/dist/commands/import/linear.d.ts.map +1 -1
  26. package/dist/commands/import/linear.js +7 -2
  27. package/dist/commands/import/linear.js.map +1 -1
  28. package/dist/commands/import/notion.d.ts.map +1 -1
  29. package/dist/commands/import/notion.js +7 -2
  30. package/dist/commands/import/notion.js.map +1 -1
  31. package/dist/commands/import/slack.d.ts.map +1 -1
  32. package/dist/commands/import/slack.js +8 -3
  33. package/dist/commands/import/slack.js.map +1 -1
  34. package/dist/commands/import/teams.d.ts.map +1 -1
  35. package/dist/commands/import/teams.js +7 -2
  36. package/dist/commands/import/teams.js.map +1 -1
  37. package/dist/commands/import/zoom.d.ts.map +1 -1
  38. package/dist/commands/import/zoom.js +7 -2
  39. package/dist/commands/import/zoom.js.map +1 -1
  40. package/dist/commands/setup.d.ts.map +1 -1
  41. package/dist/commands/setup.js +76 -33
  42. package/dist/commands/setup.js.map +1 -1
  43. package/dist/commands/why.d.ts.map +1 -1
  44. package/dist/commands/why.js +100 -16
  45. package/dist/commands/why.js.map +1 -1
  46. package/dist/lib/capture-report.d.ts +45 -0
  47. package/dist/lib/capture-report.d.ts.map +1 -0
  48. package/dist/lib/capture-report.js +50 -0
  49. package/dist/lib/capture-report.js.map +1 -0
  50. package/dist/lib/capture-sources.d.ts +57 -0
  51. package/dist/lib/capture-sources.d.ts.map +1 -0
  52. package/dist/lib/capture-sources.js +24 -0
  53. package/dist/lib/capture-sources.js.map +1 -0
  54. package/dist/lib/commit-shape.d.ts +18 -0
  55. package/dist/lib/commit-shape.d.ts.map +1 -0
  56. package/dist/lib/commit-shape.js +23 -0
  57. package/dist/lib/commit-shape.js.map +1 -0
  58. package/dist/lib/fetchers/capture.d.ts +60 -0
  59. package/dist/lib/fetchers/capture.d.ts.map +1 -0
  60. package/dist/lib/fetchers/capture.js +27 -0
  61. package/dist/lib/fetchers/capture.js.map +1 -0
  62. package/dist/lib/fetchers/confluence.d.ts +2 -2
  63. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  64. package/dist/lib/fetchers/confluence.js +2 -1
  65. package/dist/lib/fetchers/confluence.js.map +1 -1
  66. package/dist/lib/fetchers/docs.d.ts +12 -2
  67. package/dist/lib/fetchers/docs.d.ts.map +1 -1
  68. package/dist/lib/fetchers/docs.js +46 -6
  69. package/dist/lib/fetchers/docs.js.map +1 -1
  70. package/dist/lib/fetchers/git.d.ts +28 -2
  71. package/dist/lib/fetchers/git.d.ts.map +1 -1
  72. package/dist/lib/fetchers/git.js +50 -2
  73. package/dist/lib/fetchers/git.js.map +1 -1
  74. package/dist/lib/fetchers/github.d.ts +2 -2
  75. package/dist/lib/fetchers/github.d.ts.map +1 -1
  76. package/dist/lib/fetchers/github.js +2 -1
  77. package/dist/lib/fetchers/github.js.map +1 -1
  78. package/dist/lib/fetchers/gitlab.d.ts +2 -2
  79. package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
  80. package/dist/lib/fetchers/gitlab.js +2 -1
  81. package/dist/lib/fetchers/gitlab.js.map +1 -1
  82. package/dist/lib/fetchers/jira.d.ts +2 -2
  83. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  84. package/dist/lib/fetchers/jira.js +2 -1
  85. package/dist/lib/fetchers/jira.js.map +1 -1
  86. package/dist/lib/fetchers/linear.d.ts +2 -2
  87. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  88. package/dist/lib/fetchers/linear.js +2 -1
  89. package/dist/lib/fetchers/linear.js.map +1 -1
  90. package/dist/lib/fetchers/notion.d.ts +2 -2
  91. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  92. package/dist/lib/fetchers/notion.js +2 -1
  93. package/dist/lib/fetchers/notion.js.map +1 -1
  94. package/dist/lib/fetchers/slack.d.ts +2 -2
  95. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  96. package/dist/lib/fetchers/slack.js +2 -1
  97. package/dist/lib/fetchers/slack.js.map +1 -1
  98. package/dist/lib/fetchers/teams.d.ts +2 -2
  99. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  100. package/dist/lib/fetchers/teams.js +2 -1
  101. package/dist/lib/fetchers/teams.js.map +1 -1
  102. package/dist/lib/fetchers/zoom.d.ts +2 -2
  103. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  104. package/dist/lib/fetchers/zoom.js +2 -1
  105. package/dist/lib/fetchers/zoom.js.map +1 -1
  106. package/dist/lib/gateway-client.d.ts +8 -0
  107. package/dist/lib/gateway-client.d.ts.map +1 -1
  108. package/dist/lib/gateway-client.js +11 -1
  109. package/dist/lib/gateway-client.js.map +1 -1
  110. package/dist/lib/git.d.ts.map +1 -1
  111. package/dist/lib/git.js +9 -2
  112. package/dist/lib/git.js.map +1 -1
  113. package/dist/lib/import-defaults.d.ts +29 -0
  114. package/dist/lib/import-defaults.d.ts.map +1 -0
  115. package/dist/lib/import-defaults.js +29 -0
  116. package/dist/lib/import-defaults.js.map +1 -0
  117. package/dist/lib/local-db.d.ts +35 -1
  118. package/dist/lib/local-db.d.ts.map +1 -1
  119. package/dist/lib/local-db.js +123 -7
  120. package/dist/lib/local-db.js.map +1 -1
  121. package/dist/lib/local-gateway-client.d.ts +9 -5
  122. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  123. package/dist/lib/local-gateway-client.js +16 -2
  124. package/dist/lib/local-gateway-client.js.map +1 -1
  125. package/dist/lib/local-llm.d.ts +17 -0
  126. package/dist/lib/local-llm.d.ts.map +1 -1
  127. package/dist/lib/local-llm.js +22 -1
  128. package/dist/lib/local-llm.js.map +1 -1
  129. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/commands/import/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAuDnE"}
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/commands/import/slack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyBzC,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAyDnE"}
@@ -7,16 +7,19 @@ import { resolveImportEnv } from '../../lib/resolve-env.js';
7
7
  import { resolveAppUrl } from '../../lib/env-resolver.js';
8
8
  import { fetchSlackItems } from '../../lib/fetchers/slack.js';
9
9
  import { runPersonalImport } from '../../lib/personal-import.js';
10
+ import { renderCaptureReport, toCaptureSource } from '../../lib/capture-report.js';
11
+ import { CAPTURE_SOURCES } from '../../lib/capture-sources.js';
10
12
  import { personalCredsForImport } from '../../lib/personal-oauth.js';
11
13
  import { commandIntro } from '../../lib/brand.js';
14
+ import { IMPORT_LIMITS, SLACK_DAYS_BACK } from '../../lib/import-defaults.js';
12
15
  export function registerImportSlackCommand(importCmd) {
13
16
  importCmd
14
17
  .command('slack')
15
18
  .description('Import decision threads from Slack (xoxp- user token) [experimental]')
16
19
  .option('--token <token>', 'Slack user OAuth token (xoxp-...)')
17
20
  .option('--personal', 'Connect your own Slack via browser OAuth (Align personal app) instead of a token')
18
- .option('--limit <n>', 'Max threads to import', '50')
19
- .option('--days-back <n>', 'How many days back to scan', '90')
21
+ .option('--limit <n>', 'Max threads to import', String(IMPORT_LIMITS.slack))
22
+ .option('--days-back <n>', 'How many days back to scan', String(SLACK_DAYS_BACK))
20
23
  .option('--approve', 'Skip confirmation prompt')
21
24
  .option('--env <env>', 'Environment')
22
25
  .action(async (_opts, cmd) => {
@@ -47,13 +50,15 @@ export function registerImportSlackCommand(importCmd) {
47
50
  const spinner = p.spinner();
48
51
  spinner.start('Fetching decision threads from Slack...');
49
52
  try {
50
- const items = await fetchSlackItems({
53
+ const fetched = await fetchSlackItems({
51
54
  token,
52
55
  limit: parseInt(opts.limit, 10),
53
56
  daysBack: parseInt(opts.daysBack, 10),
54
57
  });
58
+ const { items } = fetched;
55
59
  spinner.stop(`Found ${items.length} threads`);
56
60
  await runPersonalImport(items, client, { label: 'Slack', approve: opts.approve, appUrl: resolveAppUrl(env), funnel: { env, source: 'slack' } });
61
+ console.log(`${renderCaptureReport([toCaptureSource(CAPTURE_SOURCES.slack, fetched)])}\n`);
57
62
  }
58
63
  catch (err) {
59
64
  spinner.stop('');
@@ -1 +1 @@
1
- {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/commands/import/slack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/commands/import/slack.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/commands/import/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAoDnE"}
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../../src/commands/import/teams.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAsDnE"}
@@ -6,15 +6,18 @@ import { resolveImportEnv } from '../../lib/resolve-env.js';
6
6
  import { resolveAppUrl } from '../../lib/env-resolver.js';
7
7
  import { fetchTeamsItems } from '../../lib/fetchers/teams.js';
8
8
  import { runPersonalImport } from '../../lib/personal-import.js';
9
+ import { renderCaptureReport, toCaptureSource } from '../../lib/capture-report.js';
10
+ import { CAPTURE_SOURCES } from '../../lib/capture-sources.js';
9
11
  import { personalCredsForImport } from '../../lib/personal-oauth.js';
10
12
  import { commandIntro } from '../../lib/brand.js';
13
+ import { IMPORT_LIMITS } from '../../lib/import-defaults.js';
11
14
  export function registerImportTeamsCommand(importCmd) {
12
15
  importCmd
13
16
  .command('teams')
14
17
  .description('Import channel messages from Microsoft Teams')
15
18
  .option('--token <token>', 'Microsoft Graph API delegated access token')
16
19
  .option('--personal', 'Connect via browser OAuth (Align Teams app) instead of pasting a Graph token')
17
- .option('--limit <n>', 'Max messages to import', '50')
20
+ .option('--limit <n>', 'Max messages to import', String(IMPORT_LIMITS.teams))
18
21
  .option('--approve', 'Skip confirmation prompt')
19
22
  .option('--env <env>', 'Environment')
20
23
  .action(async (_opts, cmd) => {
@@ -44,12 +47,14 @@ export function registerImportTeamsCommand(importCmd) {
44
47
  const spinner = p.spinner();
45
48
  spinner.start('Fetching channel messages from Microsoft Teams...');
46
49
  try {
47
- const items = await fetchTeamsItems({
50
+ const fetched = await fetchTeamsItems({
48
51
  token,
49
52
  limit: parseInt(opts.limit, 10),
50
53
  });
54
+ const { items } = fetched;
51
55
  spinner.stop(`Found ${items.length} messages`);
52
56
  await runPersonalImport(items, client, { label: 'Teams', approve: opts.approve, appUrl: resolveAppUrl(env), funnel: { env, source: 'teams' } });
57
+ console.log(`${renderCaptureReport([toCaptureSource(CAPTURE_SOURCES.teams, fetched)])}\n`);
53
58
  }
54
59
  catch (err) {
55
60
  spinner.stop('');
@@ -1 +1 @@
1
- {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../../src/commands/import/teams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../../src/commands/import/teams.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/commands/import/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA8ClE"}
1
+ {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/commands/import/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAgDlE"}
@@ -6,15 +6,18 @@ import { resolveImportEnv } from '../../lib/resolve-env.js';
6
6
  import { resolveAppUrl } from '../../lib/env-resolver.js';
7
7
  import { fetchZoomItems } from '../../lib/fetchers/zoom.js';
8
8
  import { runPersonalImport } from '../../lib/personal-import.js';
9
+ import { renderCaptureReport, toCaptureSource } from '../../lib/capture-report.js';
10
+ import { CAPTURE_SOURCES } from '../../lib/capture-sources.js';
9
11
  import { personalCredsForImport } from '../../lib/personal-oauth.js';
10
12
  import { commandIntro } from '../../lib/brand.js';
13
+ import { IMPORT_LIMITS } from '../../lib/import-defaults.js';
11
14
  export function registerImportZoomCommand(importCmd) {
12
15
  importCmd
13
16
  .command('zoom')
14
17
  .description('Import cloud recording transcripts from Zoom')
15
18
  .option('--token <token>', 'Zoom OAuth access token')
16
19
  .option('--personal', 'Connect via browser OAuth (Align Zoom app) instead of pasting a token')
17
- .option('--limit <n>', 'Max recordings to import', '30')
20
+ .option('--limit <n>', 'Max recordings to import', String(IMPORT_LIMITS.zoom))
18
21
  .option('--approve', 'Skip confirmation prompt')
19
22
  .option('--env <env>', 'Environment')
20
23
  .action(async (_opts, cmd) => {
@@ -41,12 +44,14 @@ export function registerImportZoomCommand(importCmd) {
41
44
  const spinner = p.spinner();
42
45
  spinner.start('Fetching cloud recording transcripts from Zoom...');
43
46
  try {
44
- const items = await fetchZoomItems({
47
+ const fetched = await fetchZoomItems({
45
48
  token,
46
49
  limit: parseInt(opts.limit, 10),
47
50
  });
51
+ const { items } = fetched;
48
52
  spinner.stop(`Found ${items.length} recordings with transcripts`);
49
53
  await runPersonalImport(items, client, { label: 'Zoom', approve: opts.approve, appUrl: resolveAppUrl(env), funnel: { env, source: 'zoom' } });
54
+ console.log(`${renderCaptureReport([toCaptureSource(CAPTURE_SOURCES.zoom, fetched)])}\n`);
50
55
  }
51
56
  catch (err) {
52
57
  spinner.stop('');
@@ -1 +1 @@
1
- {"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/commands/import/zoom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/commands/import/zoom.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,EAAqB,KAAK,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AAsWnF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAE1E;AAqXD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS3D;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChF,OAAO,CAAC,IAAI,CAAC,CAkDf"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,EAAqB,KAAK,OAAO,EAAkB,MAAM,kBAAkB,CAAC;AA4WnF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAE1E;AA0YD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAS3D;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChF,OAAO,CAAC,IAAI,CAAC,CAkDf"}
@@ -13,6 +13,9 @@ import { isGitRepo } from '../lib/git.js';
13
13
  import { fetchDocsItems } from '../lib/fetchers/docs.js';
14
14
  import { createLocalDb } from '../lib/local-db.js';
15
15
  import { buildFoundSummary, renderFoundSummary } from '../lib/found-summary.js';
16
+ import { createCaptureCollector, toCaptureSource } from '../lib/capture-report.js';
17
+ import { CAPTURE_SOURCES } from '../lib/capture-sources.js';
18
+ import { IMPORT_LIMITS, SLACK_DAYS_BACK } from '../lib/import-defaults.js';
16
19
  import { initLocalMode } from '../lib/local-mode.js';
17
20
  import { loginInteractive } from '../lib/login-flow.js';
18
21
  import { resolveAppUrl } from '../lib/env-resolver.js';
@@ -34,17 +37,17 @@ function buildSources(gitAvailable) {
34
37
  if (gitAvailable) {
35
38
  sources.push({
36
39
  id: 'git',
37
- label: 'Git',
40
+ ...CAPTURE_SOURCES.git,
38
41
  description: 'Commit history from this repo - no token needed',
39
42
  fetch: async () => {
40
43
  const { fetchGitItems } = await import('../lib/fetchers/git.js');
41
- return fetchGitItems({ limit: 500 });
44
+ return fetchGitItems({ limit: IMPORT_LIMITS.git });
42
45
  },
43
46
  });
44
47
  }
45
48
  sources.push({
46
49
  id: 'github',
47
- label: 'GitHub',
50
+ ...CAPTURE_SOURCES.github,
48
51
  description: 'Your PRs and issues',
49
52
  tier: 'personal',
50
53
  oauthKey: 'github-personal',
@@ -62,11 +65,11 @@ function buildSources(gitAvailable) {
62
65
  '&contents=read&issues=read&pull_requests=read',
63
66
  fetch: async (t) => {
64
67
  const { fetchGitHubItems } = await import('../lib/fetchers/github.js');
65
- return fetchGitHubItems({ token: t['token'], limit: 250 });
68
+ return fetchGitHubItems({ token: t['token'], limit: IMPORT_LIMITS.github });
66
69
  },
67
70
  }, {
68
71
  id: 'jira',
69
- label: 'Jira',
72
+ ...CAPTURE_SOURCES.jira,
70
73
  description: 'Your issues',
71
74
  tier: 'site',
72
75
  // Personal/CLI tier is read-only (no write:jira-work). The team/org
@@ -82,11 +85,11 @@ function buildSources(gitAvailable) {
82
85
  ],
83
86
  fetch: async (t) => {
84
87
  const { fetchJiraItems } = await import('../lib/fetchers/jira.js');
85
- return fetchJiraItems({ token: t['token'], cloudId: t['cloudId'], email: t['email'], domain: t['domain'], limit: 250 });
88
+ return fetchJiraItems({ token: t['token'], cloudId: t['cloudId'], email: t['email'], domain: t['domain'], limit: IMPORT_LIMITS.jira });
86
89
  },
87
90
  }, {
88
91
  id: 'confluence',
89
- label: 'Confluence',
92
+ ...CAPTURE_SOURCES.confluence,
90
93
  description: 'Your pages and documentation',
91
94
  tier: 'site',
92
95
  // Read-only personal/CLI tier. See ALI-94.
@@ -101,11 +104,11 @@ function buildSources(gitAvailable) {
101
104
  ],
102
105
  fetch: async (t) => {
103
106
  const { fetchConfluenceItems } = await import('../lib/fetchers/confluence.js');
104
- return fetchConfluenceItems({ token: t['token'], cloudId: t['cloudId'], email: t['email'], domain: t['domain'], limit: 250 });
107
+ return fetchConfluenceItems({ token: t['token'], cloudId: t['cloudId'], email: t['email'], domain: t['domain'], limit: IMPORT_LIMITS.confluence });
105
108
  },
106
109
  }, {
107
110
  id: 'slack',
108
- label: 'Slack',
111
+ ...CAPTURE_SOURCES.slack,
109
112
  description: 'Decision threads from your channels - may need workspace admin [experimental]',
110
113
  tier: 'workspace',
111
114
  // Read-only personal/CLI tier (no chat:write). The team/org bot keeps
@@ -117,31 +120,31 @@ function buildSources(gitAvailable) {
117
120
  tokenUrl: 'https://api.slack.com/apps',
118
121
  fetch: async (t) => {
119
122
  const { fetchSlackItems } = await import('../lib/fetchers/slack.js');
120
- return fetchSlackItems({ token: t['token'], limit: 250, daysBack: 90 });
123
+ return fetchSlackItems({ token: t['token'], limit: IMPORT_LIMITS.slack, daysBack: SLACK_DAYS_BACK });
121
124
  },
122
125
  }, {
123
126
  id: 'teams',
124
- label: 'Microsoft Teams',
127
+ ...CAPTURE_SOURCES.teams,
125
128
  description: 'Channel messages and decisions - may need org/workspace admin consent',
126
129
  tier: 'workspace',
127
130
  oauthKey: 'teams',
128
131
  fetch: async (t) => {
129
132
  const { fetchTeamsItems } = await import('../lib/fetchers/teams.js');
130
- return fetchTeamsItems({ token: t['token'], limit: 250 });
133
+ return fetchTeamsItems({ token: t['token'], limit: IMPORT_LIMITS.teams });
131
134
  },
132
135
  }, {
133
136
  id: 'zoom',
134
- label: 'Zoom',
137
+ ...CAPTURE_SOURCES.zoom,
135
138
  description: 'Cloud recording transcripts from your meetings',
136
139
  tier: 'personal',
137
140
  oauthKey: 'zoom',
138
141
  fetch: async (t) => {
139
142
  const { fetchZoomItems } = await import('../lib/fetchers/zoom.js');
140
- return fetchZoomItems({ token: t['token'], limit: 50 });
143
+ return fetchZoomItems({ token: t['token'], limit: IMPORT_LIMITS.zoom });
141
144
  },
142
145
  }, {
143
146
  id: 'gitlab',
144
- label: 'GitLab',
147
+ ...CAPTURE_SOURCES.gitlab,
145
148
  description: 'Your merge requests',
146
149
  tier: 'personal',
147
150
  // gitlab.com → read-only browser OAuth (scope read_api, ALI-102). A
@@ -164,11 +167,11 @@ function buildSources(gitAvailable) {
164
167
  ],
165
168
  fetch: async (t) => {
166
169
  const { fetchGitLabItems } = await import('../lib/fetchers/gitlab.js');
167
- return fetchGitLabItems({ token: t['token'], domain: t['domain'] || undefined, limit: 250 });
170
+ return fetchGitLabItems({ token: t['token'], domain: t['domain'] || undefined, limit: IMPORT_LIMITS.gitlab });
168
171
  },
169
172
  }, {
170
173
  id: 'linear',
171
- label: 'Linear',
174
+ ...CAPTURE_SOURCES.linear,
172
175
  description: 'Your issues and project discussions',
173
176
  tier: 'personal',
174
177
  // Read-only personal/CLI tier via browser OAuth (scope `read`), replacing the
@@ -184,11 +187,11 @@ function buildSources(gitAvailable) {
184
187
  tokenUrl: 'https://linear.app/settings/account/security/api-keys/new',
185
188
  fetch: async (t) => {
186
189
  const { fetchLinearItems } = await import('../lib/fetchers/linear.js');
187
- return fetchLinearItems({ token: t['token'], limit: 250 });
190
+ return fetchLinearItems({ token: t['token'], limit: IMPORT_LIMITS.linear });
188
191
  },
189
192
  }, {
190
193
  id: 'notion',
191
- label: 'Notion',
194
+ ...CAPTURE_SOURCES.notion,
192
195
  description: 'Your pages and databases',
193
196
  tier: 'personal',
194
197
  // Read-only personal/CLI tier via browser OAuth (public integration),
@@ -207,7 +210,7 @@ function buildSources(gitAvailable) {
207
210
  tokenUrl: 'https://app.notion.com/developers/tokens',
208
211
  fetch: async (t) => {
209
212
  const { fetchNotionItems } = await import('../lib/fetchers/notion.js');
210
- return fetchNotionItems({ token: t['token'], limit: 250 });
213
+ return fetchNotionItems({ token: t['token'], limit: IMPORT_LIMITS.notion });
211
214
  },
212
215
  });
213
216
  return sources;
@@ -339,6 +342,7 @@ async function runLocalValuePhase(opts = {}) {
339
342
  const config = createConfigStore();
340
343
  const localEnv = config.getEnvironment('local');
341
344
  const localClient = createGatewayClient(localEnv);
345
+ const capture = createCaptureCollector();
342
346
  // ALI-794: value before questions. Git needs no credential and no consent, so it runs
343
347
  // before anything is asked - the found-decisions summary below is what "here is what I
344
348
  // found" means, and it has to exist before the agent-wiring/consent/connector steps that
@@ -351,7 +355,9 @@ async function runLocalValuePhase(opts = {}) {
351
355
  gitSpinner.start('Scanning git history...');
352
356
  try {
353
357
  const gitSource = buildSources(true).find(s => s.id === 'git');
354
- const items = await gitSource.fetch({});
358
+ const fetched = await gitSource.fetch({});
359
+ capture.add(toCaptureSource(gitSource, fetched));
360
+ const { items } = fetched;
355
361
  if (items.length) {
356
362
  gitSpinner.stop(`Found ${items.length} commits worth importing`);
357
363
  // quiet: the found-summary box right below replaces the full table + tip block
@@ -412,7 +418,9 @@ async function runLocalValuePhase(opts = {}) {
412
418
  const localDocsSpinner = p.spinner();
413
419
  localDocsSpinner.start('Reading ADRs and CLAUDE.md/AGENTS.md...');
414
420
  try {
415
- const docsItems = await fetchDocsItems({ limit: 500 });
421
+ const docs = await fetchDocsItems({ limit: IMPORT_LIMITS.docs });
422
+ capture.add(toCaptureSource(CAPTURE_SOURCES.docs, docs));
423
+ const docsItems = docs.items;
416
424
  if (docsItems.length) {
417
425
  localDocsSpinner.stop(`Found ${docsItems.length} item(s) worth importing`);
418
426
  await runPersonalImport(docsItems, localClient, {
@@ -448,7 +456,7 @@ async function runLocalValuePhase(opts = {}) {
448
456
  // is the only thing that can ever turn this on - see usage-telemetry.ts's local-embedded
449
457
  // branch, which reads this same stored decision.
450
458
  await maybeRequestTelemetryConsent(config, Boolean(interactive));
451
- return { interactive, config, localEnv, localClient, dbPath, opts };
459
+ return { interactive, config, localEnv, localClient, dbPath, opts, capture };
452
460
  }
453
461
  /**
454
462
  * The connector-picker tail, shared by every path that reaches local mode: `--local`
@@ -459,7 +467,7 @@ async function runLocalValuePhase(opts = {}) {
459
467
  * move changes only how code is reached, never what it does).
460
468
  */
461
469
  async function runLocalConnectorPhase(ctx) {
462
- const { interactive, config, localEnv, localClient, dbPath, opts } = ctx;
470
+ const { interactive, config, localEnv, localClient, dbPath, opts, capture } = ctx;
463
471
  // Connectors: local mode connects by a read-only token the user mints themselves,
464
472
  // for every connector - their personal graph, their credential. OAuth belongs to
465
473
  // the personal-cloud path, where the hosted broker holds the client secrets. (This
@@ -580,7 +588,9 @@ async function runLocalConnectorPhase(ctx) {
580
588
  const spinner = p.spinner();
581
589
  spinner.start(`Fetching from ${source.label}...`);
582
590
  try {
583
- const items = await source.fetch(tokens);
591
+ const fetched = await source.fetch(tokens);
592
+ capture.add(toCaptureSource(source, fetched));
593
+ const { items } = fetched;
584
594
  // Saved only once the fetch it unlocked has succeeded. A token that never worked is not
585
595
  // worth remembering, and storing one would turn the next run's honest "paste a token"
586
596
  // into a silent empty import. Re-saving an already-saved token is a harmless no-op, so
@@ -601,6 +611,16 @@ async function runLocalConnectorPhase(ctx) {
601
611
  spinner.stop(`Skipped ${source.label} - ${e.message}`);
602
612
  }
603
613
  }
614
+ // ALI-827: what each source fetched and what it could not reach - once, after every
615
+ // import has printed its own line, so the numbers sit together. A source whose fetch
616
+ // THREW is not in it: its spinner line above already named the error, and a row of
617
+ // zeros beside it would read as "fetched nothing" rather than "could not fetch". Empty
618
+ // only when nothing was fetched at all (no git repo, no docs, nothing connected).
619
+ const captureText = capture.render();
620
+ if (captureText) {
621
+ console.log('');
622
+ console.log(captureText);
623
+ }
604
624
  // Which graph does a BARE command read after this? resolveEnv with the
605
625
  // most local-favouring read preference is the truth: a no-account user is
606
626
  // redirected to local and there is nothing to say; a cloud token (or an
@@ -731,10 +751,18 @@ export async function runSetup(opts = {}) {
731
751
  */
732
752
  async function runFreshSetup(ctx) {
733
753
  const phase = await runLocalValuePhase({ approve: ctx.opts.approve });
754
+ // The value phase's capture report is printed by runLocalConnectorPhase, so choosing
755
+ // cloud below drops it - deliberately: runCloudSetup re-imports git and docs into the
756
+ // cloud tenant and prints its own report, which is the one that describes that graph.
734
757
  // Framed by what the graph is missing, not "how are you using Align" in the abstract -
735
758
  // there is already a local graph on screen, so the question is whether to extend it.
759
+ //
760
+ // "A path to team sharing", never "for team sharing": choosing cloud creates a
761
+ // PERSONAL tenant (the option's hint says so) and a team is a separate join/upgrade
762
+ // later. The question and the option below must keep agreeing on that - the question
763
+ // overclaimed for a while and a live tester read it as sharing starting here.
736
764
  const choice = await p.select({
737
- message: 'Stay local, or sync to the cloud for team sharing and cross-tool conflict detection?',
765
+ message: 'Stay local, or sync to the cloud for backup, richer detection, and a path to team sharing?',
738
766
  options: [
739
767
  { value: 'local', label: 'Stay local - keep what you just built, private and offline', hint: 'no account' },
740
768
  { value: 'cloud', label: 'Sync to the cloud - backup, team upgrade path, richer detection', hint: 'personal tenant' },
@@ -905,13 +933,16 @@ async function runCloudSetup(ctx) {
905
933
  let totalDecisions = 0;
906
934
  const sourcesImported = [];
907
935
  const gitAvailable = await isGitRepo();
936
+ const capture = createCaptureCollector();
908
937
  if (gitAvailable) {
909
938
  console.log('');
910
939
  const gitSpinner = p.spinner();
911
940
  gitSpinner.start('Scanning git history...');
912
941
  try {
913
942
  const gitSource = buildSources(true).find(s => s.id === 'git');
914
- const items = await gitSource.fetch({});
943
+ const fetched = await gitSource.fetch({});
944
+ capture.add(toCaptureSource(gitSource, fetched));
945
+ const { items } = fetched;
915
946
  // Stop the scan spinner before runPersonalImport - it starts its own
916
947
  // progress spinner, and two animated spinners on one line flicker.
917
948
  if (items.length) {
@@ -940,7 +971,9 @@ async function runCloudSetup(ctx) {
940
971
  const docsSpinner = p.spinner();
941
972
  docsSpinner.start('Reading ADRs and CLAUDE.md/AGENTS.md...');
942
973
  try {
943
- const docsItems = await fetchDocsItems({ limit: 500 });
974
+ const docs = await fetchDocsItems({ limit: IMPORT_LIMITS.docs });
975
+ capture.add(toCaptureSource(CAPTURE_SOURCES.docs, docs));
976
+ const docsItems = docs.items;
944
977
  if (docsItems.length) {
945
978
  docsSpinner.stop(`Found ${docsItems.length} item(s) worth importing`);
946
979
  const ingested = await runPersonalImport(docsItems, client, {
@@ -969,7 +1002,7 @@ async function runCloudSetup(ctx) {
969
1002
  // connector, not just the Atlassian fetchers that throw the typed AuthExpiredError.
970
1003
  const fetched = await Promise.all(readyConnectors.map(async ({ source, tokens }) => {
971
1004
  try {
972
- return { source, items: await source.fetch(tokens) };
1005
+ return { source, fetched: await source.fetch(tokens) };
973
1006
  }
974
1007
  catch (err) {
975
1008
  if (source.oauthKey && isAuthExpiry(err)) {
@@ -984,9 +1017,11 @@ async function runCloudSetup(ctx) {
984
1017
  const ready = [];
985
1018
  for (const result of fetched) {
986
1019
  const source = result.source;
987
- if ('items' in result) {
988
- if (result.items.length)
989
- ready.push({ source, items: result.items });
1020
+ if ('fetched' in result) {
1021
+ capture.add(toCaptureSource(source, result.fetched));
1022
+ const { items } = result.fetched;
1023
+ if (items.length)
1024
+ ready.push({ source, items });
990
1025
  else
991
1026
  p.log.warn(`No items found in ${source.label}.`);
992
1027
  }
@@ -1013,7 +1048,9 @@ async function runCloudSetup(ctx) {
1013
1048
  const retrySpinner = p.spinner();
1014
1049
  retrySpinner.start(`Retrying ${source.label}...`);
1015
1050
  try {
1016
- const items = await source.fetch(fresh);
1051
+ const fetched = await source.fetch(fresh);
1052
+ capture.add(toCaptureSource(source, fetched));
1053
+ const { items } = fetched;
1017
1054
  retrySpinner.stop(`Found ${items.length} items`);
1018
1055
  if (items.length)
1019
1056
  ready.push({ source, items });
@@ -1063,6 +1100,12 @@ async function runCloudSetup(ctx) {
1063
1100
  console.log(chalk.dim('Query your graph: align ask "..." or align decisions list'));
1064
1101
  console.log('');
1065
1102
  }
1103
+ // ALI-827: the capture report, once, after every source has imported.
1104
+ const captureText = capture.render();
1105
+ if (captureText) {
1106
+ console.log(captureText);
1107
+ console.log('');
1108
+ }
1066
1109
  // ---- Outro ----
1067
1110
  const decisionsLine = totalDecisions > 0
1068
1111
  ? ` ${totalDecisions} decisions in your graph`