@aligndottech/cli 0.32.1 → 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 (142) 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/local.d.ts.map +1 -1
  41. package/dist/commands/local.js +5 -3
  42. package/dist/commands/local.js.map +1 -1
  43. package/dist/commands/setup.d.ts.map +1 -1
  44. package/dist/commands/setup.js +76 -33
  45. package/dist/commands/setup.js.map +1 -1
  46. package/dist/commands/why.d.ts.map +1 -1
  47. package/dist/commands/why.js +100 -16
  48. package/dist/commands/why.js.map +1 -1
  49. package/dist/index.js +17 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/lib/capture-report.d.ts +45 -0
  52. package/dist/lib/capture-report.d.ts.map +1 -0
  53. package/dist/lib/capture-report.js +50 -0
  54. package/dist/lib/capture-report.js.map +1 -0
  55. package/dist/lib/capture-sources.d.ts +57 -0
  56. package/dist/lib/capture-sources.d.ts.map +1 -0
  57. package/dist/lib/capture-sources.js +24 -0
  58. package/dist/lib/capture-sources.js.map +1 -0
  59. package/dist/lib/commit-shape.d.ts +18 -0
  60. package/dist/lib/commit-shape.d.ts.map +1 -0
  61. package/dist/lib/commit-shape.js +23 -0
  62. package/dist/lib/commit-shape.js.map +1 -0
  63. package/dist/lib/config.d.ts +17 -0
  64. package/dist/lib/config.d.ts.map +1 -1
  65. package/dist/lib/config.js +34 -0
  66. package/dist/lib/config.js.map +1 -1
  67. package/dist/lib/fetchers/capture.d.ts +60 -0
  68. package/dist/lib/fetchers/capture.d.ts.map +1 -0
  69. package/dist/lib/fetchers/capture.js +27 -0
  70. package/dist/lib/fetchers/capture.js.map +1 -0
  71. package/dist/lib/fetchers/confluence.d.ts +2 -2
  72. package/dist/lib/fetchers/confluence.d.ts.map +1 -1
  73. package/dist/lib/fetchers/confluence.js +2 -1
  74. package/dist/lib/fetchers/confluence.js.map +1 -1
  75. package/dist/lib/fetchers/docs.d.ts +12 -2
  76. package/dist/lib/fetchers/docs.d.ts.map +1 -1
  77. package/dist/lib/fetchers/docs.js +46 -6
  78. package/dist/lib/fetchers/docs.js.map +1 -1
  79. package/dist/lib/fetchers/git.d.ts +28 -2
  80. package/dist/lib/fetchers/git.d.ts.map +1 -1
  81. package/dist/lib/fetchers/git.js +50 -2
  82. package/dist/lib/fetchers/git.js.map +1 -1
  83. package/dist/lib/fetchers/github.d.ts +2 -2
  84. package/dist/lib/fetchers/github.d.ts.map +1 -1
  85. package/dist/lib/fetchers/github.js +2 -1
  86. package/dist/lib/fetchers/github.js.map +1 -1
  87. package/dist/lib/fetchers/gitlab.d.ts +2 -2
  88. package/dist/lib/fetchers/gitlab.d.ts.map +1 -1
  89. package/dist/lib/fetchers/gitlab.js +2 -1
  90. package/dist/lib/fetchers/gitlab.js.map +1 -1
  91. package/dist/lib/fetchers/jira.d.ts +2 -2
  92. package/dist/lib/fetchers/jira.d.ts.map +1 -1
  93. package/dist/lib/fetchers/jira.js +2 -1
  94. package/dist/lib/fetchers/jira.js.map +1 -1
  95. package/dist/lib/fetchers/linear.d.ts +2 -2
  96. package/dist/lib/fetchers/linear.d.ts.map +1 -1
  97. package/dist/lib/fetchers/linear.js +2 -1
  98. package/dist/lib/fetchers/linear.js.map +1 -1
  99. package/dist/lib/fetchers/notion.d.ts +2 -2
  100. package/dist/lib/fetchers/notion.d.ts.map +1 -1
  101. package/dist/lib/fetchers/notion.js +2 -1
  102. package/dist/lib/fetchers/notion.js.map +1 -1
  103. package/dist/lib/fetchers/slack.d.ts +2 -2
  104. package/dist/lib/fetchers/slack.d.ts.map +1 -1
  105. package/dist/lib/fetchers/slack.js +2 -1
  106. package/dist/lib/fetchers/slack.js.map +1 -1
  107. package/dist/lib/fetchers/teams.d.ts +2 -2
  108. package/dist/lib/fetchers/teams.d.ts.map +1 -1
  109. package/dist/lib/fetchers/teams.js +2 -1
  110. package/dist/lib/fetchers/teams.js.map +1 -1
  111. package/dist/lib/fetchers/zoom.d.ts +2 -2
  112. package/dist/lib/fetchers/zoom.d.ts.map +1 -1
  113. package/dist/lib/fetchers/zoom.js +2 -1
  114. package/dist/lib/fetchers/zoom.js.map +1 -1
  115. package/dist/lib/gateway-client.d.ts +8 -0
  116. package/dist/lib/gateway-client.d.ts.map +1 -1
  117. package/dist/lib/gateway-client.js +11 -1
  118. package/dist/lib/gateway-client.js.map +1 -1
  119. package/dist/lib/git.d.ts.map +1 -1
  120. package/dist/lib/git.js +9 -2
  121. package/dist/lib/git.js.map +1 -1
  122. package/dist/lib/import-defaults.d.ts +29 -0
  123. package/dist/lib/import-defaults.d.ts.map +1 -0
  124. package/dist/lib/import-defaults.js +29 -0
  125. package/dist/lib/import-defaults.js.map +1 -0
  126. package/dist/lib/local-db.d.ts +35 -1
  127. package/dist/lib/local-db.d.ts.map +1 -1
  128. package/dist/lib/local-db.js +123 -7
  129. package/dist/lib/local-db.js.map +1 -1
  130. package/dist/lib/local-gateway-client.d.ts +9 -5
  131. package/dist/lib/local-gateway-client.d.ts.map +1 -1
  132. package/dist/lib/local-gateway-client.js +16 -2
  133. package/dist/lib/local-gateway-client.js.map +1 -1
  134. package/dist/lib/local-llm.d.ts +17 -0
  135. package/dist/lib/local-llm.d.ts.map +1 -1
  136. package/dist/lib/local-llm.js +38 -3
  137. package/dist/lib/local-llm.js.map +1 -1
  138. package/dist/lib/local-mode.d.ts +45 -0
  139. package/dist/lib/local-mode.d.ts.map +1 -1
  140. package/dist/lib/local-mode.js +65 -10
  141. package/dist/lib/local-mode.js.map +1 -1
  142. package/package.json +3 -2
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ALI-827: how each connector is named in the capture report, and what one of its items
3
+ * IS. One writer for two readers - `align setup` (buildSources) and every
4
+ * `align import <x>` - so one command cannot say "PRs and issues" while another says
5
+ * "items" for the same connector (code-style.md, two writers of one fact). A count with no noun is
6
+ * a number nobody can check, which is why the noun is a required half of every entry.
7
+ *
8
+ * Keyed by connector id, the same id `src/commands/import/<id>.ts` carries; a parity
9
+ * test holds the two sets equal.
10
+ */
11
+ export declare const CAPTURE_SOURCES: {
12
+ readonly git: {
13
+ readonly label: "Git";
14
+ readonly unit: "commits";
15
+ };
16
+ readonly docs: {
17
+ readonly label: "Repo docs";
18
+ readonly unit: "ADRs and sections";
19
+ };
20
+ readonly github: {
21
+ readonly label: "GitHub";
22
+ readonly unit: "PRs and issues";
23
+ };
24
+ readonly jira: {
25
+ readonly label: "Jira";
26
+ readonly unit: "issues";
27
+ };
28
+ readonly confluence: {
29
+ readonly label: "Confluence";
30
+ readonly unit: "pages";
31
+ };
32
+ readonly slack: {
33
+ readonly label: "Slack";
34
+ readonly unit: "threads";
35
+ };
36
+ readonly teams: {
37
+ readonly label: "Microsoft Teams";
38
+ readonly unit: "messages";
39
+ };
40
+ readonly zoom: {
41
+ readonly label: "Zoom";
42
+ readonly unit: "recordings";
43
+ };
44
+ readonly gitlab: {
45
+ readonly label: "GitLab";
46
+ readonly unit: "merge requests";
47
+ };
48
+ readonly linear: {
49
+ readonly label: "Linear";
50
+ readonly unit: "issues";
51
+ };
52
+ readonly notion: {
53
+ readonly label: "Notion";
54
+ readonly unit: "pages";
55
+ };
56
+ };
57
+ //# sourceMappingURL=capture-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-sources.d.ts","sourceRoot":"","sources":["../../src/lib/capture-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYwC,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ALI-827: how each connector is named in the capture report, and what one of its items
3
+ * IS. One writer for two readers - `align setup` (buildSources) and every
4
+ * `align import <x>` - so one command cannot say "PRs and issues" while another says
5
+ * "items" for the same connector (code-style.md, two writers of one fact). A count with no noun is
6
+ * a number nobody can check, which is why the noun is a required half of every entry.
7
+ *
8
+ * Keyed by connector id, the same id `src/commands/import/<id>.ts` carries; a parity
9
+ * test holds the two sets equal.
10
+ */
11
+ export const CAPTURE_SOURCES = {
12
+ git: { label: 'Git', unit: 'commits' },
13
+ docs: { label: 'Repo docs', unit: 'ADRs and sections' },
14
+ github: { label: 'GitHub', unit: 'PRs and issues' },
15
+ jira: { label: 'Jira', unit: 'issues' },
16
+ confluence: { label: 'Confluence', unit: 'pages' },
17
+ slack: { label: 'Slack', unit: 'threads' },
18
+ teams: { label: 'Microsoft Teams', unit: 'messages' },
19
+ zoom: { label: 'Zoom', unit: 'recordings' },
20
+ gitlab: { label: 'GitLab', unit: 'merge requests' },
21
+ linear: { label: 'Linear', unit: 'issues' },
22
+ notion: { label: 'Notion', unit: 'pages' },
23
+ };
24
+ //# sourceMappingURL=capture-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-sources.js","sourceRoot":"","sources":["../../src/lib/capture-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;IACtC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE;IACvD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACnD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvC,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE;IAClD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;IAC1C,KAAK,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE;IACrD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;IAC3C,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;IACnD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3C,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;CACwB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * What makes a commit SUBJECT mechanical, in one place. `isDecisionCommit` (git.ts)
3
+ * builds its regex from this, and the capture report (fetchers/git.ts) names the list in
4
+ * the line a user reads - so the two cannot drift, which they had by the time ALI-827's
5
+ * review read them (the report named four prefixes of eight). A leaf module with no
6
+ * imports, so the tests that mock `lib/git.js` still print the real list.
7
+ */
8
+ export declare const MECHANICAL_SUBJECT_PREFIXES: readonly ["chore", "wip", "merge", "revert", "bump", "update deps", "release", "typo"];
9
+ /** Below this many characters a subject is a label, not a decision. */
10
+ export declare const MIN_DECISION_SUBJECT_CHARS = 20;
11
+ /**
12
+ * The predicate's regex, built from the list with every prefix escaped. Eight plain
13
+ * words need no escaping today; a future `c++` interpolated raw would read as "one or
14
+ * more c" and reject `ccc:` while looking exactly like a list entry (Copilot on #240).
15
+ * Anchored and case-insensitive, as the hand-written literal it replaced was.
16
+ */
17
+ export declare function mechanicalSubjectRegex(prefixes: readonly string[]): RegExp;
18
+ //# sourceMappingURL=commit-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-shape.d.ts","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,wFAE9B,CAAC;AAEX,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAG1E"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What makes a commit SUBJECT mechanical, in one place. `isDecisionCommit` (git.ts)
3
+ * builds its regex from this, and the capture report (fetchers/git.ts) names the list in
4
+ * the line a user reads - so the two cannot drift, which they had by the time ALI-827's
5
+ * review read them (the report named four prefixes of eight). A leaf module with no
6
+ * imports, so the tests that mock `lib/git.js` still print the real list.
7
+ */
8
+ export const MECHANICAL_SUBJECT_PREFIXES = [
9
+ 'chore', 'wip', 'merge', 'revert', 'bump', 'update deps', 'release', 'typo',
10
+ ];
11
+ /** Below this many characters a subject is a label, not a decision. */
12
+ export const MIN_DECISION_SUBJECT_CHARS = 20;
13
+ /**
14
+ * The predicate's regex, built from the list with every prefix escaped. Eight plain
15
+ * words need no escaping today; a future `c++` interpolated raw would read as "one or
16
+ * more c" and reject `ccc:` while looking exactly like a list entry (Copilot on #240).
17
+ * Anchored and case-insensitive, as the hand-written literal it replaced was.
18
+ */
19
+ export function mechanicalSubjectRegex(prefixes) {
20
+ const escaped = prefixes.map((p) => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
21
+ return new RegExp(`^(${escaped.join('|')})`, 'i');
22
+ }
23
+ //# sourceMappingURL=commit-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit-shape.js","sourceRoot":"","sources":["../../src/lib/commit-shape.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM;CACnE,CAAC;AAEX,uEAAuE;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAA2B;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
@@ -29,6 +29,23 @@ export declare function isFreshInstall(config: {
29
29
  export declare const ALIGN_HOSTED_GATEWAY_URL: string;
30
30
  /** ALI-618: local-only users have no account, so consent is stored on the machine, not the server. */
31
31
  export type TelemetryConsent = 'granted' | 'declined';
32
+ /**
33
+ * One-time, idempotent: if the old suffixed config exists and the new one does not yet,
34
+ * copy it across. `conf`'s default `projectSuffix: 'nodejs'` has been in effect since the
35
+ * CLI's very first `align login`, so this is not a new-feature migration - it is real
36
+ * historical state (cloud auth tokens, tenant ids, and any saved connector tokens) that
37
+ * would otherwise be silently orphaned the moment config.ts starts reading the
38
+ * suffix-free directory. The old file is left in place, never deleted, and an existing
39
+ * file at the new location is never overwritten - this only ever fills a gap.
40
+ *
41
+ * Copilot review on #231: this used to run automatically inside createConfigStore(), so
42
+ * every test that mocks `conf` but not `fs`/`env-paths` was touching the REAL filesystem
43
+ * on whatever machine ran the suite - on a developer's own laptop, silently copying their
44
+ * real ~/.config/align-cli-nodejs/config.json. A migration is a real-process-startup
45
+ * concern, not a store-construction one: the constructor stays pure, and this is called
46
+ * exactly once, from src/index.ts, before any command runs.
47
+ */
48
+ export declare function migrateConfigDirectory(oldDir: string, newDir: string): void;
32
49
  export declare function createConfigStore(): {
33
50
  getEnvironment(env: EnvName): EnvironmentConfig;
34
51
  setAuthToken(env: EnvName, token: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACjD,GAAG,OAAO,CASV;AAQD;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,QAA2B,CAAC;AAEjE,sGAAsG;AACtG,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD,wBAAgB,iBAAiB;wBAyBT,OAAO,GAAG,iBAAiB;sBAc7B,OAAO,SAAS,MAAM;qBAIvB,OAAO,YAAY,MAAM;qBAIzB,MAAM;uBAIJ,OAAO;qBACT,OAAO;2BACD,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;2BAI7C,OAAO,gBAAgB,MAAM,SAAS,MAAM;IAInE;;;;;OAKG;4BACqB,OAAO,gBAAgB,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;6BAY5D,OAAO,gBAAgB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYtF,iGAAiG;yBAC5E,OAAO,gBAAgB,MAAM;IAOlD,6FAA6F;6BACpE,OAAO;6BAMP,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;6BAI7C,OAAO,gBAAgB,MAAM,WAAW,MAAM;8BAI7C,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;8BAI7C,OAAO,gBAAgB,MAAM,YAAY,MAAM;yBAIpD,MAAM;;eAWhB,OAAO;oBAQF,MAAM;2BAOC,gBAAgB,GAAG,SAAS;+BAGxB,gBAAgB;kCAMb,MAAM,GAAG,OAAO;mCAGf,MAAM,GAAG,IAAI;EAK/C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAAC;CACjD,GAAG,OAAO,CASV;AAQD;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,QAA2B,CAAC;AAEjE,sGAAsG;AACtG,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM3E;AAED,wBAAgB,iBAAiB;wBAiCT,OAAO,GAAG,iBAAiB;sBAc7B,OAAO,SAAS,MAAM;qBAIvB,OAAO,YAAY,MAAM;qBAIzB,MAAM;uBAIJ,OAAO;qBACT,OAAO;2BACD,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;2BAI7C,OAAO,gBAAgB,MAAM,SAAS,MAAM;IAInE;;;;;OAKG;4BACqB,OAAO,gBAAgB,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;6BAY5D,OAAO,gBAAgB,MAAM,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYtF,iGAAiG;yBAC5E,OAAO,gBAAgB,MAAM;IAOlD,6FAA6F;6BACpE,OAAO;6BAMP,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;6BAI7C,OAAO,gBAAgB,MAAM,WAAW,MAAM;8BAI7C,OAAO,gBAAgB,MAAM,GAAG,MAAM,GAAG,IAAI;8BAI7C,OAAO,gBAAgB,MAAM,YAAY,MAAM;yBAIpD,MAAM;;eAWhB,OAAO;oBAQF,MAAM;2BAOC,gBAAgB,GAAG,SAAS;+BAGxB,gBAAgB;kCAMb,MAAM,GAAG,OAAO;mCAGf,MAAM,GAAG,IAAI;EAK/C"}
@@ -1,5 +1,7 @@
1
1
  import Conf from 'conf';
2
2
  import { randomUUID } from 'node:crypto';
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
3
5
  /**
4
6
  * The fork point for ALI-794's value-first onboarding order: nothing configured
5
7
  * yet on this machine, in either mode. A returning user (they already have a
@@ -32,9 +34,41 @@ const DEFAULTS = {
32
34
  * as `DEFAULTS.prod.gatewayUrl` rather than a second literal of the same URL.
33
35
  */
34
36
  export const ALIGN_HOSTED_GATEWAY_URL = DEFAULTS.prod.gatewayUrl;
37
+ /**
38
+ * One-time, idempotent: if the old suffixed config exists and the new one does not yet,
39
+ * copy it across. `conf`'s default `projectSuffix: 'nodejs'` has been in effect since the
40
+ * CLI's very first `align login`, so this is not a new-feature migration - it is real
41
+ * historical state (cloud auth tokens, tenant ids, and any saved connector tokens) that
42
+ * would otherwise be silently orphaned the moment config.ts starts reading the
43
+ * suffix-free directory. The old file is left in place, never deleted, and an existing
44
+ * file at the new location is never overwritten - this only ever fills a gap.
45
+ *
46
+ * Copilot review on #231: this used to run automatically inside createConfigStore(), so
47
+ * every test that mocks `conf` but not `fs`/`env-paths` was touching the REAL filesystem
48
+ * on whatever machine ran the suite - on a developer's own laptop, silently copying their
49
+ * real ~/.config/align-cli-nodejs/config.json. A migration is a real-process-startup
50
+ * concern, not a store-construction one: the constructor stays pure, and this is called
51
+ * exactly once, from src/index.ts, before any command runs.
52
+ */
53
+ export function migrateConfigDirectory(oldDir, newDir) {
54
+ const oldFile = path.join(oldDir, 'config.json');
55
+ const newFile = path.join(newDir, 'config.json');
56
+ if (fs.existsSync(newFile) || !fs.existsSync(oldFile))
57
+ return;
58
+ fs.mkdirSync(newDir, { recursive: true });
59
+ fs.copyFileSync(oldFile, newFile);
60
+ }
35
61
  export function createConfigStore() {
36
62
  const store = new Conf({
37
63
  projectName: 'align-cli',
64
+ // conf's own default is 'nodejs' (node_modules/conf/dist/source/index.js), which
65
+ // writes to ~/.config/align-cli-nodejs - a DIFFERENT directory from the one
66
+ // local-mode.ts hand-computes for the local graph DB (~/.config/align-cli). Found
67
+ // live: `rm -rf ~/.config/align-cli` silently left every saved token, telemetry
68
+ // consent and auth config untouched, one directory over. Disabling the suffix
69
+ // makes this match env-paths('align-cli', { suffix: '' }) - the same call
70
+ // local-mode.ts now makes directly, so there is one authority, not two guesses.
71
+ projectSuffix: '',
38
72
  defaults: { environments: {}, defaultEnv: 'prod', connectorTokens: {} },
39
73
  // This file holds the read-only tokens local mode asks for, so it is a credential file
40
74
  // rather than ordinary config. 0600 is also what the setup copy promises the user.
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * ALI-827: one place that turns a fetcher's read into a capture report, so a
3
+ * connector-core that cannot report (0.5.0) and one that can (0.6.0, `fetchWithReport`)
4
+ * differ in exactly one branch rather than in nine wrappers.
5
+ *
6
+ * With no report from the fetcher, the fallback says only what the CALLER can honestly
7
+ * say: how many came back, and how many were asked for. It never guesses a reason -
8
+ * "zoom returns at most 30" is a fact the fetcher owns, and stating it here would be a
9
+ * second writer of it (code-style.md). With a report, the fetcher's own skips are carried
10
+ * through verbatim: they are written for a person and the CLI prints them.
11
+ */
12
+ import type { PersonalImportItem } from '../personal-import.js';
13
+ /** What a read could NOT reach, in the fetcher's own terms: a count and a measured
14
+ * reason, printed verbatim, so `detail` is written for a person. Owned here, by the
15
+ * producer; the renderer consumes it. */
16
+ export interface CaptureSkip {
17
+ /** How many source objects this covers. */
18
+ count: number;
19
+ /** One line printed after the count. */
20
+ detail: string;
21
+ }
22
+ export interface CaptureFetchReport {
23
+ /** Source objects examined before any filter, when the producer measured it (git, docs
24
+ * and every 0.6.0 SDK fetcher do). The fallback below cannot, and sets it to the
25
+ * returned count - so treat it as best-effort, never as a reliable pre-filter figure. */
26
+ scanned: number;
27
+ /** The cap the caller asked for, when it is worth saying: a fetcher that knows its
28
+ * cap did not bound the read leaves it out (git, docs), because "of up to 500" on a
29
+ * 40-commit repo is printed every run and stops being read. */
30
+ requested?: number;
31
+ skips: CaptureSkip[];
32
+ }
33
+ export interface CaptureFetchResult {
34
+ items: PersonalImportItem[];
35
+ report: CaptureFetchReport;
36
+ }
37
+ /**
38
+ * The slice of a connector-core fetcher this wrapper needs, declared structurally so it
39
+ * compiles against 0.5.0 (no `fetchWithReport`) and consumes 0.6.0's report the moment
40
+ * the installed package has one. `kind` and `platform` on the SDK report are accepted and
41
+ * dropped: the CLI prints the detail and branches on nothing else.
42
+ */
43
+ export interface ReportingFetcher<O> {
44
+ fetch(opts: O): Promise<PersonalImportItem[]>;
45
+ fetchWithReport?(opts: O): Promise<{
46
+ items: PersonalImportItem[];
47
+ report: {
48
+ scanned: number;
49
+ requested?: number;
50
+ skips: ReadonlyArray<{
51
+ count: number;
52
+ detail: string;
53
+ }>;
54
+ };
55
+ }>;
56
+ }
57
+ export declare function withCaptureReport<O extends {
58
+ limit?: number;
59
+ }>(opts: O, fetcher: ReportingFetcher<O>): Promise<CaptureFetchResult>;
60
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;0CAE0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC;;8FAE0F;IAC1F,OAAO,EAAE,MAAM,CAAC;IAChB;;oEAEgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9C,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;QACjC,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAC5B,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,aAAa,CAAC;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;KAC1G,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAyB7B"}
@@ -0,0 +1,27 @@
1
+ export async function withCaptureReport(opts, fetcher) {
2
+ if (typeof fetcher.fetchWithReport === 'function') {
3
+ // One read, never two: the SDK's `fetch` is defined as `(await fetchWithReport()).items`.
4
+ const { items, report } = await fetcher.fetchWithReport(opts);
5
+ return {
6
+ items,
7
+ report: {
8
+ scanned: report.scanned,
9
+ ...(report.requested !== undefined ? { requested: report.requested } : {}),
10
+ skips: report.skips.map((s) => ({ count: s.count, detail: s.detail })),
11
+ },
12
+ };
13
+ }
14
+ const items = await fetcher.fetch(opts);
15
+ return {
16
+ items,
17
+ report: {
18
+ scanned: items.length,
19
+ // Echoed whenever one was given: with no SDK report this wrapper cannot tell a cap
20
+ // that bound the read from a source that simply had less, so it says the honest,
21
+ // derived thing and leaves the reason to the fetcher.
22
+ ...(opts.limit !== undefined ? { requested: opts.limit } : {}),
23
+ skips: [],
24
+ },
25
+ };
26
+ }
27
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/lib/fetchers/capture.ts"],"names":[],"mappings":"AAsDA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAO,EACP,OAA4B;IAE5B,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QAClD,0FAA0F;QAC1F,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO;YACL,KAAK;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aACvE;SACF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO;QACL,KAAK;QACL,MAAM,EAAE;YACN,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,mFAAmF;YACnF,iFAAiF;YACjF,sDAAsD;YACtD,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,KAAK,EAAE,EAAE;SACV;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { PersonalImportItem } from '../personal-import.js';
1
+ import { type CaptureFetchResult } from './capture.js';
2
2
  /** Read-only personal Confluence import. Delegates to the canonical fetcher in
3
3
  * @aligndottech/connector-core; maps its auth error to the CLI's reconnect flow. */
4
4
  export declare function fetchConfluenceItems(opts: {
@@ -8,5 +8,5 @@ export declare function fetchConfluenceItems(opts: {
8
8
  email?: string;
9
9
  domain?: string;
10
10
  limit?: number;
11
- }): Promise<PersonalImportItem[]>;
11
+ }): Promise<CaptureFetchResult>;
12
12
  //# sourceMappingURL=confluence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;qFACqF;AACrF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAOhC"}
1
+ {"version":3,"file":"confluence.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,cAAc,CAAC;AAE1E;qFACqF;AACrF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAO9B"}
@@ -1,10 +1,11 @@
1
1
  import { ConfluenceFetcher, FetcherAuthError } from '@aligndottech/connector-core';
2
2
  import { AuthExpiredError } from '../errors.js';
3
+ import { withCaptureReport } from './capture.js';
3
4
  /** Read-only personal Confluence import. Delegates to the canonical fetcher in
4
5
  * @aligndottech/connector-core; maps its auth error to the CLI's reconnect flow. */
5
6
  export async function fetchConfluenceItems(opts) {
6
7
  try {
7
- return await new ConfluenceFetcher().fetch(opts);
8
+ return await withCaptureReport(opts, new ConfluenceFetcher());
8
9
  }
9
10
  catch (e) {
10
11
  if (e instanceof FetcherAuthError)
@@ -1 +1 @@
1
- {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGhD;qFACqF;AACrF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAO1C;IACC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,iBAAiB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,gBAAgB;YAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"confluence.js","sourceRoot":"","sources":["../../../src/lib/fetchers/confluence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAA2B,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE1E;qFACqF;AACrF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAO1C;IACC,IAAI,CAAC;QACH,OAAO,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,gBAAgB;YAAE,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC"}
@@ -1,6 +1,16 @@
1
- import type { PersonalImportItem } from '../personal-import.js';
1
+ import type { CaptureFetchResult } from './capture.js';
2
+ /**
3
+ * ALI-827: the same read, plus its capture report. A local read has no page size to fall
4
+ * off and no access to lack, so the one thing it drops is a headed section under the
5
+ * length floor, and that is the one skip it reports. `scanned` is every ADR file and
6
+ * headed section seen; the cap is echoed only when it bounded the read - "8 ADRs and
7
+ * sections of up to 500 requested" on every run says nothing (the same rule as
8
+ * gitCaptureReport). When it did bind, fetched equals the cap and the renderer prints no
9
+ * clause: the user got what they asked for, and how many more exist is unknown when the
10
+ * ADRs alone fill the limit, so no count is invented for it.
11
+ */
2
12
  export declare function fetchDocsItems(opts: {
3
13
  limit: number;
4
14
  cwd?: string;
5
- }): Promise<PersonalImportItem[]>;
15
+ }): Promise<CaptureFetchResult>;
6
16
  //# sourceMappingURL=docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAuKhE,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAoBzG"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAqNvD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYvG"}
@@ -123,6 +123,10 @@ function splitIntoSections(content) {
123
123
  }
124
124
  async function readAgentRulesItems(repoRoot, remoteUrl, branch) {
125
125
  const items = [];
126
+ // ALI-827: headed sections the length floor dropped, so the capture report can name
127
+ // them. The headingless preamble (an H1 line, an intro sentence) is not counted when it
128
+ // is dropped: nobody wrote it as a section, so nobody will look for it in the graph.
129
+ let droppedShort = 0;
126
130
  for (const file of AGENT_RULES_FILES) {
127
131
  let raw;
128
132
  try {
@@ -138,8 +142,11 @@ async function readAgentRulesItems(repoRoot, remoteUrl, branch) {
138
142
  // silently dropped rather than imported.
139
143
  const seenSlugs = new Map();
140
144
  for (const section of splitIntoSections(stripped)) {
141
- if (section.body.length < MIN_CHUNK_CHARS)
145
+ if (section.body.length < MIN_CHUNK_CHARS) {
146
+ if (section.heading)
147
+ droppedShort++;
142
148
  continue;
149
+ }
143
150
  const title = section.heading ?? firstHeading(section.body) ?? humanizeFilename(file);
144
151
  let anchor = '';
145
152
  if (section.heading) {
@@ -156,9 +163,9 @@ async function readAgentRulesItems(repoRoot, remoteUrl, branch) {
156
163
  });
157
164
  }
158
165
  }
159
- return items;
166
+ return { items, droppedShort };
160
167
  }
161
- export async function fetchDocsItems(opts) {
168
+ async function readDocsItems(opts) {
162
169
  const repoRoot = opts.cwd ?? process.cwd();
163
170
  const gitOpts = opts.cwd ? { cwd: opts.cwd } : undefined;
164
171
  const [remoteUrl, branch, adrFiles] = await Promise.all([
@@ -172,9 +179,42 @@ export async function fetchDocsItems(opts) {
172
179
  // ADRs alone already fill the limit: reading and stripping CLAUDE.md/AGENTS.md would be
173
180
  // work whose result gets sliced away, so skip it rather than doing it and throwing it out.
174
181
  const remaining = opts.limit - adrItems.length;
182
+ // Capped even at exact equality: the agent-rules files were never opened BECAUSE the
183
+ // limit was already full, so something may have been left out and nobody counted it.
175
184
  if (remaining <= 0)
176
- return adrItems;
177
- const agentRulesItems = await readAgentRulesItems(repoRoot, remoteUrl, branch);
178
- return [...adrItems, ...agentRulesItems].slice(0, opts.limit);
185
+ return { items: adrItems, scanned: adrFiles.length, capped: true, droppedShort: 0 };
186
+ const { items: agentRulesItems, droppedShort } = await readAgentRulesItems(repoRoot, remoteUrl, branch);
187
+ const candidates = adrFiles.length + agentRulesItems.length;
188
+ return {
189
+ items: [...adrItems, ...agentRulesItems].slice(0, opts.limit),
190
+ scanned: candidates + droppedShort,
191
+ // Strictly more than the limit: everything was read, so the cap bound the read only
192
+ // if the slice actually cut something.
193
+ capped: candidates > opts.limit,
194
+ droppedShort,
195
+ };
196
+ }
197
+ /**
198
+ * ALI-827: the same read, plus its capture report. A local read has no page size to fall
199
+ * off and no access to lack, so the one thing it drops is a headed section under the
200
+ * length floor, and that is the one skip it reports. `scanned` is every ADR file and
201
+ * headed section seen; the cap is echoed only when it bounded the read - "8 ADRs and
202
+ * sections of up to 500 requested" on every run says nothing (the same rule as
203
+ * gitCaptureReport). When it did bind, fetched equals the cap and the renderer prints no
204
+ * clause: the user got what they asked for, and how many more exist is unknown when the
205
+ * ADRs alone fill the limit, so no count is invented for it.
206
+ */
207
+ export async function fetchDocsItems(opts) {
208
+ const { items, scanned, capped, droppedShort } = await readDocsItems(opts);
209
+ return {
210
+ items,
211
+ report: {
212
+ scanned,
213
+ ...(capped ? { requested: opts.limit } : {}),
214
+ skips: droppedShort > 0
215
+ ? [{ count: droppedShort, detail: `sections under ${MIN_CHUNK_CHARS} characters (a bare heading or a one-line pointer)` }]
216
+ : [],
217
+ },
218
+ };
179
219
  }
180
220
  //# sourceMappingURL=docs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/lib/fetchers/docs.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,33 @@
1
- import type { PersonalImportItem } from '../personal-import.js';
1
+ import type { CaptureFetchReport, CaptureFetchResult, CaptureSkip } from './capture.js';
2
+ /**
3
+ * ALI-827: git's two drop reasons, kept apart. A commit whose SUBJECT is mechanical
4
+ * (isDecisionCommit: a prefix from MECHANICAL_SUBJECT_PREFIXES, or too short) never
5
+ * reaches the rationale gate at all, so folding it into "stated no reason" overstates
6
+ * what that gate did (Copilot review, PR #223). `scanned - kept - rejectedByRationale`
7
+ * is exactly the subject-shape count, because getCommitHistoryDetailed counts every
8
+ * scanned commit into one of those three buckets and nothing else.
9
+ */
10
+ export declare function gitCaptureSkips(counts: {
11
+ scanned: number;
12
+ kept: number;
13
+ rejectedByRationale: number;
14
+ }): CaptureSkip[];
15
+ /**
16
+ * The whole git report, one writer for `align setup` and `align import git`. `--limit`
17
+ * bounds what `git log` SCANS, not what comes back, so the cap is echoed only when the
18
+ * scan reached it: on a 40-commit repo "12 commits of up to 500 requested" would be
19
+ * printed on every run and says nothing, while on a 2,000-commit repo it is the one
20
+ * line that tells the user a bigger --limit reaches further back.
21
+ */
22
+ export declare function gitCaptureReport(counts: {
23
+ scanned: number;
24
+ kept: number;
25
+ rejectedByRationale: number;
26
+ limit: number;
27
+ }): CaptureFetchReport;
2
28
  /** Read-only local-git import. The canonical GitFetcher in connector-core is
3
29
  * pure; the CLI injects the actual git I/O (log/remote) here. */
4
30
  export declare function fetchGitItems(opts: {
5
31
  limit: number;
6
- }): Promise<PersonalImportItem[]>;
32
+ }): Promise<CaptureFetchResult>;
7
33
  //# sourceMappingURL=git.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;kEACkE;AAClE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAE1F"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/lib/fetchers/git.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAExF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CAerH;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAC3E,GAAG,kBAAkB,CAMrB;AAED;kEACkE;AAClE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAWxF"}