@agentage/cli 0.2.0 → 0.4.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/README.md +111 -199
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +35 -2
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +71 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +22 -2
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/machines.d.ts.map +1 -1
- package/dist/commands/machines.js +45 -3
- package/dist/commands/machines.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +113 -15
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +11 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +10 -3
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/routes.d.ts.map +1 -1
- package/dist/daemon/routes.js +92 -5
- package/dist/daemon/routes.js.map +1 -1
- package/dist/daemon-entry.js +27 -1
- package/dist/daemon-entry.js.map +1 -1
- package/dist/hub/auth-callback.d.ts +4 -0
- package/dist/hub/auth-callback.d.ts.map +1 -0
- package/dist/hub/auth-callback.js +75 -0
- package/dist/hub/auth-callback.js.map +1 -0
- package/dist/hub/auth.d.ts +21 -0
- package/dist/hub/auth.d.ts.map +1 -0
- package/dist/hub/auth.js +26 -0
- package/dist/hub/auth.js.map +1 -0
- package/dist/hub/hub-client.d.ts +33 -0
- package/dist/hub/hub-client.d.ts.map +1 -0
- package/dist/hub/hub-client.js +64 -0
- package/dist/hub/hub-client.js.map +1 -0
- package/dist/hub/hub-sync.d.ts +9 -0
- package/dist/hub/hub-sync.d.ts.map +1 -0
- package/dist/hub/hub-sync.js +150 -0
- package/dist/hub/hub-sync.js.map +1 -0
- package/dist/hub/hub-ws.d.ts +7 -0
- package/dist/hub/hub-ws.d.ts.map +1 -0
- package/dist/hub/hub-ws.js +105 -0
- package/dist/hub/hub-ws.js.map +1 -0
- package/dist/hub/reconnection.d.ts +13 -0
- package/dist/hub/reconnection.d.ts.map +1 -0
- package/dist/hub/reconnection.js +39 -0
- package/dist/hub/reconnection.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +5 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +7 -4
package/README.md
CHANGED
|
@@ -1,222 +1,134 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @agentage/cli
|
|
2
2
|
|
|
3
3
|
[](https://github.com/agentage/cli/actions/workflows/ci.yml)
|
|
4
4
|
[](https://badge.fury.io/js/%40agentage%2Fcli)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
CLI and daemon for the [Agentage](https://agentage.io) control plane. Discovers local agents, executes them, and connects to the hub for multi-machine orchestration.
|
|
7
7
|
|
|
8
8
|
## Installation
|
|
9
9
|
|
|
10
|
-
Install globally:
|
|
11
|
-
|
|
12
10
|
```bash
|
|
13
11
|
npm install -g @agentage/cli
|
|
14
12
|
```
|
|
15
13
|
|
|
16
|
-
Or use with npx:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npx @agentage/cli <command>
|
|
20
|
-
```
|
|
21
|
-
|
|
22
14
|
## Quick Start
|
|
23
15
|
|
|
24
16
|
```bash
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
#
|
|
32
|
-
agent
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
#
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
#
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
### `agent whoami`
|
|
131
|
-
|
|
132
|
-
Display the currently logged in user.
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
agent whoami
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### `agent update`
|
|
139
|
-
|
|
140
|
-
Update the CLI to the latest version.
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
agent update
|
|
17
|
+
# Start the daemon (discovers agents, exposes REST API)
|
|
18
|
+
agentage daemon
|
|
19
|
+
|
|
20
|
+
# List discovered agents
|
|
21
|
+
agentage agents
|
|
22
|
+
|
|
23
|
+
# Run an agent
|
|
24
|
+
agentage run my-agent "Summarize this project"
|
|
25
|
+
|
|
26
|
+
# Check daemon + hub status
|
|
27
|
+
agentage status
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Daemon
|
|
31
|
+
|
|
32
|
+
The daemon is a lightweight Express server that runs on each machine. It discovers local agents, executes them, and optionally syncs with a central hub.
|
|
33
|
+
|
|
34
|
+
### API
|
|
35
|
+
|
|
36
|
+
| Method | Endpoint | Description |
|
|
37
|
+
|--------|----------|-------------|
|
|
38
|
+
| `GET` | `/api/health` | Status, version, uptime, machine ID, hub connection |
|
|
39
|
+
| `GET` | `/api/agents` | List discovered agent manifests |
|
|
40
|
+
| `POST` | `/api/agents/refresh` | Re-scan agent directories |
|
|
41
|
+
| `POST` | `/api/agents/:name/run` | Execute an agent (`{ task, config?, context? }`) |
|
|
42
|
+
| `GET` | `/api/runs` | List all runs |
|
|
43
|
+
| `GET` | `/api/runs/:id` | Get run details + output |
|
|
44
|
+
| `POST` | `/api/runs/:id/cancel` | Cancel a running execution |
|
|
45
|
+
| `POST` | `/api/runs/:id/input` | Send input to a waiting agent |
|
|
46
|
+
|
|
47
|
+
Default port: **3100**
|
|
48
|
+
|
|
49
|
+
### Agent Discovery
|
|
50
|
+
|
|
51
|
+
The daemon scans configured directories for agents:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
~/.agentage/agents/*.agent.md # Global agents
|
|
55
|
+
.agentage/agents/*.agent.md # Workspace agents
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Two built-in factories: **markdown** (`.agent.md` files with YAML frontmatter) and **code** (TypeScript/JavaScript modules exporting an Agent).
|
|
59
|
+
|
|
60
|
+
### Hub Sync
|
|
61
|
+
|
|
62
|
+
When authenticated (`agentage login`), the daemon connects to the hub via WebSocket — registering the machine, syncing agents, and relaying run events.
|
|
63
|
+
|
|
64
|
+
| Method | Endpoint | Description |
|
|
65
|
+
|--------|----------|-------------|
|
|
66
|
+
| `GET` | `/api/hub/machines` | List all hub-connected machines |
|
|
67
|
+
| `GET` | `/api/hub/agents` | Aggregated agents across all machines |
|
|
68
|
+
| `POST` | `/api/hub/runs` | Start a run on any connected machine |
|
|
69
|
+
|
|
70
|
+
## CLI Commands
|
|
71
|
+
|
|
72
|
+
| Command | Description |
|
|
73
|
+
|---------|-------------|
|
|
74
|
+
| `agentage daemon` | Start the daemon server |
|
|
75
|
+
| `agentage agents` | List discovered agents |
|
|
76
|
+
| `agentage run <name> [task]` | Execute an agent |
|
|
77
|
+
| `agentage runs` | List runs |
|
|
78
|
+
| `agentage machines` | List hub-connected machines |
|
|
79
|
+
| `agentage status` | Show daemon and hub status |
|
|
80
|
+
| `agentage logs` | View daemon logs |
|
|
81
|
+
| `agentage login` | Authenticate with the hub |
|
|
82
|
+
| `agentage logout` | Log out |
|
|
83
|
+
|
|
84
|
+
## Project Structure
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
src/
|
|
88
|
+
├── cli.ts # CLI entry point (commander)
|
|
89
|
+
├── daemon-entry.ts # Daemon process entry point
|
|
90
|
+
├── commands/ # CLI command handlers
|
|
91
|
+
│ ├── daemon-cmd.ts # agentage daemon
|
|
92
|
+
│ ├── agents.ts # agentage agents
|
|
93
|
+
│ ├── run.ts # agentage run
|
|
94
|
+
│ ├── runs.ts # agentage runs
|
|
95
|
+
│ ├── machines.ts # agentage machines
|
|
96
|
+
│ ├── status.ts # agentage status
|
|
97
|
+
│ ├── logs.ts # agentage logs
|
|
98
|
+
│ ├── login.ts # agentage login
|
|
99
|
+
│ └── logout.ts # agentage logout
|
|
100
|
+
├── daemon/ # Daemon server
|
|
101
|
+
│ ├── server.ts # Express + HTTP server setup
|
|
102
|
+
│ ├── routes.ts # REST API routes
|
|
103
|
+
│ ├── config.ts # Daemon configuration
|
|
104
|
+
│ ├── run-manager.ts # Agent execution + run lifecycle
|
|
105
|
+
│ ├── websocket.ts # WebSocket for streaming
|
|
106
|
+
│ └── logger.ts # Structured logging
|
|
107
|
+
├── discovery/ # Agent discovery
|
|
108
|
+
│ ├── scanner.ts # Directory scanning
|
|
109
|
+
│ ├── markdown-factory.ts # .agent.md parser (gray-matter)
|
|
110
|
+
│ └── code-factory.ts # JS/TS module loader (jiti)
|
|
111
|
+
├── hub/ # Hub connection
|
|
112
|
+
│ ├── auth.ts # Auth token storage
|
|
113
|
+
│ ├── auth-callback.ts # OAuth callback server
|
|
114
|
+
│ ├── hub-client.ts # Hub REST client
|
|
115
|
+
│ ├── hub-sync.ts # Machine/agent sync
|
|
116
|
+
│ ├── hub-ws.ts # Hub WebSocket client
|
|
117
|
+
│ └── reconnection.ts # Auto-reconnect logic
|
|
118
|
+
└── utils/
|
|
119
|
+
├── daemon-client.ts # CLI → daemon HTTP client
|
|
120
|
+
├── ensure-daemon.ts # Auto-start daemon if not running
|
|
121
|
+
└── render.ts # Terminal output formatting
|
|
144
122
|
```
|
|
145
123
|
|
|
146
124
|
## Development
|
|
147
125
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
- Node.js >= 20.0.0
|
|
151
|
-
- npm >= 10.0.0
|
|
152
|
-
|
|
153
|
-
### Setup
|
|
126
|
+
Requires Node.js >= 22.0.0.
|
|
154
127
|
|
|
155
128
|
```bash
|
|
156
|
-
|
|
157
|
-
npm
|
|
158
|
-
|
|
159
|
-
# Run in development mode
|
|
160
|
-
npm run dev
|
|
161
|
-
|
|
162
|
-
# Build
|
|
163
|
-
npm run build
|
|
164
|
-
|
|
165
|
-
# Run tests
|
|
166
|
-
npm test
|
|
167
|
-
|
|
168
|
-
# Run tests with coverage
|
|
169
|
-
npm run test:coverage
|
|
170
|
-
|
|
171
|
-
# Lint
|
|
172
|
-
npm run lint
|
|
173
|
-
|
|
174
|
-
# Type check
|
|
175
|
-
npm run type-check
|
|
176
|
-
|
|
177
|
-
# Full verification (type-check, lint, build, test)
|
|
178
|
-
npm run verify
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Project Structure
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
cli/
|
|
185
|
-
├── src/
|
|
186
|
-
│ ├── cli.ts # CLI entry point
|
|
187
|
-
│ ├── index.ts # Package exports
|
|
188
|
-
│ ├── commands/ # CLI command handlers
|
|
189
|
-
│ │ ├── init.ts
|
|
190
|
-
│ │ ├── run.ts
|
|
191
|
-
│ │ ├── list.ts
|
|
192
|
-
│ │ ├── publish.ts
|
|
193
|
-
│ │ ├── install.ts
|
|
194
|
-
│ │ ├── search.ts
|
|
195
|
-
│ │ ├── login.ts
|
|
196
|
-
│ │ ├── logout.ts
|
|
197
|
-
│ │ ├── whoami.ts
|
|
198
|
-
│ │ └── update.ts
|
|
199
|
-
│ ├── services/ # API services
|
|
200
|
-
│ │ ├── auth.service.ts
|
|
201
|
-
│ │ └── registry.service.ts
|
|
202
|
-
│ ├── utils/ # Utility functions
|
|
203
|
-
│ │ ├── agent-parser.ts
|
|
204
|
-
│ │ ├── config.ts
|
|
205
|
-
│ │ ├── lockfile.ts
|
|
206
|
-
│ │ └── version.ts
|
|
207
|
-
│ ├── schemas/ # Zod schemas
|
|
208
|
-
│ │ └── agent.schema.ts
|
|
209
|
-
│ ├── types/ # TypeScript types
|
|
210
|
-
│ │ ├── config.types.ts
|
|
211
|
-
│ │ ├── lockfile.types.ts
|
|
212
|
-
│ │ └── registry.types.ts
|
|
213
|
-
│ └── __mocks__/ # Jest mocks
|
|
214
|
-
│ └── chalk.ts
|
|
215
|
-
├── package.json
|
|
216
|
-
├── tsconfig.json
|
|
217
|
-
├── jest.config.js
|
|
218
|
-
├── eslint.config.js
|
|
219
|
-
└── README.md
|
|
129
|
+
npm ci
|
|
130
|
+
npm run verify # type-check + lint + format + test + build
|
|
131
|
+
npm run build && npm link # test CLI locally
|
|
220
132
|
```
|
|
221
133
|
|
|
222
134
|
## License
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
|
+
import { VERSION } from './utils/version.js';
|
|
3
4
|
import { registerRun } from './commands/run.js';
|
|
4
5
|
import { registerAgents } from './commands/agents.js';
|
|
5
6
|
import { registerRuns } from './commands/runs.js';
|
|
@@ -10,7 +11,7 @@ import { registerLogout } from './commands/logout.js';
|
|
|
10
11
|
import { registerLogs } from './commands/logs.js';
|
|
11
12
|
import { registerDaemon } from './commands/daemon-cmd.js';
|
|
12
13
|
const program = new Command();
|
|
13
|
-
program.name('agentage').description('Agentage CLI — control plane for AI agents').version(
|
|
14
|
+
program.name('agentage').description('Agentage CLI — control plane for AI agents').version(VERSION);
|
|
14
15
|
registerRun(program);
|
|
15
16
|
registerAgents(program);
|
|
16
17
|
registerRuns(program);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpG,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,4CAA4C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpG,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,eAAO,MAAM,cAAc,GAAI,SAAS,OAAO,KAAG,IAiDjD,CAAC"}
|
package/dist/commands/agents.js
CHANGED
|
@@ -11,8 +11,7 @@ export const registerAgents = (program) => {
|
|
|
11
11
|
.action(async (opts) => {
|
|
12
12
|
await ensureDaemon();
|
|
13
13
|
if (opts.all) {
|
|
14
|
-
|
|
15
|
-
process.exitCode = 1;
|
|
14
|
+
await listHubAgents(opts.json ?? false);
|
|
16
15
|
return;
|
|
17
16
|
}
|
|
18
17
|
let agents;
|
|
@@ -42,4 +41,38 @@ export const registerAgents = (program) => {
|
|
|
42
41
|
}
|
|
43
42
|
});
|
|
44
43
|
};
|
|
44
|
+
const listHubAgents = async (jsonMode) => {
|
|
45
|
+
let agents;
|
|
46
|
+
try {
|
|
47
|
+
agents = await get('/api/hub/agents');
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
console.error(chalk.red("Not connected to hub. Run 'agentage login' first."));
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (jsonMode) {
|
|
55
|
+
console.log(JSON.stringify(agents, null, 2));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (agents.length === 0) {
|
|
59
|
+
console.log(chalk.gray('No agents found across machines.'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const nameWidth = Math.max(12, ...agents.map((a) => a.name.length)) + 2;
|
|
63
|
+
const machineWidth = Math.max(10, ...agents.map((a) => (a.machines?.name || '').length)) + 2;
|
|
64
|
+
const descWidth = Math.max(12, ...agents.map((a) => (a.description || '').length).slice(0, 40)) + 2;
|
|
65
|
+
console.log(chalk.bold('NAME'.padEnd(nameWidth)) +
|
|
66
|
+
chalk.bold('MACHINE'.padEnd(machineWidth)) +
|
|
67
|
+
chalk.bold('DESCRIPTION'.padEnd(descWidth)) +
|
|
68
|
+
chalk.bold('STATUS'));
|
|
69
|
+
for (const agent of agents) {
|
|
70
|
+
const machineName = agent.machines?.name || '';
|
|
71
|
+
const status = agent.machines?.status === 'online' ? chalk.green('online') : chalk.gray('offline');
|
|
72
|
+
console.log(agent.name.padEnd(nameWidth) +
|
|
73
|
+
machineName.padEnd(machineWidth) +
|
|
74
|
+
(agent.description || '').substring(0, 38).padEnd(descWidth) +
|
|
75
|
+
status);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
45
78
|
//# sourceMappingURL=agents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.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,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,eAAO,MAAM,aAAa,GAAI,SAAS,OAAO,KAAG,IA4FhD,CAAC"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,11 +1,79 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import open from 'open';
|
|
3
|
+
import { ensureDaemon } from '../utils/ensure-daemon.js';
|
|
4
|
+
import { saveAuth } from '../hub/auth.js';
|
|
5
|
+
import { startCallbackServer, getCallbackPort } from '../hub/auth-callback.js';
|
|
6
|
+
import { loadConfig, saveConfig } from '../daemon/config.js';
|
|
7
|
+
const DEFAULT_HUB_URL = 'https://agentage.io';
|
|
2
8
|
export const registerLogin = (program) => {
|
|
3
9
|
program
|
|
4
10
|
.command('login')
|
|
5
11
|
.description('Authenticate with hub')
|
|
6
|
-
.option('--hub <url>', 'Hub URL')
|
|
7
|
-
.
|
|
8
|
-
|
|
12
|
+
.option('--hub <url>', 'Hub URL', DEFAULT_HUB_URL)
|
|
13
|
+
.option('--token <token>', 'Use access token directly (headless/CI)')
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
await ensureDaemon();
|
|
16
|
+
const hubUrl = opts.hub;
|
|
17
|
+
if (opts.token) {
|
|
18
|
+
// Direct token mode — for headless/CI
|
|
19
|
+
console.log(chalk.yellow('Direct token login — skipping browser flow'));
|
|
20
|
+
console.log(chalk.yellow('Note: refresh tokens are not available in direct mode. Session will expire.'));
|
|
21
|
+
const config = loadConfig();
|
|
22
|
+
const authState = {
|
|
23
|
+
session: {
|
|
24
|
+
access_token: opts.token,
|
|
25
|
+
refresh_token: '',
|
|
26
|
+
expires_at: 0,
|
|
27
|
+
},
|
|
28
|
+
user: { id: '', email: '' },
|
|
29
|
+
hub: { url: hubUrl, machineId: config.machine.id },
|
|
30
|
+
};
|
|
31
|
+
saveAuth(authState);
|
|
32
|
+
// Save hub URL to config
|
|
33
|
+
config.hub = { url: hubUrl };
|
|
34
|
+
saveConfig(config);
|
|
35
|
+
console.log(chalk.green('Logged in with token.'));
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
38
|
+
// Start callback server, then open browser to hub login page
|
|
39
|
+
console.log('Opening browser for authentication...');
|
|
40
|
+
const authPromise = startCallbackServer();
|
|
41
|
+
// Wait a tick for the server to start, then get the port
|
|
42
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
43
|
+
const port = getCallbackPort();
|
|
44
|
+
if (!port) {
|
|
45
|
+
console.error(chalk.red('Failed to start callback server'));
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const authUrl = `${hubUrl}/login?cli_port=${port}`;
|
|
50
|
+
try {
|
|
51
|
+
await open(authUrl);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Browser didn't open — print URL manually
|
|
55
|
+
console.log(chalk.yellow('Could not open browser. Open this URL manually:'));
|
|
56
|
+
console.log(authUrl);
|
|
57
|
+
}
|
|
58
|
+
console.log('Waiting for login...');
|
|
59
|
+
try {
|
|
60
|
+
const authState = await authPromise;
|
|
61
|
+
// Set hub info
|
|
62
|
+
authState.hub.url = hubUrl;
|
|
63
|
+
const config = loadConfig();
|
|
64
|
+
authState.hub.machineId = config.machine.id;
|
|
65
|
+
saveAuth(authState);
|
|
66
|
+
// Save hub URL to config
|
|
67
|
+
config.hub = { url: hubUrl };
|
|
68
|
+
saveConfig(config);
|
|
69
|
+
console.log(chalk.green(`✓ Logged in as ${authState.user.email}`));
|
|
70
|
+
console.log(`Machine "${config.machine.name}" will connect to hub automatically.`);
|
|
71
|
+
process.exit(0);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
console.error(chalk.red(`Login failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
75
|
+
process.exitCode = 1;
|
|
76
|
+
}
|
|
9
77
|
});
|
|
10
78
|
};
|
|
11
79
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,eAAO,MAAM,cAAc,GAAI,SAAS,OAAO,KAAG,IA2BjD,CAAC"}
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import { ensureDaemon } from '../utils/ensure-daemon.js';
|
|
3
|
+
import { readAuth, deleteAuth } from '../hub/auth.js';
|
|
4
|
+
import { createHubClient } from '../hub/hub-client.js';
|
|
2
5
|
export const registerLogout = (program) => {
|
|
3
6
|
program
|
|
4
7
|
.command('logout')
|
|
5
8
|
.description('Disconnect from hub')
|
|
6
|
-
.action(() => {
|
|
7
|
-
|
|
9
|
+
.action(async () => {
|
|
10
|
+
await ensureDaemon();
|
|
11
|
+
const auth = readAuth();
|
|
12
|
+
if (!auth) {
|
|
13
|
+
console.log(chalk.yellow('Not logged in.'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// Best-effort deregister from hub
|
|
17
|
+
try {
|
|
18
|
+
const client = createHubClient(auth.hub.url, auth);
|
|
19
|
+
await client.deregister(auth.hub.machineId);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Hub may be unreachable — that's fine
|
|
23
|
+
}
|
|
24
|
+
deleteAuth();
|
|
25
|
+
console.log(chalk.green('Disconnected from hub. Machine deregistered.'));
|
|
26
|
+
console.log(chalk.dim('Daemon continues running in standalone mode.'));
|
|
27
|
+
console.log(chalk.dim('Run `agentage daemon restart` to apply.'));
|
|
8
28
|
});
|
|
9
29
|
};
|
|
10
30
|
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAQ,EAAE;IACvD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qBAAqB,CAAC;SAClC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,YAAY,EAAE,CAAC;QAErB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnD,MAAM,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;QAED,UAAU,EAAE,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machines.d.ts","sourceRoot":"","sources":["../../src/commands/machines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"machines.d.ts","sourceRoot":"","sources":["../../src/commands/machines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,eAAO,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,IAiDnD,CAAC"}
|
|
@@ -1,14 +1,56 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { ensureDaemon } from '../utils/ensure-daemon.js';
|
|
3
|
+
import { get } from '../utils/daemon-client.js';
|
|
3
4
|
export const registerMachines = (program) => {
|
|
4
5
|
program
|
|
5
6
|
.command('machines')
|
|
6
7
|
.description('List connected machines')
|
|
7
8
|
.option('--json', 'JSON output')
|
|
8
|
-
.action(async () => {
|
|
9
|
+
.action(async (opts) => {
|
|
9
10
|
await ensureDaemon();
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
let machines;
|
|
12
|
+
try {
|
|
13
|
+
machines = await get('/api/hub/machines');
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
console.error(chalk.red("Not connected to hub. Run 'agentage login' first."));
|
|
17
|
+
process.exitCode = 1;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (opts.json) {
|
|
21
|
+
console.log(JSON.stringify(machines, null, 2));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (machines.length === 0) {
|
|
25
|
+
console.log(chalk.gray('No machines registered.'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const nameWidth = Math.max(12, ...machines.map((m) => m.name.length)) + 2;
|
|
29
|
+
console.log(chalk.bold('NAME'.padEnd(nameWidth)) +
|
|
30
|
+
chalk.bold('PLATFORM'.padEnd(12)) +
|
|
31
|
+
chalk.bold('STATUS'.padEnd(12)) +
|
|
32
|
+
chalk.bold('LAST SEEN'));
|
|
33
|
+
for (const machine of machines) {
|
|
34
|
+
const status = machine.status === 'online' ? chalk.green('online') : chalk.gray('offline');
|
|
35
|
+
const lastSeen = formatLastSeen(machine.last_seen_at);
|
|
36
|
+
console.log(machine.name.padEnd(nameWidth) +
|
|
37
|
+
machine.platform.padEnd(12) +
|
|
38
|
+
status.padEnd(12 + (status.length - machine.status.length)) +
|
|
39
|
+
chalk.gray(lastSeen));
|
|
40
|
+
}
|
|
12
41
|
});
|
|
13
42
|
};
|
|
43
|
+
const formatLastSeen = (iso) => {
|
|
44
|
+
const diff = Date.now() - new Date(iso).getTime();
|
|
45
|
+
const seconds = Math.floor(diff / 1000);
|
|
46
|
+
if (seconds < 5)
|
|
47
|
+
return 'just now';
|
|
48
|
+
if (seconds < 60)
|
|
49
|
+
return `${seconds}s ago`;
|
|
50
|
+
if (seconds < 3600)
|
|
51
|
+
return `${Math.floor(seconds / 60)}m ago`;
|
|
52
|
+
if (seconds < 86400)
|
|
53
|
+
return `${Math.floor(seconds / 3600)}h ago`;
|
|
54
|
+
return `${Math.floor(seconds / 86400)}d ago`;
|
|
55
|
+
};
|
|
14
56
|
//# sourceMappingURL=machines.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machines.js","sourceRoot":"","sources":["../../src/commands/machines.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"machines.js","sourceRoot":"","sources":["../../src/commands/machines.ts"],"names":[],"mappings":"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"}
|