@wave-ai-os/wave-cli 0.1.65 → 0.1.67
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 +9 -6
- package/dist/index.cjs +12 -145
- package/dist/index.js +12 -145
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,7 +69,10 @@ Notes:
|
|
|
69
69
|
Required (from flags, stdin, env, config, or stored credentials):
|
|
70
70
|
|
|
71
71
|
- `WAVE_API_TOKEN`
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
The API base defaults to production: `https://api.ourwave.io`. Supply
|
|
74
|
+
`--base-url`, stdin context, `WAVE_API_BASE_URL`/`WAVE_API_URL`, or config only
|
|
75
|
+
when using a non-production environment.
|
|
73
76
|
|
|
74
77
|
Organization-scoped data commands use the organization certified by the
|
|
75
78
|
authenticated CLI token. `--organization-id` is the only local override.
|
|
@@ -92,7 +95,7 @@ Deterministic precedence:
|
|
|
92
95
|
- stdin context (`--token-stdin` or `--auth-json-stdin`)
|
|
93
96
|
- env vars (`WAVE_*`)
|
|
94
97
|
- config file (`--config`, `WAVE_CONFIG_PATH`, or `~/.wave/config.json` when present)
|
|
95
|
-
-
|
|
98
|
+
- production API default (`https://api.ourwave.io`)
|
|
96
99
|
|
|
97
100
|
Config files are JSON objects using the same keys accepted by `--auth-json-stdin`, for example:
|
|
98
101
|
|
|
@@ -104,12 +107,12 @@ Config files are JSON objects using the same keys accepted by `--auth-json-stdin
|
|
|
104
107
|
}
|
|
105
108
|
```
|
|
106
109
|
|
|
107
|
-
For a persistent production login,
|
|
108
|
-
GraphQL/API base
|
|
109
|
-
|
|
110
|
+
For a persistent production login, `wave login --save-base-url` saves the
|
|
111
|
+
default production GraphQL/API base to the local CLI config. The token remains
|
|
112
|
+
in the configured credential store, not in `config.json`:
|
|
110
113
|
|
|
111
114
|
```bash
|
|
112
|
-
wave
|
|
115
|
+
wave login --save-base-url
|
|
113
116
|
```
|
|
114
117
|
|
|
115
118
|
The API host is not the browser-login destination. When production returns a
|
package/dist/index.cjs
CHANGED
|
@@ -58,6 +58,9 @@ function mapStatusToExitCode(status) {
|
|
|
58
58
|
return EXIT_CODES.generic;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
// src/runtimeDefaults.ts
|
|
62
|
+
var DEFAULT_PRODUCTION_API_BASE_URL = "https://api.ourwave.io";
|
|
63
|
+
|
|
61
64
|
// src/config.ts
|
|
62
65
|
var DEFAULT_TIMEOUT_MS = 1e4;
|
|
63
66
|
var configSchema = import_zod.z.object({
|
|
@@ -116,15 +119,7 @@ function getConfig(options) {
|
|
|
116
119
|
exitCode: EXIT_CODES.missingOrInvalidAuth
|
|
117
120
|
});
|
|
118
121
|
}
|
|
119
|
-
const baseUrl = options.baseUrl ?? process.env.WAVE_API_BASE_URL ?? process.env.WAVE_API_URL;
|
|
120
|
-
if (!baseUrl) {
|
|
121
|
-
throw new CliError({
|
|
122
|
-
message: "Missing API base URL. Pass --base-url, provide via --auth-json-stdin, or set WAVE_API_BASE_URL/WAVE_API_URL.",
|
|
123
|
-
kind: "invalid_args",
|
|
124
|
-
status: 400,
|
|
125
|
-
exitCode: EXIT_CODES.invalidArgs
|
|
126
|
-
});
|
|
127
|
-
}
|
|
122
|
+
const baseUrl = options.baseUrl ?? process.env.WAVE_API_BASE_URL ?? process.env.WAVE_API_URL ?? DEFAULT_PRODUCTION_API_BASE_URL;
|
|
128
123
|
const parsed = configSchema.safeParse({
|
|
129
124
|
baseUrl,
|
|
130
125
|
token,
|
|
@@ -2277,7 +2272,8 @@ function resolveFromSources(options, stdin, config, env) {
|
|
|
2277
2272
|
normalize3(stdin.baseUrl),
|
|
2278
2273
|
normalize3(env.WAVE_API_BASE_URL),
|
|
2279
2274
|
normalize3(env.WAVE_API_URL),
|
|
2280
|
-
normalize3(config.baseUrl)
|
|
2275
|
+
normalize3(config.baseUrl),
|
|
2276
|
+
DEFAULT_PRODUCTION_API_BASE_URL
|
|
2281
2277
|
);
|
|
2282
2278
|
const organizationId = normalize3(options.organizationId);
|
|
2283
2279
|
const organizationIdSource = organizationId ? "flag" : "none";
|
|
@@ -14777,115 +14773,6 @@ function registerDatasheetsCommands(program) {
|
|
|
14777
14773
|
});
|
|
14778
14774
|
}
|
|
14779
14775
|
|
|
14780
|
-
// src/commands/aiNotes.ts
|
|
14781
|
-
var AI_NOTE_SAFE_FIELDS = [
|
|
14782
|
-
"id",
|
|
14783
|
-
"slug",
|
|
14784
|
-
"title",
|
|
14785
|
-
"status",
|
|
14786
|
-
"visibility",
|
|
14787
|
-
"sourceType",
|
|
14788
|
-
"sourceReference",
|
|
14789
|
-
"ownerMemberId",
|
|
14790
|
-
"scheduledStartAt",
|
|
14791
|
-
"scheduledEndAt",
|
|
14792
|
-
"createdAt",
|
|
14793
|
-
"updatedAt"
|
|
14794
|
-
];
|
|
14795
|
-
var AI_NOTE_SELECTION = `{ ${AI_NOTE_SAFE_FIELDS.join(" ")} }`;
|
|
14796
|
-
var AI_NOTES_SELECTION = AI_NOTE_SELECTION;
|
|
14797
|
-
function pickSafeAiNoteFields(value) {
|
|
14798
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
14799
|
-
return null;
|
|
14800
|
-
}
|
|
14801
|
-
const record = value;
|
|
14802
|
-
const safe = {};
|
|
14803
|
-
for (const field of AI_NOTE_SAFE_FIELDS) {
|
|
14804
|
-
if (Object.prototype.hasOwnProperty.call(record, field)) {
|
|
14805
|
-
safe[field] = record[field];
|
|
14806
|
-
}
|
|
14807
|
-
}
|
|
14808
|
-
return safe;
|
|
14809
|
-
}
|
|
14810
|
-
function projectAiNotesPayload(payload) {
|
|
14811
|
-
if (Array.isArray(payload)) {
|
|
14812
|
-
return payload.map((item) => pickSafeAiNoteFields(item)).filter(Boolean);
|
|
14813
|
-
}
|
|
14814
|
-
if (!payload || typeof payload !== "object") {
|
|
14815
|
-
return payload;
|
|
14816
|
-
}
|
|
14817
|
-
return pickSafeAiNoteFields(payload);
|
|
14818
|
-
}
|
|
14819
|
-
function showVariables(opts) {
|
|
14820
|
-
const id = typeof opts.id === "string" && opts.id.trim() !== "" ? opts.id.trim() : void 0;
|
|
14821
|
-
const slug = typeof opts.slug === "string" && opts.slug.trim() !== "" ? opts.slug.trim() : void 0;
|
|
14822
|
-
if (!id && !slug || id && slug) {
|
|
14823
|
-
throw new CliError({
|
|
14824
|
-
message: "Provide exactly one AI Note identifier: --id or --slug.",
|
|
14825
|
-
kind: "invalid_args",
|
|
14826
|
-
status: 400,
|
|
14827
|
-
exitCode: EXIT_CODES.invalidArgs,
|
|
14828
|
-
details: { requiredOneOf: ["--id", "--slug"] }
|
|
14829
|
-
});
|
|
14830
|
-
}
|
|
14831
|
-
return id ? { id } : { slug };
|
|
14832
|
-
}
|
|
14833
|
-
async function runAiNotesQuery(cmd, config) {
|
|
14834
|
-
const context = await resolveCommandContext(cmd.optsWithGlobals());
|
|
14835
|
-
await runGraphqlQueryCommand({
|
|
14836
|
-
command: config.command,
|
|
14837
|
-
operationName: config.operationName,
|
|
14838
|
-
runtimeOptions: context.runtimeOptions,
|
|
14839
|
-
field: config.field,
|
|
14840
|
-
variables: normalizeGraphqlVariables2({
|
|
14841
|
-
organization_id: resolveOrganizationId(context.organizationId),
|
|
14842
|
-
...config.variables
|
|
14843
|
-
}),
|
|
14844
|
-
variableTypes: config.variableTypes,
|
|
14845
|
-
selectionSet: config.selectionSet,
|
|
14846
|
-
isList: config.isList,
|
|
14847
|
-
isShow: config.isShow,
|
|
14848
|
-
transformData: projectAiNotesPayload
|
|
14849
|
-
});
|
|
14850
|
-
}
|
|
14851
|
-
function registerAiNotesCommands(program) {
|
|
14852
|
-
const aiNotes = program.command("ai-notes").description("AI Notes read-only list and detail metadata");
|
|
14853
|
-
aiNotes.command("list").description("Read safe AI Note metadata without transcripts or provider payloads").option("--page <page>").option("--per <per>").action(async (opts, cmd) => {
|
|
14854
|
-
await runAiNotesQuery(cmd, {
|
|
14855
|
-
command: "ai-notes.list",
|
|
14856
|
-
operationName: "AiNotes",
|
|
14857
|
-
field: "ai_notes",
|
|
14858
|
-
variables: {
|
|
14859
|
-
page: opts.page,
|
|
14860
|
-
per: opts.per
|
|
14861
|
-
},
|
|
14862
|
-
variableTypes: {
|
|
14863
|
-
organization_id: "ID!",
|
|
14864
|
-
page: "Int",
|
|
14865
|
-
per: "Int"
|
|
14866
|
-
},
|
|
14867
|
-
selectionSet: AI_NOTES_SELECTION,
|
|
14868
|
-
isList: true
|
|
14869
|
-
});
|
|
14870
|
-
});
|
|
14871
|
-
aiNotes.command("show").description("Read safe AI Note detail metadata by id or slug").option("--id <id>").option("--slug <slug>").action(async (opts, cmd) => {
|
|
14872
|
-
const variables = showVariables(opts);
|
|
14873
|
-
await runAiNotesQuery(cmd, {
|
|
14874
|
-
command: "ai-notes.show",
|
|
14875
|
-
operationName: "AiNote",
|
|
14876
|
-
field: "ai_note",
|
|
14877
|
-
variables,
|
|
14878
|
-
variableTypes: {
|
|
14879
|
-
organization_id: "ID!",
|
|
14880
|
-
...variables.id ? { id: "ID!" } : {},
|
|
14881
|
-
...variables.slug ? { slug: "String!" } : {}
|
|
14882
|
-
},
|
|
14883
|
-
selectionSet: AI_NOTE_SELECTION,
|
|
14884
|
-
isShow: true
|
|
14885
|
-
});
|
|
14886
|
-
});
|
|
14887
|
-
}
|
|
14888
|
-
|
|
14889
14776
|
// src/commands/atlasAuthoring.ts
|
|
14890
14777
|
var import_zod19 = require("zod");
|
|
14891
14778
|
var idSchema14 = import_zod19.z.string().trim().min(1);
|
|
@@ -15060,7 +14947,7 @@ function registerAtlasAuthoringCommands(program) {
|
|
|
15060
14947
|
});
|
|
15061
14948
|
});
|
|
15062
14949
|
const automations = program.command("automations").description("Bounded Automation authoring operations");
|
|
15063
|
-
automations.command("create").description("Create an Automation through the API-owned createAutomation contract").requiredOption("--summary <summary>").requiredOption("--ai-task-config <json>", "Valid JSON for the API-owned ai_task_config field").requiredOption("--idempotency-key <key>", "Required create idempotency key").option("--description <description>").option("--notes <notes>").option("--member-id <memberId>").option("--status <status>").option("--priority <priority>").option("--due-date <date>", "ISO-8601 date (YYYY-MM-DD)").action(async (opts, cmd) => {
|
|
14950
|
+
automations.command("create").description("Create an Automation through the API-owned createAutomation contract").requiredOption("--summary <summary>").requiredOption("--ai-task-config <json>", "Valid JSON for the API-owned ai_task_config field").requiredOption("--idempotency-key <key>", "Required create idempotency key").option("--description <description>").option("--notes <notes>").option("--member-id <memberId>").option("--agent-id <agentId>", "Optional executor Agent id for a repeat Automation").option("--status <status>").option("--priority <priority>").option("--due-date <date>", "ISO-8601 date (YYYY-MM-DD)").action(async (opts, cmd) => {
|
|
15064
14951
|
const idempotencyKey = idempotencyKeySchema.parse(opts.idempotencyKey);
|
|
15065
14952
|
const context = await resolveCommandContext(cmd.optsWithGlobals());
|
|
15066
14953
|
const organizationId = resolveOrganizationId(context.organizationId);
|
|
@@ -15082,6 +14969,7 @@ function registerAtlasAuthoringCommands(program) {
|
|
|
15082
14969
|
...opts.description !== void 0 ? { description: String(opts.description) } : {},
|
|
15083
14970
|
...opts.notes !== void 0 ? { notes: String(opts.notes) } : {},
|
|
15084
14971
|
...opts.memberId !== void 0 ? { member_id: idSchema14.parse(opts.memberId) } : {},
|
|
14972
|
+
...opts.agentId !== void 0 ? { agentId: idSchema14.parse(opts.agentId) } : {},
|
|
15085
14973
|
...opts.status !== void 0 ? { status: String(opts.status) } : {},
|
|
15086
14974
|
...opts.priority !== void 0 ? { priority: String(opts.priority) } : {},
|
|
15087
14975
|
...opts.dueDate !== void 0 ? { due_date: isoDateSchema.parse(opts.dueDate) } : {}
|
|
@@ -15152,7 +15040,6 @@ var PRIMARY_NAMESPACES = [
|
|
|
15152
15040
|
"planner",
|
|
15153
15041
|
"mail",
|
|
15154
15042
|
"datasheets",
|
|
15155
|
-
"ai-notes",
|
|
15156
15043
|
"phantom",
|
|
15157
15044
|
"tasks",
|
|
15158
15045
|
"projects",
|
|
@@ -15317,7 +15204,7 @@ var NAMESPACE_DOCS = {
|
|
|
15317
15204
|
tier: "primary",
|
|
15318
15205
|
description: "Bounded Automation create and persisted readback operations.",
|
|
15319
15206
|
examples: [
|
|
15320
|
-
`wave automations create --summary "Weekly review" --ai-task-config '{"
|
|
15207
|
+
`wave automations create --summary "Weekly review" --agent-id 123 --ai-task-config '{"cycle":"repeat","repeatSchedule":{"interval":1,"frequency":"week","weekdays":[1,3],"at":"2:30 PM","starting":"2026-07-20T00:00:00.000Z","ending":"never","endingRuns":1,"endingDate":null,"timezone":"America/Phoenix"}}' --idempotency-key automation-create-001`,
|
|
15321
15208
|
"wave automations show --id 123"
|
|
15322
15209
|
],
|
|
15323
15210
|
schema: {
|
|
@@ -15326,6 +15213,7 @@ var NAMESPACE_DOCS = {
|
|
|
15326
15213
|
safety: [
|
|
15327
15214
|
"Create calls only createAutomation with an explicit idempotency key.",
|
|
15328
15215
|
"Only the API-defined ai_task_config field accepts validated JSON.",
|
|
15216
|
+
"Optional executor Agent linkage is sent only through the API-defined top-level agentId input.",
|
|
15329
15217
|
"Does not create a project Task, run an Automation, or invoke AI OS actions.",
|
|
15330
15218
|
"Show uses the API-owned automation query by id; no slug fallback is implemented."
|
|
15331
15219
|
],
|
|
@@ -15587,26 +15475,6 @@ var NAMESPACE_DOCS = {
|
|
|
15587
15475
|
]
|
|
15588
15476
|
}
|
|
15589
15477
|
},
|
|
15590
|
-
"ai-notes": {
|
|
15591
|
-
name: "ai-notes",
|
|
15592
|
-
tier: "primary",
|
|
15593
|
-
description: "AI Notes read-only list and detail metadata for CLI-backed Atlas and harness inspection.",
|
|
15594
|
-
examples: [
|
|
15595
|
-
"wave ai-notes list --page 1 --per 20",
|
|
15596
|
-
"wave ai-notes show --id note_123",
|
|
15597
|
-
"wave ai-notes show --slug weekly-summary"
|
|
15598
|
-
],
|
|
15599
|
-
schema: {
|
|
15600
|
-
output: "json-envelope-default",
|
|
15601
|
-
readOnly: true,
|
|
15602
|
-
safety: [
|
|
15603
|
-
"Uses API-owned GraphQL read fields aiNotes and aiNote.",
|
|
15604
|
-
"List/show output is limited to safe AI Note identifiers, title, status, visibility, source reference, owner member id, schedule timestamps, and record timestamps.",
|
|
15605
|
-
"Does not expose transcript upload, transcription finalize, consent grant, create, update, delete, transcript text, segment text, client secrets, unsafe metadata, raw provider payloads, credentials, tokens, or secrets by default."
|
|
15606
|
-
],
|
|
15607
|
-
commands: ["list", "show"]
|
|
15608
|
-
}
|
|
15609
|
-
},
|
|
15610
15478
|
"markdown-tree": {
|
|
15611
15479
|
name: "markdown-tree",
|
|
15612
15480
|
tier: "advanced",
|
|
@@ -16124,7 +15992,7 @@ function attachDiscoveryHelp(program) {
|
|
|
16124
15992
|
}
|
|
16125
15993
|
|
|
16126
15994
|
// src/version.ts
|
|
16127
|
-
var CLI_VERSION = "0.1.
|
|
15995
|
+
var CLI_VERSION = "0.1.67";
|
|
16128
15996
|
|
|
16129
15997
|
// src/cli.ts
|
|
16130
15998
|
function buildCli(options) {
|
|
@@ -16134,7 +16002,7 @@ function buildCli(options) {
|
|
|
16134
16002
|
"Read auth/runtime context JSON from stdin (token, baseUrl, tracing fields, ...)"
|
|
16135
16003
|
).option(
|
|
16136
16004
|
"--base-url <baseUrl>",
|
|
16137
|
-
"API base URL (
|
|
16005
|
+
"API base URL (defaults to production; WAVE_API_BASE_URL overrides it)"
|
|
16138
16006
|
).option(
|
|
16139
16007
|
"--organization-id <organizationId>",
|
|
16140
16008
|
"Explicit organization ID override"
|
|
@@ -16200,7 +16068,6 @@ function buildCli(options) {
|
|
|
16200
16068
|
registerMailCommands(program);
|
|
16201
16069
|
registerPhantomCommands(program);
|
|
16202
16070
|
registerDatasheetsCommands(program);
|
|
16203
|
-
registerAiNotesCommands(program);
|
|
16204
16071
|
registerAuthCommands(program);
|
|
16205
16072
|
registerDiscoveryCommands(program);
|
|
16206
16073
|
attachNamespaceDiscovery(program);
|
package/dist/index.js
CHANGED
|
@@ -57,6 +57,9 @@ function mapStatusToExitCode(status) {
|
|
|
57
57
|
return EXIT_CODES.generic;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
+
// src/runtimeDefaults.ts
|
|
61
|
+
var DEFAULT_PRODUCTION_API_BASE_URL = "https://api.ourwave.io";
|
|
62
|
+
|
|
60
63
|
// src/config.ts
|
|
61
64
|
var DEFAULT_TIMEOUT_MS = 1e4;
|
|
62
65
|
var configSchema = z.object({
|
|
@@ -115,15 +118,7 @@ function getConfig(options) {
|
|
|
115
118
|
exitCode: EXIT_CODES.missingOrInvalidAuth
|
|
116
119
|
});
|
|
117
120
|
}
|
|
118
|
-
const baseUrl = options.baseUrl ?? process.env.WAVE_API_BASE_URL ?? process.env.WAVE_API_URL;
|
|
119
|
-
if (!baseUrl) {
|
|
120
|
-
throw new CliError({
|
|
121
|
-
message: "Missing API base URL. Pass --base-url, provide via --auth-json-stdin, or set WAVE_API_BASE_URL/WAVE_API_URL.",
|
|
122
|
-
kind: "invalid_args",
|
|
123
|
-
status: 400,
|
|
124
|
-
exitCode: EXIT_CODES.invalidArgs
|
|
125
|
-
});
|
|
126
|
-
}
|
|
121
|
+
const baseUrl = options.baseUrl ?? process.env.WAVE_API_BASE_URL ?? process.env.WAVE_API_URL ?? DEFAULT_PRODUCTION_API_BASE_URL;
|
|
127
122
|
const parsed = configSchema.safeParse({
|
|
128
123
|
baseUrl,
|
|
129
124
|
token,
|
|
@@ -2276,7 +2271,8 @@ function resolveFromSources(options, stdin, config, env) {
|
|
|
2276
2271
|
normalize3(stdin.baseUrl),
|
|
2277
2272
|
normalize3(env.WAVE_API_BASE_URL),
|
|
2278
2273
|
normalize3(env.WAVE_API_URL),
|
|
2279
|
-
normalize3(config.baseUrl)
|
|
2274
|
+
normalize3(config.baseUrl),
|
|
2275
|
+
DEFAULT_PRODUCTION_API_BASE_URL
|
|
2280
2276
|
);
|
|
2281
2277
|
const organizationId = normalize3(options.organizationId);
|
|
2282
2278
|
const organizationIdSource = organizationId ? "flag" : "none";
|
|
@@ -14776,115 +14772,6 @@ function registerDatasheetsCommands(program) {
|
|
|
14776
14772
|
});
|
|
14777
14773
|
}
|
|
14778
14774
|
|
|
14779
|
-
// src/commands/aiNotes.ts
|
|
14780
|
-
var AI_NOTE_SAFE_FIELDS = [
|
|
14781
|
-
"id",
|
|
14782
|
-
"slug",
|
|
14783
|
-
"title",
|
|
14784
|
-
"status",
|
|
14785
|
-
"visibility",
|
|
14786
|
-
"sourceType",
|
|
14787
|
-
"sourceReference",
|
|
14788
|
-
"ownerMemberId",
|
|
14789
|
-
"scheduledStartAt",
|
|
14790
|
-
"scheduledEndAt",
|
|
14791
|
-
"createdAt",
|
|
14792
|
-
"updatedAt"
|
|
14793
|
-
];
|
|
14794
|
-
var AI_NOTE_SELECTION = `{ ${AI_NOTE_SAFE_FIELDS.join(" ")} }`;
|
|
14795
|
-
var AI_NOTES_SELECTION = AI_NOTE_SELECTION;
|
|
14796
|
-
function pickSafeAiNoteFields(value) {
|
|
14797
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
14798
|
-
return null;
|
|
14799
|
-
}
|
|
14800
|
-
const record = value;
|
|
14801
|
-
const safe = {};
|
|
14802
|
-
for (const field of AI_NOTE_SAFE_FIELDS) {
|
|
14803
|
-
if (Object.prototype.hasOwnProperty.call(record, field)) {
|
|
14804
|
-
safe[field] = record[field];
|
|
14805
|
-
}
|
|
14806
|
-
}
|
|
14807
|
-
return safe;
|
|
14808
|
-
}
|
|
14809
|
-
function projectAiNotesPayload(payload) {
|
|
14810
|
-
if (Array.isArray(payload)) {
|
|
14811
|
-
return payload.map((item) => pickSafeAiNoteFields(item)).filter(Boolean);
|
|
14812
|
-
}
|
|
14813
|
-
if (!payload || typeof payload !== "object") {
|
|
14814
|
-
return payload;
|
|
14815
|
-
}
|
|
14816
|
-
return pickSafeAiNoteFields(payload);
|
|
14817
|
-
}
|
|
14818
|
-
function showVariables(opts) {
|
|
14819
|
-
const id = typeof opts.id === "string" && opts.id.trim() !== "" ? opts.id.trim() : void 0;
|
|
14820
|
-
const slug = typeof opts.slug === "string" && opts.slug.trim() !== "" ? opts.slug.trim() : void 0;
|
|
14821
|
-
if (!id && !slug || id && slug) {
|
|
14822
|
-
throw new CliError({
|
|
14823
|
-
message: "Provide exactly one AI Note identifier: --id or --slug.",
|
|
14824
|
-
kind: "invalid_args",
|
|
14825
|
-
status: 400,
|
|
14826
|
-
exitCode: EXIT_CODES.invalidArgs,
|
|
14827
|
-
details: { requiredOneOf: ["--id", "--slug"] }
|
|
14828
|
-
});
|
|
14829
|
-
}
|
|
14830
|
-
return id ? { id } : { slug };
|
|
14831
|
-
}
|
|
14832
|
-
async function runAiNotesQuery(cmd, config) {
|
|
14833
|
-
const context = await resolveCommandContext(cmd.optsWithGlobals());
|
|
14834
|
-
await runGraphqlQueryCommand({
|
|
14835
|
-
command: config.command,
|
|
14836
|
-
operationName: config.operationName,
|
|
14837
|
-
runtimeOptions: context.runtimeOptions,
|
|
14838
|
-
field: config.field,
|
|
14839
|
-
variables: normalizeGraphqlVariables2({
|
|
14840
|
-
organization_id: resolveOrganizationId(context.organizationId),
|
|
14841
|
-
...config.variables
|
|
14842
|
-
}),
|
|
14843
|
-
variableTypes: config.variableTypes,
|
|
14844
|
-
selectionSet: config.selectionSet,
|
|
14845
|
-
isList: config.isList,
|
|
14846
|
-
isShow: config.isShow,
|
|
14847
|
-
transformData: projectAiNotesPayload
|
|
14848
|
-
});
|
|
14849
|
-
}
|
|
14850
|
-
function registerAiNotesCommands(program) {
|
|
14851
|
-
const aiNotes = program.command("ai-notes").description("AI Notes read-only list and detail metadata");
|
|
14852
|
-
aiNotes.command("list").description("Read safe AI Note metadata without transcripts or provider payloads").option("--page <page>").option("--per <per>").action(async (opts, cmd) => {
|
|
14853
|
-
await runAiNotesQuery(cmd, {
|
|
14854
|
-
command: "ai-notes.list",
|
|
14855
|
-
operationName: "AiNotes",
|
|
14856
|
-
field: "ai_notes",
|
|
14857
|
-
variables: {
|
|
14858
|
-
page: opts.page,
|
|
14859
|
-
per: opts.per
|
|
14860
|
-
},
|
|
14861
|
-
variableTypes: {
|
|
14862
|
-
organization_id: "ID!",
|
|
14863
|
-
page: "Int",
|
|
14864
|
-
per: "Int"
|
|
14865
|
-
},
|
|
14866
|
-
selectionSet: AI_NOTES_SELECTION,
|
|
14867
|
-
isList: true
|
|
14868
|
-
});
|
|
14869
|
-
});
|
|
14870
|
-
aiNotes.command("show").description("Read safe AI Note detail metadata by id or slug").option("--id <id>").option("--slug <slug>").action(async (opts, cmd) => {
|
|
14871
|
-
const variables = showVariables(opts);
|
|
14872
|
-
await runAiNotesQuery(cmd, {
|
|
14873
|
-
command: "ai-notes.show",
|
|
14874
|
-
operationName: "AiNote",
|
|
14875
|
-
field: "ai_note",
|
|
14876
|
-
variables,
|
|
14877
|
-
variableTypes: {
|
|
14878
|
-
organization_id: "ID!",
|
|
14879
|
-
...variables.id ? { id: "ID!" } : {},
|
|
14880
|
-
...variables.slug ? { slug: "String!" } : {}
|
|
14881
|
-
},
|
|
14882
|
-
selectionSet: AI_NOTE_SELECTION,
|
|
14883
|
-
isShow: true
|
|
14884
|
-
});
|
|
14885
|
-
});
|
|
14886
|
-
}
|
|
14887
|
-
|
|
14888
14775
|
// src/commands/atlasAuthoring.ts
|
|
14889
14776
|
import { z as z19 } from "zod";
|
|
14890
14777
|
var idSchema14 = z19.string().trim().min(1);
|
|
@@ -15059,7 +14946,7 @@ function registerAtlasAuthoringCommands(program) {
|
|
|
15059
14946
|
});
|
|
15060
14947
|
});
|
|
15061
14948
|
const automations = program.command("automations").description("Bounded Automation authoring operations");
|
|
15062
|
-
automations.command("create").description("Create an Automation through the API-owned createAutomation contract").requiredOption("--summary <summary>").requiredOption("--ai-task-config <json>", "Valid JSON for the API-owned ai_task_config field").requiredOption("--idempotency-key <key>", "Required create idempotency key").option("--description <description>").option("--notes <notes>").option("--member-id <memberId>").option("--status <status>").option("--priority <priority>").option("--due-date <date>", "ISO-8601 date (YYYY-MM-DD)").action(async (opts, cmd) => {
|
|
14949
|
+
automations.command("create").description("Create an Automation through the API-owned createAutomation contract").requiredOption("--summary <summary>").requiredOption("--ai-task-config <json>", "Valid JSON for the API-owned ai_task_config field").requiredOption("--idempotency-key <key>", "Required create idempotency key").option("--description <description>").option("--notes <notes>").option("--member-id <memberId>").option("--agent-id <agentId>", "Optional executor Agent id for a repeat Automation").option("--status <status>").option("--priority <priority>").option("--due-date <date>", "ISO-8601 date (YYYY-MM-DD)").action(async (opts, cmd) => {
|
|
15063
14950
|
const idempotencyKey = idempotencyKeySchema.parse(opts.idempotencyKey);
|
|
15064
14951
|
const context = await resolveCommandContext(cmd.optsWithGlobals());
|
|
15065
14952
|
const organizationId = resolveOrganizationId(context.organizationId);
|
|
@@ -15081,6 +14968,7 @@ function registerAtlasAuthoringCommands(program) {
|
|
|
15081
14968
|
...opts.description !== void 0 ? { description: String(opts.description) } : {},
|
|
15082
14969
|
...opts.notes !== void 0 ? { notes: String(opts.notes) } : {},
|
|
15083
14970
|
...opts.memberId !== void 0 ? { member_id: idSchema14.parse(opts.memberId) } : {},
|
|
14971
|
+
...opts.agentId !== void 0 ? { agentId: idSchema14.parse(opts.agentId) } : {},
|
|
15084
14972
|
...opts.status !== void 0 ? { status: String(opts.status) } : {},
|
|
15085
14973
|
...opts.priority !== void 0 ? { priority: String(opts.priority) } : {},
|
|
15086
14974
|
...opts.dueDate !== void 0 ? { due_date: isoDateSchema.parse(opts.dueDate) } : {}
|
|
@@ -15151,7 +15039,6 @@ var PRIMARY_NAMESPACES = [
|
|
|
15151
15039
|
"planner",
|
|
15152
15040
|
"mail",
|
|
15153
15041
|
"datasheets",
|
|
15154
|
-
"ai-notes",
|
|
15155
15042
|
"phantom",
|
|
15156
15043
|
"tasks",
|
|
15157
15044
|
"projects",
|
|
@@ -15316,7 +15203,7 @@ var NAMESPACE_DOCS = {
|
|
|
15316
15203
|
tier: "primary",
|
|
15317
15204
|
description: "Bounded Automation create and persisted readback operations.",
|
|
15318
15205
|
examples: [
|
|
15319
|
-
`wave automations create --summary "Weekly review" --ai-task-config '{"
|
|
15206
|
+
`wave automations create --summary "Weekly review" --agent-id 123 --ai-task-config '{"cycle":"repeat","repeatSchedule":{"interval":1,"frequency":"week","weekdays":[1,3],"at":"2:30 PM","starting":"2026-07-20T00:00:00.000Z","ending":"never","endingRuns":1,"endingDate":null,"timezone":"America/Phoenix"}}' --idempotency-key automation-create-001`,
|
|
15320
15207
|
"wave automations show --id 123"
|
|
15321
15208
|
],
|
|
15322
15209
|
schema: {
|
|
@@ -15325,6 +15212,7 @@ var NAMESPACE_DOCS = {
|
|
|
15325
15212
|
safety: [
|
|
15326
15213
|
"Create calls only createAutomation with an explicit idempotency key.",
|
|
15327
15214
|
"Only the API-defined ai_task_config field accepts validated JSON.",
|
|
15215
|
+
"Optional executor Agent linkage is sent only through the API-defined top-level agentId input.",
|
|
15328
15216
|
"Does not create a project Task, run an Automation, or invoke AI OS actions.",
|
|
15329
15217
|
"Show uses the API-owned automation query by id; no slug fallback is implemented."
|
|
15330
15218
|
],
|
|
@@ -15586,26 +15474,6 @@ var NAMESPACE_DOCS = {
|
|
|
15586
15474
|
]
|
|
15587
15475
|
}
|
|
15588
15476
|
},
|
|
15589
|
-
"ai-notes": {
|
|
15590
|
-
name: "ai-notes",
|
|
15591
|
-
tier: "primary",
|
|
15592
|
-
description: "AI Notes read-only list and detail metadata for CLI-backed Atlas and harness inspection.",
|
|
15593
|
-
examples: [
|
|
15594
|
-
"wave ai-notes list --page 1 --per 20",
|
|
15595
|
-
"wave ai-notes show --id note_123",
|
|
15596
|
-
"wave ai-notes show --slug weekly-summary"
|
|
15597
|
-
],
|
|
15598
|
-
schema: {
|
|
15599
|
-
output: "json-envelope-default",
|
|
15600
|
-
readOnly: true,
|
|
15601
|
-
safety: [
|
|
15602
|
-
"Uses API-owned GraphQL read fields aiNotes and aiNote.",
|
|
15603
|
-
"List/show output is limited to safe AI Note identifiers, title, status, visibility, source reference, owner member id, schedule timestamps, and record timestamps.",
|
|
15604
|
-
"Does not expose transcript upload, transcription finalize, consent grant, create, update, delete, transcript text, segment text, client secrets, unsafe metadata, raw provider payloads, credentials, tokens, or secrets by default."
|
|
15605
|
-
],
|
|
15606
|
-
commands: ["list", "show"]
|
|
15607
|
-
}
|
|
15608
|
-
},
|
|
15609
15477
|
"markdown-tree": {
|
|
15610
15478
|
name: "markdown-tree",
|
|
15611
15479
|
tier: "advanced",
|
|
@@ -16123,7 +15991,7 @@ function attachDiscoveryHelp(program) {
|
|
|
16123
15991
|
}
|
|
16124
15992
|
|
|
16125
15993
|
// src/version.ts
|
|
16126
|
-
var CLI_VERSION = "0.1.
|
|
15994
|
+
var CLI_VERSION = "0.1.67";
|
|
16127
15995
|
|
|
16128
15996
|
// src/cli.ts
|
|
16129
15997
|
function buildCli(options) {
|
|
@@ -16133,7 +16001,7 @@ function buildCli(options) {
|
|
|
16133
16001
|
"Read auth/runtime context JSON from stdin (token, baseUrl, tracing fields, ...)"
|
|
16134
16002
|
).option(
|
|
16135
16003
|
"--base-url <baseUrl>",
|
|
16136
|
-
"API base URL (
|
|
16004
|
+
"API base URL (defaults to production; WAVE_API_BASE_URL overrides it)"
|
|
16137
16005
|
).option(
|
|
16138
16006
|
"--organization-id <organizationId>",
|
|
16139
16007
|
"Explicit organization ID override"
|
|
@@ -16199,7 +16067,6 @@ function buildCli(options) {
|
|
|
16199
16067
|
registerMailCommands(program);
|
|
16200
16068
|
registerPhantomCommands(program);
|
|
16201
16069
|
registerDatasheetsCommands(program);
|
|
16202
|
-
registerAiNotesCommands(program);
|
|
16203
16070
|
registerAuthCommands(program);
|
|
16204
16071
|
registerDiscoveryCommands(program);
|
|
16205
16072
|
attachNamespaceDiscovery(program);
|