@arbidocs/cli 0.5.80 → 0.5.82

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/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.5.82
4
+
5
+ [compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.81...HEAD)
6
+
7
+ ### 🩹 Fixes
8
+
9
+ - **sdk,react,blocks,cli:** Facts, conversations, work, skills and files name their workspace ([#2156](https://github.com/arbicity/ARBI-frontend/pull/2156))
10
+ - **ci:** Give Validate an explicit 6 GB Node heap ([#2180](https://github.com/arbicity/ARBI-frontend/pull/2180))
11
+ - **auth,app:** Return-URL guards pinned, malformed deep links stay in-app, both notification links kept ([#2181](https://github.com/arbicity/ARBI-frontend/pull/2181))
12
+
13
+ ### 💅 Refactors
14
+
15
+ - **blocks,app:** The route codec moves to blocks (A4) ([#2168](https://github.com/arbicity/ARBI-frontend/pull/2168))
16
+ - **shell:** The dashboard's panels as ConnectedPanelRegistry config (C3b-1) ([#2164](https://github.com/arbicity/ARBI-frontend/pull/2164))
17
+ - **blocks:** Remove unused editorial and dashboard kit options ([#2150](https://github.com/arbicity/ARBI-frontend/pull/2150))
18
+ - **blocks:** One viewer shape; drop unused viewer, draft and recorder options ([#2166](https://github.com/arbicity/ARBI-frontend/pull/2166))
19
+ - **blocks:** The chat context panel's Documents tab moves to blocks (D5d) ([#2154](https://github.com/arbicity/ARBI-frontend/pull/2154))
20
+
21
+ ## v0.5.81
22
+
23
+ [compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.80...HEAD)
24
+
25
+ ### 🩹 Fixes
26
+
27
+ - **notifications:** A signature request's action sits beside its document ([#2147](https://github.com/arbicity/ARBI-frontend/pull/2147))
28
+
29
+ ### ✅ Tests
30
+
31
+ - **e2e:** The tags page spec on #2084's tags page; a tag made with New opens ([#2143](https://github.com/arbicity/ARBI-frontend/pull/2143), [#2084](https://github.com/arbicity/ARBI-frontend/issues/2084))
32
+
3
33
  ## v0.5.80
4
34
 
5
35
  [compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.79...HEAD)
package/dist/index.js CHANGED
@@ -3689,7 +3689,7 @@ function getLatestVersion(skipCache = false) {
3689
3689
  }
3690
3690
  }
3691
3691
  function getCurrentVersion() {
3692
- return "0.5.80";
3692
+ return "0.5.82";
3693
3693
  }
3694
3694
  function readChangelog(fromVersion, toVersion) {
3695
3695
  try {
@@ -3742,17 +3742,17 @@ function showChangelog(fromVersion, toVersion) {
3742
3742
  async function checkForUpdates(autoUpdate) {
3743
3743
  try {
3744
3744
  const latest = getLatestVersion();
3745
- if (!latest || latest === "0.5.80") return;
3745
+ if (!latest || latest === "0.5.82") return;
3746
3746
  if (autoUpdate) {
3747
3747
  warn(`
3748
- Your arbi version is out of date (${"0.5.80"} \u2192 ${latest}). Updating...`);
3748
+ Your arbi version is out of date (${"0.5.82"} \u2192 ${latest}). Updating...`);
3749
3749
  child_process.execSync("npm install -g @arbidocs/cli@latest", { stdio: "inherit" });
3750
- showChangelog("0.5.80", latest);
3750
+ showChangelog("0.5.82", latest);
3751
3751
  console.log(`Updated to ${latest}.`);
3752
3752
  } else {
3753
3753
  warn(
3754
3754
  `
3755
- Your arbi version is out of date (${"0.5.80"} \u2192 ${latest}).
3755
+ Your arbi version is out of date (${"0.5.82"} \u2192 ${latest}).
3756
3756
  Run "arbi update" to upgrade, or "arbi update auto" to always stay up to date.`
3757
3757
  );
3758
3758
  }
@@ -3784,10 +3784,10 @@ function markNagShown(latest) {
3784
3784
  function hintUpdateOnError() {
3785
3785
  try {
3786
3786
  const cached = readCache();
3787
- if (!cached || cached.latest === "0.5.80") return;
3787
+ if (!cached || cached.latest === "0.5.82") return;
3788
3788
  if (!shouldShowNag(cached.latest)) return;
3789
3789
  warn(
3790
- `Your arbi version is out of date (${"0.5.80"} \u2192 ${cached.latest}). Run "arbi update".`
3790
+ `Your arbi version is out of date (${"0.5.82"} \u2192 ${cached.latest}). Run "arbi update".`
3791
3791
  );
3792
3792
  markNagShown(cached.latest);
3793
3793
  } catch {
@@ -8675,8 +8675,8 @@ function bail(message) {
8675
8675
  error(message);
8676
8676
  process.exit(1);
8677
8677
  }
8678
- async function fetchDatedNoteChoices(arbi) {
8679
- const data = await sdk.facts.listFacts(arbi, { datedOnly: true });
8678
+ async function fetchDatedNoteChoices(arbi, workspaceId) {
8679
+ const data = await sdk.facts.listFacts(arbi, { datedOnly: true, workspaceExtId: workspaceId });
8680
8680
  if (data.length === 0) {
8681
8681
  process.stderr.write("No dated notes found.\n");
8682
8682
  process.exit(0);
@@ -8694,8 +8694,9 @@ function registerTimelineCommand(program2) {
8694
8694
  const timeline = program2.command("timeline").description("Timeline of dated notes: list, add, update, remind, delete");
8695
8695
  timeline.command("list", { isDefault: true }).description("Dated notes in the active workspace, soonest first").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("--from <date>", "Range start, any precision (2019, 2019-10, 2019-10-14)").option("--to <date>", "Range end, any precision").option("--json", "Output as JSON").action(
8696
8696
  (opts) => runAction(async () => {
8697
- const { arbi } = await resolveWorkspace(opts.workspace);
8697
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
8698
8698
  const data = await sdk.facts.listFacts(arbi, {
8699
+ workspaceExtId: workspaceId,
8699
8700
  from: opts.from,
8700
8701
  to: opts.to,
8701
8702
  // Without this the server has no reason to treat the request as a
@@ -8731,20 +8732,24 @@ function registerTimelineCommand(program2) {
8731
8732
  );
8732
8733
  timeline.command("add [description...]").description("Add a dated note (prompts if arguments are omitted)").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("-d, --date <date>", "Date, any precision (2019, 2019-10, 2019-10-14, or a timestamp)").option("--end <date>", "End of a custom range (takes the end of its own precision)").option("--timezone <iana>", "IANA zone for a real appointment, e.g. America/New_York").option("--shared", "Visible to all workspace collaborators").option("--json", "Output as JSON").action(
8733
8734
  (words, opts) => runAction(async () => {
8734
- const { arbi } = await resolveWorkspace(opts.workspace);
8735
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
8735
8736
  const interactive = process.stdin.isTTY === true;
8736
8737
  const description = words.join(" ").trim() || (interactive ? await promptInput("What happened?") : bail("Give the note text, or run interactively."));
8737
8738
  const date = opts.date ?? (interactive ? await promptInput("When? (2019, 2019-10, 2019-10-14, or a timestamp)") : bail("A timeline note needs a date \u2014 pass --date (e.g. --date 2019-10)."));
8738
- const created = await sdk.facts.createFact(arbi, {
8739
- text: description,
8740
- date,
8741
- date_end: opts.end ?? null,
8742
- timezone: opts.timezone ?? null,
8743
- confirmed: true,
8744
- shared: Boolean(opts.shared),
8745
- tag_ext_ids: [],
8746
- citations: null
8747
- });
8739
+ const created = await sdk.facts.createFact(
8740
+ arbi,
8741
+ {
8742
+ text: description,
8743
+ date,
8744
+ date_end: opts.end ?? null,
8745
+ timezone: opts.timezone ?? null,
8746
+ confirmed: true,
8747
+ shared: Boolean(opts.shared),
8748
+ tag_ext_ids: [],
8749
+ citations: null
8750
+ },
8751
+ workspaceId
8752
+ );
8748
8753
  if (opts.json) {
8749
8754
  printJson(created);
8750
8755
  return;
@@ -8756,10 +8761,10 @@ function registerTimelineCommand(program2) {
8756
8761
  );
8757
8762
  timeline.command("update [id] [json]").description("Patch a dated note (picker + form if arguments are omitted)").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("--json", "Output as JSON").action(
8758
8763
  (id, json, opts) => runAction(async () => {
8759
- const { arbi } = await resolveWorkspace(opts.workspace);
8764
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
8760
8765
  let eventId = id;
8761
8766
  if (!eventId) {
8762
- const { choices } = await fetchDatedNoteChoices(arbi);
8767
+ const { choices } = await fetchDatedNoteChoices(arbi, workspaceId);
8763
8768
  eventId = await promptSelect("Which note?", choices);
8764
8769
  }
8765
8770
  const body = json ? parseJsonArg(json, '{"description":"Hearing moved","date":"2025-09-08"}') : {
@@ -8776,10 +8781,10 @@ function registerTimelineCommand(program2) {
8776
8781
  );
8777
8782
  timeline.command("remind [id]").description("Set a one-off reminder for a dated note").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("--at <when>", "Explicit reminder time (any precision)").option("--lead <minutes>", "Minutes before the event starts", (v) => Number.parseInt(v, 10)).option("--json", "Output as JSON").action(
8778
8783
  (id, opts) => runAction(async () => {
8779
- const { arbi } = await resolveWorkspace(opts.workspace);
8784
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
8780
8785
  let eventId = id;
8781
8786
  if (!eventId) {
8782
- const { choices } = await fetchDatedNoteChoices(arbi);
8787
+ const { choices } = await fetchDatedNoteChoices(arbi, workspaceId);
8783
8788
  eventId = await promptSelect("Remind me about which note?", choices);
8784
8789
  }
8785
8790
  const reminded = await sdk.facts.remindFact(arbi, eventId, {
@@ -8798,10 +8803,10 @@ function registerTimelineCommand(program2) {
8798
8803
  );
8799
8804
  timeline.command("delete [id]").description("Delete a note (picker if no ID)").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("-y, --yes", "Skip confirmation").action(
8800
8805
  (id, opts) => runAction(async () => {
8801
- const { arbi } = await resolveWorkspace(opts.workspace);
8806
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
8802
8807
  let eventId = id;
8803
8808
  if (!eventId) {
8804
- const { choices } = await fetchDatedNoteChoices(arbi);
8809
+ const { choices } = await fetchDatedNoteChoices(arbi, workspaceId);
8805
8810
  eventId = await promptSelect("Delete which note?", choices);
8806
8811
  }
8807
8812
  if (!eventId) return;
@@ -9451,7 +9456,7 @@ function registerDoctagsCommand(program2) {
9451
9456
  }
9452
9457
  init_prompts();
9453
9458
  async function pickConversation(arbi, workspaceId, message = "Select conversation") {
9454
- const data = await sdk.conversations.listConversations(arbi);
9459
+ const data = await sdk.conversations.listConversations(arbi, workspaceId);
9455
9460
  if (data.length === 0) {
9456
9461
  process.stderr.write("No conversations found.\n");
9457
9462
  process.exit(0);
@@ -9469,8 +9474,8 @@ function registerConversationsCommand(program2) {
9469
9474
  const conv = program2.command("convo").description("Conversations: list, switch, threads, delete, share, title, message, trace");
9470
9475
  conv.command("list").description("List conversations in the active workspace").option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("--json", "Output as JSON").action(
9471
9476
  (opts) => runAction(async () => {
9472
- const { arbi } = await resolveWorkspace(opts.workspace);
9473
- const data = await sdk.conversations.listConversations(arbi);
9477
+ const { arbi, workspaceId } = await resolveWorkspace(opts.workspace);
9478
+ const data = await sdk.conversations.listConversations(arbi, workspaceId);
9474
9479
  if (opts.json) {
9475
9480
  printJson(data);
9476
9481
  return;
@@ -9496,7 +9501,7 @@ function registerConversationsCommand(program2) {
9496
9501
  "Import a conversation export (ChatGPT, OpenClaw, or Claude Code) into the active workspace"
9497
9502
  ).option("-w, --workspace <id>", "Workspace ID (defaults to selected workspace)").option("-s, --source <source>", "Export format: auto, chatgpt, openclaw, claude_code", "auto").option("--json", "Output as JSON").action(
9498
9503
  (path8, opts) => runAction(async () => {
9499
- const { loginResult, config } = await resolveWorkspace(opts.workspace);
9504
+ const { loginResult, config, workspaceId } = await resolveWorkspace(opts.workspace);
9500
9505
  const filePath = path6.resolve(path8);
9501
9506
  let bytes;
9502
9507
  try {
@@ -9513,7 +9518,8 @@ function registerConversationsCommand(program2) {
9513
9518
  },
9514
9519
  blob,
9515
9520
  path6.basename(filePath),
9516
- opts.source ?? "auto"
9521
+ opts.source ?? "auto",
9522
+ workspaceId
9517
9523
  );
9518
9524
  if (opts.json) {
9519
9525
  printJson(data);
@@ -11049,15 +11055,19 @@ function registerRunCommand(program2) {
11049
11055
  opts.inputsFile,
11050
11056
  steps.flatMap((s) => sdk.workflowSteps.stepFields(s))
11051
11057
  );
11052
- const { arbi } = await resolveWorkspace();
11053
- const created = await sdk.work.createWork(arbi, {
11054
- title: opts.title,
11055
- plan: sdk.workflowSteps.stepsPlan(steps),
11056
- skill_inputs: Object.keys(inputs).length ? inputs : null,
11057
- agent_ext_id: opts.agent ?? null,
11058
- shared: opts.shared ?? null,
11059
- auth_mode: "run_now_temp"
11060
- });
11058
+ const { arbi, workspaceId } = await resolveWorkspace();
11059
+ const created = await sdk.work.createWork(
11060
+ arbi,
11061
+ {
11062
+ title: opts.title,
11063
+ plan: sdk.workflowSteps.stepsPlan(steps),
11064
+ skill_inputs: Object.keys(inputs).length ? inputs : null,
11065
+ agent_ext_id: opts.agent ?? null,
11066
+ shared: opts.shared ?? null,
11067
+ auth_mode: "run_now_temp"
11068
+ },
11069
+ workspaceId
11070
+ );
11061
11071
  const progress = await sdk.work.getRunProgress(arbi, created.external_id);
11062
11072
  if (opts.json) {
11063
11073
  printJson(runJson(progress));
@@ -12001,10 +12011,11 @@ function registerFilesCommand(program2) {
12001
12011
  const files = program2.command("files").description("Ephemeral files: list, upload, get, delete, fetch content");
12002
12012
  files.command("list").description("List ephemeral files attached to your account").option("--purpose <name>", "Filter by purpose (default: assistants)").option("-l, --limit <n>", "Cap to N entries", (v) => parseInt(v, 10)).option("--json", "Output as JSON").action(
12003
12013
  (opts) => runAction(async () => {
12004
- const { arbi } = await resolveWorkspace();
12014
+ const { arbi, workspaceId } = await resolveWorkspace();
12005
12015
  const data = await sdk.files.listFiles(arbi, {
12006
12016
  purpose: opts.purpose ?? null,
12007
- limit: opts.limit
12017
+ limit: opts.limit,
12018
+ workspaceExtId: workspaceId
12008
12019
  });
12009
12020
  const items = data.data ?? [];
12010
12021
  if (opts.json) {
@@ -12029,7 +12040,7 @@ function registerFilesCommand(program2) {
12029
12040
  );
12030
12041
  files.command("upload <path>").description("Upload a file (file ID is returned for use with arbi ask -b --attach)").option("--purpose <name>", "OpenAI purpose tag (default: assistants)", "assistants").action(
12031
12042
  (path8, opts) => runAction(async () => {
12032
- const { loginResult, config } = await resolveWorkspace();
12043
+ const { loginResult, config, workspaceId } = await resolveWorkspace();
12033
12044
  const filePath = path6.resolve(path8);
12034
12045
  let bytes;
12035
12046
  try {
@@ -12046,7 +12057,8 @@ function registerFilesCommand(program2) {
12046
12057
  },
12047
12058
  blob,
12048
12059
  path6.basename(filePath),
12049
- opts.purpose ?? "assistants"
12060
+ opts.purpose ?? "assistants",
12061
+ workspaceId
12050
12062
  );
12051
12063
  success(`Uploaded: ${ref(data.id)} (${formatBytes(data.bytes ?? 0)})`);
12052
12064
  })()
@@ -12177,8 +12189,8 @@ function registerUsageCommand(program2) {
12177
12189
  const titles = /* @__PURE__ */ new Map();
12178
12190
  if (getConfig()?.selectedWorkspaceId)
12179
12191
  try {
12180
- const { arbi: ws } = await resolveWorkspace();
12181
- for (const c of await sdk.conversations.listConversations(ws))
12192
+ const { arbi: ws, workspaceId } = await resolveWorkspace();
12193
+ for (const c of await sdk.conversations.listConversations(ws, workspaceId))
12182
12194
  if (c.title) titles.set(c.external_id, c.title);
12183
12195
  } catch {
12184
12196
  }
@@ -12361,8 +12373,9 @@ function registerSkillsCommand(program2) {
12361
12373
  const skills = program2.command("skills").description("Skills: list, show");
12362
12374
  skills.command("list").description("List user-invocable skills in the active workspace").option("--json", "Output as JSON").option("--include-hidden", "Include skills with user-invocable: false").action(
12363
12375
  (opts) => runAction(async () => {
12364
- const { arbi } = await resolveWorkspace();
12376
+ const { arbi, workspaceId } = await resolveWorkspace();
12365
12377
  const list = await sdk.assistant.listSkills(arbi, {
12378
+ workspaceExtId: workspaceId,
12366
12379
  includeHidden: opts.includeHidden
12367
12380
  });
12368
12381
  if (opts.json) {
@@ -12439,7 +12452,10 @@ function registerSkillsCommand(program2) {
12439
12452
  skills.command("show <slug>").description("Show a skill's SKILL.md body (read-only)").option("--json", "Output as JSON (includes metadata)").action(
12440
12453
  (slug, opts) => runAction(async () => {
12441
12454
  const ctx = await resolveWorkspace();
12442
- const list = await sdk.assistant.listSkills(ctx.arbi, { includeHidden: true });
12455
+ const list = await sdk.assistant.listSkills(ctx.arbi, {
12456
+ includeHidden: true,
12457
+ workspaceExtId: ctx.workspaceId
12458
+ });
12443
12459
  const skill = list.find((s) => s.slug === slug || s.name === slug);
12444
12460
  if (!skill) {
12445
12461
  process.stderr.write(
@@ -12596,7 +12612,7 @@ console.info = (...args) => {
12596
12612
  _origInfo(...args);
12597
12613
  };
12598
12614
  var program = new commander.Command();
12599
- program.name("arbi").description("ARBI CLI \u2014 interact with ARBI from the terminal").version("0.5.80").showHelpAfterError(true).showSuggestionAfterError(true);
12615
+ program.name("arbi").description("ARBI CLI \u2014 interact with ARBI from the terminal").version("0.5.82").showHelpAfterError(true).showSuggestionAfterError(true);
12600
12616
  registerConfigCommand(program);
12601
12617
  registerLoginCommand(program);
12602
12618
  registerRegisterCommand(program);