@aligndottech/cli 0.1.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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/dist/commands/capture.d.ts +3 -0
  4. package/dist/commands/capture.d.ts.map +1 -0
  5. package/dist/commands/capture.js +74 -0
  6. package/dist/commands/capture.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +94 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/connector/index.d.ts +3 -0
  12. package/dist/commands/connector/index.d.ts.map +1 -0
  13. package/dist/commands/connector/index.js +145 -0
  14. package/dist/commands/connector/index.js.map +1 -0
  15. package/dist/commands/decisions/index.d.ts +3 -0
  16. package/dist/commands/decisions/index.d.ts.map +1 -0
  17. package/dist/commands/decisions/index.js +91 -0
  18. package/dist/commands/decisions/index.js.map +1 -0
  19. package/dist/commands/dev/index.d.ts +3 -0
  20. package/dist/commands/dev/index.d.ts.map +1 -0
  21. package/dist/commands/dev/index.js +226 -0
  22. package/dist/commands/dev/index.js.map +1 -0
  23. package/dist/commands/drift.d.ts +3 -0
  24. package/dist/commands/drift.d.ts.map +1 -0
  25. package/dist/commands/drift.js +51 -0
  26. package/dist/commands/drift.js.map +1 -0
  27. package/dist/commands/env.d.ts +3 -0
  28. package/dist/commands/env.d.ts.map +1 -0
  29. package/dist/commands/env.js +28 -0
  30. package/dist/commands/env.js.map +1 -0
  31. package/dist/commands/import/confluence.d.ts +3 -0
  32. package/dist/commands/import/confluence.d.ts.map +1 -0
  33. package/dist/commands/import/confluence.js +43 -0
  34. package/dist/commands/import/confluence.js.map +1 -0
  35. package/dist/commands/import/git.d.ts +3 -0
  36. package/dist/commands/import/git.d.ts.map +1 -0
  37. package/dist/commands/import/git.js +59 -0
  38. package/dist/commands/import/git.js.map +1 -0
  39. package/dist/commands/import/github.d.ts +3 -0
  40. package/dist/commands/import/github.d.ts.map +1 -0
  41. package/dist/commands/import/github.js +36 -0
  42. package/dist/commands/import/github.js.map +1 -0
  43. package/dist/commands/import/gitlab.d.ts +3 -0
  44. package/dist/commands/import/gitlab.d.ts.map +1 -0
  45. package/dist/commands/import/gitlab.js +37 -0
  46. package/dist/commands/import/gitlab.js.map +1 -0
  47. package/dist/commands/import/jira.d.ts +3 -0
  48. package/dist/commands/import/jira.d.ts.map +1 -0
  49. package/dist/commands/import/jira.js +43 -0
  50. package/dist/commands/import/jira.js.map +1 -0
  51. package/dist/commands/import/linear.d.ts +3 -0
  52. package/dist/commands/import/linear.d.ts.map +1 -0
  53. package/dist/commands/import/linear.js +36 -0
  54. package/dist/commands/import/linear.js.map +1 -0
  55. package/dist/commands/import/notion.d.ts +3 -0
  56. package/dist/commands/import/notion.d.ts.map +1 -0
  57. package/dist/commands/import/notion.js +41 -0
  58. package/dist/commands/import/notion.js.map +1 -0
  59. package/dist/commands/import/slack.d.ts +3 -0
  60. package/dist/commands/import/slack.d.ts.map +1 -0
  61. package/dist/commands/import/slack.js +46 -0
  62. package/dist/commands/import/slack.js.map +1 -0
  63. package/dist/commands/import.d.ts +3 -0
  64. package/dist/commands/import.d.ts.map +1 -0
  65. package/dist/commands/import.js +285 -0
  66. package/dist/commands/import.js.map +1 -0
  67. package/dist/commands/links.d.ts +3 -0
  68. package/dist/commands/links.d.ts.map +1 -0
  69. package/dist/commands/links.js +59 -0
  70. package/dist/commands/links.js.map +1 -0
  71. package/dist/commands/login.d.ts +3 -0
  72. package/dist/commands/login.d.ts.map +1 -0
  73. package/dist/commands/login.js +90 -0
  74. package/dist/commands/login.js.map +1 -0
  75. package/dist/commands/mcp.d.ts +3 -0
  76. package/dist/commands/mcp.d.ts.map +1 -0
  77. package/dist/commands/mcp.js +162 -0
  78. package/dist/commands/mcp.js.map +1 -0
  79. package/dist/commands/search.d.ts +3 -0
  80. package/dist/commands/search.d.ts.map +1 -0
  81. package/dist/commands/search.js +42 -0
  82. package/dist/commands/search.js.map +1 -0
  83. package/dist/commands/spaces.d.ts +3 -0
  84. package/dist/commands/spaces.d.ts.map +1 -0
  85. package/dist/commands/spaces.js +39 -0
  86. package/dist/commands/spaces.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +43 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/lib/config.d.ts +18 -0
  92. package/dist/lib/config.d.ts.map +1 -0
  93. package/dist/lib/config.js +49 -0
  94. package/dist/lib/config.js.map +1 -0
  95. package/dist/lib/env-resolver.d.ts +5 -0
  96. package/dist/lib/env-resolver.d.ts.map +1 -0
  97. package/dist/lib/env-resolver.js +14 -0
  98. package/dist/lib/env-resolver.js.map +1 -0
  99. package/dist/lib/fetchers/confluence.d.ts +8 -0
  100. package/dist/lib/fetchers/confluence.d.ts.map +1 -0
  101. package/dist/lib/fetchers/confluence.js +27 -0
  102. package/dist/lib/fetchers/confluence.js.map +1 -0
  103. package/dist/lib/fetchers/github.d.ts +6 -0
  104. package/dist/lib/fetchers/github.d.ts.map +1 -0
  105. package/dist/lib/fetchers/github.js +43 -0
  106. package/dist/lib/fetchers/github.js.map +1 -0
  107. package/dist/lib/fetchers/gitlab.d.ts +7 -0
  108. package/dist/lib/fetchers/gitlab.d.ts.map +1 -0
  109. package/dist/lib/fetchers/gitlab.js +24 -0
  110. package/dist/lib/fetchers/gitlab.js.map +1 -0
  111. package/dist/lib/fetchers/jira.d.ts +8 -0
  112. package/dist/lib/fetchers/jira.d.ts.map +1 -0
  113. package/dist/lib/fetchers/jira.js +45 -0
  114. package/dist/lib/fetchers/jira.js.map +1 -0
  115. package/dist/lib/fetchers/linear.d.ts +6 -0
  116. package/dist/lib/fetchers/linear.d.ts.map +1 -0
  117. package/dist/lib/fetchers/linear.js +58 -0
  118. package/dist/lib/fetchers/linear.js.map +1 -0
  119. package/dist/lib/fetchers/notion.d.ts +6 -0
  120. package/dist/lib/fetchers/notion.d.ts.map +1 -0
  121. package/dist/lib/fetchers/notion.js +47 -0
  122. package/dist/lib/fetchers/notion.js.map +1 -0
  123. package/dist/lib/fetchers/slack.d.ts +7 -0
  124. package/dist/lib/fetchers/slack.d.ts.map +1 -0
  125. package/dist/lib/fetchers/slack.js +62 -0
  126. package/dist/lib/fetchers/slack.js.map +1 -0
  127. package/dist/lib/gateway-client.d.ts +205 -0
  128. package/dist/lib/gateway-client.d.ts.map +1 -0
  129. package/dist/lib/gateway-client.js +187 -0
  130. package/dist/lib/gateway-client.js.map +1 -0
  131. package/dist/lib/git.d.ts +23 -0
  132. package/dist/lib/git.d.ts.map +1 -0
  133. package/dist/lib/git.js +92 -0
  134. package/dist/lib/git.js.map +1 -0
  135. package/dist/lib/personal-import.d.ts +8 -0
  136. package/dist/lib/personal-import.d.ts.map +1 -0
  137. package/dist/lib/personal-import.js +64 -0
  138. package/dist/lib/personal-import.js.map +1 -0
  139. package/dist/lib/process.d.ts +7 -0
  140. package/dist/lib/process.d.ts.map +1 -0
  141. package/dist/lib/process.js +48 -0
  142. package/dist/lib/process.js.map +1 -0
  143. package/dist/lib/resolve-env.d.ts +3 -0
  144. package/dist/lib/resolve-env.d.ts.map +1 -0
  145. package/dist/lib/resolve-env.js +13 -0
  146. package/dist/lib/resolve-env.js.map +1 -0
  147. package/dist/lib/table.d.ts +7 -0
  148. package/dist/lib/table.d.ts.map +1 -0
  149. package/dist/lib/table.js +16 -0
  150. package/dist/lib/table.js.map +1 -0
  151. package/dist/types.d.ts +4 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +25 -0
  154. package/dist/types.js.map +1 -0
  155. package/package.json +43 -0
