@aligndottech/cli 0.54.0 → 0.55.1

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.
@@ -9,6 +9,12 @@
9
9
  * separate owned file makes augment-never-overwrite structural, so no marker
10
10
  * parser exists to get wrong).
11
11
  *
12
+ * For a LOCAL graph that path is usually a symlink to `~/.align/contexts/...` (ALI-1668),
13
+ * never a real file - see decisions-context.ts's file header for why gitignore alone was not
14
+ * enough. Every reader here (CLAUDE.md's import, `inject` below, the gitignore/tracked-by-git
15
+ * checks) resolves the relative path transparently either way, so nothing in this file needs
16
+ * to know which case it is.
17
+ *
12
18
  * This module is only the wiring: fetch, map, write, say what happened. It
13
19
  * must stay non-interactive - it is exactly the kind of command that ends up
14
20
  * in a hook or a CI step, which is where an unguarded prompt hangs (the
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgH7D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+H7D"}
@@ -6,6 +6,7 @@ import { createConfigStore } from '../lib/config.js';
6
6
  import { createGatewayClient } from '../lib/gateway-client.js';
7
7
  import { resolveEnv } from '../lib/resolve-env.js';
8
8
  import { localCitationFor } from '../lib/commit-cite.js';
9
+ import { ensureGitignored, isTrackedByGit } from '../lib/context-local-only.js';
9
10
  import { navigableSourceUrl } from '../lib/decision-links.js';
10
11
  import { ALIGN_CONTEXT_PATH, ALIGN_IMPORT_LINE, writeDecisionsContext, } from '../lib/decisions-context.js';
11
12
  export function registerContextCommand(program) {
@@ -22,7 +23,8 @@ export function registerContextCommand(program) {
22
23
  // preferLocalEmbedded: the launch's flagship command must work for the
23
24
  // no-account user it is pitched at - bare resolution sent them to an
24
25
  // unauthenticated cloud 401 (ALI-675, the ALI-160/423 family).
25
- const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env, { preferLocalEmbedded: true })));
26
+ const syncEnv = config.getEnvironment(resolveEnv(opts.env, { preferLocalEmbedded: true }));
27
+ const client = createGatewayClient(syncEnv);
26
28
  const spinner = ora('Fetching decisions...').start();
27
29
  // Fetch BEFORE writing anything: a failed fetch must not leave a
28
30
  // plausible-looking "no decisions" file behind. An empty file and an
@@ -62,7 +64,9 @@ export function registerContextCommand(program) {
62
64
  }
63
65
  spinner.stop();
64
66
  const repoRoot = process.cwd();
65
- const result = await writeDecisionsContext(repoRoot, decisions);
67
+ // external: true moves the LOCAL case's real bytes to ~/.align (ALI-1668) - a symlink is
68
+ // left at ALIGN_CONTEXT_PATH, so every read below (and align context inject) is unchanged.
69
+ const result = await writeDecisionsContext(repoRoot, decisions, { external: syncEnv.mode === 'local-embedded' });
66
70
  console.log(`${chalk.green('Wrote')} ${result.contextPath} (${decisions.length} decision${decisions.length === 1 ? '' : 's'})`);
67
71
  if (result.importAdded) {
68
72
  console.log(`${chalk.green('Added')} ${ALIGN_IMPORT_LINE} import to CLAUDE.md`);
@@ -76,6 +80,16 @@ export function registerContextCommand(program) {
76
80
  console.log(`No CLAUDE.md here - add this line to your agent's context file to load it:\n` +
77
81
  ` ${chalk.bold(ALIGN_IMPORT_LINE)}`);
78
82
  }
83
+ // A local graph is private to this machine, so its decisions file stays out of git. Sharing with a team
84
+ // goes through `align share`; a team graph's file is already team content and is left alone.
85
+ if (syncEnv.mode === 'local-embedded') {
86
+ const status = ensureGitignored(repoRoot, ALIGN_CONTEXT_PATH);
87
+ console.log(chalk.dim(`${status === 'added' ? 'Kept out of git (added to .gitignore)' : 'Kept out of git'}: this comes from your local graph, which stays on this machine. ` +
88
+ `To bring decisions to your team, run ${chalk.bold('align share')}.`));
89
+ if (isTrackedByGit(repoRoot, ALIGN_CONTEXT_PATH)) {
90
+ console.log(chalk.yellow(`${ALIGN_CONTEXT_PATH} is already tracked by git, so it can reach your team. Stop tracking it: git rm --cached ${ALIGN_CONTEXT_PATH}`));
91
+ }
92
+ }
79
93
  console.log(chalk.dim('Re-run `align context sync` after new decisions land.'));
80
94
  });
