@arbidocs/cli 0.5.81 → 0.5.83
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 +28 -0
- package/dist/index.js +66 -50
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.5.83
|
|
4
|
+
|
|
5
|
+
[compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.82...HEAD)
|
|
6
|
+
|
|
7
|
+
### 💅 Refactors
|
|
8
|
+
|
|
9
|
+
- **blocks:** The workspace home, ask field and activity panel move into blocks (D2b) ([#2161](https://github.com/arbicity/ARBI-frontend/pull/2161))
|
|
10
|
+
- **blocks:** The upload dialog, processing and the Files page's host parts move to blocks (D5f) ([#2177](https://github.com/arbicity/ARBI-frontend/pull/2177))
|
|
11
|
+
- **blocks:** One entity size scale; drop unused entities, settings, calls and calendar options ([#2160](https://github.com/arbicity/ARBI-frontend/pull/2160))
|
|
12
|
+
|
|
13
|
+
## v0.5.82
|
|
14
|
+
|
|
15
|
+
[compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.81...HEAD)
|
|
16
|
+
|
|
17
|
+
### 🩹 Fixes
|
|
18
|
+
|
|
19
|
+
- **sdk,react,blocks,cli:** Facts, conversations, work, skills and files name their workspace ([#2156](https://github.com/arbicity/ARBI-frontend/pull/2156))
|
|
20
|
+
- **ci:** Give Validate an explicit 6 GB Node heap ([#2180](https://github.com/arbicity/ARBI-frontend/pull/2180))
|
|
21
|
+
- **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))
|
|
22
|
+
|
|
23
|
+
### 💅 Refactors
|
|
24
|
+
|
|
25
|
+
- **blocks,app:** The route codec moves to blocks (A4) ([#2168](https://github.com/arbicity/ARBI-frontend/pull/2168))
|
|
26
|
+
- **shell:** The dashboard's panels as ConnectedPanelRegistry config (C3b-1) ([#2164](https://github.com/arbicity/ARBI-frontend/pull/2164))
|
|
27
|
+
- **blocks:** Remove unused editorial and dashboard kit options ([#2150](https://github.com/arbicity/ARBI-frontend/pull/2150))
|
|
28
|
+
- **blocks:** One viewer shape; drop unused viewer, draft and recorder options ([#2166](https://github.com/arbicity/ARBI-frontend/pull/2166))
|
|
29
|
+
- **blocks:** The chat context panel's Documents tab moves to blocks (D5d) ([#2154](https://github.com/arbicity/ARBI-frontend/pull/2154))
|
|
30
|
+
|
|
3
31
|
## v0.5.81
|
|
4
32
|
|
|
5
33
|
[compare changes](https://github.com/arbicity/ARBI-frontend/compare/v0.5.80...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.
|
|
3692
|
+
return "0.5.83";
|
|
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.
|
|
3745
|
+
if (!latest || latest === "0.5.83") return;
|
|
3746
3746
|
if (autoUpdate) {
|
|
3747
3747
|
warn(`
|
|
3748
|
-
Your arbi version is out of date (${"0.5.
|
|
3748
|
+
Your arbi version is out of date (${"0.5.83"} \u2192 ${latest}). Updating...`);
|
|
3749
3749
|
child_process.execSync("npm install -g @arbidocs/cli@latest", { stdio: "inherit" });
|
|
3750
|
-
showChangelog("0.5.
|
|
3750
|
+
showChangelog("0.5.83", 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.
|
|
3755
|
+
Your arbi version is out of date (${"0.5.83"} \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.
|
|
3787
|
+
if (!cached || cached.latest === "0.5.83") return;
|
|
3788
3788
|
if (!shouldShowNag(cached.latest)) return;
|
|
3789
3789
|
warn(
|
|
3790
|
-
`Your arbi version is out of date (${"0.5.
|
|
3790
|
+
`Your arbi version is out of date (${"0.5.83"} \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(
|
|
8739
|
-
|
|
8740
|
-
|
|
8741
|
-
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
|
|
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(
|
|
11054
|
-
|
|
11055
|
-
|
|
11056
|
-
|
|
11057
|
-
|
|
11058
|
-
|
|
11059
|
-
|
|
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, {
|
|
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.
|
|
12615
|
+
program.name("arbi").description("ARBI CLI \u2014 interact with ARBI from the terminal").version("0.5.83").showHelpAfterError(true).showSuggestionAfterError(true);
|
|
12600
12616
|
registerConfigCommand(program);
|
|
12601
12617
|
registerLoginCommand(program);
|
|
12602
12618
|
registerRegisterCommand(program);
|