@ai-support-agent/cli 0.0.29-beta.0 → 0.0.30-beta.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 +53 -2
- package/dist/agent-config-sync.d.ts.map +1 -1
- package/dist/agent-config-sync.js +4 -3
- package/dist/agent-config-sync.js.map +1 -1
- package/dist/project-dir.d.ts +4 -0
- package/dist/project-dir.d.ts.map +1 -1
- package/dist/project-dir.js +8 -0
- package/dist/project-dir.js.map +1 -1
- package/dist/ssh-config-setup.d.ts +7 -5
- package/dist/ssh-config-setup.d.ts.map +1 -1
- package/dist/ssh-config-setup.js +22 -18
- package/dist/ssh-config-setup.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,6 +54,17 @@ ai-support-agent start --docker
|
|
|
54
54
|
|
|
55
55
|
Project dirs, `~/.claude/`, and `~/.aws/` are auto-mounted. The container runs with your host UID/GID.
|
|
56
56
|
|
|
57
|
+
### Run as a background service
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
ai-support-agent service install # install as a system service
|
|
61
|
+
ai-support-agent service start # start the service
|
|
62
|
+
ai-support-agent service status # check service status
|
|
63
|
+
ai-support-agent service stop # stop the service
|
|
64
|
+
ai-support-agent service restart # restart the service
|
|
65
|
+
ai-support-agent service uninstall # remove the service
|
|
66
|
+
```
|
|
67
|
+
|
|
57
68
|
## How It Works
|
|
58
69
|
|
|
59
70
|
1. **Register** — Agent sends its capabilities (shell, file I/O, chat, terminal, vscode) to the API.
|
|
@@ -72,6 +83,7 @@ Each project runs in its own forked child process. The main process watches `con
|
|
|
72
83
|
| `file_read` / `file_write` / `file_list` / `file_rename` / `file_delete` / `file_mkdir` | File system operations |
|
|
73
84
|
| `process_list` / `process_kill` | Process management |
|
|
74
85
|
| `chat_cancel` | Cancels a running chat process |
|
|
86
|
+
| `e2e_test` | End-to-end test execution with Playwright browser automation and step reporting |
|
|
75
87
|
| `setup` / `config_sync` / `reboot` / `update` | Lifecycle management |
|
|
76
88
|
|
|
77
89
|
### Chat Modes
|
|
@@ -87,15 +99,36 @@ The mode is resolved as: agent config → server default → auto-detection (whe
|
|
|
87
99
|
|
|
88
100
|
The agent ships a [Model Context Protocol](https://modelcontextprotocol.io/) server that Claude Code can call:
|
|
89
101
|
|
|
102
|
+
**General tools:**
|
|
103
|
+
|
|
90
104
|
| Tool | Description |
|
|
91
105
|
|------|-------------|
|
|
92
106
|
| `get_credentials` | Fetch AWS STS or database credentials from the API |
|
|
93
|
-
| `
|
|
107
|
+
| `db_query` | Run SELECT queries (injection-protected) |
|
|
94
108
|
| `get_db_schemas` | Retrieve table/column metadata |
|
|
95
|
-
| `
|
|
109
|
+
| `file_upload` | Upload files to S3 via presigned URLs |
|
|
96
110
|
| `get_project_info` | Fetch project configuration |
|
|
97
111
|
| `read_conversation_file` | Read conversation history |
|
|
98
112
|
|
|
113
|
+
**Browser automation tools (Playwright-based):**
|
|
114
|
+
|
|
115
|
+
| Tool | Description |
|
|
116
|
+
|------|-------------|
|
|
117
|
+
| `browser_navigate` | Navigate to a URL and take a screenshot |
|
|
118
|
+
| `browser_click` | Click an element by CSS selector |
|
|
119
|
+
| `browser_fill` | Fill a form field with a value |
|
|
120
|
+
| `browser_get_text` | Extract text from a specific element |
|
|
121
|
+
| `browser_login` | Log in using saved credentials |
|
|
122
|
+
| `browser_extract` | Extract text and save to a session variable atomically |
|
|
123
|
+
| `browser_set_variable` / `browser_get_variable` / `browser_list_variables` | Manage session variables |
|
|
124
|
+
| `browser_close` | Close the browser session |
|
|
125
|
+
|
|
126
|
+
**E2E test tools:**
|
|
127
|
+
|
|
128
|
+
| Tool | Description |
|
|
129
|
+
|------|-------------|
|
|
130
|
+
| `report_test_step` | Report an E2E test step result (status, screenshot, duration) to the API |
|
|
131
|
+
|
|
99
132
|
## CLI Reference
|
|
100
133
|
|
|
101
134
|
```
|
|
@@ -112,12 +145,28 @@ Commands:
|
|
|
112
145
|
set-auto-update Configure auto-update (--enable | --disable | --channel)
|
|
113
146
|
set-project-dir Set project working directory
|
|
114
147
|
docker-login Login and start in Docker
|
|
148
|
+
service Manage agent background service
|
|
115
149
|
|
|
116
150
|
Global options:
|
|
117
151
|
--lang <lang> Override display language for this invocation
|
|
118
152
|
--version Show version
|
|
119
153
|
```
|
|
120
154
|
|
|
155
|
+
### `service` Subcommands
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
service install Install the agent as a system background service
|
|
159
|
+
service uninstall Uninstall the agent service
|
|
160
|
+
service start Start the agent service
|
|
161
|
+
service stop Stop the agent service
|
|
162
|
+
service restart Restart the agent service
|
|
163
|
+
service status Show service status
|
|
164
|
+
|
|
165
|
+
Options (install):
|
|
166
|
+
--verbose Show detailed installation info
|
|
167
|
+
--no-docker Install in native mode (skip Docker)
|
|
168
|
+
```
|
|
169
|
+
|
|
121
170
|
### `start` Options
|
|
122
171
|
|
|
123
172
|
```
|
|
@@ -172,6 +221,8 @@ Stored at `~/.ai-support-agent/config.json` (mode `0600`):
|
|
|
172
221
|
| `AI_SUPPORT_AGENT_API_URL` | Override API URL (lowest priority) |
|
|
173
222
|
| `AI_SUPPORT_AGENT_CONFIG_DIR` | Override config directory path |
|
|
174
223
|
| `ANTHROPIC_API_KEY` | Required for `api` chat mode |
|
|
224
|
+
| `AI_SUPPORT_E2E_EXECUTION_ID` | E2E test execution ID (set automatically during `e2e_test` runs) |
|
|
225
|
+
| `AI_SUPPORT_E2E_TEST_CASE_ID` | E2E test case ID (set automatically during `e2e_test` runs) |
|
|
175
226
|
|
|
176
227
|
Priority: CLI flags > config file > environment variables.
|
|
177
228
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config-sync.d.ts","sourceRoot":"","sources":["../src/agent-config-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAU7C,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGtF,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAA;IAChD,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,kBAAkB,EAAE,aAAa,EAAE,CAAA;IACnC,cAAc,EAAE,aAAa,GAAG,SAAS,CAAA;IACzC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,aAAa,GAAG,SAAS,CAAA;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-config-sync.d.ts","sourceRoot":"","sources":["../src/agent-config-sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAU7C,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAGtF,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,aAAa,EAAE,qBAAqB,GAAG,SAAS,CAAA;IAChD,YAAY,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACtC,kBAAkB,EAAE,aAAa,EAAE,CAAA;IACnC,cAAc,EAAE,aAAa,GAAG,SAAS,CAAA;IACzC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB,EAAE,aAAa,GAAG,SAAS,CAAA;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,GAClD,UAAU,CAAC,OAAO,UAAU,CAAC,CAO/B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAU7C"}
|
|
@@ -109,10 +109,11 @@ async function applyProjectConfig(deps, state, config) {
|
|
|
109
109
|
logger_1.logger.warn(`${deps.prefix} Failed to write MCP config: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
-
// Set up SSH config if SSH hosts are configured
|
|
113
|
-
if (config.ssh?.enabled && config.ssh.hosts?.length) {
|
|
112
|
+
// Set up SSH config if SSH hosts are configured and project directory is available
|
|
113
|
+
if (config.ssh?.enabled && config.ssh.hosts?.length && deps.projectDir) {
|
|
114
114
|
try {
|
|
115
|
-
|
|
115
|
+
const sshDir = (0, project_dir_1.getSshDir)(deps.projectDir);
|
|
116
|
+
await (0, ssh_config_setup_1.setupSshConfig)(deps.client, config.ssh, sshDir);
|
|
116
117
|
}
|
|
117
118
|
catch (error) {
|
|
118
119
|
logger_1.logger.warn(`${deps.prefix} Failed to set up SSH config: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config-sync.js","sourceRoot":"","sources":["../src/agent-config-sync.ts"],"names":[],"mappings":";;AAwCA,8CAeC;AAKD,oCAmCC;AAKD,
|
|
1
|
+
{"version":3,"file":"agent-config-sync.js","sourceRoot":"","sources":["../src/agent-config-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/project-dir.d.ts
CHANGED
|
@@ -39,6 +39,10 @@ export declare function getCacheDir(projectDir: string): string;
|
|
|
39
39
|
* Get AWS directory path
|
|
40
40
|
*/
|
|
41
41
|
export declare function getAwsDir(projectDir: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Get SSH directory path
|
|
44
|
+
*/
|
|
45
|
+
export declare function getSshDir(projectDir: string): string;
|
|
42
46
|
/**
|
|
43
47
|
* Get metadata directory path
|
|
44
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-dir.d.ts","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"project-dir.d.ts","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAYlD;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAIxE;AAmBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqC1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,EAC5B,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAS3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
package/dist/project-dir.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.getWorkspaceDir = getWorkspaceDir;
|
|
|
42
42
|
exports.getReposDir = getReposDir;
|
|
43
43
|
exports.getCacheDir = getCacheDir;
|
|
44
44
|
exports.getAwsDir = getAwsDir;
|
|
45
|
+
exports.getSshDir = getSshDir;
|
|
45
46
|
exports.getMetadataDir = getMetadataDir;
|
|
46
47
|
const fs = __importStar(require("fs"));
|
|
47
48
|
const os = __importStar(require("os"));
|
|
@@ -56,6 +57,7 @@ const PROJECT_SUBDIRS = ['workspace/repos', 'workspace/docs', 'workspace/artifac
|
|
|
56
57
|
const METADATA_DIR = '.ai-support-agent';
|
|
57
58
|
const CACHE_DIR = 'cache';
|
|
58
59
|
const AWS_DIR = 'aws';
|
|
60
|
+
const SSH_DIR = 'ssh';
|
|
59
61
|
/**
|
|
60
62
|
* Expand ~ and {projectCode} in a path template
|
|
61
63
|
*/
|
|
@@ -183,6 +185,12 @@ function getCacheDir(projectDir) {
|
|
|
183
185
|
function getAwsDir(projectDir) {
|
|
184
186
|
return path.join(projectDir, METADATA_DIR, AWS_DIR);
|
|
185
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Get SSH directory path
|
|
190
|
+
*/
|
|
191
|
+
function getSshDir(projectDir) {
|
|
192
|
+
return path.join(projectDir, METADATA_DIR, SSH_DIR);
|
|
193
|
+
}
|
|
186
194
|
/**
|
|
187
195
|
* Get metadata directory path
|
|
188
196
|
*/
|
package/dist/project-dir.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-dir.js","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"project-dir.js","sourceRoot":"","sources":["../src/project-dir.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,gCAIC;AAuBD,8CAgBC;AAMD,8CAqCC;AAMD,wCAQC;AAMD,wCASC;AAKD,0CAEC;AAKD,kCAEC;AAKD,kCAEC;AAKD,8BAEC;AAKD,8BAEC;AAKD,wCAEC;AAnLD,uCAAwB;AACxB,uCAAwB;AACxB,2CAA4B;AAE5B,qDAA+C;AAC/C,qCAAiC;AACjC,iCAA0B;AAG1B,SAAS,4BAA4B;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAA,6BAAY,GAAE,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,SAAS,CAAU,CAAA;AACxG,MAAM,YAAY,GAAG,mBAAmB,CAAA;AACxC,MAAM,SAAS,GAAG,OAAO,CAAA;AACzB,MAAM,OAAO,GAAG,KAAK,CAAA;AACrB,MAAM,OAAO,GAAG,KAAK,CAAA;AAErB;;GAEG;AACH,SAAgB,UAAU,CAAC,QAAgB,EAAE,WAAmB;IAC9D,OAAO,QAAQ;SACZ,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;SACtC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAA;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAA;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IACvB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,OAA4B,EAC5B,iBAA0B;IAE1B,kDAAkD;IAClD,MAAM,YAAY,GAAG,yBAAyB,EAAE,CAAA;IAChD,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC5D,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,IAAI,4BAA4B,EAAE,CAAA;IACpE,OAAO,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;AAClD,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,sBAAsB;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,6BAA6B;IAC7B,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAA;IAC5D,eAAe,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IACrE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;IACnE,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;IAE7E,wBAAwB;IACxB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACxD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC5B,OAA4B,EAC5B,iBAA0B;IAE1B,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;IAChE,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC7B,eAAM,CAAC,IAAI,CAAC,IAAA,QAAC,EAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;IAC1F,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,UAAkB;IAC/C,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,MAAM,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAU,EAAE,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,UAAkB;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,UAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,UAAkB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,UAAkB;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,UAAkB;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAA;AACrD,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,UAAkB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB,EAAE,MAAc,EAAE,MAAc;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC/B,eAAM,CAAC,IAAI,CAAC,YAAY,OAAO,OAAO,OAAO,EAAE,CAAC,CAAA;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -3,15 +3,17 @@ import type { ProjectConfigResponse } from './types';
|
|
|
3
3
|
type SshHost = NonNullable<ProjectConfigResponse['ssh']>['hosts'][number];
|
|
4
4
|
/**
|
|
5
5
|
* Set up SSH config and private key files for the given SSH hosts.
|
|
6
|
-
*
|
|
6
|
+
* Files are written to sshDir (project-scoped directory, not ~/.ssh).
|
|
7
|
+
* Fetches credentials from the API, writes key files, and updates sshDir/config.
|
|
7
8
|
*/
|
|
8
9
|
export declare function setupSshConfig(client: ApiClient, sshConfig: {
|
|
9
10
|
hosts: SshHost[];
|
|
10
|
-
}): Promise<void>;
|
|
11
|
+
}, sshDir: string): Promise<void>;
|
|
11
12
|
/**
|
|
12
13
|
* Build the managed block content for SSH config.
|
|
14
|
+
* Uses absolute paths for IdentityFile to work regardless of CWD.
|
|
13
15
|
*/
|
|
14
|
-
export declare function buildManagedBlock(entries: Array<{
|
|
16
|
+
export declare function buildManagedBlock(sshDir: string, entries: Array<{
|
|
15
17
|
hostId: string;
|
|
16
18
|
hostname: string;
|
|
17
19
|
port: number;
|
|
@@ -24,8 +26,8 @@ export declare function buildManagedBlock(entries: Array<{
|
|
|
24
26
|
export declare function removeManagedBlock(content: string): string;
|
|
25
27
|
/**
|
|
26
28
|
* Clean up all SSH config and key files managed by ai-support-agent.
|
|
27
|
-
* Removes the managed block from
|
|
29
|
+
* Removes the managed block from {sshDir}/config and deletes key files.
|
|
28
30
|
*/
|
|
29
|
-
export declare function cleanupSshConfig(): void;
|
|
31
|
+
export declare function cleanupSshConfig(sshDir: string): void;
|
|
30
32
|
export {};
|
|
31
33
|
//# sourceMappingURL=ssh-config-setup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-config-setup.d.ts","sourceRoot":"","sources":["../src/ssh-config-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssh-config-setup.d.ts","sourceRoot":"","sources":["../src/ssh-config-setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,qBAAqB,EAAkB,MAAM,SAAS,CAAA;AAQpE,KAAK,OAAO,GAAG,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzE;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE;IAAE,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA0Cf;AA0CD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GACnF,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAW1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiCrD"}
|
package/dist/ssh-config-setup.js
CHANGED
|
@@ -38,7 +38,6 @@ exports.buildManagedBlock = buildManagedBlock;
|
|
|
38
38
|
exports.removeManagedBlock = removeManagedBlock;
|
|
39
39
|
exports.cleanupSshConfig = cleanupSshConfig;
|
|
40
40
|
const fs = __importStar(require("fs"));
|
|
41
|
-
const os = __importStar(require("os"));
|
|
42
41
|
const path = __importStar(require("path"));
|
|
43
42
|
const logger_1 = require("./logger");
|
|
44
43
|
const utils_1 = require("./utils");
|
|
@@ -48,14 +47,19 @@ const MANAGED_BLOCK_END = '# END ai-support-agent managed';
|
|
|
48
47
|
const KEY_FILE_PREFIX = 'ai-support-agent-';
|
|
49
48
|
/**
|
|
50
49
|
* Set up SSH config and private key files for the given SSH hosts.
|
|
51
|
-
*
|
|
50
|
+
* Files are written to sshDir (project-scoped directory, not ~/.ssh).
|
|
51
|
+
* Fetches credentials from the API, writes key files, and updates sshDir/config.
|
|
52
52
|
*/
|
|
53
|
-
async function setupSshConfig(client, sshConfig) {
|
|
54
|
-
|
|
55
|
-
// Ensure ~/.ssh directory exists
|
|
53
|
+
async function setupSshConfig(client, sshConfig, sshDir) {
|
|
54
|
+
// Ensure SSH directory exists (project-scoped, not ~/.ssh)
|
|
56
55
|
if (!fs.existsSync(sshDir)) {
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
try {
|
|
57
|
+
fs.mkdirSync(sshDir, { recursive: true, mode: 0o700 });
|
|
58
|
+
logger_1.logger.info(`[ssh] Created SSH directory: ${sshDir}`);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error(`Cannot create SSH directory ${sshDir}: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
62
|
+
}
|
|
59
63
|
}
|
|
60
64
|
const configEntries = [];
|
|
61
65
|
for (const host of sshConfig.hosts) {
|
|
@@ -77,7 +81,7 @@ async function setupSshConfig(client, sshConfig) {
|
|
|
77
81
|
if (configEntries.length > 0) {
|
|
78
82
|
try {
|
|
79
83
|
writeSshConfig(sshDir, configEntries);
|
|
80
|
-
logger_1.logger.info(`[ssh] SSH config updated with ${configEntries.length} host(s)`);
|
|
84
|
+
logger_1.logger.info(`[ssh] SSH config updated with ${configEntries.length} host(s) at ${sshDir}`);
|
|
81
85
|
}
|
|
82
86
|
catch (error) {
|
|
83
87
|
logger_1.logger.warn(`[ssh] Failed to write SSH config: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
@@ -85,7 +89,7 @@ async function setupSshConfig(client, sshConfig) {
|
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
91
|
/**
|
|
88
|
-
* Write a private key file to
|
|
92
|
+
* Write a private key file to {sshDir}/ai-support-agent-{hostId}
|
|
89
93
|
*/
|
|
90
94
|
function writeKeyFile(sshDir, credentials) {
|
|
91
95
|
const keyPath = path.join(sshDir, `${KEY_FILE_PREFIX}${credentials.hostId}`);
|
|
@@ -93,7 +97,7 @@ function writeKeyFile(sshDir, credentials) {
|
|
|
93
97
|
fs.writeFileSync(keyPath, normalizedKey, { mode: 0o600 });
|
|
94
98
|
}
|
|
95
99
|
/**
|
|
96
|
-
* Write/update the managed block in
|
|
100
|
+
* Write/update the managed block in {sshDir}/config.
|
|
97
101
|
* Preserves any existing content outside the managed block.
|
|
98
102
|
*/
|
|
99
103
|
function writeSshConfig(sshDir, entries) {
|
|
@@ -105,8 +109,8 @@ function writeSshConfig(sshDir, entries) {
|
|
|
105
109
|
}
|
|
106
110
|
// Remove old managed block
|
|
107
111
|
const contentOutside = removeManagedBlock(existingContent);
|
|
108
|
-
// Build new managed block
|
|
109
|
-
const managedBlock = buildManagedBlock(entries);
|
|
112
|
+
// Build new managed block (use absolute paths for IdentityFile)
|
|
113
|
+
const managedBlock = buildManagedBlock(sshDir, entries);
|
|
110
114
|
// Combine: existing content + managed block
|
|
111
115
|
const trimmed = contentOutside.trimEnd();
|
|
112
116
|
const newContent = trimmed.length > 0
|
|
@@ -116,13 +120,14 @@ function writeSshConfig(sshDir, entries) {
|
|
|
116
120
|
}
|
|
117
121
|
/**
|
|
118
122
|
* Build the managed block content for SSH config.
|
|
123
|
+
* Uses absolute paths for IdentityFile to work regardless of CWD.
|
|
119
124
|
*/
|
|
120
|
-
function buildManagedBlock(entries) {
|
|
125
|
+
function buildManagedBlock(sshDir, entries) {
|
|
121
126
|
const hostBlocks = entries.map((entry) => `Host ai-agent-${entry.hostId}\n` +
|
|
122
127
|
` HostName ${entry.hostname}\n` +
|
|
123
128
|
` Port ${entry.port}\n` +
|
|
124
129
|
` User ${entry.username}\n` +
|
|
125
|
-
` IdentityFile
|
|
130
|
+
` IdentityFile ${path.join(sshDir, KEY_FILE_PREFIX + entry.hostId)}\n` +
|
|
126
131
|
` StrictHostKeyChecking no\n` +
|
|
127
132
|
` UserKnownHostsFile /dev/null`);
|
|
128
133
|
return [
|
|
@@ -148,10 +153,9 @@ function removeManagedBlock(content) {
|
|
|
148
153
|
}
|
|
149
154
|
/**
|
|
150
155
|
* Clean up all SSH config and key files managed by ai-support-agent.
|
|
151
|
-
* Removes the managed block from
|
|
156
|
+
* Removes the managed block from {sshDir}/config and deletes key files.
|
|
152
157
|
*/
|
|
153
|
-
function cleanupSshConfig() {
|
|
154
|
-
const sshDir = path.join(os.homedir(), '.ssh');
|
|
158
|
+
function cleanupSshConfig(sshDir) {
|
|
155
159
|
const configPath = path.join(sshDir, 'config');
|
|
156
160
|
// Remove managed block from config
|
|
157
161
|
if (fs.existsSync(configPath)) {
|
|
@@ -159,7 +163,7 @@ function cleanupSshConfig() {
|
|
|
159
163
|
const content = fs.readFileSync(configPath, 'utf-8');
|
|
160
164
|
const cleaned = removeManagedBlock(content).trimEnd();
|
|
161
165
|
fs.writeFileSync(configPath, cleaned.length > 0 ? cleaned + '\n' : '', { mode: 0o600 });
|
|
162
|
-
logger_1.logger.info(
|
|
166
|
+
logger_1.logger.info(`[ssh] Removed managed block from ${configPath}`);
|
|
163
167
|
}
|
|
164
168
|
catch (error) {
|
|
165
169
|
logger_1.logger.warn(`[ssh] Failed to clean up SSH config: ${(0, utils_1.getErrorMessage)(error)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-config-setup.js","sourceRoot":"","sources":["../src/ssh-config-setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,
|
|
1
|
+
{"version":3,"file":"ssh-config-setup.js","sourceRoot":"","sources":["../src/ssh-config-setup.ts"],"names":[],"mappings":"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"}
|