81
95
  context
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,18 @@
1
1
  /**
2
2
  * Align brand rendering for the terminal.
3
3
  *
4
- * The mark is AUTHORED at terminal resolution, not downsampled from the vector logo.
5
- * Resampling the detailed mark to this size was tried first and read as mud: the thin
6
- * strokes and the inner triangle turn to noise below about 40 rows. So this is pixel
7
- * art of the mark - chevron, inner triangle, the teal bar and the two feet - drawn to
8
- * survive at 16x5 cells, packed two pixel rows per terminal row with half blocks.
4
+ * The mark is a small 'A' glyph (ALI-1649), not the vector Align mark: a deliberate
5
+ * brand-direction change, not a correction of the prior chevron art. It went through
6
+ * two mascot attempts first - a robot head (ALI-1642/ALI-1647), then an alien head -
7
+ * both of which Tom read as a skull on sight, in the robot's case through two
8
+ * different eye treatments (background-void eyes, then filled teal eyes: the
9
+ * shape - two separate bilateral marks - was the cue, not the colour). A plain
10
+ * geometric 'A' sidesteps the whole class of problem by not having a face to misread.
11
+ * It is authored at terminal resolution using only block and half-block glyphs - no
12
+ * shading characters (▓▒░), which read as dithered noise rather than a crisp
13
+ * silhouette at this size, and no quadrant characters, which were tried for the
14
+ * original triangular mark in 0.26.2 and render blurry and inset in many terminal
15
+ * fonts.
9
16
  *
10
17
  * On a dark terminal the navy strokes are rendered WHITE, following the brand pack's
11
18
  * own knockout variant (F 4 R): navy on a dark background is invisible, which is why
@@ -15,8 +22,8 @@ export declare const BRAND: {
15
22
  readonly teal: "#43b6ac";
16
23
  readonly navy: "#022863";
17
24
  };
18
- export declare const LOGO_WIDTH = 20;
19
- export declare const LOGO_ROWS = 6;
25
+ export declare const LOGO_WIDTH = 10;
26
+ export declare const LOGO_ROWS = 7;
20
27
  /**
21
28
  * The live positioning line, taken from align-frontend's hero (src/lib/seo.ts).
22
29
  * 'Collaboration with clarity built in' is RETIRED - do not reintroduce it.
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,KAAK;;;CAGR,CAAC;AAWX,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,aAAa,4EAGhB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,cAAc,4BAA4B,CAAC;AAyCxD;;;;iFAIiF;AACjF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuCD,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,EAAE,CAsB5D;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAgClD;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAK5E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAIxD"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,eAAO,MAAM,KAAK;;;CAGR,CAAC;AAWX,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,aAAa,4EAGhB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,cAAc,4BAA4B,CAAC;AAuDxD;;;;iFAIiF;AACjF,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAuCD,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,EAAE,CAsB5D;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAClD,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAgClD;AAED,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,MAAM,CAK5E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAIxD"}
package/dist/lib/brand.js CHANGED
@@ -1,11 +1,18 @@
1
1
  /**
2
2
  * Align brand rendering for the terminal.
3
3
  *
4
- * The mark is AUTHORED at terminal resolution, not downsampled from the vector logo.
5
- * Resampling the detailed mark to this size was tried first and read as mud: the thin
6
- * strokes and the inner triangle turn to noise below about 40 rows. So this is pixel
7
- * art of the mark - chevron, inner triangle, the teal bar and the two feet - drawn to
8
- * survive at 16x5 cells, packed two pixel rows per terminal row with half blocks.
4
+ * The mark is a small 'A' glyph (ALI-1649), not the vector Align mark: a deliberate
5
+ * brand-direction change, not a correction of the prior chevron art. It went through
6
+ * two mascot attempts first - a robot head (ALI-1642/ALI-1647), then an alien head -
7
+ * both of which Tom read as a skull on sight, in the robot's case through two
8
+ * different eye treatments (background-void eyes, then filled teal eyes: the
9
+ * shape - two separate bilateral marks - was the cue, not the colour). A plain
10
+ * geometric 'A' sidesteps the whole class of problem by not having a face to misread.
11
+ * It is authored at terminal resolution using only block and half-block glyphs - no
12
+ * shading characters (▓▒░), which read as dithered noise rather than a crisp
13
+ * silhouette at this size, and no quadrant characters, which were tried for the
14
+ * original triangular mark in 0.26.2 and render blurry and inset in many terminal
15
+ * fonts.
9
16
  *
10
17
  * On a dark terminal the navy strokes are rendered WHITE, following the brand pack's
11
18
  * own knockout variant (F 4 R): navy on a dark background is invisible, which is why
@@ -22,8 +29,8 @@ const WHITE_RGB = [255, 255, 255];
22
29
  const TEAL_256 = 79;
23
30
  const NAVY_256 = 24;
24
31
  const WHITE_256 = 231;
25
- export const LOGO_WIDTH = 20;
26
- export const LOGO_ROWS = 6;
32
+ export const LOGO_WIDTH = 10;
33
+ export const LOGO_ROWS = 7;
27
34
  /**
28
35
  * The live positioning line, taken from align-frontend's hero (src/lib/seo.ts).
29
36
  * 'Collaboration with clarity built in' is RETIRED - do not reintroduce it.
@@ -39,41 +46,55 @@ export const TAGLINE_LINES = [
39
46
  */
