@1claw/cli 0.59.10 → 0.60.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 +12 -0
- package/dist/src/commands/approval.d.ts.map +1 -1
- package/dist/src/commands/approval.js +35 -16
- package/dist/src/commands/approval.js.map +1 -1
- package/dist/src/commands/chart.d.ts +6 -0
- package/dist/src/commands/chart.d.ts.map +1 -0
- package/dist/src/commands/chart.js +190 -0
- package/dist/src/commands/chart.js.map +1 -0
- package/dist/src/commands/connector.d.ts +3 -0
- package/dist/src/commands/connector.d.ts.map +1 -0
- package/dist/src/commands/connector.js +136 -0
- package/dist/src/commands/connector.js.map +1 -0
- package/dist/src/commands/notify.d.ts +3 -0
- package/dist/src/commands/notify.d.ts.map +1 -0
- package/dist/src/commands/notify.js +155 -0
- package/dist/src/commands/notify.js.map +1 -0
- package/dist/src/commands/platform.js +231 -0
- package/dist/src/commands/platform.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -773,6 +773,18 @@ Manage platform apps for developers building multi-tenant applications on top of
|
|
|
773
773
|
1claw platform reissue-claim <connection-id> # Reissue a claim URL (no re-provisioning)
|
|
774
774
|
1claw platform app-stats <app-id> # Connection/bootstrap/grant statistics
|
|
775
775
|
1claw platform marketplace # Browse the public platform marketplace
|
|
776
|
+
|
|
777
|
+
# Fleets — every agent one template provisioned, as one cohort.
|
|
778
|
+
# Each of these acts on all of them at once, so the mutating ones confirm
|
|
779
|
+
# first and print how many agents they are about to touch.
|
|
780
|
+
1claw platform fleet status <app-id> <template-id> # Version skew and drift
|
|
781
|
+
1claw platform fleet agents <app-id> <template-id> # List them (--drifted to filter)
|
|
782
|
+
1claw platform fleet patch <app-id> <template-id> \
|
|
783
|
+
--set system_prompt="You are..." # Guardrails/capability flags refused
|
|
784
|
+
1claw platform fleet rollout <app-id> <template-id> \
|
|
785
|
+
--dry-run # Plan; changes nothing, claims no job
|
|
786
|
+
1claw platform fleet rollout <app-id> <template-id> # Apply; skips hand-edited agents
|
|
787
|
+
1claw platform fleet pause <app-id> <template-id> # Deactivate the whole cohort
|
|
776
788
|
1claw platform upsert-user \
|
|
777
789
|
--email user@example.com # Provision or find a user (platform-only)
|
|
778
790
|
1claw platform upsert-user \
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/commands/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../src/commands/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,eAAO,MAAM,eAAe,SAE3B,CAAC"}
|
|
@@ -29,7 +29,10 @@ approvalCommand
|
|
|
29
29
|
printTable(result.approvals.map((a) => ({
|
|
30
30
|
id: a.id,
|
|
31
31
|
action: a.action,
|
|
32
|
-
target
|
|
32
|
+
// The sentence if there is one; the raw target otherwise.
|
|
33
|
+
target: a.human_summary
|
|
34
|
+
? truncate(a.human_summary, 40)
|
|
35
|
+
: `${a.target_type}/${a.target_id.slice(0, 8)}`,
|
|
33
36
|
risk: riskBadge(a.risk_tier),
|
|
34
37
|
status: statusBadge(a.status),
|
|
35
38
|
agent: a.agent_id.slice(0, 8),
|
|
@@ -40,7 +43,7 @@ approvalCommand
|
|
|
40
43
|
})), [
|
|
41
44
|
{ key: "id", header: "ID", width: 38 },
|
|
42
45
|
{ key: "action", header: "Action", width: 18 },
|
|
43
|
-
{ key: "target", header: "
|
|
46
|
+
{ key: "target", header: "Summary", width: 42 },
|
|
44
47
|
{ key: "risk", header: "Risk" },
|
|
45
48
|
{ key: "status", header: "Status" },
|
|
46
49
|
{ key: "agent", header: "Agent" },
|
|
@@ -90,17 +93,30 @@ approvalCommand
|
|
|
90
93
|
printJson(a);
|
|
91
94
|
return;
|
|
92
95
|
}
|
|
93
|
-
|
|
96
|
+
const rows = [
|
|
94
97
|
["ID", a.id],
|
|
95
98
|
["Action", a.action],
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
["
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
];
|
|
100
|
+
if (a.human_summary)
|
|
101
|
+
rows.push(["Summary", a.human_summary]);
|
|
102
|
+
rows.push(["Target Type", a.target_type], ["Target ID", a.target_id], ["Risk Tier", riskBadge(a.risk_tier)]);
|
|
103
|
+
// Only worth a line when the two disagree — otherwise it is noise.
|
|
104
|
+
if (a.declared_below_floor) {
|
|
105
|
+
rows.push([
|
|
106
|
+
"Requested Tier",
|
|
107
|
+
chalk.yellow(`${a.declared_risk_tier} (raised to ${a.risk_tier} by policy)`),
|
|
108
|
+
]);
|
|
109
|
+
}
|
|
110
|
+
rows.push(["Status", statusBadge(a.status)], ["Agent ID", a.agent_id]);
|
|
111
|
+
if (a.payload && Object.keys(a.payload).length > 0) {
|
|
112
|
+
rows.push(["Payload", JSON.stringify(a.payload)]);
|
|
113
|
+
}
|
|
114
|
+
if (a.reason)
|
|
115
|
+
rows.push(["Reason", a.reason]);
|
|
116
|
+
if (a.decision_reason)
|
|
117
|
+
rows.push(["Decision Reason", a.decision_reason]);
|
|
118
|
+
rows.push(["Created", new Date(a.created_at).toLocaleDateString()], ["Expires", a.expires_at ? new Date(a.expires_at).toLocaleDateString() : "—"]);
|
|
119
|
+
printKeyValue(rows);
|
|
104
120
|
}
|
|
105
121
|
catch (e) {
|
|
106
122
|
handleError(e);
|
|
@@ -127,16 +143,19 @@ approvalCommand
|
|
|
127
143
|
handleError(e);
|
|
128
144
|
}
|
|
129
145
|
});
|
|
146
|
+
function truncate(s, max) {
|
|
147
|
+
return s.length <= max ? s : `${s.slice(0, max - 1)}…`;
|
|
148
|
+
}
|
|
130
149
|
function riskBadge(tier) {
|
|
131
|
-
switch (tier
|
|
132
|
-
case
|
|
150
|
+
switch (tier) {
|
|
151
|
+
case 1:
|
|
133
152
|
return chalk.green("T1");
|
|
134
|
-
case
|
|
153
|
+
case 2:
|
|
135
154
|
return chalk.yellow("T2");
|
|
136
|
-
case
|
|
155
|
+
case 3:
|
|
137
156
|
return chalk.red("T3");
|
|
138
157
|
default:
|
|
139
|
-
return tier;
|
|
158
|
+
return String(tier);
|
|
140
159
|
}
|
|
141
160
|
}
|
|
142
161
|
function statusBadge(status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/commands/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACH,UAAU,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,SAAS,GACZ,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/commands/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export declare const diffCommand: Command;
|
|
3
|
+
export declare const applyCommand: Command;
|
|
4
|
+
/** Persist what an apply set, so the next run can tell drift from a first run. */
|
|
5
|
+
export declare function writeAppliedState(state: Record<string, unknown>): void;
|
|
6
|
+
//# sourceMappingURL=chart.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/commands/chart.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+IpC,eAAO,MAAM,WAAW,SAoBlB,CAAC;AAEP,eAAO,MAAM,YAAY,SAgFnB,CAAC;AAEP,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGtE"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { readFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { parse as parseYaml } from "yaml";
|
|
6
|
+
import { api } from "../client.js";
|
|
7
|
+
import { requireToken, handleError } from "../middleware.js";
|
|
8
|
+
import { printInfo, printJson, printSuccess } from "../output.js";
|
|
9
|
+
/**
|
|
10
|
+
* `1claw diff` — a thin client over POST /v1/org/apply/diff.
|
|
11
|
+
*
|
|
12
|
+
* There is deliberately no reconcile logic here. The server's
|
|
13
|
+
* `chart_reconciler` is the only implementation: two of them would drift, and
|
|
14
|
+
* the drift would show up as a CLI that provisions differently from a platform
|
|
15
|
+
* rollout. This file parses YAML, posts it, and renders what comes back.
|
|
16
|
+
*/
|
|
17
|
+
const STATE_PATH = ".1claw/apply-state.json";
|
|
18
|
+
function loadChart(file) {
|
|
19
|
+
const path = resolve(file);
|
|
20
|
+
if (!existsSync(path)) {
|
|
21
|
+
console.error(chalk.red(`No such file: ${file}`));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const raw = readFileSync(path, "utf8");
|
|
25
|
+
try {
|
|
26
|
+
return parseYaml(raw);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
console.error(chalk.red(`${file} is not valid YAML:`));
|
|
30
|
+
console.error(e instanceof Error ? e.message : String(e));
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function loadAppliedState() {
|
|
35
|
+
if (!existsSync(STATE_PATH))
|
|
36
|
+
return {};
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(readFileSync(STATE_PATH, "utf8"));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// A corrupt state file must not be treated as "nothing applied" — that
|
|
42
|
+
// would report every existing resource as a create, and hide drift
|
|
43
|
+
// entirely. Stop and let a human look at it.
|
|
44
|
+
console.error(chalk.red(`${STATE_PATH} is not valid JSON. Fix or delete it before continuing.`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function renderPlan(res) {
|
|
49
|
+
console.log(chalk.bold(`\nChart: ${res.chart_name}\n`));
|
|
50
|
+
for (const a of res.actions) {
|
|
51
|
+
const label = `${a.kind}/${a.name}`;
|
|
52
|
+
switch (a.action) {
|
|
53
|
+
case "create":
|
|
54
|
+
console.log(` ${chalk.green("+")} ${label}`);
|
|
55
|
+
break;
|
|
56
|
+
case "patch":
|
|
57
|
+
console.log(` ${chalk.yellow("~")} ${label} ${chalk.dim(`(${(a.fields ?? []).join(", ")})`)}`);
|
|
58
|
+
break;
|
|
59
|
+
case "unchanged":
|
|
60
|
+
console.log(` ${chalk.dim("=")} ${chalk.dim(label)}`);
|
|
61
|
+
break;
|
|
62
|
+
case "skipped_drifted":
|
|
63
|
+
console.log(` ${chalk.yellow("!")} ${label} ${chalk.yellow(`changed outside this chart (${(a.drifted_fields ?? []).join(", ")}) — left alone`)}`);
|
|
64
|
+
break;
|
|
65
|
+
case "refused":
|
|
66
|
+
console.log(` ${chalk.red("✗")} ${label} ${chalk.red(a.reason ?? "refused")}`);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const s = res.summary;
|
|
71
|
+
console.log("");
|
|
72
|
+
if (s.no_changes) {
|
|
73
|
+
printSuccess("No changes — the chart matches what is deployed.");
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(` ${chalk.green(`${s.create} to create`)}, ` +
|
|
77
|
+
`${chalk.yellow(`${s.patch} to update`)}, ` +
|
|
78
|
+
`${chalk.dim(`${s.unchanged} unchanged`)}`);
|
|
79
|
+
}
|
|
80
|
+
if (s.skipped_drifted > 0 || s.refused > 0) {
|
|
81
|
+
console.log(` ${chalk.yellow(`${s.skipped_drifted} skipped`)}, ` +
|
|
82
|
+
`${chalk.red(`${s.refused} refused`)}`);
|
|
83
|
+
}
|
|
84
|
+
if (res.warnings.length > 0) {
|
|
85
|
+
console.log("");
|
|
86
|
+
for (const w of res.warnings)
|
|
87
|
+
console.log(` ${chalk.yellow("warning:")} ${w}`);
|
|
88
|
+
}
|
|
89
|
+
console.log("");
|
|
90
|
+
}
|
|
91
|
+
export const diffCommand = new Command("diff")
|
|
92
|
+
.description("Show what a chart would change, without changing anything")
|
|
93
|
+
.requiredOption("-f, --file <chart.yaml>", "Chart file")
|
|
94
|
+
.option("--json", "Output as JSON")
|
|
95
|
+
.action(async (opts) => {
|
|
96
|
+
try {
|
|
97
|
+
requireToken();
|
|
98
|
+
const chart = loadChart(opts.file);
|
|
99
|
+
const res = await api("/org/apply/diff", {
|
|
100
|
+
method: "POST",
|
|
101
|
+
body: { chart, applied_state: loadAppliedState() },
|
|
102
|
+
});
|
|
103
|
+
if (opts.json) {
|
|
104
|
+
printJson(res);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
renderPlan(res);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
handleError(e);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
export const applyCommand = new Command("apply")
|
|
114
|
+
.description("Apply a chart (use --dry-run to preview)")
|
|
115
|
+
.requiredOption("-f, --file <chart.yaml>", "Chart file")
|
|
116
|
+
.option("--dry-run", "Validate and print the plan without applying")
|
|
117
|
+
.option("--json", "Output as JSON")
|
|
118
|
+
.action(async (opts) => {
|
|
119
|
+
try {
|
|
120
|
+
requireToken();
|
|
121
|
+
const chart = loadChart(opts.file);
|
|
122
|
+
const res = await api("/org/apply/diff", {
|
|
123
|
+
method: "POST",
|
|
124
|
+
body: { chart, applied_state: loadAppliedState() },
|
|
125
|
+
});
|
|
126
|
+
if (opts.json) {
|
|
127
|
+
printJson(res);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
renderPlan(res);
|
|
131
|
+
if (opts.dryRun) {
|
|
132
|
+
printInfo("Dry run — nothing was changed.");
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const applied = await api("/org/apply", {
|
|
136
|
+
method: "POST",
|
|
137
|
+
body: { chart, applied_state: loadAppliedState() },
|
|
138
|
+
});
|
|
139
|
+
console.log("");
|
|
140
|
+
for (const r of applied.resources) {
|
|
141
|
+
const label = `${r.kind}/${r.name}`;
|
|
142
|
+
switch (r.result) {
|
|
143
|
+
case "created":
|
|
144
|
+
console.log(` ${chalk.green("✓")} created ${label}`);
|
|
145
|
+
break;
|
|
146
|
+
case "unchanged":
|
|
147
|
+
console.log(` ${chalk.dim("=")} ${chalk.dim(`${label} unchanged`)}`);
|
|
148
|
+
break;
|
|
149
|
+
case "awaiting_approval":
|
|
150
|
+
console.log(` ${chalk.yellow("⏸")} ${label} ${chalk.yellow(r.detail ?? "needs approval")}`);
|
|
151
|
+
break;
|
|
152
|
+
case "skipped":
|
|
153
|
+
console.log(` ${chalk.yellow("!")} ${label} ${chalk.yellow(r.detail ?? "skipped")}`);
|
|
154
|
+
break;
|
|
155
|
+
case "refused":
|
|
156
|
+
console.log(` ${chalk.red("✗")} ${label} ${chalk.red(r.detail ?? "refused")}`);
|
|
157
|
+
break;
|
|
158
|
+
case "failed":
|
|
159
|
+
console.log(` ${chalk.red("✗")} ${label} ${chalk.red(r.detail ?? "failed")}`);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Written even when something needs attention: the resources that
|
|
164
|
+
// were created still need recording, or the next run reports them
|
|
165
|
+
// as creates and makes duplicates.
|
|
166
|
+
writeAppliedState(applied.applied_state);
|
|
167
|
+
console.log("");
|
|
168
|
+
if (applied.warnings.length > 0) {
|
|
169
|
+
for (const w of applied.warnings) {
|
|
170
|
+
console.log(` ${chalk.yellow("warning:")} ${w}`);
|
|
171
|
+
}
|
|
172
|
+
console.log("");
|
|
173
|
+
}
|
|
174
|
+
if (applied.needs_attention) {
|
|
175
|
+
printInfo("Applied, but not finished — something above is waiting on a person.");
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
printSuccess("Applied.");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (e) {
|
|
182
|
+
handleError(e);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
/** Persist what an apply set, so the next run can tell drift from a first run. */
|
|
186
|
+
export function writeAppliedState(state) {
|
|
187
|
+
mkdirSync(dirname(STATE_PATH), { recursive: true });
|
|
188
|
+
writeFileSync(STATE_PATH, `${JSON.stringify(state, null, 2)}\n`);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../../src/commands/chart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../src/commands/connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6CpC,eAAO,MAAM,gBAAgB,SAE5B,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../client.js";
|
|
4
|
+
import { requireToken, handleError } from "../middleware.js";
|
|
5
|
+
import { printTable, printKeyValue, printSuccess, printInfo, printJson, } from "../output.js";
|
|
6
|
+
export const connectorCommand = new Command("connector").description("Install pre-built connectors (Gmail, Slack, GitHub, …) onto an agent");
|
|
7
|
+
connectorCommand
|
|
8
|
+
.command("presets")
|
|
9
|
+
.alias("catalog")
|
|
10
|
+
.description("List available connectors")
|
|
11
|
+
.option("--category <category>", "Filter by category")
|
|
12
|
+
.option("--json", "Output as JSON")
|
|
13
|
+
.action(async (opts) => {
|
|
14
|
+
try {
|
|
15
|
+
const result = await api("/connectors/presets");
|
|
16
|
+
let presets = result.presets ?? [];
|
|
17
|
+
if (opts.category) {
|
|
18
|
+
presets = presets.filter((p) => p.category === opts.category);
|
|
19
|
+
}
|
|
20
|
+
if (opts.json) {
|
|
21
|
+
printJson({ presets });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (presets.length === 0) {
|
|
25
|
+
printInfo("No connectors found.");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
printTable(presets.map((p) => ({
|
|
29
|
+
slug: p.slug,
|
|
30
|
+
name: p.display_name,
|
|
31
|
+
category: p.category,
|
|
32
|
+
auth: p.requires_oauth
|
|
33
|
+
? `OAuth (${p.provider_slug})`
|
|
34
|
+
: chalk.dim("API key"),
|
|
35
|
+
// The hosts are the part worth seeing before installing:
|
|
36
|
+
// this is everywhere the agent will be able to reach.
|
|
37
|
+
reaches: p.allowed_hosts.join(", "),
|
|
38
|
+
})), [
|
|
39
|
+
{ key: "slug", header: "Slug", width: 18 },
|
|
40
|
+
{ key: "name", header: "Name", width: 18 },
|
|
41
|
+
{ key: "category", header: "Category", width: 15 },
|
|
42
|
+
{ key: "auth", header: "Auth", width: 18 },
|
|
43
|
+
{ key: "reaches", header: "Reaches", width: 40 },
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
handleError(e);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
connectorCommand
|
|
51
|
+
.command("list <agent-id>")
|
|
52
|
+
.alias("ls")
|
|
53
|
+
.description("List connectors installed on an agent")
|
|
54
|
+
.option("--json", "Output as JSON")
|
|
55
|
+
.action(async (agentId, opts) => {
|
|
56
|
+
try {
|
|
57
|
+
requireToken();
|
|
58
|
+
const result = await api(`/agents/${agentId}/connectors`);
|
|
59
|
+
if (opts.json) {
|
|
60
|
+
printJson(result);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if ((result.connectors ?? []).length === 0) {
|
|
64
|
+
printInfo("No connectors installed. Run `1claw connector presets` to see what is available.");
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
printTable(result.connectors.map((c) => ({
|
|
68
|
+
connector: c.display_name ?? c.preset_slug,
|
|
69
|
+
binding: c.binding_name,
|
|
70
|
+
status: statusLabel(c),
|
|
71
|
+
id: c.binding_id,
|
|
72
|
+
})), [
|
|
73
|
+
{ key: "connector", header: "Connector", width: 20 },
|
|
74
|
+
{ key: "binding", header: "Binding", width: 20 },
|
|
75
|
+
{ key: "status", header: "Status", width: 26 },
|
|
76
|
+
{ key: "id", header: "Binding ID", width: 38 },
|
|
77
|
+
]);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
handleError(e);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
connectorCommand
|
|
84
|
+
.command("install <agent-id> <slug>")
|
|
85
|
+
.description("Install a connector onto an agent (human users only)")
|
|
86
|
+
.option("--name <name>", "Binding name (defaults to the connector slug)")
|
|
87
|
+
.option("--scopes <scopes>", "Comma-separated subset of the connector's scopes (may narrow, never extend)")
|
|
88
|
+
.option("--json", "Output as JSON")
|
|
89
|
+
.action(async (agentId, slug, opts) => {
|
|
90
|
+
try {
|
|
91
|
+
requireToken();
|
|
92
|
+
const body = {};
|
|
93
|
+
if (opts.name)
|
|
94
|
+
body.binding_name = opts.name;
|
|
95
|
+
if (opts.scopes) {
|
|
96
|
+
body.scopes = String(opts.scopes)
|
|
97
|
+
.split(",")
|
|
98
|
+
.map((s) => s.trim())
|
|
99
|
+
.filter(Boolean);
|
|
100
|
+
}
|
|
101
|
+
const result = await api(`/agents/${agentId}/connectors/${slug}/install`, { method: "POST", body });
|
|
102
|
+
if (opts.json) {
|
|
103
|
+
printJson(result);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
printSuccess(`Binding '${result.binding_name}' created`);
|
|
107
|
+
printKeyValue([
|
|
108
|
+
["Binding ID", result.binding_id],
|
|
109
|
+
["Connector", result.preset_slug],
|
|
110
|
+
]);
|
|
111
|
+
// The install is not the end of the job, and saying "installed" and
|
|
112
|
+
// stopping is how someone ends up with an agent that has no token.
|
|
113
|
+
if (result.authorization_url) {
|
|
114
|
+
console.log("");
|
|
115
|
+
console.log(chalk.yellow("Not connected yet.") + " Open this to sign in:");
|
|
116
|
+
console.log(chalk.cyan(result.authorization_url));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
console.log("");
|
|
120
|
+
printInfo(result.next_step);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
handleError(e);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
function statusLabel(c) {
|
|
128
|
+
if (c.needs_reauth)
|
|
129
|
+
return chalk.yellow("reconnect needed");
|
|
130
|
+
if (!c.connected)
|
|
131
|
+
return chalk.dim("not signed in");
|
|
132
|
+
if (!c.is_active)
|
|
133
|
+
return chalk.dim("inactive");
|
|
134
|
+
return chalk.green("connected");
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/commands/connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../../src/commands/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,aAAa,SAEzB,CAAC"}
|