@dench.com/cli 3.7.0-staging.387 → 3.8.1-staging.390
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 +43 -44
- package/agent-config.ts +5 -55
- package/app-sdk.d.ts +253 -43
- package/campaign.ts +335 -54
- package/chat-spawn.ts +11 -2
- package/chat.ts +3 -5
- package/context-settings.ts +86 -0
- package/cron.ts +19 -0
- package/dench.ts +202 -83
- package/environments.ts +694 -0
- package/lib/api-schemas.ts +190 -20
- package/lib/app-sdk-catalog.generated.ts +34 -20
- package/lib/campaign-steps.ts +474 -12
- package/lib/campaign-timeline.ts +69 -4
- package/lib/command-args.ts +19 -4
- package/lib/command-help.ts +17 -2
- package/lib/command-registry.ts +225 -11
- package/lib/environment-archive.ts +255 -0
- package/lib/environment-cli-args.ts +96 -0
- package/lib/environment-contract.ts +237 -0
- package/lib/environment-execution.ts +769 -0
- package/lib/environment-source.ts +165 -0
- package/lib/load-dev-env.mjs +3 -1
- package/lib/load-dev-env.test.mjs +26 -9
- package/lib/parent-argv.ts +20 -0
- package/lib/references.generated.json +26 -18
- package/package.json +5 -3
- package/workspace-secrets.ts +231 -0
- package/agent.ts +0 -37
package/lib/campaign-timeline.ts
CHANGED
|
@@ -8,6 +8,8 @@ export type TimelineRun = {
|
|
|
8
8
|
startedAt?: number;
|
|
9
9
|
waitUntil?: number;
|
|
10
10
|
retryAt?: number;
|
|
11
|
+
/** A wait for acceptance: when it stops waiting either way. */
|
|
12
|
+
timeoutAt?: number;
|
|
11
13
|
completedAt?: number;
|
|
12
14
|
emailMessageId?: string;
|
|
13
15
|
lastError?: string;
|
|
@@ -49,6 +51,8 @@ export type TimelineResult = {
|
|
|
49
51
|
type: string;
|
|
50
52
|
order: number;
|
|
51
53
|
waitHours?: number;
|
|
54
|
+
/** If / else and Wait until they accept steps: what they check. */
|
|
55
|
+
label?: string;
|
|
52
56
|
}>;
|
|
53
57
|
runs: TimelineRun[];
|
|
54
58
|
emailMessages: TimelineEmail[];
|
|
@@ -63,6 +67,10 @@ export type TimelineStep = {
|
|
|
63
67
|
outcome: string;
|
|
64
68
|
at: number | null;
|
|
65
69
|
detail: string[];
|
|
70
|
+
/** An If / else or a wait for acceptance: the path it took. */
|
|
71
|
+
branch?: "yes" | "no";
|
|
72
|
+
/** Still waiting for them to accept: when it stops waiting. */
|
|
73
|
+
acceptanceDeadline?: number;
|
|
66
74
|
subject?: string;
|
|
67
75
|
text?: string;
|
|
68
76
|
error?: string;
|
|
@@ -101,16 +109,66 @@ const EMAIL_STATUS: Record<string, string> = {
|
|
|
101
109
|
failed: "could not send",
|
|
102
110
|
};
|
|
103
111
|
|
|
112
|
+
function resultField(result: unknown, key: string): unknown {
|
|
113
|
+
return result && typeof result === "object"
|
|
114
|
+
? (result as Record<string, unknown>)[key]
|
|
115
|
+
: undefined;
|
|
116
|
+
}
|
|
117
|
+
|
|
104
118
|
function skipReason(result: unknown): string {
|
|
105
|
-
const reason =
|
|
106
|
-
result && typeof result === "object"
|
|
107
|
-
? (result as { reason?: unknown }).reason
|
|
108
|
-
: undefined;
|
|
119
|
+
const reason = resultField(result, "reason");
|
|
109
120
|
return (typeof reason === "string" && SKIP_REASONS[reason]) || "Skipped";
|
|
110
121
|
}
|
|
111
122
|
|
|
123
|
+
/** Why an If / else or a wait for acceptance took its No path. */
|
|
124
|
+
const NO_REASONS: Record<string, string> = {
|
|
125
|
+
missing_linkedin_identity: "no LinkedIn profile",
|
|
126
|
+
missing_email_identity: "no email address",
|
|
127
|
+
linkedin_connection_timeout: "they did not accept in time",
|
|
128
|
+
linkedin_invite_withdrawn: "the connection request was withdrawn",
|
|
129
|
+
linkedin_invite_not_sent: "no connection request went out",
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
const LOGIC_TYPES = new Set(["condition", "wait_for_connection"]);
|
|
133
|
+
|
|
134
|
+
export function branchOf(run: TimelineRun): "yes" | "no" | undefined {
|
|
135
|
+
if (!LOGIC_TYPES.has(run.type) || run.status !== "sent") return undefined;
|
|
136
|
+
const branch = resultField(run.result, "branch");
|
|
137
|
+
return branch === "yes" || branch === "no" ? branch : undefined;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** What the editor calls each exit: Yes / No, or Accepted / Not accepted. */
|
|
141
|
+
export function branchExitLabel(type: string, branch: "yes" | "no"): string {
|
|
142
|
+
if (type === "wait_for_connection")
|
|
143
|
+
return branch === "yes" ? "Accepted" : "Not accepted";
|
|
144
|
+
return branch === "yes" ? "Yes" : "No";
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function logicOutcome(run: TimelineRun): string | undefined {
|
|
148
|
+
if (!LOGIC_TYPES.has(run.type)) return undefined;
|
|
149
|
+
const branch = branchOf(run);
|
|
150
|
+
if (branch) {
|
|
151
|
+
const reason = resultField(run.result, "reason");
|
|
152
|
+
const why =
|
|
153
|
+
branch === "no" && typeof reason === "string" ? NO_REASONS[reason] : "";
|
|
154
|
+
return `${branchExitLabel(run.type, branch)}${why ? ` (${why})` : ""}`;
|
|
155
|
+
}
|
|
156
|
+
if (run.status === "sent") return "Done";
|
|
157
|
+
if (run.type === "wait_for_connection")
|
|
158
|
+
return run.status === "waiting"
|
|
159
|
+
? "Waiting for them to accept"
|
|
160
|
+
: run.status === "queued" || run.status === "running"
|
|
161
|
+
? "Checking whether they accepted"
|
|
162
|
+
: undefined;
|
|
163
|
+
return ["queued", "running", "waiting"].includes(run.status)
|
|
164
|
+
? "Checking"
|
|
165
|
+
: undefined;
|
|
166
|
+
}
|
|
167
|
+
|
|
112
168
|
function outcomeOf(run: TimelineRun): string {
|
|
113
169
|
if (run.status === "skipped") return skipReason(run.result);
|
|
170
|
+
const logic = logicOutcome(run);
|
|
171
|
+
if (logic) return logic;
|
|
114
172
|
if (run.status === "sent") {
|
|
115
173
|
if (run.type === "wait") return "Waited";
|
|
116
174
|
if (run.type === "linkedin_visit") return "Visited";
|
|
@@ -153,6 +211,11 @@ export function timelineSteps(result: TimelineResult): TimelineStep[] {
|
|
|
153
211
|
run.status === "sent" || run.status === "skipped"
|
|
154
212
|
? undefined
|
|
155
213
|
: (run.lastError ?? email?.lastError)?.trim();
|
|
214
|
+
const branch = branchOf(run);
|
|
215
|
+
const waitingForAccept =
|
|
216
|
+
run.type === "wait_for_connection" &&
|
|
217
|
+
run.status === "waiting" &&
|
|
218
|
+
typeof run.timeoutAt === "number";
|
|
156
219
|
return {
|
|
157
220
|
step: (step?.order ?? run.stepIndex) + 1,
|
|
158
221
|
stepId: String(run.stepId),
|
|
@@ -167,6 +230,8 @@ export function timelineSteps(result: TimelineResult): TimelineStep[] {
|
|
|
167
230
|
run.scheduledAt ??
|
|
168
231
|
null,
|
|
169
232
|
detail,
|
|
233
|
+
...(branch ? { branch } : {}),
|
|
234
|
+
...(waitingForAccept ? { acceptanceDeadline: run.timeoutAt } : {}),
|
|
170
235
|
...(email?.subject ? { subject: email.subject } : {}),
|
|
171
236
|
...(text ? { text } : {}),
|
|
172
237
|
...(problem ? { error: problem } : {}),
|
package/lib/command-args.ts
CHANGED
|
@@ -51,6 +51,17 @@ export const COMMAND_ARGUMENTS = [
|
|
|
51
51
|
spec("use", [1, 1]),
|
|
52
52
|
spec("backend set", [1, 1]),
|
|
53
53
|
spec("backend clear", [0, 0]),
|
|
54
|
+
spec("env list", [0, 0], "--limit --cursor"),
|
|
55
|
+
spec("env show", [1, 1], "--revision"),
|
|
56
|
+
spec("env save", [1, 1], "--path --wait", "--no-wait"),
|
|
57
|
+
spec("env run", [1, 1], "--revision --state-key", "--prepare-local"),
|
|
58
|
+
spec("env delete", [1, 1]),
|
|
59
|
+
spec("secrets set", [1, 1], "--file --kind --expected-version", "--stdin"),
|
|
60
|
+
spec("secrets list", [0, 0]),
|
|
61
|
+
spec("secrets delete", [1, 1], "--expected-version"),
|
|
62
|
+
...["identity", "organisation", "user", "tools", "rules"].map((section) =>
|
|
63
|
+
spec(`context set ${section}`, [0, 0], "--content", "--stdin"),
|
|
64
|
+
),
|
|
54
65
|
...["install", "uninstall", "refresh"].map((verb) =>
|
|
55
66
|
spec(
|
|
56
67
|
`ads ${verb}`,
|
|
@@ -80,7 +91,7 @@ export const COMMAND_ARGUMENTS = [
|
|
|
80
91
|
spec(
|
|
81
92
|
"chat new",
|
|
82
93
|
[1, null],
|
|
83
|
-
"--model --file-context --visibility --title",
|
|
94
|
+
"--model --file-context --visibility --title --environment",
|
|
84
95
|
"--yolo --follow",
|
|
85
96
|
),
|
|
86
97
|
spec("chat send", [2, null], "--model", "--yolo --follow"),
|
|
@@ -113,13 +124,14 @@ export const COMMAND_ARGUMENTS = [
|
|
|
113
124
|
spec(
|
|
114
125
|
"cron create",
|
|
115
126
|
[1, 1],
|
|
116
|
-
"--prompt --description --overlap --target --type --at --cron --tz --every --every-ms --connection --event --toolkit --trigger-config --object --where --where-logic",
|
|
127
|
+
"--prompt --description --overlap --target --type --at --cron --tz --every --every-ms --connection --event --toolkit --trigger-config --object --where --where-logic --environment",
|
|
117
128
|
"--disabled --delete-after-run --no-secret --signed",
|
|
118
129
|
),
|
|
119
130
|
spec(
|
|
120
131
|
"cron update",
|
|
121
132
|
[1, 1],
|
|
122
|
-
"--name --prompt --description --overlap --enabled --at --cron --tz --every --every-ms",
|
|
133
|
+
"--name --prompt --description --overlap --enabled --at --cron --tz --every --every-ms --environment",
|
|
134
|
+
"--clear-environment",
|
|
123
135
|
),
|
|
124
136
|
spec("cron run", [1, 1], "", "--wait"),
|
|
125
137
|
spec("cron secret", [1, 1], "", "--off"),
|
|
@@ -189,7 +201,10 @@ export const COMMAND_ARGUMENTS = [
|
|
|
189
201
|
];
|
|
190
202
|
|
|
191
203
|
export function assertDeclaredCommandFlags(argv: readonly string[]): void {
|
|
192
|
-
const
|
|
204
|
+
const boundary = argv.indexOf("--");
|
|
205
|
+
const args = argv
|
|
206
|
+
.slice(0, boundary < 0 ? undefined : boundary)
|
|
207
|
+
.filter((arg) => arg !== "--json");
|
|
193
208
|
if (["routine", "routines"].includes(args[0])) args[0] = "cron";
|
|
194
209
|
if (["ad", "adline"].includes(args[0])) args[0] = "ads";
|
|
195
210
|
if (args[0] === "agent" && ["new", "send"].includes(args[1]))
|
package/lib/command-help.ts
CHANGED
|
@@ -37,8 +37,23 @@ export function commandHelp(argv: readonly string[], usageText = ""): string {
|
|
|
37
37
|
description: "",
|
|
38
38
|
})),
|
|
39
39
|
...apiOperations
|
|
40
|
-
.filter((op) =>
|
|
41
|
-
|
|
40
|
+
.filter((op) => {
|
|
41
|
+
if (!op.deprecated) return true;
|
|
42
|
+
// Keep exact legacy leaf help available without adding those commands
|
|
43
|
+
// back to the broad index or a parent family's discovery.
|
|
44
|
+
const command = words(op.cli);
|
|
45
|
+
return (
|
|
46
|
+
command.length > 1 &&
|
|
47
|
+
input.length >= command.length &&
|
|
48
|
+
matches(input.slice(0, command.length), command)
|
|
49
|
+
);
|
|
50
|
+
})
|
|
51
|
+
.map((op) => ({
|
|
52
|
+
usage: op.cli,
|
|
53
|
+
description: op.deprecated
|
|
54
|
+
? `Compatibility command. ${op.summary}`
|
|
55
|
+
: op.summary,
|
|
56
|
+
})),
|
|
42
57
|
];
|
|
43
58
|
let prefix = input;
|
|
44
59
|
while (
|
package/lib/command-registry.ts
CHANGED
|
@@ -137,6 +137,190 @@ function local(reason: string): LocalOnlyOperation {
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
const rawApiOperations = [
|
|
140
|
+
op({
|
|
141
|
+
id: "environments.list",
|
|
142
|
+
group: "environments",
|
|
143
|
+
summary:
|
|
144
|
+
"List workspace-shared reusable setups and ready revisions (metadata only).",
|
|
145
|
+
cli: "dench env list",
|
|
146
|
+
method: "GET",
|
|
147
|
+
path: "/environments",
|
|
148
|
+
requestSchema: z
|
|
149
|
+
.object({
|
|
150
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
151
|
+
cursor: z.string().optional(),
|
|
152
|
+
})
|
|
153
|
+
.strict(),
|
|
154
|
+
responseSchema: anyResponse,
|
|
155
|
+
backend: convex("query", "functions/environments:list"),
|
|
156
|
+
}),
|
|
157
|
+
op({
|
|
158
|
+
id: "environments.get",
|
|
159
|
+
group: "environments",
|
|
160
|
+
summary:
|
|
161
|
+
"Inspect a saved setup, its manifest, and an optional immutable revision.",
|
|
162
|
+
cli: "dench env show",
|
|
163
|
+
method: "GET",
|
|
164
|
+
path: "/environments/{name}",
|
|
165
|
+
requestSchema: z
|
|
166
|
+
.object({
|
|
167
|
+
name: z.string().regex(/^[a-z][a-z0-9-]{0,63}$/),
|
|
168
|
+
revision: z
|
|
169
|
+
.string()
|
|
170
|
+
.regex(/^[a-f0-9]{64}$/)
|
|
171
|
+
.optional(),
|
|
172
|
+
})
|
|
173
|
+
.strict(),
|
|
174
|
+
responseSchema: anyResponse,
|
|
175
|
+
backend: convex("query", "functions/environments:get"),
|
|
176
|
+
}),
|
|
177
|
+
op({
|
|
178
|
+
id: "environments.upload",
|
|
179
|
+
group: "environments",
|
|
180
|
+
summary:
|
|
181
|
+
"Reserve an owner-bound source upload. Prefix the uploaded bytes with the returned proof before saving.",
|
|
182
|
+
cli: "dench env save",
|
|
183
|
+
method: "POST",
|
|
184
|
+
path: "/environments/uploads",
|
|
185
|
+
requestSchema: z
|
|
186
|
+
.object({
|
|
187
|
+
kind: z.literal("source"),
|
|
188
|
+
size: z.number().int().min(1).max(16777216),
|
|
189
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
190
|
+
})
|
|
191
|
+
.strict(),
|
|
192
|
+
responseSchema: anyResponse,
|
|
193
|
+
backend: convex("mutation", "functions/environments:requestUpload"),
|
|
194
|
+
}),
|
|
195
|
+
op({
|
|
196
|
+
id: "environments.save",
|
|
197
|
+
group: "environments",
|
|
198
|
+
summary:
|
|
199
|
+
"Publish an explicitly saved source and manifest for one-time preparation. Returns pending/building until verified; does not run the task.",
|
|
200
|
+
cli: "dench env save",
|
|
201
|
+
method: "POST",
|
|
202
|
+
path: "/environments/{name}",
|
|
203
|
+
requestSchema: z
|
|
204
|
+
.object({
|
|
205
|
+
name: z.string().regex(/^[a-z][a-z0-9-]{0,63}$/),
|
|
206
|
+
manifest: z
|
|
207
|
+
.object({
|
|
208
|
+
version: z.literal(1),
|
|
209
|
+
name: z.string(),
|
|
210
|
+
purpose: z.string(),
|
|
211
|
+
files: z.array(z.string()),
|
|
212
|
+
prepare: z.array(z.string()),
|
|
213
|
+
verify: z.array(z.string()),
|
|
214
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
215
|
+
secretEnv: z.record(z.string(), z.string()).optional(),
|
|
216
|
+
secretFiles: z
|
|
217
|
+
.array(
|
|
218
|
+
z.object({
|
|
219
|
+
path: z.string(),
|
|
220
|
+
secret: z.string(),
|
|
221
|
+
mutable: z.boolean().optional(),
|
|
222
|
+
}),
|
|
223
|
+
)
|
|
224
|
+
.optional(),
|
|
225
|
+
statePaths: z.array(z.string()).optional(),
|
|
226
|
+
portable: z.boolean().optional(),
|
|
227
|
+
})
|
|
228
|
+
.strict(),
|
|
229
|
+
uploadId: z.string(),
|
|
230
|
+
storageId: z.string(),
|
|
231
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
232
|
+
})
|
|
233
|
+
.strict(),
|
|
234
|
+
responseSchema: anyResponse,
|
|
235
|
+
backend: convex("action", "functions/environmentsNode:save"),
|
|
236
|
+
}),
|
|
237
|
+
op({
|
|
238
|
+
id: "environments.delete",
|
|
239
|
+
group: "environments",
|
|
240
|
+
summary:
|
|
241
|
+
"Retire a saved setup from new selection; retain immutable revisions and active job evidence.",
|
|
242
|
+
cli: "dench env delete",
|
|
243
|
+
method: "DELETE",
|
|
244
|
+
path: "/environments/{name}",
|
|
245
|
+
requestSchema: z
|
|
246
|
+
.object({ name: z.string().regex(/^[a-z][a-z0-9-]{0,63}$/) })
|
|
247
|
+
.strict(),
|
|
248
|
+
responseSchema: anyResponse,
|
|
249
|
+
backend: convex("mutation", "functions/environments:remove"),
|
|
250
|
+
}),
|
|
251
|
+
op({
|
|
252
|
+
id: "environments.run",
|
|
253
|
+
group: "environments",
|
|
254
|
+
summary:
|
|
255
|
+
"Run a command with prepared dependencies and declared credentials, saving declared state with a revision check.",
|
|
256
|
+
cli: "dench env run",
|
|
257
|
+
method: "POST",
|
|
258
|
+
path: "/local/environments/run",
|
|
259
|
+
requestSchema: noBody,
|
|
260
|
+
responseSchema: anyResponse,
|
|
261
|
+
backend: local(
|
|
262
|
+
"Execution occurs in the CLI process. Use dench env run NAME -- COMMAND; secret-bearing execution resolution is not a general REST read endpoint.",
|
|
263
|
+
),
|
|
264
|
+
}),
|
|
265
|
+
op({
|
|
266
|
+
id: "secrets.list",
|
|
267
|
+
group: "secrets",
|
|
268
|
+
summary:
|
|
269
|
+
"List workspace-shared credential names, kinds and versions; never values.",
|
|
270
|
+
cli: "dench secrets list",
|
|
271
|
+
method: "GET",
|
|
272
|
+
path: "/secrets",
|
|
273
|
+
requestSchema: z
|
|
274
|
+
.object({
|
|
275
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
276
|
+
cursor: z.string().optional(),
|
|
277
|
+
})
|
|
278
|
+
.strict(),
|
|
279
|
+
responseSchema: anyResponse,
|
|
280
|
+
backend: convex("query", "functions/workspaceSecrets:list"),
|
|
281
|
+
}),
|
|
282
|
+
op({
|
|
283
|
+
id: "secrets.set",
|
|
284
|
+
group: "secrets",
|
|
285
|
+
summary:
|
|
286
|
+
"Encrypt a workspace credential. Use CLI stdin or the secure chat form; return metadata only. Do not put values in chat, manifests or scripts.",
|
|
287
|
+
cli: "dench secrets set",
|
|
288
|
+
method: "PUT",
|
|
289
|
+
path: "/secrets/{name}",
|
|
290
|
+
requestSchema: z
|
|
291
|
+
.object({
|
|
292
|
+
name: z.string().regex(/^[A-Z][A-Z0-9_]{0,127}$/),
|
|
293
|
+
kind: z.enum(["env", "file"]),
|
|
294
|
+
value: z.string().min(1).max(65536),
|
|
295
|
+
expectedVersion: z.number().int().nonnegative().optional(),
|
|
296
|
+
})
|
|
297
|
+
.strict(),
|
|
298
|
+
responseSchema: z.object({
|
|
299
|
+
name: z.string(),
|
|
300
|
+
kind: z.enum(["env", "file"]),
|
|
301
|
+
version: z.number(),
|
|
302
|
+
revision: z.number(),
|
|
303
|
+
status: z.literal("stored"),
|
|
304
|
+
}),
|
|
305
|
+
backend: convex("action", "functions/workspaceSecretsNode:set"),
|
|
306
|
+
}),
|
|
307
|
+
op({
|
|
308
|
+
id: "secrets.delete",
|
|
309
|
+
group: "secrets",
|
|
310
|
+
summary:
|
|
311
|
+
"Revoke a workspace credential for future resolution, optionally checking its version.",
|
|
312
|
+
cli: "dench secrets delete",
|
|
313
|
+
method: "DELETE",
|
|
314
|
+
path: "/secrets/{name}",
|
|
315
|
+
requestSchema: z
|
|
316
|
+
.object({
|
|
317
|
+
name: z.string().regex(/^[A-Z][A-Z0-9_]{0,127}$/),
|
|
318
|
+
expectedVersion: z.number().int().nonnegative().optional(),
|
|
319
|
+
})
|
|
320
|
+
.strict(),
|
|
321
|
+
responseSchema: anyResponse,
|
|
322
|
+
backend: convex("mutation", "functions/workspaceSecrets:remove"),
|
|
323
|
+
}),
|
|
140
324
|
op({
|
|
141
325
|
id: "campaigns.drafts.create",
|
|
142
326
|
group: "campaigns",
|
|
@@ -3999,7 +4183,7 @@ const rawApiOperations = [
|
|
|
3999
4183
|
id: "campaigns.analytics",
|
|
4000
4184
|
group: "campaigns",
|
|
4001
4185
|
summary:
|
|
4002
|
-
"Campaign funnel: enrolled, contacted, invited, accepted, messaged, replied, opens and clicks.",
|
|
4186
|
+
"Campaign funnel: enrolled, contacted, invited, accepted, messaged, replied, opens and clicks, and for a workflow how many people took each If / else and Wait for them to accept path (branchStats).",
|
|
4003
4187
|
cli: "dench campaign get",
|
|
4004
4188
|
method: "GET",
|
|
4005
4189
|
path: "/campaigns/{sequenceId}/analytics",
|
|
@@ -4053,7 +4237,7 @@ const rawApiOperations = [
|
|
|
4053
4237
|
id: "campaigns.steps.replace",
|
|
4054
4238
|
group: "campaigns",
|
|
4055
4239
|
summary:
|
|
4056
|
-
"Replace every step of a draft campaign (email, wait, LinkedIn visit, connection request, message, post reaction, InMail). Steps are checked first: a field the step type would drop, missing text
|
|
4240
|
+
"Replace every step of a draft campaign (email, wait, LinkedIn visit, connection request, message, post reaction, InMail, If / else, Wait for them to accept). A workflow (stepModel workflow, or steps with key, next, yesNext or noNext) branches: condition and wait_for_connection steps continue on yesNext or noNext, other steps on next; each points at another step's key or end. Steps are checked first: a field the step type would drop, missing text, {TOKEN} single braces or paths that don't hold together are rejected, not saved. Configure sender pools on the campaign; step sender ids are legacy-only.",
|
|
4057
4241
|
cli: "dench campaign steps set",
|
|
4058
4242
|
method: "PUT",
|
|
4059
4243
|
path: "/campaigns/{sequenceId}/steps",
|
|
@@ -4065,7 +4249,7 @@ const rawApiOperations = [
|
|
|
4065
4249
|
id: "campaigns.steps.update",
|
|
4066
4250
|
group: "campaigns",
|
|
4067
4251
|
summary:
|
|
4068
|
-
"Edit the text, waits and conditions of a launched (or paused) campaign's steps in place. Each step keeps its id, type and place; pass the stepId and the updatedAt you read, and only the fields you change. Messages already sent or being prepared keep their text; drafts use campaigns.steps.replace.",
|
|
4252
|
+
"Edit the text, waits and conditions of a launched (or paused) campaign's steps in place. Each step keeps its id, type and place; pass the stepId and the updatedAt you read, and only the fields you change. A workflow keeps its paths and what each If / else checks (key, next, yesNext, noNext, check, conditionField, conditionOperator); conditionValue and acceptance waits stay editable. Messages already sent or being prepared keep their text; drafts use campaigns.steps.replace.",
|
|
4069
4253
|
cli: "dench campaign steps edit",
|
|
4070
4254
|
method: "PATCH",
|
|
4071
4255
|
path: "/campaigns/{sequenceId}/steps",
|
|
@@ -5134,7 +5318,8 @@ const rawApiOperations = [
|
|
|
5134
5318
|
id: "agentConfig.identity.show",
|
|
5135
5319
|
group: "agent-config",
|
|
5136
5320
|
summary: "Read IDENTITY.md.",
|
|
5137
|
-
cli: "dench identity
|
|
5321
|
+
cli: "dench context --sections identity",
|
|
5322
|
+
aliases: ["dench identity show"],
|
|
5138
5323
|
method: "GET",
|
|
5139
5324
|
path: "/agent-config/identity",
|
|
5140
5325
|
requestSchema: noBody,
|
|
@@ -5145,7 +5330,8 @@ const rawApiOperations = [
|
|
|
5145
5330
|
id: "agentConfig.identity.edit",
|
|
5146
5331
|
group: "agent-config",
|
|
5147
5332
|
summary: "Update IDENTITY.md.",
|
|
5148
|
-
cli: "dench identity
|
|
5333
|
+
cli: "dench context set identity",
|
|
5334
|
+
aliases: ["dench identity edit"],
|
|
5149
5335
|
method: "PUT",
|
|
5150
5336
|
path: "/agent-config/identity",
|
|
5151
5337
|
requestSchema: anyObject,
|
|
@@ -5156,7 +5342,8 @@ const rawApiOperations = [
|
|
|
5156
5342
|
id: "agentConfig.organisation.show",
|
|
5157
5343
|
group: "agent-config",
|
|
5158
5344
|
summary: "Read ORGANISATION.md.",
|
|
5159
|
-
cli: "dench organisation
|
|
5345
|
+
cli: "dench context --sections organisation",
|
|
5346
|
+
aliases: ["dench organisation show"],
|
|
5160
5347
|
method: "GET",
|
|
5161
5348
|
path: "/agent-config/organisation",
|
|
5162
5349
|
requestSchema: noBody,
|
|
@@ -5167,7 +5354,8 @@ const rawApiOperations = [
|
|
|
5167
5354
|
id: "agentConfig.organisation.edit",
|
|
5168
5355
|
group: "agent-config",
|
|
5169
5356
|
summary: "Update ORGANISATION.md.",
|
|
5170
|
-
cli: "dench organisation
|
|
5357
|
+
cli: "dench context set organisation",
|
|
5358
|
+
aliases: ["dench organisation edit"],
|
|
5171
5359
|
method: "PUT",
|
|
5172
5360
|
path: "/agent-config/organisation",
|
|
5173
5361
|
requestSchema: anyObject,
|
|
@@ -5178,7 +5366,8 @@ const rawApiOperations = [
|
|
|
5178
5366
|
id: "agentConfig.user.show",
|
|
5179
5367
|
group: "agent-config",
|
|
5180
5368
|
summary: "Read USER.md.",
|
|
5181
|
-
cli: "dench user
|
|
5369
|
+
cli: "dench context --sections user",
|
|
5370
|
+
aliases: ["dench user show"],
|
|
5182
5371
|
method: "GET",
|
|
5183
5372
|
path: "/agent-config/user",
|
|
5184
5373
|
requestSchema: noBody,
|
|
@@ -5189,7 +5378,8 @@ const rawApiOperations = [
|
|
|
5189
5378
|
id: "agentConfig.user.edit",
|
|
5190
5379
|
group: "agent-config",
|
|
5191
5380
|
summary: "Update USER.md.",
|
|
5192
|
-
cli: "dench user
|
|
5381
|
+
cli: "dench context set user",
|
|
5382
|
+
aliases: ["dench user edit"],
|
|
5193
5383
|
method: "PUT",
|
|
5194
5384
|
path: "/agent-config/user",
|
|
5195
5385
|
requestSchema: anyObject,
|
|
@@ -5200,7 +5390,8 @@ const rawApiOperations = [
|
|
|
5200
5390
|
id: "agentConfig.tools.show",
|
|
5201
5391
|
group: "agent-config",
|
|
5202
5392
|
summary: "Read tool notes.",
|
|
5203
|
-
cli: "dench tools
|
|
5393
|
+
cli: "dench context --sections tools",
|
|
5394
|
+
aliases: ["dench tools show"],
|
|
5204
5395
|
method: "GET",
|
|
5205
5396
|
path: "/agent-config/tools",
|
|
5206
5397
|
requestSchema: noBody,
|
|
@@ -5211,15 +5402,32 @@ const rawApiOperations = [
|
|
|
5211
5402
|
id: "agentConfig.tools.edit",
|
|
5212
5403
|
group: "agent-config",
|
|
5213
5404
|
summary: "Update tool notes.",
|
|
5214
|
-
cli: "dench tools
|
|
5405
|
+
cli: "dench context set tools",
|
|
5406
|
+
aliases: ["dench tools edit"],
|
|
5215
5407
|
method: "PUT",
|
|
5216
5408
|
path: "/agent-config/tools",
|
|
5217
5409
|
requestSchema: anyObject,
|
|
5218
5410
|
responseSchema: anyResponse,
|
|
5219
5411
|
backend: convex("mutation", "functions/agentConfig:updateToolsNotes"),
|
|
5220
5412
|
}),
|
|
5413
|
+
op({
|
|
5414
|
+
id: "workspace.context.rules.set",
|
|
5415
|
+
group: "workspace",
|
|
5416
|
+
summary:
|
|
5417
|
+
"Update standing workspace rules; credentials belong in secrets and runnable setup in environments.",
|
|
5418
|
+
cli: "dench context set rules",
|
|
5419
|
+
method: "PUT",
|
|
5420
|
+
path: "/context/rules",
|
|
5421
|
+
requestSchema: z.object({ content: z.string().min(1).max(32000) }).strict(),
|
|
5422
|
+
responseSchema: anyResponse,
|
|
5423
|
+
backend: {
|
|
5424
|
+
...convex("mutation", "functions/agentConfig:writeMagicFileFromUI"),
|
|
5425
|
+
fixedArgs: { path: "/RULES.md" },
|
|
5426
|
+
},
|
|
5427
|
+
}),
|
|
5221
5428
|
op({
|
|
5222
5429
|
id: "agentConfig.mem.show",
|
|
5430
|
+
deprecated: true,
|
|
5223
5431
|
group: "agent-config",
|
|
5224
5432
|
summary: "Read aggregate memory.",
|
|
5225
5433
|
cli: "dench mem show",
|
|
@@ -5231,6 +5439,7 @@ const rawApiOperations = [
|
|
|
5231
5439
|
}),
|
|
5232
5440
|
op({
|
|
5233
5441
|
id: "agentConfig.mem.edit",
|
|
5442
|
+
deprecated: true,
|
|
5234
5443
|
group: "agent-config",
|
|
5235
5444
|
summary: "Update aggregate memory.",
|
|
5236
5445
|
cli: "dench mem set",
|
|
@@ -5242,6 +5451,7 @@ const rawApiOperations = [
|
|
|
5242
5451
|
}),
|
|
5243
5452
|
op({
|
|
5244
5453
|
id: "agentConfig.bootstrap.show",
|
|
5454
|
+
deprecated: true,
|
|
5245
5455
|
group: "agent-config",
|
|
5246
5456
|
summary: "Read bootstrap state.",
|
|
5247
5457
|
cli: "dench bootstrap status",
|
|
@@ -5253,6 +5463,7 @@ const rawApiOperations = [
|
|
|
5253
5463
|
}),
|
|
5254
5464
|
op({
|
|
5255
5465
|
id: "agentConfig.bootstrap.complete",
|
|
5466
|
+
deprecated: true,
|
|
5256
5467
|
group: "agent-config",
|
|
5257
5468
|
summary: "Complete bootstrap.",
|
|
5258
5469
|
cli: "dench bootstrap complete",
|
|
@@ -5264,6 +5475,7 @@ const rawApiOperations = [
|
|
|
5264
5475
|
}),
|
|
5265
5476
|
op({
|
|
5266
5477
|
id: "agentConfig.bootstrap.template",
|
|
5478
|
+
deprecated: true,
|
|
5267
5479
|
group: "agent-config",
|
|
5268
5480
|
summary: "Update bootstrap template.",
|
|
5269
5481
|
cli: "dench bootstrap template",
|
|
@@ -5300,6 +5512,7 @@ const rawApiOperations = [
|
|
|
5300
5512
|
}),
|
|
5301
5513
|
op({
|
|
5302
5514
|
id: "agentConfig.daily.today",
|
|
5515
|
+
deprecated: true,
|
|
5303
5516
|
group: "agent-config",
|
|
5304
5517
|
summary: "Read today's daily activity path.",
|
|
5305
5518
|
cli: "dench daily today",
|
|
@@ -5311,6 +5524,7 @@ const rawApiOperations = [
|
|
|
5311
5524
|
}),
|
|
5312
5525
|
op({
|
|
5313
5526
|
id: "agentConfig.daily.show",
|
|
5527
|
+
deprecated: true,
|
|
5314
5528
|
group: "agent-config",
|
|
5315
5529
|
summary: "Read a daily activity path.",
|
|
5316
5530
|
cli: "dench daily show",
|