40
47
  export const TAGLINE_ACCENT = "don't know the company.";
41
48
  /**
42
- * The mark, DERIVED from the real logo rather than hand-drawn.
49
+ * The 'A' mark: an apex that widens into a triangle, a full-width teal crossbar, and
50
+ * two legs with an open counter between them - a plain geometric letterform, chosen
51
+ * (ALI-1649) specifically because it has no face and so nothing on it can be misread
52
+ * as eyes. Tom: "kinda look like A or rocket" - the crossbar reads as a fuel-line
53
+ * stripe and the legs as fins/landing legs, which is a fair reading and not a
54
+ * contradiction of the brief.
43
55
  *
44
- * Downscaled (stroke-preserving area coverage, 2026-08-31) from the approved 32x10
45
- * sprite, which was itself sampled from the brand pack's F 1 R.png at 32x20 pixels -
46
- * so the geometry is the actual mark and not an approximation of it: a hollow
47
- * triangle with a nested hollow triangle inside, a navy base bar that overhangs to the
48
- * RIGHT only, a teal bar that overhangs to the LEFT, two short teal segments, and two
49
- * slanted navy feet. Earlier hand-drawn versions got every one of those details wrong,
50
- * because they were reconstructed from memory instead of read off the asset. The one
51
- * hand edit at this size is the feet row's COLOUR mask: the teal bar's lower edge
52
- * bleeds into it when multiple source pixel rows are averaged into a single cell row at this scale, and the approved
53
- * sprite's bottom row is navy feet throughout - coverage was left exactly as derived.
56
+ * Built from a 5-column LEFT HALF mirrored into the full 10-column row
57
+ * (`half + reverse(half)`), so left/right symmetry holds by construction instead of
58
+ * by eye - the original (20-wide) triangular mark's hand-balanced string got four
59
+ * rows wrong before this technique was adopted.
54
60
  *
55
- * Only block and half-block glyphs are used. Quadrant characters were tried in 0.26.2
56
- * and render blurry and inset in many terminal fonts, which is the one thing a logo
57
- * cannot afford; these three are universally hinted.
61
+ * A half-block terminal cell packs two pixel-rows into one glyph, and can only carry
62
+ * ONE colour: whichever pixel-row is present sets both the glyph (█/▀/▄) and the
63
+ * colour. So no cell may have a non-background colour on both its top and bottom
64
+ * pixel-row where those two colours differ. Every row-pair here uses an identical
65
+ * half pattern for both its pixel-rows, so the shape is clash-free without a
66
+ * hand-patched exception the way the original triangular mark's feet row needed one.
58
67
  *
59
- * GLYPHS holds the shape, COLOURS names each cell's brand colour, and a test asserts
60
- * they agree cell for cell.
68
+ * Row budget: `banner()` places `ALIGN®`, the two tagline lines, and the version at
69
+ * `right[textTop]`..`right[textTop + 2]` and `right[textTop + 4]`; brand.test.ts
70
+ * asserts the two tagline rows are never teal from the mark, only from text. At
71
+ * `LOGO_ROWS=7` (`textTop=1`) that's rows 2 and 3 - this mark keeps its only teal
72
+ * (the apex tip and the crossbar) on rows 0 and 4, both outside that pair. A future
73
+ * resize must keep every teal cell off whichever rows map to the tagline.
74
+ *
75
+ * GLYPHS holds the shape, COLOURS names each cell's brand colour ('N' navy/white-
76
+ * knockout, 'T' teal, ' ' none); the two must agree cell for cell (space iff space).
77
+ * Both constants are private, so brand.test.ts checks this through the public
78
+ * `logoLines` output instead of importing them directly: every visible glyph
79
+ * character must carry a colour escape, and every space must carry none.
61
80
  */
