@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.
- package/LICENSE +21 -0
- package/README.md +152 -0
- package/dist/commands/capture.d.ts +3 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +74 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +94 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/connector/index.d.ts +3 -0
- package/dist/commands/connector/index.d.ts.map +1 -0
- package/dist/commands/connector/index.js +145 -0
- package/dist/commands/connector/index.js.map +1 -0
- package/dist/commands/decisions/index.d.ts +3 -0
- package/dist/commands/decisions/index.d.ts.map +1 -0
- package/dist/commands/decisions/index.js +91 -0
- package/dist/commands/decisions/index.js.map +1 -0
- package/dist/commands/dev/index.d.ts +3 -0
- package/dist/commands/dev/index.d.ts.map +1 -0
- package/dist/commands/dev/index.js +226 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/drift.d.ts +3 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +51 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/env.d.ts +3 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +28 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/import/confluence.d.ts +3 -0
- package/dist/commands/import/confluence.d.ts.map +1 -0
- package/dist/commands/import/confluence.js +43 -0
- package/dist/commands/import/confluence.js.map +1 -0
- package/dist/commands/import/git.d.ts +3 -0
- package/dist/commands/import/git.d.ts.map +1 -0
- package/dist/commands/import/git.js +59 -0
- package/dist/commands/import/git.js.map +1 -0
- package/dist/commands/import/github.d.ts +3 -0
- package/dist/commands/import/github.d.ts.map +1 -0
- package/dist/commands/import/github.js +36 -0
- package/dist/commands/import/github.js.map +1 -0
- package/dist/commands/import/gitlab.d.ts +3 -0
- package/dist/commands/import/gitlab.d.ts.map +1 -0
- package/dist/commands/import/gitlab.js +37 -0
- package/dist/commands/import/gitlab.js.map +1 -0
- package/dist/commands/import/jira.d.ts +3 -0
- package/dist/commands/import/jira.d.ts.map +1 -0
- package/dist/commands/import/jira.js +43 -0
- package/dist/commands/import/jira.js.map +1 -0
- package/dist/commands/import/linear.d.ts +3 -0
- package/dist/commands/import/linear.d.ts.map +1 -0
- package/dist/commands/import/linear.js +36 -0
- package/dist/commands/import/linear.js.map +1 -0
- package/dist/commands/import/notion.d.ts +3 -0
- package/dist/commands/import/notion.d.ts.map +1 -0
- package/dist/commands/import/notion.js +41 -0
- package/dist/commands/import/notion.js.map +1 -0
- package/dist/commands/import/slack.d.ts +3 -0
- package/dist/commands/import/slack.d.ts.map +1 -0
- package/dist/commands/import/slack.js +46 -0
- package/dist/commands/import/slack.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +285 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/links.d.ts +3 -0
- package/dist/commands/links.d.ts.map +1 -0
- package/dist/commands/links.js +59 -0
- package/dist/commands/links.js.map +1 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +90 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +162 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +42 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/spaces.d.ts +3 -0
- package/dist/commands/spaces.d.ts.map +1 -0
- package/dist/commands/spaces.js +39 -0
- package/dist/commands/spaces.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/config.d.ts +18 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +49 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env-resolver.d.ts +5 -0
- package/dist/lib/env-resolver.d.ts.map +1 -0
- package/dist/lib/env-resolver.js +14 -0
- package/dist/lib/env-resolver.js.map +1 -0
- package/dist/lib/fetchers/confluence.d.ts +8 -0
- package/dist/lib/fetchers/confluence.d.ts.map +1 -0
- package/dist/lib/fetchers/confluence.js +27 -0
- package/dist/lib/fetchers/confluence.js.map +1 -0
- package/dist/lib/fetchers/github.d.ts +6 -0
- package/dist/lib/fetchers/github.d.ts.map +1 -0
- package/dist/lib/fetchers/github.js +43 -0
- package/dist/lib/fetchers/github.js.map +1 -0
- package/dist/lib/fetchers/gitlab.d.ts +7 -0
- package/dist/lib/fetchers/gitlab.d.ts.map +1 -0
- package/dist/lib/fetchers/gitlab.js +24 -0
- package/dist/lib/fetchers/gitlab.js.map +1 -0
- package/dist/lib/fetchers/jira.d.ts +8 -0
- package/dist/lib/fetchers/jira.d.ts.map +1 -0
- package/dist/lib/fetchers/jira.js +45 -0
- package/dist/lib/fetchers/jira.js.map +1 -0
- package/dist/lib/fetchers/linear.d.ts +6 -0
- package/dist/lib/fetchers/linear.d.ts.map +1 -0
- package/dist/lib/fetchers/linear.js +58 -0
- package/dist/lib/fetchers/linear.js.map +1 -0
- package/dist/lib/fetchers/notion.d.ts +6 -0
- package/dist/lib/fetchers/notion.d.ts.map +1 -0
- package/dist/lib/fetchers/notion.js +47 -0
- package/dist/lib/fetchers/notion.js.map +1 -0
- package/dist/lib/fetchers/slack.d.ts +7 -0
- package/dist/lib/fetchers/slack.d.ts.map +1 -0
- package/dist/lib/fetchers/slack.js +62 -0
- package/dist/lib/fetchers/slack.js.map +1 -0
- package/dist/lib/gateway-client.d.ts +205 -0
- package/dist/lib/gateway-client.d.ts.map +1 -0
- package/dist/lib/gateway-client.js +187 -0
- package/dist/lib/gateway-client.js.map +1 -0
- package/dist/lib/git.d.ts +23 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +92 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/personal-import.d.ts +8 -0
- package/dist/lib/personal-import.d.ts.map +1 -0
- package/dist/lib/personal-import.js +64 -0
- package/dist/lib/personal-import.js.map +1 -0
- package/dist/lib/process.d.ts +7 -0
- package/dist/lib/process.d.ts.map +1 -0
- package/dist/lib/process.js +48 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/resolve-env.d.ts +3 -0
- package/dist/lib/resolve-env.d.ts.map +1 -0
- package/dist/lib/resolve-env.js +13 -0
- package/dist/lib/resolve-env.js.map +1 -0
- package/dist/lib/table.d.ts +7 -0
- package/dist/lib/table.d.ts.map +1 -0
- package/dist/lib/table.js +16 -0
- package/dist/lib/table.js.map +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Align Technologies Ltd
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Align CLI
|
|
2
|
+
|
|
3
|
+
Capture decisions, check alignment, and query your decision graph from the terminal.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
npm install -g @aligndottech/cli
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Node 20+ required.
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 1. Log in (opens your browser to generate an API token)
|
|
15
|
+
align login
|
|
16
|
+
|
|
17
|
+
# 2. Populate your graph from local git history
|
|
18
|
+
align import git
|
|
19
|
+
|
|
20
|
+
# 3. Search decisions
|
|
21
|
+
align search "authentication strategy"
|
|
22
|
+
|
|
23
|
+
# 4. Browse recent decisions
|
|
24
|
+
align decisions list
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
That's it. No admin setup, no connectors required - `align import git` works anywhere you have a git repo.
|
|
28
|
+
|
|
29
|
+
## Authentication
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
align login # opens browser → paste token
|
|
33
|
+
align login --token algt_... # non-interactive, good for CI
|
|
34
|
+
align whoami # verify current session
|
|
35
|
+
align logout # clear stored credentials
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Tokens are stored locally in your OS config directory. To create one manually, go to **Settings → API Tokens** in the Align web app.
|
|
39
|
+
|
|
40
|
+
## Importing decisions
|
|
41
|
+
|
|
42
|
+
Pull your existing work into the decision graph.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Git commits (no credentials needed)
|
|
46
|
+
align import git
|
|
47
|
+
align import git --limit 200 --from 2024-01-01 --branch main
|
|
48
|
+
align import git --approve # skip confirmation prompt
|
|
49
|
+
|
|
50
|
+
# Personal connectors (use your own credentials, no admin required)
|
|
51
|
+
align import github --token ghp_...
|
|
52
|
+
align import gitlab --token glpat-...
|
|
53
|
+
align import linear --token lin_api_...
|
|
54
|
+
align import jira --domain yourco.atlassian.net --email you@co.com --token ...
|
|
55
|
+
align import confluence --domain yourco.atlassian.net --email you@co.com --token ...
|
|
56
|
+
align import slack --token xoxp-...
|
|
57
|
+
align import notion --token secret_...
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
All import commands preview what will be imported and ask for confirmation before sending anything.
|
|
61
|
+
|
|
62
|
+
## Capturing decisions
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Capture a URL (Slack thread, GitHub PR, Jira ticket, ...)
|
|
66
|
+
align capture https://github.com/org/repo/pull/42
|
|
67
|
+
|
|
68
|
+
# Capture with explicit platform
|
|
69
|
+
align capture https://yourco.atlassian.net/browse/ENG-123 --platform jira
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Searching and browsing
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
align search "why did we choose postgres"
|
|
76
|
+
align decisions list
|
|
77
|
+
align decisions list --space backend
|
|
78
|
+
align decisions get <id>
|
|
79
|
+
align links list # view decision relationships
|
|
80
|
+
align drift # decisions that may be out of date
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## CI alignment check
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
align check # check staged diff against decision graph
|
|
87
|
+
align check --branch main # check current branch vs main
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Returns exit code 1 when alignment issues are found, making it easy to fail a pipeline step.
|
|
91
|
+
|
|
92
|
+
Example GitHub Actions step:
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
- name: Check alignment
|
|
96
|
+
run: align check --branch ${{ github.base_ref }}
|
|
97
|
+
env:
|
|
98
|
+
ALIGN_TOKEN: ${{ secrets.ALIGN_TOKEN }}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Pass the token via `ALIGN_TOKEN` env var or `--token` flag.
|
|
102
|
+
|
|
103
|
+
## MCP server
|
|
104
|
+
|
|
105
|
+
Run Align as an MCP server so AI assistants (Claude, Cursor, etc.) can query your decision graph directly.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
align mcp
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Add to your MCP client config:
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"mcpServers": {
|
|
116
|
+
"align": {
|
|
117
|
+
"command": "align",
|
|
118
|
+
"args": ["mcp"],
|
|
119
|
+
"env": { "ALIGN_TOKEN": "algt_..." }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Environments
|
|
126
|
+
|
|
127
|
+
By default the CLI targets `prod` (`api.align.tech`). Use `--env` or set a sticky default:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
align env set preview # stick to preview for this machine
|
|
131
|
+
align env get # show current default
|
|
132
|
+
align --env local <command> # one-off override
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Environment variables
|
|
136
|
+
|
|
137
|
+
| Variable | Purpose |
|
|
138
|
+
|---|---|
|
|
139
|
+
| `ALIGN_TOKEN` | API token (alternative to `align login`) |
|
|
140
|
+
| `ALIGN_ENV` | Default environment (`prod`, `preview`, `local`) |
|
|
141
|
+
| `ALIGN_GATEWAY_URL` | Override gateway URL (self-hosted) |
|
|
142
|
+
| `ALIGN_TENANT_ID` | Override tenant ID (self-hosted / CI) |
|
|
143
|
+
|
|
144
|
+
## Self-hosted
|
|
145
|
+
|
|
146
|
+
Point the CLI at your own instance:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
align login --env local --token algt_...
|
|
150
|
+
# or
|
|
151
|
+
ALIGN_GATEWAY_URL=https://api.yourco.com align decisions list
|
|
152
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C7D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { resolveEnv } from '../lib/resolve-env.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { createConfigStore } from '../lib/config.js';
|
|
5
|
+
import { createGatewayClient } from '../lib/gateway-client.js';
|
|
6
|
+
import { resolveAppUrl } from '../lib/env-resolver.js';
|
|
7
|
+
// Display label only - gateway's registry.resolveUrl() handles real detection
|
|
8
|
+
function labelFromUrl(input) {
|
|
9
|
+
if (/slack\.com/.test(input))
|
|
10
|
+
return 'slack';
|
|
11
|
+
if (/atlassian\.net\/browse/.test(input))
|
|
12
|
+
return 'jira';
|
|
13
|
+
if (/atlassian\.net\/wiki/.test(input))
|
|
14
|
+
return 'confluence';
|
|
15
|
+
if (/github\.com/.test(input))
|
|
16
|
+
return 'github';
|
|
17
|
+
if (/teams\.microsoft\.com/.test(input))
|
|
18
|
+
return 'teams';
|
|
19
|
+
if (/zoom\.us/.test(input))
|
|
20
|
+
return 'zoom';
|
|
21
|
+
if (/linear\.app/.test(input))
|
|
22
|
+
return 'linear';
|
|
23
|
+
return 'web';
|
|
24
|
+
}
|
|
25
|
+
function isUrl(input) {
|
|
26
|
+
try {
|
|
27
|
+
new URL(input);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function registerCaptureCommand(program) {
|
|
35
|
+
program
|
|
36
|
+
.command('capture <url>')
|
|
37
|
+
.description('Capture a decision from a URL (Slack/Jira/GitHub/Confluence/etc.)')
|
|
38
|
+
.option('--env <env>', 'Environment')
|
|
39
|
+
.action(async (input, opts) => {
|
|
40
|
+
if (!isUrl(input)) {
|
|
41
|
+
console.error(chalk.red('capture requires a URL. Raw text capture is not yet supported.'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const config = createConfigStore();
|
|
45
|
+
const env = config.getEnvironment(resolveEnv(opts.env));
|
|
46
|
+
const client = createGatewayClient(env);
|
|
47
|
+
const platform = labelFromUrl(input);
|
|
48
|
+
const spinner = ora(`Fetching from ${platform} and extracting decisions...`).start();
|
|
49
|
+
try {
|
|
50
|
+
const decision = await client.captureDecision(input, platform);
|
|
51
|
+
spinner.succeed(chalk.green('Decision captured'));
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(` ${chalk.bold('ID:')} ${decision.id}`);
|
|
54
|
+
console.log(` ${chalk.bold('Title:')} ${decision.title}`);
|
|
55
|
+
console.log(` ${chalk.bold('Summary:')} ${decision.summary}`);
|
|
56
|
+
console.log(` ${chalk.bold('Platform:')} ${decision.platform}`);
|
|
57
|
+
if (decision.ai?.risks?.length) {
|
|
58
|
+
console.log(` ${chalk.bold('Risks:')} ${decision.ai.risks.slice(0, 2).join('; ')}`);
|
|
59
|
+
}
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(chalk.dim(`View: ${resolveAppUrl(env)}/decisions/${decision.id}`));
|
|
62
|
+
console.log('');
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
const msg = err.message;
|
|
66
|
+
spinner.fail(chalk.red(msg));
|
|
67
|
+
if (msg.includes('503') || msg.includes('connector') || msg.includes('token')) {
|
|
68
|
+
console.log(chalk.dim(`\nMake sure the ${platform} connector is enabled: ${chalk.bold(`align connector enable ${platform} --env ${opts.env}`)}`));
|
|
69
|
+
}
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,8EAA8E;AAC9E,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACxD,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC5D,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,IAAI,CAAC;QAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mEAAmE,CAAC;SAChF,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,IAAsB,EAAE,EAAE;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,QAAQ,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QAErF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC/D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAElD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9E,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,mBAAmB,QAAQ,0BAA0B,KAAK,CAAC,IAAI,CAAC,0BAA0B,QAAQ,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAC1H,CACF,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiF3D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { createConfigStore } from '../lib/config.js';
|
|
6
|
+
import { resolveEnv } from '../lib/resolve-env.js';
|
|
7
|
+
import { createGatewayClient } from '../lib/gateway-client.js';
|
|
8
|
+
import { getCurrentBranch, getHeadDiff, getStagedDiff, isGitRepo } from '../lib/git.js';
|
|
9
|
+
export function registerCheckCommand(program) {
|
|
10
|
+
program
|
|
11
|
+
.command('check')
|
|
12
|
+
.description('Check current changes against the decision graph (exit 1 = conflict found)')
|
|
13
|
+
.option('--env <env>', 'Environment')
|
|
14
|
+
.option('--all', 'Check full HEAD diff, not just staged changes')
|
|
15
|
+
.option('--hook', 'Pre-commit mode: silent on no context, only fail on critical conflicts')
|
|
16
|
+
.option('--ci', 'CI mode: JSON output to stdout for GitHub Actions')
|
|
17
|
+
.action(async (opts) => {
|
|
18
|
+
if (!await isGitRepo()) {
|
|
19
|
+
if (!opts.ci)
|
|
20
|
+
console.error(chalk.red('Not in a git repository'));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
const rcPath = join(process.cwd(), '.alignrc');
|
|
24
|
+
const rc = existsSync(rcPath)
|
|
25
|
+
? JSON.parse(readFileSync(rcPath, 'utf-8'))
|
|
26
|
+
: {};
|
|
27
|
+
const envName = resolveEnv(opts.env ?? rc.defaultEnv);
|
|
28
|
+
const config = createConfigStore();
|
|
29
|
+
const client = createGatewayClient(config.getEnvironment(envName));
|
|
30
|
+
let diff = await getStagedDiff();
|
|
31
|
+
if (!diff.trim() || opts.all)
|
|
32
|
+
diff = await getHeadDiff();
|
|
33
|
+
if (!diff.trim()) {
|
|
34
|
+
if (!opts.hook && !opts.ci)
|
|
35
|
+
console.log(chalk.dim('No changes to check.'));
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
const branch = await getCurrentBranch().catch(() => '');
|
|
39
|
+
if (opts.ci) {
|
|
40
|
+
try {
|
|
41
|
+
const result = await client.checkAlignment(diff, branch);
|
|
42
|
+
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
43
|
+
process.exit(result.status === 'conflicting' ? 1 : 0);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
process.stdout.write(`${JSON.stringify({ status: 'error', message: err.message })}\n`);
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const spinner = ora('Checking alignment...').start();
|
|
51
|
+
try {
|
|
52
|
+
const result = await client.checkAlignment(diff, branch);
|
|
53
|
+
spinner.stop();
|
|
54
|
+
if (result.status === 'aligned') {
|
|
55
|
+
console.log(chalk.green('\nAligned with decision graph.\n'));
|
|
56
|
+
for (const d of result.relevant_decisions.slice(0, 3)) {
|
|
57
|
+
console.log(chalk.dim(` - ${d.title} (${d.id})`));
|
|
58
|
+
}
|
|
59
|
+
if (result.relevant_decisions.length)
|
|
60
|
+
console.log('');
|
|
61
|
+
}
|
|
62
|
+
else if (result.status === 'conflicting') {
|
|
63
|
+
console.log(chalk.red('\nConflicts with decision graph:\n'));
|
|
64
|
+
for (const c of result.conflicts ?? []) {
|
|
65
|
+
const icon = c.severity === 'critical'
|
|
66
|
+
? chalk.bgRed.white(' CRITICAL ')
|
|
67
|
+
: chalk.yellow(' WARNING ');
|
|
68
|
+
console.log(` ${icon} ${c.title}`);
|
|
69
|
+
console.log(chalk.dim(` ${c.reason}`));
|
|
70
|
+
if (c.suggested_resolution) {
|
|
71
|
+
console.log(chalk.dim(` Suggestion: ${c.suggested_resolution}`));
|
|
72
|
+
}
|
|
73
|
+
console.log('');
|
|
74
|
+
}
|
|
75
|
+
const hasCritical = result.conflicts?.some(c => c.severity === 'critical');
|
|
76
|
+
// Hook mode only blocks on critical conflicts to avoid false positives
|
|
77
|
+
if (opts.hook && !hasCritical)
|
|
78
|
+
process.exit(0);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
if (!opts.hook)
|
|
83
|
+
console.log(chalk.dim('\nNo related decisions found.\n'));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
spinner.fail(chalk.red(err.message));
|
|
88
|
+
// Hook mode: never block commits if Align is unreachable
|
|
89
|
+
if (!opts.hook)
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/connector/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2IhE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { resolveEnv } from '../../lib/resolve-env.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import open from 'open';
|
|
5
|
+
import * as p from '@clack/prompts';
|
|
6
|
+
import { createConfigStore } from '../../lib/config.js';
|
|
7
|
+
import { createGatewayClient } from '../../lib/gateway-client.js';
|
|
8
|
+
import { renderTable } from '../../lib/table.js';
|
|
9
|
+
import { streamDockerLogs, streamKubectlLogs } from '../../lib/process.js';
|
|
10
|
+
export function registerConnectorCommands(program) {
|
|
11
|
+
const connector = program
|
|
12
|
+
.command('connector')
|
|
13
|
+
.description('Manage connectors (Slack, Jira, GitHub, etc.)');
|
|
14
|
+
connector
|
|
15
|
+
.command('list')
|
|
16
|
+
.description('List all connectors and their status')
|
|
17
|
+
.option('--env <env>', 'Environment')
|
|
18
|
+
.action(async (opts) => {
|
|
19
|
+
const config = createConfigStore();
|
|
20
|
+
const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env)));
|
|
21
|
+
const spinner = ora('Fetching connectors...').start();
|
|
22
|
+
try {
|
|
23
|
+
const connectors = await client.listConnectors();
|
|
24
|
+
spinner.stop();
|
|
25
|
+
if (!connectors.length) {
|
|
26
|
+
console.log(chalk.dim('\nNo connectors configured.\n'));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.bold(`\nConnectors (${opts.env})\n`));
|
|
30
|
+
renderTable([
|
|
31
|
+
{ header: 'KEY', width: 20 },
|
|
32
|
+
{ header: 'NAME', width: 24 },
|
|
33
|
+
{
|
|
34
|
+
header: 'STATUS', width: 12,
|
|
35
|
+
color: (v) => {
|
|
36
|
+
const t = v.trim();
|
|
37
|
+
if (t === 'active')
|
|
38
|
+
return chalk.green(v);
|
|
39
|
+
if (t === 'error')
|
|
40
|
+
return chalk.red(v);
|
|
41
|
+
return chalk.dim(v);
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{ header: 'CONFIGURED', width: 12 },
|
|
45
|
+
], connectors.map(c => [c.key, c.name, c.status, c.configured ? 'yes' : 'no']));
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail(chalk.red(err.message));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
connector
|
|
53
|
+
.command('enable <name>')
|
|
54
|
+
.description('Enable a connector by initiating OAuth')
|
|
55
|
+
.option('--env <env>', 'Environment')
|
|
56
|
+
.action(async (name, opts) => {
|
|
57
|
+
const config = createConfigStore();
|
|
58
|
+
const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env)));
|
|
59
|
+
const spinner = ora(`Starting OAuth for ${name}...`).start();
|
|
60
|
+
try {
|
|
61
|
+
const { authUrl } = await client.startOAuth(name);
|
|
62
|
+
spinner.stop();
|
|
63
|
+
console.log(chalk.dim(`\nOpening browser to authorize ${name}...\n`));
|
|
64
|
+
console.log(chalk.bold('Authorization URL:'));
|
|
65
|
+
console.log(authUrl);
|
|
66
|
+
console.log('');
|
|
67
|
+
await open(authUrl).catch(() => {
|
|
68
|
+
console.log(chalk.dim('(Could not open browser - copy the URL above)'));
|
|
69
|
+
});
|
|
70
|
+
p.log.info(`After authorizing, run: align connector status ${name} --env ${opts.env}`);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
spinner.fail(chalk.red(err.message));
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
connector
|
|
78
|
+
.command('disable <name>')
|
|
79
|
+
.description('Disable a connector')
|
|
80
|
+
.option('--env <env>', 'Environment')
|
|
81
|
+
.action(async (name, opts) => {
|
|
82
|
+
const config = createConfigStore();
|
|
83
|
+
const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env)));
|
|
84
|
+
const confirmed = await p.confirm({
|
|
85
|
+
message: `Disable ${name} connector in ${opts.env}?`,
|
|
86
|
+
});
|
|
87
|
+
if (!confirmed || p.isCancel(confirmed)) {
|
|
88
|
+
p.cancel('Cancelled.');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const spinner = ora(`Disabling ${name}...`).start();
|
|
92
|
+
try {
|
|
93
|
+
await client.disableConnector(name);
|
|
94
|
+
spinner.succeed(chalk.green(`${name} disabled`));
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
spinner.fail(chalk.red(err.message));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
connector
|
|
102
|
+
.command('status <name>')
|
|
103
|
+
.description('Show health and OAuth status for a connector')
|
|
104
|
+
.option('--env <env>', 'Environment')
|
|
105
|
+
.action(async (name, opts) => {
|
|
106
|
+
const config = createConfigStore();
|
|
107
|
+
const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env)));
|
|
108
|
+
const spinner = ora(`Checking ${name}...`).start();
|
|
109
|
+
try {
|
|
110
|
+
const health = await client.getConnectorHealth(name);
|
|
111
|
+
spinner.stop();
|
|
112
|
+
const statusColor = health.status === 'healthy' ? chalk.green : chalk.red;
|
|
113
|
+
console.log(`\n ${chalk.bold('Connector:')} ${name}`);
|
|
114
|
+
console.log(` ${chalk.bold('Status:')} ${statusColor(health.status)}`);
|
|
115
|
+
console.log(` ${chalk.bold('Env:')} ${opts.env}`);
|
|
116
|
+
console.log('');
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
spinner.fail(chalk.red(err.message));
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
connector
|
|
124
|
+
.command('logs <name>')
|
|
125
|
+
.description('Stream logs for a connector (requires kubectl or docker)')
|
|
126
|
+
.option('--env <env>', 'Environment')
|
|
127
|
+
.option('--namespace <ns>', 'Kubernetes namespace', 'align-local')
|
|
128
|
+
.option('--docker', 'Use docker logs instead of kubectl')
|
|
129
|
+
.action(async (name, opts) => {
|
|
130
|
+
console.log(chalk.dim(`Streaming logs for ${name} (Ctrl+C to stop)...\n`));
|
|
131
|
+
try {
|
|
132
|
+
if (opts.docker) {
|
|
133
|
+
await streamDockerLogs(`mcp-${name}`);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await streamKubectlLogs(name, opts.namespace);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
console.error(chalk.red(err.message));
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/connector/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/decisions/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwF/D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { resolveEnv } from '../../lib/resolve-env.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { createConfigStore } from '../../lib/config.js';
|
|
5
|
+
import { createGatewayClient } from '../../lib/gateway-client.js';
|
|
6
|
+
import { renderTable } from '../../lib/table.js';
|
|
7
|
+
import { resolveAppUrl } from '../../lib/env-resolver.js';
|
|
8
|
+
export function registerDecisionsCommand(program) {
|
|
9
|
+
const decisions = program
|
|
10
|
+
.command('decisions')
|
|
11
|
+
.description('Browse and inspect decisions in the graph');
|
|
12
|
+
decisions
|
|
13
|
+
.command('list')
|
|
14
|
+
.description('List decisions')
|
|
15
|
+
.option('--env <env>', 'Environment')
|
|
16
|
+
.option('--platform <p>', 'Filter by platform (slack, jira, github, etc.)')
|
|
17
|
+
.option('--status <s>', 'Filter by status (active, superseded, archived)')
|
|
18
|
+
.option('--space <slug>', 'Filter by space slug')
|
|
19
|
+
.option('--limit <n>', 'Max results', '20')
|
|
20
|
+
.action(async (opts) => {
|
|
21
|
+
const config = createConfigStore();
|
|
22
|
+
const client = createGatewayClient(config.getEnvironment(resolveEnv(opts.env)));
|
|
23
|
+
const spinner = ora('Fetching decisions...').start();
|
|
24
|
+
try {
|
|
25
|
+
const params = { limit: parseInt(opts.limit, 10) };
|
|
26
|
+
if (opts.platform)
|
|
27
|
+
params['platform'] = opts.platform;
|
|
28
|
+
if (opts.status)
|
|
29
|
+
params['status'] = opts.status;
|
|
30
|
+
if (opts.space)
|
|
31
|
+
params['space'] = opts.space;
|
|
32
|
+
const decisions = await client.listDecisions(params);
|
|
33
|
+
spinner.stop();
|
|
34
|
+
if (!decisions.length) {
|
|
35
|
+
console.log(chalk.dim('\nNo decisions found.\n'));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
console.log(chalk.bold(`\nDecisions (${opts.env})\n`));
|
|
39
|
+
renderTable([
|
|
40
|
+
{ header: 'ID', width: 38 },
|
|
41
|
+
{ header: 'TITLE', width: 50 },
|
|
42
|
+
{ header: 'PLATFORM', width: 14 },
|
|
43
|
+
{ header: 'STATUS', width: 12 },
|
|
44
|
+
], decisions.map(d => [d.id, d.title, d.platform, d.status ?? '']));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
spinner.fail(chalk.red(err.message));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
decisions
|
|
52
|
+
.command('show <id>')
|
|
53
|
+
.description('Show full detail for a decision')
|
|
54
|
+
.option('--env <env>', 'Environment')
|
|
55
|
+
.action(async (id, opts) => {
|
|
56
|
+
const config = createConfigStore();
|
|
57
|
+
const env = config.getEnvironment(resolveEnv(opts.env));
|
|
58
|
+
const client = createGatewayClient(env);
|
|
59
|
+
const spinner = ora(`Loading decision ${id}...`).start();
|
|
60
|
+
try {
|
|
61
|
+
const d = await client.getDecision(id);
|
|
62
|
+
spinner.stop();
|
|
63
|
+
console.log('');
|
|
64
|
+
console.log(` ${chalk.bold('ID:')} ${d.id}`);
|
|
65
|
+
console.log(` ${chalk.bold('Title:')} ${d.title}`);
|
|
66
|
+
console.log(` ${chalk.bold('Summary:')} ${d.summary}`);
|
|
67
|
+
console.log(` ${chalk.bold('Platform:')} ${d.platform}`);
|
|
68
|
+
if (d.ai?.risks?.length) {
|
|
69
|
+
console.log(`\n ${chalk.bold('Risks:')}`);
|
|
70
|
+
for (const r of d.ai.risks)
|
|
71
|
+
console.log(` - ${r}`);
|
|
72
|
+
}
|
|
73
|
+
if (d.ai?.actions?.length) {
|
|
74
|
+
console.log(`\n ${chalk.bold('Actions:')}`);
|
|
75
|
+
for (const a of d.ai.actions)
|
|
76
|
+
console.log(` - ${a.text}`);
|
|
77
|
+
}
|
|
78
|
+
if (d.spaces?.length) {
|
|
79
|
+
console.log(`\n ${chalk.bold('Spaces:')} ${d.spaces.map(s => s.name).join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
console.log('');
|
|
82
|
+
console.log(chalk.dim(`View: ${resolveAppUrl(env)}/decisions/${d.id}`));
|
|
83
|
+
console.log('');
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
spinner.fail(chalk.red(err.message));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/decisions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,SAAS,GAAG,OAAO;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAE5D,SAAS;SACN,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gBAAgB,CAAC;SAC7B,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;SAC1E,MAAM,CAAC,cAAc,EAAE,iDAAiD,CAAC;SACzE,MAAM,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;SAChD,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAEd,EAAE,EAAE;QACH,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,MAAM,GAA8C,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9F,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtD,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAE7C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YACvD,WAAW,CACT;gBACE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC9B,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE;gBACjC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;aAChC,EACD,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAChE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,SAAS;SACN,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAsB,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAEzD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC7C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAK,CAAC,CAAC,MAAkC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|