@oxagen/cli 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +234 -318
- package/dist/commands/agent.mcp.list.d.ts.map +1 -1
- package/dist/commands/agent.mcp.list.js +4 -2
- package/dist/commands/agent.mcp.list.js.map +1 -1
- package/dist/commands/agent.mcp.register.d.ts.map +1 -1
- package/dist/commands/agent.mcp.register.js +3 -2
- package/dist/commands/agent.mcp.register.js.map +1 -1
- package/dist/commands/agent.plan.approve.d.ts.map +1 -1
- package/dist/commands/agent.plan.approve.js +2 -1
- package/dist/commands/agent.plan.approve.js.map +1 -1
- package/dist/commands/agent.plan.create.d.ts.map +1 -1
- package/dist/commands/agent.plan.create.js +2 -1
- package/dist/commands/agent.plan.create.js.map +1 -1
- package/dist/commands/agent.skill.list.d.ts.map +1 -1
- package/dist/commands/agent.skill.list.js +4 -2
- package/dist/commands/agent.skill.list.js.map +1 -1
- package/dist/commands/agent.task.background.cancel.d.ts.map +1 -1
- package/dist/commands/agent.task.background.cancel.js +2 -1
- package/dist/commands/agent.task.background.cancel.js.map +1 -1
- package/dist/commands/agent.task.background.read.d.ts.map +1 -1
- package/dist/commands/agent.task.background.read.js.map +1 -1
- package/dist/commands/agent.task.background.start.d.ts.map +1 -1
- package/dist/commands/agent.task.background.start.js +2 -1
- package/dist/commands/agent.task.background.start.js.map +1 -1
- package/dist/commands/agent.tool.list.d.ts.map +1 -1
- package/dist/commands/agent.tool.list.js +4 -2
- package/dist/commands/agent.tool.list.js.map +1 -1
- package/dist/commands/api-key.create.d.ts.map +1 -1
- package/dist/commands/api-key.create.js +2 -1
- package/dist/commands/api-key.create.js.map +1 -1
- package/dist/commands/archive.create.d.ts.map +1 -1
- package/dist/commands/archive.create.js +2 -1
- package/dist/commands/archive.create.js.map +1 -1
- package/dist/commands/asset.upload.d.ts.map +1 -1
- package/dist/commands/asset.upload.js +2 -1
- package/dist/commands/asset.upload.js.map +1 -1
- package/dist/commands/automation.list.d.ts.map +1 -1
- package/dist/commands/automation.list.js +3 -1
- package/dist/commands/automation.list.js.map +1 -1
- package/dist/commands/billing.credits.purchase.d.ts.map +1 -1
- package/dist/commands/billing.credits.purchase.js +2 -1
- package/dist/commands/billing.credits.purchase.js.map +1 -1
- package/dist/commands/billing.status.d.ts.map +1 -1
- package/dist/commands/billing.status.js +2 -1
- package/dist/commands/billing.status.js.map +1 -1
- package/dist/commands/billing.subscription.read.d.ts.map +1 -1
- package/dist/commands/billing.subscription.read.js +4 -2
- package/dist/commands/billing.subscription.read.js.map +1 -1
- package/dist/commands/billing.subscription.upgrade.start.d.ts.map +1 -1
- package/dist/commands/billing.subscription.upgrade.start.js +2 -1
- package/dist/commands/billing.subscription.upgrade.start.js.map +1 -1
- package/dist/commands/brandkit.apply.d.ts.map +1 -1
- package/dist/commands/brandkit.apply.js +3 -2
- package/dist/commands/brandkit.apply.js.map +1 -1
- package/dist/commands/chat.send.d.ts.map +1 -1
- package/dist/commands/chat.send.js +124 -19
- package/dist/commands/chat.send.js.map +1 -1
- package/dist/commands/conversation.purge.d.ts.map +1 -1
- package/dist/commands/conversation.purge.js +3 -2
- package/dist/commands/conversation.purge.js.map +1 -1
- package/dist/commands/document.list.d.ts.map +1 -1
- package/dist/commands/document.list.js +4 -2
- package/dist/commands/document.list.js.map +1 -1
- package/dist/commands/documents.pdf.create.d.ts.map +1 -1
- package/dist/commands/documents.pdf.create.js +3 -2
- package/dist/commands/documents.pdf.create.js.map +1 -1
- package/dist/commands/form.fill.d.ts.map +1 -1
- package/dist/commands/form.fill.js +2 -1
- package/dist/commands/form.fill.js.map +1 -1
- package/dist/commands/graph.cypher.d.ts +3 -0
- package/dist/commands/graph.cypher.d.ts.map +1 -0
- package/dist/commands/graph.cypher.js +37 -0
- package/dist/commands/graph.cypher.js.map +1 -0
- package/dist/commands/graph.edge.delete.d.ts +3 -0
- package/dist/commands/graph.edge.delete.d.ts.map +1 -0
- package/dist/commands/graph.edge.delete.js +53 -0
- package/dist/commands/graph.edge.delete.js.map +1 -0
- package/dist/commands/graph.edge.upsert.d.ts +3 -0
- package/dist/commands/graph.edge.upsert.d.ts.map +1 -0
- package/dist/commands/graph.edge.upsert.js +47 -0
- package/dist/commands/graph.edge.upsert.js.map +1 -0
- package/dist/commands/graph.node.delete.d.ts +3 -0
- package/dist/commands/graph.node.delete.d.ts.map +1 -0
- package/dist/commands/graph.node.delete.js +34 -0
- package/dist/commands/graph.node.delete.js.map +1 -0
- package/dist/commands/graph.node.get.d.ts +3 -0
- package/dist/commands/graph.node.get.d.ts.map +1 -0
- package/dist/commands/graph.node.get.js +16 -0
- package/dist/commands/graph.node.get.js.map +1 -0
- package/dist/commands/graph.node.search.d.ts +3 -0
- package/dist/commands/graph.node.search.d.ts.map +1 -0
- package/dist/commands/graph.node.search.js +31 -0
- package/dist/commands/graph.node.search.js.map +1 -0
- package/dist/commands/graph.node.upsert.d.ts +3 -0
- package/dist/commands/graph.node.upsert.d.ts.map +1 -0
- package/dist/commands/graph.node.upsert.js +39 -0
- package/dist/commands/graph.node.upsert.js.map +1 -0
- package/dist/commands/image.list.d.ts.map +1 -1
- package/dist/commands/image.list.js +4 -2
- package/dist/commands/image.list.js.map +1 -1
- package/dist/commands/org.member.add.d.ts.map +1 -1
- package/dist/commands/org.member.add.js +2 -1
- package/dist/commands/org.member.add.js.map +1 -1
- package/dist/commands/org.member.invite.decline.d.ts.map +1 -1
- package/dist/commands/org.member.invite.decline.js +2 -1
- package/dist/commands/org.member.invite.decline.js.map +1 -1
- package/dist/commands/org.member.remove.d.ts.map +1 -1
- package/dist/commands/org.member.remove.js +2 -1
- package/dist/commands/org.member.remove.js.map +1 -1
- package/dist/commands/org.member.role.change.d.ts.map +1 -1
- package/dist/commands/org.member.role.change.js +2 -1
- package/dist/commands/org.member.role.change.js.map +1 -1
- package/dist/commands/plugin.credential.reauth.d.ts.map +1 -1
- package/dist/commands/plugin.credential.reauth.js.map +1 -1
- package/dist/commands/plugin.credential.set_secret.d.ts.map +1 -1
- package/dist/commands/plugin.credential.set_secret.js +2 -1
- package/dist/commands/plugin.credential.set_secret.js.map +1 -1
- package/dist/commands/plugin.denylist.add.d.ts.map +1 -1
- package/dist/commands/plugin.denylist.add.js +2 -1
- package/dist/commands/plugin.denylist.add.js.map +1 -1
- package/dist/commands/plugin.denylist.remove.d.ts.map +1 -1
- package/dist/commands/plugin.denylist.remove.js +2 -1
- package/dist/commands/plugin.denylist.remove.js.map +1 -1
- package/dist/commands/plugin.install.d.ts.map +1 -1
- package/dist/commands/plugin.install.js +2 -1
- package/dist/commands/plugin.install.js.map +1 -1
- package/dist/commands/plugin.list.d.ts.map +1 -1
- package/dist/commands/plugin.list.js +2 -1
- package/dist/commands/plugin.list.js.map +1 -1
- package/dist/commands/plugin.org.install.d.ts.map +1 -1
- package/dist/commands/plugin.org.install.js +2 -1
- package/dist/commands/plugin.org.install.js.map +1 -1
- package/dist/commands/plugin.org.install_bulk.d.ts.map +1 -1
- package/dist/commands/plugin.org.install_bulk.js +2 -1
- package/dist/commands/plugin.org.install_bulk.js.map +1 -1
- package/dist/commands/plugin.org.list.d.ts.map +1 -1
- package/dist/commands/plugin.org.list.js +4 -2
- package/dist/commands/plugin.org.list.js.map +1 -1
- package/dist/commands/plugin.org.set_enabled.d.ts.map +1 -1
- package/dist/commands/plugin.org.set_enabled.js +2 -1
- package/dist/commands/plugin.org.set_enabled.js.map +1 -1
- package/dist/commands/plugin.org.uninstall.d.ts.map +1 -1
- package/dist/commands/plugin.org.uninstall.js +2 -1
- package/dist/commands/plugin.org.uninstall.js.map +1 -1
- package/dist/commands/plugin.registry.add.d.ts.map +1 -1
- package/dist/commands/plugin.registry.add.js.map +1 -1
- package/dist/commands/plugin.registry.list.d.ts.map +1 -1
- package/dist/commands/plugin.registry.list.js.map +1 -1
- package/dist/commands/plugin.registry.remove.d.ts.map +1 -1
- package/dist/commands/plugin.registry.remove.js +2 -1
- package/dist/commands/plugin.registry.remove.js.map +1 -1
- package/dist/commands/plugin.registry.sync.d.ts.map +1 -1
- package/dist/commands/plugin.registry.sync.js +2 -1
- package/dist/commands/plugin.registry.sync.js.map +1 -1
- package/dist/commands/plugin.settings.set_auth_alerts.d.ts.map +1 -1
- package/dist/commands/plugin.settings.set_auth_alerts.js +3 -2
- package/dist/commands/plugin.settings.set_auth_alerts.js.map +1 -1
- package/dist/commands/plugin.uninstall.d.ts.map +1 -1
- package/dist/commands/plugin.uninstall.js +2 -1
- package/dist/commands/plugin.uninstall.js.map +1 -1
- package/dist/commands/plugin.workspace.set_enabled.d.ts.map +1 -1
- package/dist/commands/plugin.workspace.set_enabled.js +3 -2
- package/dist/commands/plugin.workspace.set_enabled.js.map +1 -1
- package/dist/commands/privacy.erase.d.ts.map +1 -1
- package/dist/commands/privacy.erase.js.map +1 -1
- package/dist/commands/privacy.export.d.ts.map +1 -1
- package/dist/commands/privacy.export.js.map +1 -1
- package/dist/commands/research.swarm.start.d.ts +3 -0
- package/dist/commands/research.swarm.start.d.ts.map +1 -0
- package/dist/commands/research.swarm.start.js +35 -0
- package/dist/commands/research.swarm.start.js.map +1 -0
- package/dist/commands/research.swarm.status.d.ts +3 -0
- package/dist/commands/research.swarm.status.d.ts.map +1 -0
- package/dist/commands/research.swarm.status.js +26 -0
- package/dist/commands/research.swarm.status.js.map +1 -0
- package/dist/commands/skill.workspace.list.d.ts.map +1 -1
- package/dist/commands/skill.workspace.list.js +4 -2
- package/dist/commands/skill.workspace.list.js.map +1 -1
- package/dist/commands/system.install.instructions.d.ts.map +1 -1
- package/dist/commands/system.install.instructions.js +7 -4
- package/dist/commands/system.install.instructions.js.map +1 -1
- package/dist/commands/web.fetch.d.ts +3 -0
- package/dist/commands/web.fetch.d.ts.map +1 -0
- package/dist/commands/web.fetch.js +39 -0
- package/dist/commands/web.fetch.js.map +1 -0
- package/dist/commands/web.search.d.ts +3 -0
- package/dist/commands/web.search.d.ts.map +1 -0
- package/dist/commands/web.search.js +50 -0
- package/dist/commands/web.search.js.map +1 -0
- package/dist/commands/workflow.cancel.d.ts.map +1 -1
- package/dist/commands/workflow.cancel.js +2 -1
- package/dist/commands/workflow.cancel.js.map +1 -1
- package/dist/commands/workflow.run.d.ts.map +1 -1
- package/dist/commands/workflow.run.js +2 -1
- package/dist/commands/workflow.run.js.map +1 -1
- package/dist/commands/workflow.status.d.ts.map +1 -1
- package/dist/commands/workflow.status.js +4 -2
- package/dist/commands/workflow.status.js.map +1 -1
- package/dist/commands/workspace.create.d.ts.map +1 -1
- package/dist/commands/workspace.create.js +2 -1
- package/dist/commands/workspace.create.js.map +1 -1
- package/dist/commands/workspace.list.d.ts.map +1 -1
- package/dist/commands/workspace.list.js +2 -1
- package/dist/commands/workspace.list.js.map +1 -1
- package/dist/commands/workspace.member.list.d.ts.map +1 -1
- package/dist/commands/workspace.member.list.js +3 -1
- package/dist/commands/workspace.member.list.js.map +1 -1
- package/dist/commands/workspace.model.settings.read.d.ts.map +1 -1
- package/dist/commands/workspace.model.settings.read.js +2 -1
- package/dist/commands/workspace.model.settings.read.js.map +1 -1
- package/dist/commands/workspace.model.settings.write.d.ts.map +1 -1
- package/dist/commands/workspace.model.settings.write.js +2 -1
- package/dist/commands/workspace.model.settings.write.js.map +1 -1
- package/dist/commands.test.js +202 -23
- package/dist/commands.test.js.map +1 -1
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +2 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +7 -1
- package/dist/lib/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, requireAuth, ApiError } from "../lib/api-client.js";
|
|
3
|
+
import { getOrgId } from "../lib/config.js";
|
|
3
4
|
export const workspaceCreateCommand = new Command("create")
|
|
4
5
|
.description("Create a new workspace")
|
|
5
6
|
.argument("<name>", "Workspace name")
|
|
@@ -10,7 +11,7 @@ export const workspaceCreateCommand = new Command("create")
|
|
|
10
11
|
try {
|
|
11
12
|
const data = await apiRequest("/workspaces", {
|
|
12
13
|
method: "POST",
|
|
13
|
-
body: JSON.stringify({ name, org: options.org, slug: options.slug }),
|
|
14
|
+
body: JSON.stringify({ name, org: options.org ?? getOrgId(), slug: options.slug }),
|
|
14
15
|
});
|
|
15
16
|
const ws = data.workspace ?? data;
|
|
16
17
|
console.log(`✓ Workspace created: ${ws?.slug ?? ws.slug ?? "unknown"}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.create.js","sourceRoot":"","sources":["../../src/commands/workspace.create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.create.js","sourceRoot":"","sources":["../../src/commands/workspace.create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KACxD,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KACpC,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,eAAe,EAAE,6CAA6C,CAAC;KACtE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAwC,EAAE,EAAE;IACvE,WAAW,EAAE,CAAC;IACd,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAoB,aAAa,EAAE;YAC9D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;SACnF,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,wBAAyB,EAAqC,EAAE,IAAI,IAAK,EAAwB,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IACrI,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.list.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.list.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,oBAAoB,SAqB7B,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, requireAuth, ApiError } from "../lib/api-client.js";
|
|
3
|
+
import { getOrgId } from "../lib/config.js";
|
|
3
4
|
export const workspaceListCommand = new Command("list")
|
|
4
5
|
.description("List workspaces in current organization")
|
|
5
6
|
.option("--org <slug>", "Organization slug")
|
|
6
7
|
.action(async (options) => {
|
|
7
8
|
requireAuth();
|
|
8
9
|
try {
|
|
9
|
-
const qs = options.org ? `?org=${options.org}` : "";
|
|
10
|
+
const qs = options.org ? `?org=${options.org ?? getOrgId()}` : "";
|
|
10
11
|
const data = await apiRequest(`/workspaces${qs}`);
|
|
11
12
|
const workspaces = data.workspaces ?? data.data ?? [];
|
|
12
13
|
if (workspaces.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.list.js","sourceRoot":"","sources":["../../src/commands/workspace.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.list.js","sourceRoot":"","sources":["../../src/commands/workspace.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAa5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACpD,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;IAC1C,WAAW,EAAE,CAAC;IACd,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,GAAG,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAqB,cAAc,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACtD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,SAAS,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.member.list.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.member.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.member.list.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.member.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,0BAA0B,SAyBnC,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest, ApiError } from "../lib/api-client.js";
|
|
3
|
+
import { getWorkspaceId } from "../lib/config.js";
|
|
3
4
|
export const workspaceMemberListCommand = new Command("list")
|
|
4
5
|
.description("List members of a workspace")
|
|
5
6
|
.option("-w, --workspace <id>", "Workspace ID (defaults to current workspace)")
|
|
6
7
|
.action(async (options) => {
|
|
7
8
|
try {
|
|
8
|
-
const
|
|
9
|
+
const workspaceId = options.workspace ?? getWorkspaceId();
|
|
10
|
+
const params = workspaceId ? `?workspace_id=${workspaceId}` : "";
|
|
9
11
|
const data = await apiRequest(`/workspace/member/list${params}`, { method: "GET" });
|
|
10
12
|
if (!data.length) {
|
|
11
13
|
console.log("No members found.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.member.list.js","sourceRoot":"","sources":["../../src/commands/workspace.member.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.member.list.js","sourceRoot":"","sources":["../../src/commands/workspace.member.list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC1D,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,sBAAsB,EAAE,8CAA8C,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAA+B,EAAE,EAAE;IAChD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,yBAAyB,MAAM,EAAE,EACjC,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,QAAQ,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.model.settings.read.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.model.settings.read.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,iCAAiC,SAgB1C,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest } from "../lib/api-client.js";
|
|
3
|
+
import { getWorkspaceId } from "../lib/config.js";
|
|
3
4
|
export const workspaceModelSettingsReadCommand = new Command("read")
|
|
4
5
|
.description("Read model settings for a workspace")
|
|
5
6
|
.option("-w, --workspace <slug>", "Workspace slug (uses current if not specified)")
|
|
@@ -8,7 +9,7 @@ export const workspaceModelSettingsReadCommand = new Command("read")
|
|
|
8
9
|
const result = await apiRequest("/workspace/model-settings/read", {
|
|
9
10
|
method: "POST",
|
|
10
11
|
body: JSON.stringify({
|
|
11
|
-
workspace: options.workspace,
|
|
12
|
+
workspace: options.workspace ?? getWorkspaceId(),
|
|
12
13
|
}),
|
|
13
14
|
});
|
|
14
15
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.model.settings.read.js","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACjE,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,wBAAwB,EAAE,gDAAgD,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gCAAgC,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"workspace.model.settings.read.js","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACjE,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,wBAAwB,EAAE,gDAAgD,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,gCAAgC,EAAE;YAChE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,cAAc,EAAE;aACjD,CAAC;SACH,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.model.settings.write.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workspace.model.settings.write.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,kCAAkC,SAoB3C,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { apiRequest } from "../lib/api-client.js";
|
|
3
|
+
import { getWorkspaceId } from "../lib/config.js";
|
|
3
4
|
export const workspaceModelSettingsWriteCommand = new Command("write")
|
|
4
5
|
.description("Update model settings for a workspace")
|
|
5
6
|
.requiredOption("-k, --key <key>", "Setting key")
|
|
@@ -10,7 +11,7 @@ export const workspaceModelSettingsWriteCommand = new Command("write")
|
|
|
10
11
|
const result = await apiRequest("/workspace/model-settings/write", {
|
|
11
12
|
method: "POST",
|
|
12
13
|
body: JSON.stringify({
|
|
13
|
-
workspace: options.workspace,
|
|
14
|
+
workspace: options.workspace ?? getWorkspaceId(),
|
|
14
15
|
key: options.key,
|
|
15
16
|
value: options.value,
|
|
16
17
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.model.settings.write.js","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACnE,WAAW,CAAC,uCAAuC,CAAC;KACpD,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC;KAChD,cAAc,CAAC,qBAAqB,EAAE,eAAe,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,gDAAgD,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iCAAiC,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,OAAO,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"workspace.model.settings.write.js","sourceRoot":"","sources":["../../src/commands/workspace.model.settings.write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KACnE,WAAW,CAAC,uCAAuC,CAAC;KACpD,cAAc,CAAC,iBAAiB,EAAE,aAAa,CAAC;KAChD,cAAc,CAAC,qBAAqB,EAAE,eAAe,CAAC;KACtD,MAAM,CAAC,wBAAwB,EAAE,gDAAgD,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,iCAAiC,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,cAAc,EAAE;gBAChD,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC;SACH,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/commands.test.js
CHANGED
|
@@ -6,6 +6,8 @@ vi.mock("./lib/config.js", () => ({
|
|
|
6
6
|
readConfig: vi.fn(() => ({ token: "test-token", orgSlug: "my-org", workspaceSlug: "default" })),
|
|
7
7
|
writeConfig: vi.fn(),
|
|
8
8
|
clearConfig: vi.fn(),
|
|
9
|
+
getOrgId: vi.fn(() => "my-org"),
|
|
10
|
+
getWorkspaceId: vi.fn(() => "default"),
|
|
9
11
|
}));
|
|
10
12
|
vi.mock("./lib/api-client.js", () => ({
|
|
11
13
|
apiRequest: vi.fn(),
|
|
@@ -118,6 +120,8 @@ const mockRequireAuth = vi.mocked(apiClient.requireAuth);
|
|
|
118
120
|
const mockWriteConfig = vi.mocked(config.writeConfig);
|
|
119
121
|
const mockClearConfig = vi.mocked(config.clearConfig);
|
|
120
122
|
const mockGetToken = vi.mocked(config.getToken);
|
|
123
|
+
const mockGetOrgId = vi.mocked(config.getOrgId);
|
|
124
|
+
const mockGetWorkspaceId = vi.mocked(config.getWorkspaceId);
|
|
121
125
|
// Helper: throw an ApiError through apiRequest mock (covers instanceof branch in catch blocks)
|
|
122
126
|
function mockApiError(status, message) {
|
|
123
127
|
const ApiErrorClass = apiClient.ApiError;
|
|
@@ -355,33 +359,62 @@ describe("workspace create", () => {
|
|
|
355
359
|
// ---------------------------------------------------------------------------
|
|
356
360
|
// chat send
|
|
357
361
|
// ---------------------------------------------------------------------------
|
|
362
|
+
// chat.send uses native fetch() directly for SSE streaming (not apiRequest).
|
|
363
|
+
// Build minimal SSE response helpers here.
|
|
364
|
+
function makeSseResponse(text) {
|
|
365
|
+
const line = `data: ${JSON.stringify({ type: "text", text })}\n\nevent: done\ndata: [DONE]\n\n`;
|
|
366
|
+
const encoder = new TextEncoder();
|
|
367
|
+
const stream = new ReadableStream({
|
|
368
|
+
start(c) { c.enqueue(encoder.encode(line)); c.close(); },
|
|
369
|
+
});
|
|
370
|
+
return new Response(stream, {
|
|
371
|
+
status: 200,
|
|
372
|
+
headers: { "content-type": "text/event-stream" },
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
function makeErrorResponse(status, message) {
|
|
376
|
+
return new Response(JSON.stringify({ error: message }), {
|
|
377
|
+
status,
|
|
378
|
+
headers: { "content-type": "application/json" },
|
|
379
|
+
});
|
|
380
|
+
}
|
|
358
381
|
describe("chat send", () => {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
382
|
+
afterEach(() => { vi.restoreAllMocks(); });
|
|
383
|
+
it("sends message and streams response to stdout", async () => {
|
|
384
|
+
const stdoutSpy = vi.spyOn(process.stdout, "write").mockImplementation(() => true);
|
|
385
|
+
vi.spyOn(global, "fetch").mockResolvedValueOnce(makeSseResponse("Hello back!"));
|
|
362
386
|
await chatSendCommand.parseAsync(["node", "cli", "hello"]);
|
|
363
|
-
|
|
364
|
-
expect(
|
|
365
|
-
|
|
366
|
-
});
|
|
367
|
-
it("passes conversation
|
|
368
|
-
const
|
|
369
|
-
|
|
387
|
+
const written = stdoutSpy.mock.calls.map((c) => String(c[0])).join("");
|
|
388
|
+
expect(written).toContain("Hello back!");
|
|
389
|
+
stdoutSpy.mockRestore();
|
|
390
|
+
});
|
|
391
|
+
it("passes conversationId when --conversation is provided", async () => {
|
|
392
|
+
const stdoutSpy = vi.spyOn(process.stdout, "write").mockImplementation(() => true);
|
|
393
|
+
let capturedBody = null;
|
|
394
|
+
vi.spyOn(global, "fetch").mockImplementationOnce(async (_url, init) => {
|
|
395
|
+
capturedBody = JSON.parse(init.body);
|
|
396
|
+
return makeSseResponse("ok");
|
|
397
|
+
});
|
|
370
398
|
await chatSendCommand.parseAsync(["node", "cli", "hi", "--conversation", "cnv_abc"]);
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
const callBody = JSON.parse(init?.body);
|
|
374
|
-
expect(callBody.conversationId).toBe("cnv_abc");
|
|
375
|
-
consoleSpy.mockRestore();
|
|
399
|
+
expect(capturedBody["conversationId"]).toBe("cnv_abc");
|
|
400
|
+
stdoutSpy.mockRestore();
|
|
376
401
|
});
|
|
377
|
-
it("exits 1
|
|
402
|
+
it("exits 1 when fetch throws a network error", async () => {
|
|
378
403
|
const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
379
404
|
const exitSpy = vi.spyOn(process, "exit").mockImplementation(() => { throw new Error("exit"); });
|
|
380
|
-
|
|
405
|
+
vi.spyOn(global, "fetch").mockRejectedValueOnce(new Error("ECONNREFUSED"));
|
|
381
406
|
await expect(() => chatSendCommand.parseAsync(["node", "cli", "msg"])).rejects.toThrow("exit");
|
|
382
407
|
consoleSpy.mockRestore();
|
|
383
408
|
exitSpy.mockRestore();
|
|
384
409
|
});
|
|
410
|
+
it("exits 1 on non-ok HTTP response", async () => {
|
|
411
|
+
const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
412
|
+
const exitSpy = vi.spyOn(process, "exit").mockImplementation(() => { throw new Error("exit"); });
|
|
413
|
+
vi.spyOn(global, "fetch").mockResolvedValueOnce(makeErrorResponse(503, "Service unavailable"));
|
|
414
|
+
await expect(() => chatSendCommand.parseAsync(["node", "cli", "test"])).rejects.toThrow();
|
|
415
|
+
consoleSpy.mockRestore();
|
|
416
|
+
exitSpy.mockRestore();
|
|
417
|
+
});
|
|
385
418
|
});
|
|
386
419
|
// ---------------------------------------------------------------------------
|
|
387
420
|
// conversation commands
|
|
@@ -637,7 +670,7 @@ describe("agent mcp list", () => {
|
|
|
637
670
|
servers: [{ id: "mcp1", name: "claude", status: "active" }],
|
|
638
671
|
});
|
|
639
672
|
await agentMcpListCommand.parseAsync(["node", "cli"]);
|
|
640
|
-
expect(mockApiRequest).toHaveBeenCalledWith("/agent/mcp/list
|
|
673
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.stringContaining("/agent/mcp/list"), expect.objectContaining({ method: "GET" }));
|
|
641
674
|
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("MCP Servers"));
|
|
642
675
|
consoleSpy.mockRestore();
|
|
643
676
|
});
|
|
@@ -652,7 +685,7 @@ describe("agent skill list", () => {
|
|
|
652
685
|
skills: [{ id: "skill1", name: "memory", description: "Memory management" }],
|
|
653
686
|
});
|
|
654
687
|
await agentSkillListCommand.parseAsync(["node", "cli"]);
|
|
655
|
-
expect(mockApiRequest).toHaveBeenCalledWith("/agent/skill/list
|
|
688
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.stringContaining("/agent/skill/list"), expect.objectContaining({ method: "GET" }));
|
|
656
689
|
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Agent Skills"));
|
|
657
690
|
consoleSpy.mockRestore();
|
|
658
691
|
});
|
|
@@ -667,7 +700,7 @@ describe("agent tool list", () => {
|
|
|
667
700
|
tools: [{ id: "tool1", name: "search", description: "Search capability" }],
|
|
668
701
|
});
|
|
669
702
|
await agentToolListCommand.parseAsync(["node", "cli"]);
|
|
670
|
-
expect(mockApiRequest).toHaveBeenCalledWith("/agent/tool/list
|
|
703
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.stringContaining("/agent/tool/list"), expect.objectContaining({ method: "GET" }));
|
|
671
704
|
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Agent Tools"));
|
|
672
705
|
consoleSpy.mockRestore();
|
|
673
706
|
});
|
|
@@ -698,7 +731,7 @@ describe("billing subscription read", () => {
|
|
|
698
731
|
subscription: { id: "sub1", plan: "scale", status: "active" },
|
|
699
732
|
});
|
|
700
733
|
await billingSubscriptionReadCommand.parseAsync(["node", "cli"]);
|
|
701
|
-
expect(mockApiRequest).toHaveBeenCalledWith("/billing/subscription/read
|
|
734
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.stringContaining("/billing/subscription/read"), expect.objectContaining({ method: "GET" }));
|
|
702
735
|
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Current Subscription"));
|
|
703
736
|
consoleSpy.mockRestore();
|
|
704
737
|
});
|
|
@@ -2187,9 +2220,12 @@ describe("branch coverage: empty/optional data branches", () => {
|
|
|
2187
2220
|
it("chat send ApiError path", async () => {
|
|
2188
2221
|
const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
|
|
2189
2222
|
const exitSpy = vi.spyOn(process, "exit").mockImplementation((_code) => { throw new Error("exit"); });
|
|
2190
|
-
|
|
2223
|
+
// chat.send uses native fetch (not apiRequest); mock fetch directly.
|
|
2224
|
+
vi.spyOn(global, "fetch").mockResolvedValueOnce(new Response(JSON.stringify({ error: "Service unavailable" }), {
|
|
2225
|
+
status: 503,
|
|
2226
|
+
headers: { "content-type": "application/json" },
|
|
2227
|
+
}));
|
|
2191
2228
|
await expect(chatSendCommand.parseAsync(["node", "cli", "test"])).rejects.toThrow();
|
|
2192
|
-
expect(consoleSpy).toHaveBeenCalledWith("Error: Service unavailable");
|
|
2193
2229
|
consoleSpy.mockRestore();
|
|
2194
2230
|
exitSpy.mockRestore();
|
|
2195
2231
|
});
|
|
@@ -2218,4 +2254,147 @@ describe("branch coverage: empty/optional data branches", () => {
|
|
|
2218
2254
|
exitSpy.mockRestore();
|
|
2219
2255
|
});
|
|
2220
2256
|
});
|
|
2257
|
+
describe("Environment Variable Defaults", () => {
|
|
2258
|
+
beforeEach(() => {
|
|
2259
|
+
mockGetOrgId.mockReturnValue("default-org");
|
|
2260
|
+
mockGetWorkspaceId.mockReturnValue("default-workspace");
|
|
2261
|
+
mockGetToken.mockReturnValue("default-token");
|
|
2262
|
+
});
|
|
2263
|
+
afterEach(() => {
|
|
2264
|
+
delete process.env.OXAGEN_ORG_ID;
|
|
2265
|
+
delete process.env.OXAGEN_WORKSPACE_ID;
|
|
2266
|
+
delete process.env.OXAGEN_API_TOKEN;
|
|
2267
|
+
vi.clearAllMocks();
|
|
2268
|
+
});
|
|
2269
|
+
describe("OXAGEN_ORG_ID environment variable", () => {
|
|
2270
|
+
it("org member list uses OXAGEN_ORG_ID env var when no --org flag provided", async () => {
|
|
2271
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2272
|
+
mockGetOrgId.mockReturnValue("env-org-123");
|
|
2273
|
+
mockApiRequest.mockResolvedValueOnce({ members: [] });
|
|
2274
|
+
await orgMemberAddCommand.parseAsync(["node", "cli", "user@example.com", "--role", "admin"]);
|
|
2275
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
|
2276
|
+
body: expect.stringContaining("env-org-123"),
|
|
2277
|
+
}));
|
|
2278
|
+
consoleSpy.mockRestore();
|
|
2279
|
+
});
|
|
2280
|
+
it("org member list uses command-line --org flag to override OXAGEN_ORG_ID env var", async () => {
|
|
2281
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2282
|
+
mockGetOrgId.mockReturnValue("env-org-123");
|
|
2283
|
+
mockApiRequest.mockResolvedValueOnce({ members: [] });
|
|
2284
|
+
await orgMemberAddCommand.parseAsync(["node", "cli", "user@example.com", "--role", "admin", "--org", "cli-org-456"]);
|
|
2285
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
|
2286
|
+
body: expect.stringContaining("cli-org-456"),
|
|
2287
|
+
}));
|
|
2288
|
+
consoleSpy.mockRestore();
|
|
2289
|
+
});
|
|
2290
|
+
});
|
|
2291
|
+
describe("OXAGEN_WORKSPACE_ID environment variable", () => {
|
|
2292
|
+
afterEach(() => {
|
|
2293
|
+
mockApiRequest.mockClear();
|
|
2294
|
+
});
|
|
2295
|
+
it("workspace member list uses env var default when no --workspace flag", async () => {
|
|
2296
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2297
|
+
mockGetWorkspaceId.mockReturnValue("env-workspace-789");
|
|
2298
|
+
mockApiRequest.mockResolvedValueOnce([]);
|
|
2299
|
+
await workspaceMemberListCommand.parseAsync(["node", "cli"]);
|
|
2300
|
+
const calls = mockApiRequest.mock.calls;
|
|
2301
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
2302
|
+
expect(calls[0]?.[0]).toContain("workspace_id=env-workspace-789");
|
|
2303
|
+
consoleSpy.mockRestore();
|
|
2304
|
+
});
|
|
2305
|
+
it("workspace member list uses explicit flag to override env var", async () => {
|
|
2306
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2307
|
+
mockGetWorkspaceId.mockReturnValue("env-workspace-789");
|
|
2308
|
+
mockApiRequest.mockResolvedValueOnce([]);
|
|
2309
|
+
await workspaceMemberListCommand.parseAsync(["node", "cli", "-w", "cli-workspace-xyz"]);
|
|
2310
|
+
const calls = mockApiRequest.mock.calls;
|
|
2311
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
2312
|
+
expect(calls[0]?.[0]).toContain("workspace_id=cli-workspace-xyz");
|
|
2313
|
+
consoleSpy.mockRestore();
|
|
2314
|
+
});
|
|
2315
|
+
});
|
|
2316
|
+
describe("OXAGEN_API_TOKEN environment variable", () => {
|
|
2317
|
+
it("uses OXAGEN_API_TOKEN for Bearer token in Authorization header", async () => {
|
|
2318
|
+
mockGetToken.mockReturnValue("sk-token-from-env");
|
|
2319
|
+
mockApiRequest.mockResolvedValueOnce({ key: "key123" });
|
|
2320
|
+
await apiKeyCreateCommand.parseAsync(["node", "cli", "mykey"]);
|
|
2321
|
+
expect(mockApiRequest).toHaveBeenCalled();
|
|
2322
|
+
});
|
|
2323
|
+
});
|
|
2324
|
+
describe("Precedence: env vars > command-line args (fallback pattern)", () => {
|
|
2325
|
+
it("agent mcp register: workspace_id uses command-line --workspace when provided", async () => {
|
|
2326
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2327
|
+
mockGetWorkspaceId.mockReturnValue("env-workspace-999");
|
|
2328
|
+
mockApiRequest.mockResolvedValueOnce({
|
|
2329
|
+
mcpServerId: "mcp-123",
|
|
2330
|
+
healthStatus: "healthy",
|
|
2331
|
+
discoveredTools: ["tool1"],
|
|
2332
|
+
});
|
|
2333
|
+
await agentMcpRegisterCommand.parseAsync([
|
|
2334
|
+
"node", "cli", "register",
|
|
2335
|
+
"-n", "my-mcp",
|
|
2336
|
+
"-u", "http://localhost:9000",
|
|
2337
|
+
"-t", "streamable-http",
|
|
2338
|
+
"-w", "explicit-workspace-888"
|
|
2339
|
+
]);
|
|
2340
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
|
2341
|
+
body: expect.stringContaining("explicit-workspace-888"),
|
|
2342
|
+
}));
|
|
2343
|
+
consoleSpy.mockRestore();
|
|
2344
|
+
});
|
|
2345
|
+
it("agent mcp register: org_id uses getOrgId fallback when no --org flag provided", async () => {
|
|
2346
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2347
|
+
mockGetOrgId.mockReturnValue("fallback-org-111");
|
|
2348
|
+
mockGetWorkspaceId.mockReturnValue("any-workspace");
|
|
2349
|
+
mockApiRequest.mockResolvedValueOnce({
|
|
2350
|
+
mcpServerId: "mcp-456",
|
|
2351
|
+
healthStatus: "healthy",
|
|
2352
|
+
discoveredTools: [],
|
|
2353
|
+
});
|
|
2354
|
+
await agentMcpRegisterCommand.parseAsync([
|
|
2355
|
+
"node", "cli", "register",
|
|
2356
|
+
"-n", "my-mcp",
|
|
2357
|
+
"-u", "http://localhost:9000",
|
|
2358
|
+
"-t", "streamable-http"
|
|
2359
|
+
]);
|
|
2360
|
+
expect(mockApiRequest).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
|
|
2361
|
+
body: expect.stringContaining("fallback-org-111"),
|
|
2362
|
+
}));
|
|
2363
|
+
consoleSpy.mockRestore();
|
|
2364
|
+
});
|
|
2365
|
+
});
|
|
2366
|
+
describe("Multiple commands with env var defaults", () => {
|
|
2367
|
+
beforeEach(() => {
|
|
2368
|
+
vi.clearAllMocks();
|
|
2369
|
+
mockGetWorkspaceId.mockReturnValue("env-ws-default");
|
|
2370
|
+
// Commander retains option values between parseAsync calls; reset to avoid cross-test pollution
|
|
2371
|
+
workspaceMemberListCommand.setOptionValue("workspace", undefined);
|
|
2372
|
+
});
|
|
2373
|
+
it("workspace member list uses OXAGEN_WORKSPACE_ID as default when no --workspace flag", async () => {
|
|
2374
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2375
|
+
mockApiRequest.mockResolvedValueOnce([
|
|
2376
|
+
{ id: "user1", email: "user@test.com", role: "member", joined_at: "2024-01-01" }
|
|
2377
|
+
]);
|
|
2378
|
+
await workspaceMemberListCommand.parseAsync(["node", "cli"]);
|
|
2379
|
+
const calls = mockApiRequest.mock.calls;
|
|
2380
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
2381
|
+
expect(calls[0]?.[0]).toContain("workspace_id=env-ws-default");
|
|
2382
|
+
consoleSpy.mockRestore();
|
|
2383
|
+
});
|
|
2384
|
+
it("workspace member list uses explicit --workspace to override OXAGEN_WORKSPACE_ID", async () => {
|
|
2385
|
+
const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
|
|
2386
|
+
mockApiRequest.mockResolvedValueOnce([
|
|
2387
|
+
{ id: "user1", email: "user@test.com", role: "member", joined_at: "2024-01-01" }
|
|
2388
|
+
]);
|
|
2389
|
+
await workspaceMemberListCommand.parseAsync([
|
|
2390
|
+
"node", "cli",
|
|
2391
|
+
"-w", "explicit-ws"
|
|
2392
|
+
]);
|
|
2393
|
+
const calls = mockApiRequest.mock.calls;
|
|
2394
|
+
expect(calls.length).toBeGreaterThan(0);
|
|
2395
|
+
expect(calls[0]?.[0]).toContain("workspace_id=explicit-ws");
|
|
2396
|
+
consoleSpy.mockRestore();
|
|
2397
|
+
});
|
|
2398
|
+
});
|
|
2399
|
+
});
|
|
2221
2400
|
//# sourceMappingURL=commands.test.js.map
|