62
81
  const GLYPHS = [
63
- ' ▄██ ',
64
- ' ▄█▀▄ █▄ ',
65
- ' █▀▄█▀█▄▀█ ',
66
- ' ▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ',
67
- '▀▀▀██████▀▀▀▀█████ ',
68
- ' ██▄▄██ █▄▄██▄',
82
+ ' ██ ',
83
+ ' ████ ',
84
+ ' ██████ ',
85
+ ' ████████ ',
86
+ '██████████',
87
+ '██ ██',
88
+ '█ █',
69
89
  ];
70
90
  const COLOURS = [
71
- ' NNN ',
72
- ' NNNN NN ',
73
- ' NNNNNNNNN ',
74
- ' NNNNNNNNNNNNNN ',
75
- 'TTTTTTTTTTTTTTTTTT ',
76
- ' NNNNNN NNNNNN',
91
+ ' TT ',
92
+ ' NNNN ',
93
+ ' NNNNNN ',
94
+ ' NNNNNNNN ',
95
+ 'TTTTTTTTTT',
96
+ 'NN NN',
97
+ 'N N',
77
98
  ];
78
99
  function resolveColor(o) {
79
100
  if (typeof o.color === 'boolean')
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/lib/brand.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Adds `relPath` to the repo's `.gitignore` unless it is already ignored. Idempotent. */
2
+ export declare function ensureGitignored(repoRoot: string, relPath: string): 'added' | 'already';
3
+ /** Is `relPath` already tracked by git? False outside a repo, and never throws. */
4
+ export declare function isTrackedByGit(repoRoot: string, relPath: string): boolean;
5
+ //# sourceMappingURL=context-local-only.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-local-only.d.ts","sourceRoot":"","sources":["../../src/lib/context-local-only.ts"],"names":[],"mappings":"AAsBA,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAYvF;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOzE"}
@@ -0,0 +1,47 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ /**
5
+ * Keeps the decisions file written by `align context sync` on this machine when the graph behind it is local.
6
+ *
7
+ * A local graph is private: it is built with personal read-only tokens, and nothing in it leaves the machine
8
+ * until `align share`, which previews each decision, scans for secrets and needs a person's yes. The decisions
9
+ * file carries titles and source links, so a committed copy would reach every colleague and every agent in the
10
+ * repo without any of that. Ignoring it in git keeps the file useful to the agent on this machine, and leaves
11
+ * sharing to the one path that was built for it.
12
+ */
13
+ /** The `.gitignore` lines that already cover `relPath` (an exact path, its directory, or the directory's contents). */
14
+ function covers(line, relPath) {
15
+ const t = line.trim().replace(/^\//, '');
16
+ if (t === '' || t.startsWith('#') || t.startsWith('!'))
17
+ return false;
18
+ const dir = path.posix.dirname(relPath);
19
+ return t === relPath || t === dir || t === `${dir}/` || t === `${dir}/*`;
20
+ }
21
+ /** Adds `relPath` to the repo's `.gitignore` unless it is already ignored. Idempotent. */
22
+ export function ensureGitignored(repoRoot, relPath) {
23
+ const file = path.join(repoRoot, '.gitignore');
24
+ let existing = '';
25
+ try {
26
+ existing = fs.readFileSync(file, 'utf8');
27
+ }
28
+ catch {
29
+ // No .gitignore yet: the first line creates it.
30
+ }
31
+ if (existing.split('\n').some((l) => covers(l, relPath)))
32
+ return 'already';
33
+ const sep = existing === '' || existing.endsWith('\n') ? '' : '\n';
34
+ fs.writeFileSync(file, `${existing}${sep}${relPath}\n`);
35
+ return 'added';
36
+ }
37
+ /** Is `relPath` already tracked by git? False outside a repo, and never throws. */
38
+ export function isTrackedByGit(repoRoot, relPath) {
39
+ try {
40
+ execFileSync('git', ['-C', repoRoot, 'ls-files', '--error-unmatch', '--', relPath], { stdio: 'pipe' });
41
+ return true;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ //# sourceMappingURL=context-local-only.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-local-only.js","sourceRoot":"","sources":["../../src/lib/context-local-only.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;GAQG;AAEH,uHAAuH;AACvH,SAAS,MAAM,CAAC,IAAY,EAAE,OAAe;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC;AAC3E,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,MAAM,GAAG,GAAG,QAAQ,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,QAAQ,GAAG,GAAG,GAAG,OAAO,IAAI,CAAC,CAAC;IACxD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAe;IAC9D,IAAI,CAAC;QACH,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -15,6 +15,22 @@
15
15
  * OPEN CORE. Nothing here selects or ranks anything. Which decisions are current, relevant and
16
16
  * unsuperseded is a gateway query; this module formats a list and writes a file, which is
17
17
  * plumbing.
18
+ *
19
+ * EXTERNAL STORAGE (ALI-1668). A LOCAL graph's content is personal (built with the user's own
20
+ * read-only tokens), so it must never be representable in the git working tree at all - not
21
+ * even gitignored, which is a convention a `git add -f`, an edited line, or a merge dropping it
22
+ * can all bypass silently. `{ external: true }` writes the real bytes to
23
+ * `~/.align/contexts/<hash>/decisions.md` (the same home-directory convention that already
24
+ * holds the saved connector tokens and the local graph DB itself - see private-files.ts) and
25
+ * leaves a SYMLINK at `.align/decisions.md` pointing there. Every existing reader - the
26
+ * CLAUDE.md import, `align context inject`, the gitignore/tracked-by-git checks in
27
+ * commands/context.ts - keeps working completely unchanged, because `fs.readFileSync` and
28
+ * `fs.existsSync` follow a symlink transparently; only the WRITE path needed to change.
29
+ *
30
+ * Symlinks need POSIX semantics Windows does not give an unprivileged process, so on win32 this
31
+ * falls back to the plain in-repo file - today's behaviour, unprotected beyond gitignore, but
32
+ * no worse than before. Best effort by platform, the same shape as every other
33
+ * platform-dependent hardening in private-files.ts.
18
34
  */
19
35
  export interface ContextDecision {
20
36
  title: string;
@@ -58,6 +74,13 @@ export interface WriteResult {
58
74
  /** True only when this run added the import line, so a caller can say so once. */
59
75
  importAdded: boolean;
60
76
  }
77
+ /**
78
+ * Where a LOCAL graph's decisions file lives outside the repo, keyed by the repo's resolved
79
+ * absolute path so two repos (or two worktrees of the same repo) never collide and never share
80
+ * a file. A regenerable cache, not identity-critical data: re-running `align context sync`
81
+ * rebuilds it, so a hash collision or a moved/renamed checkout costs a re-sync, not data loss.
82
+ */
83
+ export declare function externalContextPath(repoRoot: string): string;
61
84
  /**
62
85
  * Write the owned context file, and add the import line to CLAUDE.md if it is there.
63
86
  *
@@ -68,6 +91,11 @@ export interface WriteResult {
68
91
  * Idempotent on disk, which is the acceptance test for the whole feature rather than a detail:
69
92
  * a file that differs between runs turns every regeneration into a git diff in someone else's
70
93
  * repo. The renderer carries no timestamp for exactly this reason.
94
+ *
95
+ * `opts.external`: the local-graph case (ALI-1668, see the file header). Every existing caller
96
+ * omits it and gets byte-for-byte the same plain-file behaviour as before this option existed.
71
97
  */
72
- export declare function writeDecisionsContext(repoRoot: string, decisions: ContextDecision[]): Promise<WriteResult>;
98
+ export declare function writeDecisionsContext(repoRoot: string, decisions: ContextDecision[], opts?: {
99
+ external?: boolean;
100
+ }): Promise<WriteResult>;
73
101
  //# sourceMappingURL=decisions-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"decisions-context.d.ts","sourceRoot":"","sources":["../../src/lib/decisions-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;qEAGiE;IACjE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD,eAAO,MAAM,iBAAiB,yBAA2B,CAAC;AA6B1D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAgCxE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAAE,GAC3B,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
1
+ {"version":3,"file":"decisions-context.d.ts","sourceRoot":"","sources":["../../src/lib/decisions-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AASH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;qEAGiE;IACjE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,wBAAwB,CAAC;AACxD,eAAO,MAAM,iBAAiB,yBAA2B,CAAC;AA6B1D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM,CAgCxE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5D;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAAE,EAC5B,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
@@ -15,10 +15,29 @@
15
15
  * OPEN CORE. Nothing here selects or ranks anything. Which decisions are current, relevant and
16
16
  * unsuperseded is a gateway query; this module formats a list and writes a file, which is
17
17
  * plumbing.
18
+ *
19
+ * EXTERNAL STORAGE (ALI-1668). A LOCAL graph's content is personal (built with the user's own
20
+ * read-only tokens), so it must never be representable in the git working tree at all - not
21
+ * even gitignored, which is a convention a `git add -f`, an edited line, or a merge dropping it
22
+ * can all bypass silently. `{ external: true }` writes the real bytes to
23
+ * `~/.align/contexts/<hash>/decisions.md` (the same home-directory convention that already
24
+ * holds the saved connector tokens and the local graph DB itself - see private-files.ts) and
25
+ * leaves a SYMLINK at `.align/decisions.md` pointing there. Every existing reader - the
26
+ * CLAUDE.md import, `align context inject`, the gitignore/tracked-by-git checks in
27
+ * commands/context.ts - keeps working completely unchanged, because `fs.readFileSync` and
28
+ * `fs.existsSync` follow a symlink transparently; only the WRITE path needed to change.
29
+ *
30
+ * Symlinks need POSIX semantics Windows does not give an unprivileged process, so on win32 this
31
+ * falls back to the plain in-repo file - today's behaviour, unprotected beyond gitignore, but
32
+ * no worse than before. Best effort by platform, the same shape as every other
33
+ * platform-dependent hardening in private-files.ts.
18
34
  */
35
+ import { createHash } from 'node:crypto';
36
+ import fs from 'node:fs';
19
37
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
20
38
  import path from 'node:path';
21
39
  import { deciderLabel } from './decider-kind.js';
40
+ import { alignConfigDir, ensurePrivateDir, writePrivateFile } from './private-files.js';
22
41
  export const ALIGN_CONTEXT_PATH = '.align/decisions.md';
23
42
  export const ALIGN_IMPORT_LINE = `@${ALIGN_CONTEXT_PATH}`;
24
43
  /**
@@ -98,6 +117,40 @@ export function appendImportLine(claudeMd) {
98
117
  const separator = claudeMd.endsWith('\n') ? '' : '\n';
99
118
  return `${claudeMd}${separator}\n${ALIGN_IMPORT_LINE}\n`;
100
119
  }
120
+ /**
121
+ * Where a LOCAL graph's decisions file lives outside the repo, keyed by the repo's resolved
122
+ * absolute path so two repos (or two worktrees of the same repo) never collide and never share
123
+ * a file. A regenerable cache, not identity-critical data: re-running `align context sync`
124
+ * rebuilds it, so a hash collision or a moved/renamed checkout costs a re-sync, not data loss.
125
+ */
126
+ export function externalContextPath(repoRoot) {
127
+ const key = createHash('sha256').update(path.resolve(repoRoot)).digest('hex').slice(0, 16);
128
+ return path.join(alignConfigDir(), 'contexts', key, 'decisions.md');
129
+ }
130
+ /**
131
+ * Best effort: write `rendered` to the external per-repo path and leave a symlink at
132
+ * `inRepoTarget` pointing there. Returns false (never throws) on any failure - a read-only
133
+ * filesystem, a POSIX symlink permission denied by an unusual mount, or simply win32, which
134
+ * this does not even attempt - so the caller can fall through to a plain in-repo file exactly
135
+ * as before this option existed.
136
+ */
137
+ function tryWriteExternalAndLink(repoRoot, inRepoTarget, rendered) {
138
+ if (process.platform === 'win32')
139
+ return false;
140
+ try {
141
+ const external = externalContextPath(repoRoot);
142
+ ensurePrivateDir(path.dirname(external));
143
+ writePrivateFile(external, rendered);
144
+ // A prior run (plain file, or an old version's committed copy - the migration case) must
145
+ // not block the symlink: unlink whatever is there first, ENOENT included.
146
+ fs.rmSync(inRepoTarget, { force: true });
147
+ fs.symlinkSync(external, inRepoTarget);
148
+ return true;
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ }
101
154
  /**
102
155
  * Write the owned context file, and add the import line to CLAUDE.md if it is there.
103
156
  *
@@ -108,11 +161,17 @@ export function appendImportLine(claudeMd) {
108
161
  * Idempotent on disk, which is the acceptance test for the whole feature rather than a detail:
109
162
  * a file that differs between runs turns every regeneration into a git diff in someone else's
110
163
  * repo. The renderer carries no timestamp for exactly this reason.
164
+ *
165
+ * `opts.external`: the local-graph case (ALI-1668, see the file header). Every existing caller
166
+ * omits it and gets byte-for-byte the same plain-file behaviour as before this option existed.
111
167
  */
112
- export async function writeDecisionsContext(repoRoot, decisions) {
168
+ export async function writeDecisionsContext(repoRoot, decisions, opts = {}) {
113
169
  const target = path.join(repoRoot, ALIGN_CONTEXT_PATH);
114
170
  await mkdir(path.dirname(target), { recursive: true });
115
- await writeFile(target, renderDecisionsFile(decisions), 'utf8');
171
+ const rendered = renderDecisionsFile(decisions);
172
+ const linked = opts.external ? tryWriteExternalAndLink(repoRoot, target, rendered) : false;
173
+ if (!linked)
174
+ await writeFile(target, rendered, 'utf8');
116
175
  const claudePath = path.join(repoRoot, 'CLAUDE.md');
117
176
  let importAdded = false;
118
177
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"decisions-context.js","sourceRoot":"","sources":["../../src/lib/decisions-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decisions-context.js","sourceRoot":"","sources":["../../src/lib/decisions-context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aligndottech/cli",
3
- "version": "0.54.0",
3
+ "version": "0.55.1",
4
4
  "mcpName": "io.github.aligndottech/cli",
5
5
  "type": "module",
6
6
  "description": "Align CLI - capture decisions, check alignment, and manage connectors",