@reminix/cli 0.1.9 → 0.1.11
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/README.md +20 -12
- package/dist/commands/agent.d.ts +6 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/{agents.js → agent.js} +8 -10
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/deploy.d.ts +6 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +323 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +64 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +3 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/project.d.ts +6 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/{projects.js → project.js} +76 -12
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/secret.d.ts +6 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/secret.js +162 -0
- package/dist/commands/secret.js.map +1 -0
- package/dist/commands/version.d.ts +1 -1
- package/dist/commands/version.d.ts.map +1 -1
- package/dist/commands/version.js +1 -1
- package/dist/commands/version.js.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/api-types.d.ts +558 -0
- package/dist/lib/api-types.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/commands/agents.d.ts +0 -6
- package/dist/commands/agents.d.ts.map +0 -1
- package/dist/commands/agents.js.map +0 -1
- package/dist/commands/projects.d.ts +0 -6
- package/dist/commands/projects.d.ts.map +0 -1
- package/dist/commands/projects.js.map +0 -1
package/README.md
CHANGED
|
@@ -21,17 +21,17 @@ yarn global add @reminix/cli
|
|
|
21
21
|
# Login to your Reminix account
|
|
22
22
|
reminix login
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
reminix
|
|
24
|
+
# Select your default project interactively
|
|
25
|
+
reminix project select
|
|
26
26
|
|
|
27
|
-
#
|
|
28
|
-
reminix
|
|
27
|
+
# Deploy your project
|
|
28
|
+
reminix deploy
|
|
29
29
|
|
|
30
30
|
# Invoke an agent
|
|
31
|
-
reminix
|
|
31
|
+
reminix agent invoke my-agent -i '{"prompt": "Hello!"}'
|
|
32
32
|
|
|
33
33
|
# Chat with an agent
|
|
34
|
-
reminix
|
|
34
|
+
reminix agent chat my-agent -m "Hello!"
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
## Commands
|
|
@@ -41,10 +41,18 @@ reminix agents chat my-agent -m "Hello!"
|
|
|
41
41
|
| `reminix login` | Authenticate with Reminix |
|
|
42
42
|
| `reminix logout` | Clear authentication |
|
|
43
43
|
| `reminix whoami` | Show current user |
|
|
44
|
-
| `reminix
|
|
45
|
-
| `reminix
|
|
46
|
-
| `reminix
|
|
47
|
-
| `reminix
|
|
44
|
+
| `reminix project list` | List all projects |
|
|
45
|
+
| `reminix project select` | Interactively select a default project |
|
|
46
|
+
| `reminix project current` | Get current project details |
|
|
47
|
+
| `reminix project clear` | Clear the default project |
|
|
48
|
+
| `reminix agent invoke <name>` | Invoke an agent with input |
|
|
49
|
+
| `reminix agent chat <name>` | Chat with an agent |
|
|
50
|
+
| `reminix secret list` | List all secrets for the project |
|
|
51
|
+
| `reminix secret set <key> <value>` | Set a secret (create or update) |
|
|
52
|
+
| `reminix secret delete <key>` | Delete a secret |
|
|
53
|
+
| `reminix deploy` | Deploy the current project |
|
|
54
|
+
| `reminix deploy status` | List recent deployments |
|
|
55
|
+
| `reminix deploy status <id>` | Get deployment status |
|
|
48
56
|
| `reminix config set <key> <value>` | Set configuration value |
|
|
49
57
|
| `reminix config get <key>` | Get configuration value |
|
|
50
58
|
| `reminix config list` | List all configuration |
|
|
@@ -74,10 +82,10 @@ Most commands support `-o, --output` for different output formats:
|
|
|
74
82
|
|
|
75
83
|
```bash
|
|
76
84
|
# Human-readable table (default)
|
|
77
|
-
reminix
|
|
85
|
+
reminix project list
|
|
78
86
|
|
|
79
87
|
# JSON (for scripting)
|
|
80
|
-
reminix
|
|
88
|
+
reminix project list -o json
|
|
81
89
|
```
|
|
82
90
|
|
|
83
91
|
## Documentation
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,eAAO,MAAM,YAAY,SAEvB,CAAC"}
|
|
@@ -3,17 +3,15 @@ import { createApiClient } from '../lib/api-client.js';
|
|
|
3
3
|
import { requireProject } from '../lib/config.js';
|
|
4
4
|
import { getOutputFormat, outputJson } from '../lib/output.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Agent command group
|
|
7
7
|
*/
|
|
8
|
-
export const
|
|
9
|
-
.
|
|
10
|
-
.action(() => {
|
|
11
|
-
agentsCommand.help();
|
|
8
|
+
export const agentCommand = new Command('agent').description('Interact with agents').action(() => {
|
|
9
|
+
agentCommand.help();
|
|
12
10
|
});
|
|
13
11
|
/**
|
|
14
12
|
* Invoke an agent
|
|
15
13
|
*/
|
|
16
|
-
|
|
14
|
+
agentCommand
|
|
17
15
|
.command('invoke <name>')
|
|
18
16
|
.description('Invoke an agent with input data')
|
|
19
17
|
.option('-p, --project <id>', 'Project ID or org-slug/project-slug')
|
|
@@ -22,7 +20,7 @@ agentsCommand
|
|
|
22
20
|
.option('-o, --output <format>', 'Output format (json, table)', 'table')
|
|
23
21
|
.action(async (name, options) => {
|
|
24
22
|
try {
|
|
25
|
-
const project = requireProject(options.project, 'reminix
|
|
23
|
+
const project = requireProject(options.project, 'reminix agent invoke <name> -p <org-slug/project-slug> -i \'{"key": "value"}\'');
|
|
26
24
|
// Parse input JSON
|
|
27
25
|
let input;
|
|
28
26
|
try {
|
|
@@ -111,7 +109,7 @@ agentsCommand
|
|
|
111
109
|
/**
|
|
112
110
|
* Chat with an agent
|
|
113
111
|
*/
|
|
114
|
-
|
|
112
|
+
agentCommand
|
|
115
113
|
.command('chat <name>')
|
|
116
114
|
.description('Start a chat session with an agent')
|
|
117
115
|
.option('-p, --project <id>', 'Project ID or org-slug/project-slug')
|
|
@@ -120,7 +118,7 @@ agentsCommand
|
|
|
120
118
|
.option('-o, --output <format>', 'Output format (json, table)', 'table')
|
|
121
119
|
.action(async (name, options) => {
|
|
122
120
|
try {
|
|
123
|
-
const project = requireProject(options.project, 'reminix
|
|
121
|
+
const project = requireProject(options.project, 'reminix agent chat <name> -p <org-slug/project-slug> -m "message"');
|
|
124
122
|
const client = createApiClient({ project });
|
|
125
123
|
const format = getOutputFormat(options);
|
|
126
124
|
const messages = [{ role: 'user', content: options.message }];
|
|
@@ -198,4 +196,4 @@ agentsCommand
|
|
|
198
196
|
process.exit(1);
|
|
199
197
|
}
|
|
200
198
|
});
|
|
201
|
-
//# sourceMappingURL=
|
|
199
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;IAC/F,YAAY,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,YAAY;KACT,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;KACnE,cAAc,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;KACjE,MAAM,CAAC,UAAU,EAAE,qBAAqB,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,OAAO,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAC5B,OAAO,CAAC,OAAO,EACf,gFAAgF,CACjF,CAAC;QAEF,mBAAmB;QACnB,IAAI,KAA8B,CAAC;QACnC,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBAC1D,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC7B,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAElC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;4BACzB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,gBAAgB;4BAC/B,MAAM;wBACR,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACnC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACrC,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,8CAA8C;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACjE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;aAC/B,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG,IAAwC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,YAAY;KACT,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,oBAAoB,EAAE,qCAAqC,CAAC;KACnE,cAAc,CAAC,sBAAsB,EAAE,iBAAiB,CAAC;KACzD,MAAM,CAAC,UAAU,EAAE,qBAAqB,CAAC;KACzC,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,OAAO,CAAC;KACvE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAC5B,OAAO,CAAC,OAAO,EACf,mEAAmE,CACpE,CAAC;QACF,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACxD,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;gBAChC,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAElC,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAEhB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC9B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;4BACzB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,gBAAgB;4BAC/B,MAAM;wBACR,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BACnC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACrC,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,8CAA8C;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAC/D,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;gBAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE;aAClC,CAAC,CAAC;YAEH,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG,IAAuC,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4KpC;;GAEG;AACH,eAAO,MAAM,aAAa,SAyHtB,CAAC"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createApiClient } from '../lib/api-client.js';
|
|
3
|
+
import { requireProject } from '../lib/config.js';
|
|
4
|
+
import { spawn } from 'child_process';
|
|
5
|
+
import { createReadStream, statSync, existsSync, readFileSync } from 'fs';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { randomUUID } from 'crypto';
|
|
9
|
+
import { unlink } from 'fs/promises';
|
|
10
|
+
/**
|
|
11
|
+
* Default files/directories to exclude from deployment
|
|
12
|
+
* Covers common patterns across languages
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_EXCLUDES = [
|
|
15
|
+
// Version control
|
|
16
|
+
'.git',
|
|
17
|
+
'.svn',
|
|
18
|
+
'.hg',
|
|
19
|
+
// Environment & secrets
|
|
20
|
+
'.env',
|
|
21
|
+
'.env.*',
|
|
22
|
+
'*.pem',
|
|
23
|
+
'*.key',
|
|
24
|
+
// OS files
|
|
25
|
+
'.DS_Store',
|
|
26
|
+
'Thumbs.db',
|
|
27
|
+
'*.log',
|
|
28
|
+
// Node.js
|
|
29
|
+
'node_modules',
|
|
30
|
+
'.npm',
|
|
31
|
+
'.yarn',
|
|
32
|
+
'.pnpm-store',
|
|
33
|
+
// Python
|
|
34
|
+
'__pycache__',
|
|
35
|
+
'*.pyc',
|
|
36
|
+
'*.pyo',
|
|
37
|
+
'.venv',
|
|
38
|
+
'venv',
|
|
39
|
+
'.pytest_cache',
|
|
40
|
+
'.mypy_cache',
|
|
41
|
+
'*.egg-info',
|
|
42
|
+
// Ruby
|
|
43
|
+
'vendor/bundle',
|
|
44
|
+
'.bundle',
|
|
45
|
+
// Rust
|
|
46
|
+
'target',
|
|
47
|
+
// Go
|
|
48
|
+
'vendor',
|
|
49
|
+
// Java/Kotlin
|
|
50
|
+
'*.class',
|
|
51
|
+
'.gradle',
|
|
52
|
+
// Build outputs (common names)
|
|
53
|
+
'dist',
|
|
54
|
+
'build',
|
|
55
|
+
'out',
|
|
56
|
+
'.next',
|
|
57
|
+
'.nuxt',
|
|
58
|
+
'.output',
|
|
59
|
+
'.turbo',
|
|
60
|
+
'.cache',
|
|
61
|
+
'coverage',
|
|
62
|
+
// IDE/Editor
|
|
63
|
+
'.idea',
|
|
64
|
+
'*.swp',
|
|
65
|
+
'*~',
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Load excludes from .reminixignore file if it exists
|
|
69
|
+
*/
|
|
70
|
+
function loadIgnoreFile(sourceDir) {
|
|
71
|
+
const ignorePath = join(sourceDir, '.reminixignore');
|
|
72
|
+
if (!existsSync(ignorePath)) {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
const content = readFileSync(ignorePath, 'utf-8');
|
|
76
|
+
return content
|
|
77
|
+
.split('\n')
|
|
78
|
+
.map((line) => line.trim())
|
|
79
|
+
.filter((line) => line && !line.startsWith('#'));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a tarball of the current directory
|
|
83
|
+
*/
|
|
84
|
+
async function createTarball(sourceDir, excludes) {
|
|
85
|
+
const tarballPath = join(tmpdir(), `reminix-deploy-${randomUUID()}.tar.gz`);
|
|
86
|
+
const excludeArgs = excludes.flatMap((pattern) => ['--exclude', pattern]);
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
const tar = spawn('tar', ['-czf', tarballPath, ...excludeArgs, '-C', sourceDir, '.'], {
|
|
89
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
90
|
+
});
|
|
91
|
+
let stderr = '';
|
|
92
|
+
tar.stderr.on('data', (data) => {
|
|
93
|
+
stderr += data.toString();
|
|
94
|
+
});
|
|
95
|
+
tar.on('close', (code) => {
|
|
96
|
+
if (code === 0) {
|
|
97
|
+
resolve(tarballPath);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
reject(new Error(`Failed to create tarball: ${stderr}`));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
tar.on('error', (err) => {
|
|
104
|
+
reject(new Error(`Failed to spawn tar: ${err.message}`));
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Upload a file to a presigned URL
|
|
110
|
+
*/
|
|
111
|
+
async function uploadToPresignedUrl(filePath, presignedUrl) {
|
|
112
|
+
const stat = statSync(filePath);
|
|
113
|
+
const fileStream = createReadStream(filePath);
|
|
114
|
+
// Convert ReadStream to a format fetch can use
|
|
115
|
+
const chunks = [];
|
|
116
|
+
for await (const chunk of fileStream) {
|
|
117
|
+
chunks.push(chunk);
|
|
118
|
+
}
|
|
119
|
+
const buffer = Buffer.concat(chunks);
|
|
120
|
+
const response = await fetch(presignedUrl, {
|
|
121
|
+
method: 'PUT',
|
|
122
|
+
body: buffer,
|
|
123
|
+
headers: {
|
|
124
|
+
'Content-Type': 'application/gzip',
|
|
125
|
+
'Content-Length': stat.size.toString(),
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
const text = await response.text();
|
|
130
|
+
throw new Error(`Upload failed: ${response.status} ${response.statusText} - ${text}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Format bytes to human readable string
|
|
135
|
+
*/
|
|
136
|
+
function formatBytes(bytes) {
|
|
137
|
+
if (bytes < 1024)
|
|
138
|
+
return `${bytes} B`;
|
|
139
|
+
if (bytes < 1024 * 1024)
|
|
140
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
141
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Sleep for a given number of milliseconds
|
|
145
|
+
*/
|
|
146
|
+
function sleep(ms) {
|
|
147
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Deploy command
|
|
151
|
+
*/
|
|
152
|
+
export const deployCommand = new Command('deploy')
|
|
153
|
+
.description('Deploy the current project')
|
|
154
|
+
.option('-p, --project <id>', 'Project ID or org-slug/project-slug')
|
|
155
|
+
.option('-d, --directory <path>', 'Directory to deploy (default: current directory)', '.')
|
|
156
|
+
.option('--no-wait', 'Do not wait for deployment to complete')
|
|
157
|
+
.action(async (options) => {
|
|
158
|
+
try {
|
|
159
|
+
const project = requireProject(options.project, 'reminix deploy -p <org-slug/project-slug>');
|
|
160
|
+
const client = createApiClient({ project });
|
|
161
|
+
const sourceDir = options.directory;
|
|
162
|
+
// Step 1: Create tarball
|
|
163
|
+
console.log('Creating deployment package...');
|
|
164
|
+
const customExcludes = loadIgnoreFile(sourceDir);
|
|
165
|
+
const allExcludes = [...DEFAULT_EXCLUDES, ...customExcludes];
|
|
166
|
+
const tarballPath = await createTarball(sourceDir, allExcludes);
|
|
167
|
+
try {
|
|
168
|
+
const stat = statSync(tarballPath);
|
|
169
|
+
console.log(`Package created: ${formatBytes(stat.size)}`);
|
|
170
|
+
// Check size limit (100MB)
|
|
171
|
+
const maxSize = 100 * 1024 * 1024;
|
|
172
|
+
if (stat.size > maxSize) {
|
|
173
|
+
throw new Error(`Package too large: ${formatBytes(stat.size)} (max: ${formatBytes(maxSize)})`);
|
|
174
|
+
}
|
|
175
|
+
// Step 2: Create deployment and get presigned URL
|
|
176
|
+
console.log('Initializing deployment...');
|
|
177
|
+
const { data: createData, error: createError } = await client.POST('/deployments');
|
|
178
|
+
if (createError || !createData) {
|
|
179
|
+
throw new Error(`Failed to create deployment: ${JSON.stringify(createError)}`);
|
|
180
|
+
}
|
|
181
|
+
const { deployment, upload } = createData;
|
|
182
|
+
console.log(`Deployment created: ${deployment.id}`);
|
|
183
|
+
// Step 3: Upload tarball to presigned URL
|
|
184
|
+
console.log('Uploading source code...');
|
|
185
|
+
await uploadToPresignedUrl(tarballPath, upload.url);
|
|
186
|
+
console.log('Upload complete.');
|
|
187
|
+
// Step 4: Start deployment
|
|
188
|
+
console.log('Starting deployment...');
|
|
189
|
+
const { error: startError } = await client.POST('/deployments/{id}/start', {
|
|
190
|
+
params: { path: { id: deployment.id } },
|
|
191
|
+
});
|
|
192
|
+
if (startError) {
|
|
193
|
+
throw new Error(`Failed to start deployment: ${JSON.stringify(startError)}`);
|
|
194
|
+
}
|
|
195
|
+
console.log('Deployment started.');
|
|
196
|
+
// Step 5: Poll for status if --wait (default)
|
|
197
|
+
if (options.wait !== false) {
|
|
198
|
+
console.log('\nWaiting for deployment to complete...\n');
|
|
199
|
+
let lastLogTimestamp;
|
|
200
|
+
let lastStatus = deployment.status;
|
|
201
|
+
while (true) {
|
|
202
|
+
const { data: statusData, error: statusError } = await client.GET('/deployments/{id}', {
|
|
203
|
+
params: {
|
|
204
|
+
path: { id: deployment.id },
|
|
205
|
+
query: { since: lastLogTimestamp },
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
if (statusError || !statusData) {
|
|
209
|
+
console.error('Failed to get deployment status, retrying...');
|
|
210
|
+
await sleep(2000);
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
const { deployment: currentDeployment, logs } = statusData;
|
|
214
|
+
// Print new logs
|
|
215
|
+
for (const log of logs) {
|
|
216
|
+
const timestamp = new Date(log.timestamp).toLocaleTimeString();
|
|
217
|
+
console.log(`[${timestamp}] [${log.step}] ${log.message}`);
|
|
218
|
+
lastLogTimestamp = log.timestamp;
|
|
219
|
+
}
|
|
220
|
+
// Check if status changed
|
|
221
|
+
if (currentDeployment.status !== lastStatus) {
|
|
222
|
+
lastStatus = currentDeployment.status;
|
|
223
|
+
}
|
|
224
|
+
// Check terminal states
|
|
225
|
+
if (currentDeployment.status === 'ready') {
|
|
226
|
+
console.log('\nDeployment successful!');
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
if (currentDeployment.status === 'failed') {
|
|
230
|
+
console.error(`\nDeployment failed: ${currentDeployment.error || 'Unknown error'}`);
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
await sleep(2000);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
console.log(`\nDeployment ${deployment.id} is running in the background.`);
|
|
238
|
+
console.log('Use `reminix deploy status` to check progress.');
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
// Cleanup tarball
|
|
243
|
+
await unlink(tarballPath).catch(() => { });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
if (error instanceof Error) {
|
|
248
|
+
console.error(`Error: ${error.message}`);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.error('An unexpected error occurred');
|
|
252
|
+
}
|
|
253
|
+
process.exit(1);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
/**
|
|
257
|
+
* Deployment status subcommand
|
|
258
|
+
*/
|
|
259
|
+
deployCommand
|
|
260
|
+
.command('status [deploymentId]')
|
|
261
|
+
.description('Get deployment status')
|
|
262
|
+
.option('-p, --project <id>', 'Project ID or org-slug/project-slug')
|
|
263
|
+
.action(async (deploymentId, options) => {
|
|
264
|
+
try {
|
|
265
|
+
const project = requireProject(options.project, 'reminix deploy status -p <org-slug/project-slug>');
|
|
266
|
+
const client = createApiClient({ project });
|
|
267
|
+
if (deploymentId) {
|
|
268
|
+
// Get specific deployment
|
|
269
|
+
const { data, error } = await client.GET('/deployments/{id}', {
|
|
270
|
+
params: { path: { id: deploymentId } },
|
|
271
|
+
});
|
|
272
|
+
if (error || !data) {
|
|
273
|
+
throw new Error(`Failed to get deployment: ${JSON.stringify(error)}`);
|
|
274
|
+
}
|
|
275
|
+
const { deployment, logs } = data;
|
|
276
|
+
console.log(`Deployment: ${deployment.id}`);
|
|
277
|
+
console.log(`Status: ${deployment.status}`);
|
|
278
|
+
console.log(`Created: ${new Date(deployment.createdAt).toLocaleString()}`);
|
|
279
|
+
if (deployment.completedAt) {
|
|
280
|
+
console.log(`Completed: ${new Date(deployment.completedAt).toLocaleString()}`);
|
|
281
|
+
}
|
|
282
|
+
if (deployment.error) {
|
|
283
|
+
console.log(`Error: ${deployment.error}`);
|
|
284
|
+
}
|
|
285
|
+
if (logs.length > 0) {
|
|
286
|
+
console.log('\nRecent logs:');
|
|
287
|
+
for (const log of logs.slice(-10)) {
|
|
288
|
+
const timestamp = new Date(log.timestamp).toLocaleTimeString();
|
|
289
|
+
console.log(` [${timestamp}] [${log.step}] ${log.message}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
// List recent deployments
|
|
295
|
+
const { data, error } = await client.GET('/deployments', {
|
|
296
|
+
params: { query: { limit: '10' } },
|
|
297
|
+
});
|
|
298
|
+
if (error || !data) {
|
|
299
|
+
throw new Error(`Failed to list deployments: ${JSON.stringify(error)}`);
|
|
300
|
+
}
|
|
301
|
+
if (data.data.length === 0) {
|
|
302
|
+
console.log('No deployments found.');
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
console.log('Recent deployments:\n');
|
|
306
|
+
for (const deployment of data.data) {
|
|
307
|
+
const status = deployment.status.padEnd(10);
|
|
308
|
+
const created = new Date(deployment.createdAt).toLocaleString();
|
|
309
|
+
console.log(` ${deployment.id} ${status} ${created}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
if (error instanceof Error) {
|
|
315
|
+
console.error(`Error: ${error.message}`);
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
console.error('An unexpected error occurred');
|
|
319
|
+
}
|
|
320
|
+
process.exit(1);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkGpC;;GAEG;AACH,eAAO,MAAM,YAAY,SAsDrB,CAAC"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import open from 'open';
|
|
3
|
+
import select from '@inquirer/select';
|
|
3
4
|
import * as os from 'node:os';
|
|
4
5
|
import { createAuthServer, generateState } from '../lib/auth-server.js';
|
|
5
6
|
import { saveCredentials, loadCredentials } from '../lib/credentials.js';
|
|
7
|
+
import { createApiClient } from '../lib/api-client.js';
|
|
8
|
+
import { setConfigValue } from '../lib/config.js';
|
|
6
9
|
/**
|
|
7
10
|
* Default web app URL - can be overridden with REMINIX_WEB_URL env var
|
|
8
11
|
*/
|
|
@@ -24,6 +27,64 @@ function getDeviceName() {
|
|
|
24
27
|
return 'Unknown Device';
|
|
25
28
|
}
|
|
26
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Prompt user to select a project after login
|
|
32
|
+
*/
|
|
33
|
+
async function promptProjectSelection() {
|
|
34
|
+
// Only respect env var on login (config file might be stale from different account)
|
|
35
|
+
const envProject = process.env.REMINIX_PROJECT;
|
|
36
|
+
if (envProject) {
|
|
37
|
+
console.log(`Using project from REMINIX_PROJECT: ${envProject}\n`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const client = createApiClient();
|
|
42
|
+
const { data, error } = await client.GET('/projects', {
|
|
43
|
+
params: {
|
|
44
|
+
query: {
|
|
45
|
+
limit: 100,
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (error) {
|
|
50
|
+
console.log('Could not fetch projects. You can select one later with:');
|
|
51
|
+
console.log(' reminix project select\n');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const projects = data?.data || [];
|
|
55
|
+
if (projects.length === 0) {
|
|
56
|
+
console.log("You don't have any projects yet.");
|
|
57
|
+
console.log('Create one at https://reminix.com\n');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (projects.length === 1) {
|
|
61
|
+
// Auto-select the only project
|
|
62
|
+
const project = projects[0];
|
|
63
|
+
const slug = `${project.organization?.slug || 'unknown'}/${project.slug}`;
|
|
64
|
+
setConfigValue('project', slug);
|
|
65
|
+
console.log(`Using project: ${slug}\n`);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Multiple projects - prompt user to select
|
|
69
|
+
const selected = await select({
|
|
70
|
+
message: 'Select a project:',
|
|
71
|
+
choices: projects.map((project) => {
|
|
72
|
+
const slug = `${project.organization?.slug || 'unknown'}/${project.slug}`;
|
|
73
|
+
return {
|
|
74
|
+
name: `${project.name} (${slug})`,
|
|
75
|
+
value: slug,
|
|
76
|
+
};
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
setConfigValue('project', selected);
|
|
80
|
+
console.log(`\nDefault project set to: ${selected}\n`);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// User cancelled or error - that's fine
|
|
84
|
+
console.log('\nYou can select a project later with:');
|
|
85
|
+
console.log(' reminix project select\n');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
27
88
|
/**
|
|
28
89
|
* Login command - authenticates user via browser
|
|
29
90
|
*/
|
|
@@ -62,8 +123,9 @@ export const loginCommand = new Command('login')
|
|
|
62
123
|
const result = await waitForCallback();
|
|
63
124
|
// Save credentials
|
|
64
125
|
saveCredentials(result.token, result.email);
|
|
65
|
-
console.log(`\n✓ Successfully logged in as ${result.email}
|
|
66
|
-
|
|
126
|
+
console.log(`\n✓ Successfully logged in as ${result.email}!\n`);
|
|
127
|
+
// Prompt user to select a project
|
|
128
|
+
await promptProjectSelection();
|
|
67
129
|
}
|
|
68
130
|
catch (error) {
|
|
69
131
|
if (error instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C;;GAEG;AACH,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB;IACnC,oFAAoF;IACpF,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,uCAAuC,UAAU,IAAI,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QAEjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;YACpD,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,KAAK,EAAE,GAAG;iBACX;aACF;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAElC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,+BAA+B;YAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC1E,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;YAC5B,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAChC,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC1E,OAAO;oBACL,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG;oBACjC,KAAK,EAAE,IAAI;iBACZ,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;QAEH,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,IAAI,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,cAAc,EAAE,kCAAkC,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,qCAAqC;QACrC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAE9B,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEhE,kCAAkC;QAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,MAAM,uBAAuB,IAAI,UAAU,KAAK,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAE3G,2BAA2B;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;QAEvC,mBAAmB;QACnB,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5C,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;QAEhE,kCAAkC;QAClC,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;GAEG;AACH,eAAO,MAAM,aAAa,SAWxB,CAAC"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { clearCredentials, loadCredentials } from '../lib/credentials.js';
|
|
3
|
+
import { unsetConfigValue } from '../lib/config.js';
|
|
3
4
|
/**
|
|
4
|
-
* Logout command - clears stored credentials
|
|
5
|
+
* Logout command - clears stored credentials and project config
|
|
5
6
|
*/
|
|
6
7
|
export const logoutCommand = new Command('logout').description('Log out of Reminix').action(() => {
|
|
7
8
|
const credentials = loadCredentials();
|
|
@@ -10,6 +11,7 @@ export const logoutCommand = new Command('logout').description('Log out of Remin
|
|
|
10
11
|
return;
|
|
11
12
|
}
|
|
12
13
|
clearCredentials();
|
|
14
|
+
unsetConfigValue('project');
|
|
13
15
|
console.log(`✓ Logged out of ${credentials.email}`);
|
|
14
16
|
});
|
|
15
17
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;IAC/F,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,eAAO,MAAM,cAAc,SAEzB,CAAC"}
|