@@ -0,0 +1,187 @@
1
+ export class GatewayError extends Error {
2
+ statusCode;
3
+ constructor(message, statusCode) {
4
+ super(message);
5
+ this.statusCode = statusCode;
6
+ this.name = 'GatewayError';
7
+ }
8
+ }
9
+ export function createGatewayClient(env) {
10
+ const { gatewayUrl, authToken, tenantId } = env;
11
+ function buildHeaders() {
12
+ const h = { 'Content-Type': 'application/json' };
13
+ if (authToken)
14
+ h['Authorization'] = `Bearer ${authToken}`;
15
+ if (tenantId)
16
+ h['x-tenant-id'] = tenantId;
17
+ return h;
18
+ }
19
+ async function request(path, options = {}) {
20
+ try {
21
+ const res = await fetch(`${gatewayUrl}${path}`, {
22
+ ...options,
23
+ headers: { ...buildHeaders(), ...(options.headers ?? {}) },
24
+ });
25
+ if (!res.ok)
26
+ throw new GatewayError(`Gateway returned ${res.status} for ${path}`, res.status);
27
+ return res.json();
28
+ }
29
+ catch (err) {
30
+ if (err instanceof GatewayError)
31
+ throw err;
32
+ throw new GatewayError(`Cannot reach gateway at ${gatewayUrl}`, 0);
33
+ }
34
+ }
35
+ return {
36
+ async whoami() {
37
+ return request('/auth/me');
38
+ },
39
+ // GET /integrations returns { all: ConnectorConfig[], enabled: string[] }
40
+ // Merge into a flat ConnectorInfo[] with status derived from the enabled list
41
+ async listConnectors() {
42
+ const data = await request('/integrations');
43
+ const enabledSet = new Set(data.enabled);
44
+ return data.all.map(c => ({
45
+ key: c.key,
46
+ name: c.name,
47
+ description: c.description,
48
+ status: enabledSet.has(c.key) ? 'active' : 'inactive',
49
+ configured: enabledSet.has(c.key),
50
+ }));
51
+ },
52
+ // GET /integrations/:key/health returns { ok: boolean }
53
+ async getConnectorHealth(key) {
54
+ try {
55
+ const data = await request(`/integrations/${key}/health`);
56
+ return { status: data.ok ? 'healthy' : 'unhealthy', connector: key };
57
+ }
58
+ catch {
59
+ return { status: 'unhealthy', connector: key };
60
+ }
61
+ },
62
+ // POST /integrations/:key/enable returns { auth_url }
63
+ async startOAuth(key) {
64
+ const data = await request(`/integrations/${key}/enable`, { method: 'POST', body: '{}' });
65
+ return { authUrl: data.auth_url };
66
+ },
67
+ async disableConnector(key) {
68
+ await request(`/integrations/${key}/disable`, { method: 'POST', body: '{}' });
69
+ },
70
+ // URL capture only — gateway's registry.resolveUrl() handles detection from the URL
71
+ // Raw text capture is not supported by POST /ingest (no cli:// pattern in registry)
72
+ async captureDecision(input, platform) {
73
+ return request('/ingest', {
74
+ method: 'POST',
75
+ body: JSON.stringify({ source_url: input, platform }),
76
+ });
77
+ },
78
+ async searchDecisions(q, limit = 10) {
79
+ return request('/decisions/smart-search', {
80
+ method: 'POST',
81
+ body: JSON.stringify({ q, limit }),
82
+ });
83
+ },
84
+ async listDecisions(params = {}) {
85
+ const qs = new URLSearchParams(Object.entries(params).map(([k, v]) => [k, String(v)]));
86
+ return request(`/snapshots?${qs}`);
87
+ },
88
+ async getDecision(id) {
89
+ return request(`/snapshots/${id}`);
90
+ },
91
+ async checkAlignment(diff, context) {
92
+ return request('/alignment/check', {
93
+ method: 'POST',
94
+ body: JSON.stringify({
95
+ action_type: 'pull_request',
96
+ content: diff.slice(0, 8000),
97
+ context: context?.slice(0, 1000),
98
+ }),
99
+ });
100
+ },
101
+ async checkDrift(decisionId, content, sourceType = 'manual_input') {
102
+ return request(`/decisions/${decisionId}/drift-check`, {
103
+ method: 'POST',
104
+ body: JSON.stringify({ source_type: sourceType, content }),
105
+ });
106
+ },
107
+ async getImpact(decisionId) {
108
+ return request(`/decisions/${decisionId}/impact`);
109
+ },
110
+ async getConflicts() {
111
+ return request('/decision-links?relation=conflicts_with,contradicts&paginated=true&limit=50');
112
+ },
113
+ async bulkStartImport(connectors, config) {
114
+ return request('/import/jobs/bulk-start', {
115
+ method: 'POST',
116
+ body: JSON.stringify({ connectors, config: config ?? {} }),
117
+ });
118
+ },
119
+ async startImportJob(connector, config) {
120
+ const job = await request('/import/jobs', {
121
+ method: 'POST',
122
+ body: JSON.stringify({ connector_key: connector, config }),
123
+ });
124
+ await request(`/import/jobs/${job.id}/start`, { method: 'POST', body: '{}' });
125
+ return job;
126
+ },
127
+ async getScanRun(scanRunId) {
128
+ return request(`/import/scan-runs/${scanRunId}`);
129
+ },
130
+ // Gateway GET /import/jobs only supports limit/offset — filter client-side
131
+ async listImportJobs(filters) {
132
+ const jobs = await request('/import/jobs');
133
+ if (!filters)
134
+ return jobs;
135
+ return jobs.filter(j => (!filters.status || j.status === filters.status) &&
136
+ (!filters.connector || j.connector_key === filters.connector));
137
+ },
138
+ // GET /import/scan-runs returns { scan_runs: ScanRun[] }
139
+ async listScanRuns() {
140
+ const data = await request('/import/scan-runs');
141
+ return data.scan_runs;
142
+ },
143
+ // GET /import/suggestions returns { suggestions, counts } — uses job_id not import_job_id
144
+ async listSuggestions(jobId, status = 'pending') {
145
+ const params = new URLSearchParams({ status });
146
+ if (jobId)
147
+ params.set('job_id', jobId);
148
+ const data = await request(`/import/suggestions?${params}`);
149
+ return data.suggestions;
150
+ },
151
+ async bulkApproveSuggestions(ids) {
152
+ if (ids.length <= 100) {
153
+ return request('/import/suggestions/bulk', {
154
+ method: 'POST',
155
+ body: JSON.stringify({ action: 'approve', suggestion_ids: ids }),
156
+ });
157
+ }
158
+ // >100 suggestions go through async job — no immediate created_decisions count
159
+ const jobData = await request('/import/suggestions/bulk-async', {
160
+ method: 'POST',
161
+ body: JSON.stringify({ action: 'approve', suggestion_ids: ids }),
162
+ });
163
+ return { async: true, job_id: jobData.job_id, stream_url: jobData.stream_url };
164
+ },
165
+ async listSpaces() {
166
+ return request('/spaces');
167
+ },
168
+ async listDecisionLinks(filters) {
169
+ const entries = Object.entries(filters ?? {}).filter(([, v]) => Boolean(v));
170
+ const qs = new URLSearchParams(entries);
171
+ return request(`/decision-links${qs.size ? `?${qs}` : ''}`);
172
+ },
173
+ async getDriftSummary() {
174
+ return request('/drift-summary');
175
+ },
176
+ async ingestBatch(items) {
177
+ return request('/ingest/batch', {
178
+ method: 'POST',
179
+ body: JSON.stringify({ decisions: items }),
180
+ });
181
+ },
182
+ getStreamUrl(jobId) {
183
+ return `${gatewayUrl}/import/jobs/${jobId}/stream`;
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=gateway-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-client.js","sourceRoot":"","sources":["../../src/lib/gateway-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface GitCommit {
2
+ sha: string;
3
+ subject: string;
4
+ body: string;
5
+ author: string;
6
+ date: string;
7
+ filesChanged: string[];
8
+ }
9
+ export declare function getCommitHistory(opts: {
10
+ limit?: number;
11
+ from?: string;
12
+ to?: string;
13
+ branch?: string;
14
+ }): Promise<GitCommit[]>;
15
+ export declare function isDecisionCommit(subject: string): boolean;
16
+ export declare function getRemoteUrl(): Promise<string | null>;
17
+ export declare function buildCommitUrl(remoteUrl: string | null, sha: string): string;
18
+ export declare function formatCommitAsText(commit: GitCommit, commitUrl?: string): string;
19
+ export declare function getStagedDiff(): Promise<string>;
20
+ export declare function getHeadDiff(): Promise<string>;
21
+ export declare function getCurrentBranch(): Promise<string>;
22
+ export declare function isGitRepo(): Promise<boolean>;
23
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA0BvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO3D;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAS5E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAUhF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAGrD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAGnD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGxD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAOlD"}
@@ -0,0 +1,92 @@
1
+ import { execa } from 'execa';
2
+ export async function getCommitHistory(opts) {
3
+ const SEP = '\x1f';
4
+ const args = [`--format=%H${SEP}%s${SEP}%aN${SEP}%aI`, '--no-merges', '-n', String(opts.limit ?? 100)];
5
+ if (opts.branch)
6
+ args.push(opts.branch);
7
+ if (opts.from)
8
+ args.push(`--after=${opts.from}`);
9
+ if (opts.to)
10
+ args.push(`--before=${opts.to}`);
11
+ const { stdout } = await execa('git', ['log', ...args]);
12
+ const lines = stdout.split('\n').filter(Boolean);
13
+ const commits = [];
14
+ for (const line of lines) {
15
+ const [sha, subject, author, date] = line.split(SEP);
16
+ if (!sha || !subject)
17
+ continue;
18
+ if (!isDecisionCommit(subject))
19
+ continue;
20
+ const { stdout: stat } = await execa('git', ['show', '--stat', '--format=', sha]);
21
+ const filesChanged = stat.split('\n')
22
+ .filter(l => l.includes('|') || /^\s+\S+.*\|/.test(l))
23
+ .map(l => l.trim().split('|')[0].trim())
24
+ .filter(Boolean)
25
+ .slice(0, 10);
26
+ commits.push({ sha, subject, body: '', author: author ?? '', date: date ?? '', filesChanged });
27
+ }
28
+ return commits;
29
+ }
30
+ export function isDecisionCommit(subject) {
31
+ if (subject.length < 20)
32
+ return false;
33
+ return !/^(fix|chore|wip|merge|revert|bump|update deps|release|typo)/i.test(subject.trim());
34
+ }
35
+ export async function getRemoteUrl() {
36
+ try {
37
+ const { stdout } = await execa('git', ['remote', 'get-url', 'origin']);
38
+ return stdout.trim() || null;
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ export function buildCommitUrl(remoteUrl, sha) {
45
+ if (!remoteUrl)
46
+ return `git://commit/${sha}`;
47
+ const sshGh = remoteUrl.match(/git@github\.com[:/](.+?)(?:\.git)?$/);
48
+ if (sshGh)
49
+ return `https://github.com/${sshGh[1]}/commit/${sha}`;
50
+ const httpsGh = remoteUrl.match(/github\.com[:/](.+?)(?:\.git)?$/);
51
+ if (httpsGh)
52
+ return `https://github.com/${httpsGh[1]}/commit/${sha}`;
53
+ const gl = remoteUrl.match(/gitlab\.com[:/](.+?)(?:\.git)?$/);
54
+ if (gl)
55
+ return `https://gitlab.com/${gl[1]}/-/commit/${sha}`;
56
+ return `git://commit/${sha}`;
57
+ }
58
+ export function formatCommitAsText(commit, commitUrl) {
59
+ const parts = [commit.subject];
60
+ if (commit.body)
61
+ parts.push(commit.body);
62
+ parts.push(`Author: ${commit.author}`);
63
+ parts.push(`Date: ${commit.date}`);
64
+ if (commit.filesChanged.length) {
65
+ parts.push(`Files changed:\n${commit.filesChanged.join('\n')}`);
66
+ }
67
+ if (commitUrl)
68
+ parts.push(`URL: ${commitUrl}`);
69
+ return parts.join('\n\n');
70
+ }
71
+ export async function getStagedDiff() {
72
+ const result = await execa('git', ['diff', '--staged']);
73
+ return result.stdout;
74
+ }
75
+ export async function getHeadDiff() {
76
+ const result = await execa('git', ['diff', 'HEAD']);
77
+ return result.stdout;
78
+ }
79
+ export async function getCurrentBranch() {
80
+ const result = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
81
+ return result.stdout.trim();
82
+ }
83
+ export async function isGitRepo() {
84
+ try {
85
+ await execa('git', ['rev-parse', '--git-dir']);
86
+ return true;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAW9B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAKtC;IACC,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,IAAI,GAAG,CAAC,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;IACvG,IAAI,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO;YAAE,SAAS;QAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAAE,SAAS;QAEzC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QAClF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACvC,MAAM,CAAC,OAAO,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,8DAA8D,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAwB,EAAE,GAAW;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,gBAAgB,GAAG,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACrE,IAAI,KAAK;QAAE,OAAO,sBAAsB,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;IACjE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACnE,IAAI,OAAO;QAAE,OAAO,sBAAsB,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;IACrE,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC9D,IAAI,EAAE;QAAE,OAAO,sBAAsB,EAAE,CAAC,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC;IAC7D,OAAO,gBAAgB,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,SAAkB;IACtE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { BatchIngestItem, createGatewayClient } from './gateway-client.js';
2
+ export type PersonalImportItem = BatchIngestItem;
3
+ export declare function runPersonalImport(items: PersonalImportItem[], client: ReturnType<typeof createGatewayClient>, opts: {
4
+ label: string;
5
+ approve?: boolean;
6
+ appUrl: string;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=personal-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-import.d.ts","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAIjD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,kBAAkB,EAAE,EAC3B,MAAM,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAC9C,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CA8Df"}
@@ -0,0 +1,64 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import * as p from '@clack/prompts';
4
+ import { renderTable } from './table.js';
5
+ const BATCH_SIZE = 20;
6
+ export async function runPersonalImport(items, client, opts) {
7
+ if (!items.length) {
8
+ p.log.warn(`No items found from ${opts.label}.`);
9
+ return;
10
+ }
11
+ const preview = items.slice(0, 10);
12
+ const more = items.length - preview.length;
13
+ console.log(chalk.bold(`\nFound ${items.length} items from ${opts.label}\n`));
14
+ renderTable([
15
+ { header: 'SOURCE', width: 48 },
16
+ { header: 'TITLE', width: 50 },
17
+ ], preview.map(i => [
18
+ i.source_url.replace(/https?:\/\//, '').slice(0, 46),
19
+ (i.title ?? i.raw_text.split('\n')[0]).slice(0, 48),
20
+ ]));
21
+ if (more > 0)
22
+ console.log(chalk.dim(` ...and ${more} more\n`));
23
+ else
24
+ console.log('');
25
+ if (!opts.approve) {
26
+ const confirmed = await p.confirm({
27
+ message: `Import ${items.length} items to your decision graph?`,
28
+ });
29
+ if (p.isCancel(confirmed) || !confirmed) {
30
+ p.cancel('Cancelled.');
31
+ process.exit(0);
32
+ }
33
+ }
34
+ const batches = [];
35
+ for (let i = 0; i < items.length; i += BATCH_SIZE) {
36
+ batches.push(items.slice(i, i + BATCH_SIZE));
37
+ }
38
+ let total = 0;
39
+ let relatedCount = 0;
40
+ for (let i = 0; i < batches.length; i++) {
41
+ const spinner = ora(`Importing batch ${i + 1}/${batches.length}...`).start();
42
+ try {
43
+ const result = await client.ingestBatch(batches[i]);
44
+ total += result.snapshots.length;
45
+ for (const s of result.snapshots) {
46
+ relatedCount += s.analysis?.relatedDecisions?.length ?? 0;
47
+ }
48
+ spinner.succeed(`Batch ${i + 1}/${batches.length} done (${result.snapshots.length} decisions)`);
49
+ }
50
+ catch (err) {
51
+ spinner.fail(`Batch ${i + 1} failed: ${err.message}`);
52
+ }
53
+ }
54
+ console.log('');
55
+ console.log(chalk.green(`${total} decisions captured from ${opts.label}.`));
56
+ if (relatedCount > 0) {
57
+ console.log(chalk.cyan(`${relatedCount} connections found with existing decisions in your graph.`));
58
+ }
59
+ console.log(chalk.dim('Relationships across all your imported tools are detected automatically in the background.'));
60
+ console.log(chalk.dim(`View at: ${opts.appUrl}/decisions`));
61
+ console.log(chalk.dim('Tip: import more tools to build a richer cross-tool decision graph.'));
62
+ console.log('');
63
+ }
64
+ //# sourceMappingURL=personal-import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-import.js","sourceRoot":"","sources":["../../src/lib/personal-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function isK3dRunning(): Promise<boolean>;
2
+ export declare function isDockerRunning(): Promise<boolean>;
3
+ export declare function isNgrokInstalled(): Promise<boolean>;
4
+ export declare function getNgrokTunnelUrl(): Promise<string | null>;
5
+ export declare function streamDockerLogs(containerName: string): Promise<void>;
6
+ export declare function streamKubectlLogs(connectorKey: string, namespace: string): Promise<void>;
7
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAKrD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAKxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAKzD;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMhE;AAED,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3E;AAED,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9F"}
@@ -0,0 +1,48 @@
1
+ import { execa } from 'execa';
2
+ export async function isK3dRunning() {
3
+ try {
4
+ const r = await execa('k3d', ['cluster', 'list', '--no-headers']);
5
+ return r.stdout.trim().length > 0;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ export async function isDockerRunning() {
12
+ try {
13
+ await execa('docker', ['info', '--format', '{{.ServerVersion}}']);
14
+ return true;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ export async function isNgrokInstalled() {
21
+ try {
22
+ await execa('ngrok', ['version']);
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ }
29
+ export async function getNgrokTunnelUrl() {
30
+ try {
31
+ const res = await fetch('http://localhost:4040/api/tunnels');
32
+ const data = await res.json();
33
+ return data.tunnels.find(t => t.proto === 'https')?.public_url ?? null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ export async function streamDockerLogs(containerName) {
40
+ await execa('docker', ['logs', containerName, '-f', '--tail', '100'], {
41
+ stdout: process.stdout,
42
+ stderr: process.stderr,
43
+ });
44
+ }
45
+ export async function streamKubectlLogs(connectorKey, namespace) {
46
+ await execa('kubectl', ['logs', '-n', namespace, `-lapp=align-connector-${connectorKey}`, '-f', '--tail=100'], { stdout: process.stdout, stderr: process.stderr });
47
+ }
48
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/lib/process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA+D,CAAC;QAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,UAAU,IAAI,IAAI,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,aAAqB;IAC1D,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QACpE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,SAAiB;IAC7E,MAAM,KAAK,CACT,SAAS,EACT,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,YAAY,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,EACtF,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type EnvName } from './config.js';
2
+ export declare function resolveEnv(flagValue?: string): EnvName;
3
+ //# sourceMappingURL=resolve-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-env.d.ts","sourceRoot":"","sources":["../../src/lib/resolve-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAI9D,wBAAgB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAStD"}
@@ -0,0 +1,13 @@
1
+ import { createConfigStore } from './config.js';
2
+ const VALID_ENVS = ['local', 'preview', 'prod'];
3
+ export function resolveEnv(flagValue) {
4
+ if (flagValue && VALID_ENVS.includes(flagValue)) {
5
+ return flagValue;
6
+ }
7
+ const fromEnvVar = process.env['ALIGN_ENV'];
8
+ if (fromEnvVar && VALID_ENVS.includes(fromEnvVar)) {
9
+ return fromEnvVar;
10
+ }
11
+ return createConfigStore().getDefaultEnv();
12
+ }
13
+ //# sourceMappingURL=resolve-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-env.js","sourceRoot":"","sources":["../../src/lib/resolve-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,aAAa,CAAC;AAE9D,MAAM,UAAU,GAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAE3D,MAAM,UAAU,UAAU,CAAC,SAAkB;IAC3C,IAAI,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAoB,CAAC,EAAE,CAAC;QAC3D,OAAO,SAAoB,CAAC;IAC9B,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAqB,CAAC,EAAE,CAAC;QAC7D,OAAO,UAAqB,CAAC;IAC/B,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC,aAAa,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface Column {
2
+ header: string;
3
+ width: number;
4
+ color?: (v: string) => string;
5
+ }
6
+ export declare function renderTable(columns: Column[], rows: string[][]): void;
7
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/lib/table.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAarE"}
@@ -0,0 +1,16 @@
1
+ import chalk from 'chalk';
2
+ export function renderTable(columns, rows) {
3
+ const totalWidth = columns.reduce((s, c) => s + c.width, 0);
4
+ const header = columns.map(c => c.header.padEnd(c.width)).join('');
5
+ console.log(chalk.dim(header));
6
+ console.log(chalk.dim('-'.repeat(totalWidth)));
7
+ for (const row of rows) {
8
+ const line = columns.map((c, i) => {
9
+ const val = (row[i] ?? '').slice(0, c.width - 2).padEnd(c.width);
10
+ return c.color ? c.color(val) : chalk.dim(val);
11
+ }).join('');
12
+ console.log(line);
13
+ }
14
+ console.log('');
15
+ }
16
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/lib/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,UAAU,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type EnvName = 'local' | 'preview' | 'prod';
2
+ export declare const CONNECTOR_PORTS: Record<string, number>;
3
+ export declare const SLACK_REQUIRED_SCOPES: string[];
4
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQlD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAcjC,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,25 @@
1
+ export const CONNECTOR_PORTS = {
2
+ slack: 8081,
3
+ confluence: 8082,
4
+ jira: 8083,
5
+ teams: 8084,
6
+ github: 8085,
7
+ zoom: 8090,
8
+ 'align-mcp': 8088,
9
+ };
10
+ export const SLACK_REQUIRED_SCOPES = [
11
+ 'channels:history',
12
+ 'channels:read',
13
+ 'chat:write',
14
+ 'groups:history',
15
+ 'groups:read',
16
+ 'im:history',
17
+ 'im:read',
18
+ 'mpim:history',
19
+ 'reactions:read',
20
+ 'team:read',
21
+ 'users:read',
22
+ 'users:read.email',
23
+ 'app_mentions:read',
24
+ ];
25
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,WAAW,EAAE,IAAI;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,SAAS;IACT,cAAc;IACd,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,kBAAkB;IAClB,mBAAmB;CACpB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@aligndottech/cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "Align CLI - capture decisions, check alignment, and manage connectors",
6
+ "bin": { "align": "./dist/index.js" },
7
+ "scripts": {
8
+ "build": "tsc -p tsconfig.json",
9
+ "dev": "tsx src/index.ts",
10
+ "typecheck": "tsc -p tsconfig.json --noEmit",
11
+ "lint": "eslint .",
12
+ "test": "vitest run",
13
+ "test:watch": "vitest"
14
+ },
15
+ "dependencies": {
16
+ "commander": "^12.1.0",
17
+ "@clack/prompts": "^0.9.1",
18
+ "chalk": "^5.3.0",
19
+ "ora": "^8.1.1",
20
+ "conf": "^13.0.1",
21
+ "open": "^10.1.0",
22
+ "execa": "^9.5.2",
23
+ "dotenv": "^16.4.7",
24
+ "@modelcontextprotocol/sdk": "^1.29.0",
25
+ "eventsource": "^3.0.2"
26
+ },
27
+ "devDependencies": {
28
+ "@eslint/js": "^9.0.0",
29
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
30
+ "@typescript-eslint/parser": "^8.0.0",
31
+ "@types/node": "^22.0.0",
32
+ "@types/eventsource": "^1.1.15",
33
+ "eslint": "^9.0.0",
34
+ "globals": "^15.0.0",
35
+ "typescript": "^5.6.0",
36
+ "tsx": "^4.19.0",
37
+ "vitest": "^2.1.0"
38
+ },
39
+ "repository": { "type": "git", "url": "https://github.com/aligndottech/align-cli" },
40
+ "engines": { "node": ">=20" },
41
+ "publishConfig": { "access": "public" },
42
+ "files": ["dist", "README.md"]
43
+ }