@botiverse/raft-daemon 0.64.0 → 0.65.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.
|
@@ -3805,30 +3805,32 @@ Use the \`raft\` CLI for chat / task / attachment operations (\`slock\` remains
|
|
|
3805
3805
|
4. **\`raft channel members\`** \u2014 List the members (agents and humans) of a specific channel, DM, or thread target.
|
|
3806
3806
|
5. **\`raft channel join\`** \u2014 Join a visible public channel. This only affects your own agent membership.
|
|
3807
3807
|
6. **\`raft channel leave\`** \u2014 Leave a regular channel you have joined. This only affects your own agent membership.
|
|
3808
|
-
7. **\`raft
|
|
3809
|
-
8. **\`raft
|
|
3810
|
-
9. **\`raft
|
|
3811
|
-
10. **\`raft message
|
|
3812
|
-
11. **\`raft message
|
|
3813
|
-
12. **\`raft
|
|
3814
|
-
13. **\`raft
|
|
3815
|
-
14. **\`raft task
|
|
3816
|
-
15. **\`raft task
|
|
3817
|
-
16. **\`raft task
|
|
3818
|
-
17. **\`raft
|
|
3819
|
-
18. **\`raft
|
|
3820
|
-
19. **\`raft
|
|
3821
|
-
20. **\`raft
|
|
3822
|
-
21. **\`raft
|
|
3823
|
-
22. **\`raft
|
|
3824
|
-
23. **\`raft integration
|
|
3825
|
-
24. **\`raft
|
|
3826
|
-
25. **\`raft
|
|
3827
|
-
26. **\`raft reminder
|
|
3828
|
-
27. **\`raft reminder
|
|
3829
|
-
28. **\`raft reminder
|
|
3830
|
-
29. **\`raft reminder
|
|
3831
|
-
30. **\`raft
|
|
3808
|
+
7. **\`raft channel mute\`** \u2014 Mute ordinary Activity delivery for a regular channel for your agent. Personal @mentions and DMs still pierce; a task pierces only when it personally @mentions you (being a task does not pierce).
|
|
3809
|
+
8. **\`raft channel unmute\`** \u2014 Unmute ordinary Activity delivery for a regular channel for your agent. Muted-window messages are not retroactively promoted.
|
|
3810
|
+
9. **\`raft thread unfollow\`** \u2014 Stop receiving ordinary delivery for a thread you no longer need to follow. This only affects your own agent attention state.
|
|
3811
|
+
10. **\`raft message read\`** \u2014 Read past messages from a channel, DM, or thread. Supports \`before\` / \`after\` anchors and \`around\` for centered context.
|
|
3812
|
+
11. **\`raft message search\`** \u2014 Search messages visible to you, then inspect a hit with \`raft message read\`.
|
|
3813
|
+
12. **\`raft message resolve\`** \u2014 Verify that a cited message id exists exactly and print its canonical message row. Use this when checking whether a referenced id is real; \`read --around\` is for context, not proof.
|
|
3814
|
+
13. **\`raft message react\`** \u2014 Add or remove your reaction on a message. Use sparingly: prefer acknowledgement/follow-up signals like \u{1F440}, and do not auto-react to every merge, deploy, or task completion with celebratory emoji.
|
|
3815
|
+
14. **\`raft task list\`** \u2014 View a channel's task board.
|
|
3816
|
+
15. **\`raft task create\`** \u2014 Create new task-messages in a channel (supports batch titles; equivalent to sending a new message and publishing it as a task-message, not claiming it for yourself).
|
|
3817
|
+
16. **\`raft task claim\`** \u2014 Claim tasks by number or message ID using repeatable flags; examples: \`raft task claim --channel "#channel" --number 1 --number 2\`, or \`raft task claim --channel "#channel" --message-id abc12345\`.
|
|
3818
|
+
17. **\`raft task unclaim\`** \u2014 Release your claim on a task.
|
|
3819
|
+
18. **\`raft task update\`** \u2014 Change a task's status (e.g. to in_review or done).
|
|
3820
|
+
19. **\`raft attachment upload\`** \u2014 Upload a file to attach to a message. Uses content sniffing for image previews; pass \`--mime-type\` only when you know the exact type. Returns an attachment ID to pass to \`raft message send\`.
|
|
3821
|
+
20. **\`raft attachment view\`** \u2014 Download an attached file by its attachment ID so you can inspect it locally.
|
|
3822
|
+
21. **\`raft profile show\`** \u2014 Show your own profile, or another visible profile via \`@handle\`. Mirrors the canonical Slock profile view.
|
|
3823
|
+
22. **\`raft profile update\`** \u2014 Update your own profile. Supports \`--avatar-file <path>\`, \`--avatar-url pixel:random:<seed>\`, \`--display-name <name>\`, and \`--description <text>\`. Use \`--avatar-url pixel:random:<seed>\` when you want a new pixel avatar but do not have a local image file. Values must be non-empty. Provide at least one flag per call; multiple flags can be combined.
|
|
3824
|
+
23. **\`raft integration list\`** \u2014 List built-in Slock apps, registered third-party services, and this agent's active Slock Agent Logins.
|
|
3825
|
+
24. **\`raft integration login\`** \u2014 Provision or reuse this agent's login for a built-in Slock app or registered third-party service.
|
|
3826
|
+
25. **\`raft integration env\`** \u2014 Print per-agent local CLI environment for a manifest-backed service that requires isolated HOME/XDG state.
|
|
3827
|
+
26. **\`raft reminder schedule\`** \u2014 Schedule a reminder for yourself later, at a specific time, or on a recurring cadence.
|
|
3828
|
+
27. **\`raft reminder list\`** \u2014 List your reminders, including lifecycle history for each reminder.
|
|
3829
|
+
28. **\`raft reminder snooze\`** \u2014 Push a reminder later without replacing it.
|
|
3830
|
+
29. **\`raft reminder update\`** \u2014 Change a reminder's title, schedule, or recurrence without creating a new reminder.
|
|
3831
|
+
30. **\`raft reminder cancel\`** \u2014 Cancel one of your reminders by ID.
|
|
3832
|
+
31. **\`raft reminder log\`** \u2014 Show the event log for a reminder, including fires, dismissals, and reschedules.
|
|
3833
|
+
32. **\`raft action prepare\`** \u2014 Prepare an action card for a human to commit (B-mode quick-commit shortcut). Posts a card the human can click to execute the action under their own identity. Pass \`--target <ch>\` and pipe the action JSON on stdin (variants: \`channel:create\`, \`agent:create\`).
|
|
3832
3834
|
|
|
3833
3835
|
The CLI prints human-readable canonical text on success (matching the format you see in received messages and history). On failure it prints canonical labeled text to stderr:
|
|
3834
3836
|
- \`Error:\` human-readable error summary
|
|
@@ -3899,7 +3901,7 @@ function buildDiscoverySection() {
|
|
|
3899
3901
|
return `### Discovering people and channels
|
|
3900
3902
|
|
|
3901
3903
|
Call \`raft server info\` to see all channels in this server, which ones you have joined, other agents, and humans.
|
|
3902
|
-
Visible public channels may appear even when \`joined=false\`. In that state you can still inspect them with \`raft message read\` and \`raft channel members\`, but you cannot send messages there or receive ordinary channel delivery until you join with \`raft channel join --target "#channel-name"\`. Private channels require a human with access to add you. To leave a regular channel you have joined, use \`raft channel leave --target "#channel-name"\`. To stop following a thread without leaving its parent channel, use \`raft thread unfollow --target "#channel-name:shortid"\`.
|
|
3904
|
+
Visible public channels may appear even when \`joined=false\`. In that state you can still inspect them with \`raft message read\` and \`raft channel members\`, but you cannot send messages there or receive ordinary channel delivery until you join with \`raft channel join --target "#channel-name"\`. Private channels require a human with access to add you. To leave a regular channel you have joined, use \`raft channel leave --target "#channel-name"\`. To mute ordinary Activity delivery without leaving a regular channel, use \`raft channel mute "#channel-name"\`; personal @mentions and DMs still pierce (a task pierces only when it personally @mentions you), and thread following is separate. To reverse that setting, use \`raft channel unmute "#channel-name"\`. To stop following a thread without leaving its parent channel, use \`raft thread unfollow --target "#channel-name:shortid"\`.
|
|
3903
3905
|
Private channels are membership-gated. If \`raft server info\` shows a channel as private, treat its name, members, and content as private to that channel; do not disclose that information in other channels, DMs, summaries, or task reports unless a human explicitly asks within an authorized context. In \`raft channel members\`, human role labels such as owner/admin show server-level authority; no role label means ordinary member.`;
|
|
3904
3906
|
}
|
|
3905
3907
|
function buildChannelAwarenessSection() {
|
|
@@ -19713,7 +19715,7 @@ function resolveSlockCliPathOrEmpty(moduleUrl = import.meta.url) {
|
|
|
19713
19715
|
}
|
|
19714
19716
|
async function runBundledSlockCli(argv) {
|
|
19715
19717
|
process.argv = [process.execPath, "slock", ...argv];
|
|
19716
|
-
await import("./dist-
|
|
19718
|
+
await import("./dist-OGRAMTIO.js");
|
|
19717
19719
|
}
|
|
19718
19720
|
function detectRuntimes(tracer = noopTracer) {
|
|
19719
19721
|
const ids = [];
|
package/dist/cli/index.js
CHANGED
|
@@ -44950,7 +44950,7 @@ var ApiClient = class {
|
|
|
44950
44950
|
if (reaction) {
|
|
44951
44951
|
return `/internal/agent-api/messages/${reaction[1]}/reactions`;
|
|
44952
44952
|
}
|
|
44953
|
-
const channelMembership = /^\/channels\/([^/]+)\/(join|leave)$/.exec(suffix);
|
|
44953
|
+
const channelMembership = /^\/channels\/([^/]+)\/(join|leave|mute|unmute)$/.exec(suffix);
|
|
44954
44954
|
if (channelMembership) {
|
|
44955
44955
|
return `/internal/agent-api/channels/${channelMembership[1]}/${channelMembership[2]}`;
|
|
44956
44956
|
}
|
|
@@ -47835,6 +47835,86 @@ function registerChannelJoinCommand(parent, runtimeOptions) {
|
|
|
47835
47835
|
registerCliCommand(parent, channelJoinCommand, runtimeOptions);
|
|
47836
47836
|
}
|
|
47837
47837
|
|
|
47838
|
+
// src/commands/channel/mute.ts
|
|
47839
|
+
init_esm_shims();
|
|
47840
|
+
function formatSeq(value) {
|
|
47841
|
+
return value == null ? "none" : String(value);
|
|
47842
|
+
}
|
|
47843
|
+
function formatChannelMuteResult(target, result2) {
|
|
47844
|
+
const lines = [
|
|
47845
|
+
`${result2.activityMuted ? "Muted" : "Unmuted"} ${target}.`,
|
|
47846
|
+
`Activity muted: ${result2.activityMuted ? "yes" : "no"}`,
|
|
47847
|
+
`Mute from seq: ${formatSeq(result2.muteFromSeq)}`
|
|
47848
|
+
];
|
|
47849
|
+
if (result2.attention?.ordinaryActivity) lines.push(result2.attention.ordinaryActivity);
|
|
47850
|
+
if (result2.attention?.stillArrives?.length) {
|
|
47851
|
+
lines.push("Still arrives:");
|
|
47852
|
+
for (const item of result2.attention.stillArrives) lines.push(`- ${item}`);
|
|
47853
|
+
}
|
|
47854
|
+
if (result2.attention?.threadBoundary) lines.push(result2.attention.threadBoundary);
|
|
47855
|
+
if (result2.attention?.catchUp) lines.push(result2.attention.catchUp);
|
|
47856
|
+
if (result2.attention?.unmuteCommand) lines.push(`To unmute: ${result2.attention.unmuteCommand}`);
|
|
47857
|
+
if (result2.attention?.unmuteApi) lines.push(`Agent API: ${result2.attention.unmuteApi}`);
|
|
47858
|
+
if (result2.attention?.muteCommand) lines.push(`To mute: ${result2.attention.muteCommand}`);
|
|
47859
|
+
if (result2.attention?.muteApi) lines.push(`Agent API: ${result2.attention.muteApi}`);
|
|
47860
|
+
return lines.join("\n");
|
|
47861
|
+
}
|
|
47862
|
+
function makeChannelMuteCommand(action) {
|
|
47863
|
+
return defineCommand(
|
|
47864
|
+
{
|
|
47865
|
+
name: action,
|
|
47866
|
+
description: action === "mute" ? "Mute ordinary Activity delivery for a regular channel" : "Unmute ordinary Activity delivery for a regular channel",
|
|
47867
|
+
arguments: ["<target>"]
|
|
47868
|
+
},
|
|
47869
|
+
async (ctx, targetArg) => {
|
|
47870
|
+
const target = String(targetArg ?? "");
|
|
47871
|
+
const channelName = parseRegularChannelTarget(target);
|
|
47872
|
+
if (!channelName) {
|
|
47873
|
+
throw new CliError({
|
|
47874
|
+
code: "INVALID_TARGET",
|
|
47875
|
+
message: "Target must be a regular channel in the form '#channel-name'. DMs and thread targets are not supported."
|
|
47876
|
+
});
|
|
47877
|
+
}
|
|
47878
|
+
const agentContext = ctx.loadAgentContext();
|
|
47879
|
+
const client = ctx.createApiClient(agentContext);
|
|
47880
|
+
const infoRes = await createAgentApiClient2(client, agentContext.agentId).server.info();
|
|
47881
|
+
if (!infoRes.ok) {
|
|
47882
|
+
throw new CliError({
|
|
47883
|
+
code: infoRes.status >= 500 ? "SERVER_5XX" : "INFO_FAILED",
|
|
47884
|
+
message: infoRes.error ?? `HTTP ${infoRes.status}`
|
|
47885
|
+
});
|
|
47886
|
+
}
|
|
47887
|
+
const channel = (infoRes.data?.channels ?? []).find((candidate) => candidate.name === channelName);
|
|
47888
|
+
if (!channel) {
|
|
47889
|
+
throw new CliError({
|
|
47890
|
+
code: "NOT_FOUND",
|
|
47891
|
+
message: `Channel not found: ${target}`
|
|
47892
|
+
});
|
|
47893
|
+
}
|
|
47894
|
+
const res = await client.request(
|
|
47895
|
+
"POST",
|
|
47896
|
+
`/internal/agent/${encodeURIComponent(agentContext.agentId)}/channels/${encodeURIComponent(channel.id)}/${action}`
|
|
47897
|
+
);
|
|
47898
|
+
if (!res.ok) {
|
|
47899
|
+
throw new CliError({
|
|
47900
|
+
code: res.status >= 500 ? "SERVER_5XX" : action === "mute" ? "MUTE_FAILED" : "UNMUTE_FAILED",
|
|
47901
|
+
message: res.error ?? `HTTP ${res.status}`,
|
|
47902
|
+
suggestedNextAction: res.suggestedNextAction ?? void 0
|
|
47903
|
+
});
|
|
47904
|
+
}
|
|
47905
|
+
writeText(ctx.io, formatChannelMuteResult(target, res.data ?? {}) + "\n");
|
|
47906
|
+
}
|
|
47907
|
+
);
|
|
47908
|
+
}
|
|
47909
|
+
var channelMuteCommand = makeChannelMuteCommand("mute");
|
|
47910
|
+
var channelUnmuteCommand = makeChannelMuteCommand("unmute");
|
|
47911
|
+
function registerChannelMuteCommand(parent, runtimeOptions) {
|
|
47912
|
+
registerCliCommand(parent, channelMuteCommand, runtimeOptions);
|
|
47913
|
+
}
|
|
47914
|
+
function registerChannelUnmuteCommand(parent, runtimeOptions) {
|
|
47915
|
+
registerCliCommand(parent, channelUnmuteCommand, runtimeOptions);
|
|
47916
|
+
}
|
|
47917
|
+
|
|
47838
47918
|
// src/commands/server/info.ts
|
|
47839
47919
|
init_esm_shims();
|
|
47840
47920
|
var serverInfoCommand = defineCommand(
|
|
@@ -51384,10 +51464,12 @@ var agentCmd = program2.command("agent").description("External agent onboarding
|
|
|
51384
51464
|
registerAgentLoginCommand(agentCmd);
|
|
51385
51465
|
registerAgentListCommand(agentCmd);
|
|
51386
51466
|
registerAgentBridgeCommand(agentCmd);
|
|
51387
|
-
var channelCmd = program2.command("channel").description("Channel membership operations");
|
|
51467
|
+
var channelCmd = program2.command("channel").description("Channel membership and attention operations");
|
|
51388
51468
|
registerChannelMembersCommand(channelCmd);
|
|
51389
51469
|
registerChannelJoinCommand(channelCmd);
|
|
51390
51470
|
registerChannelLeaveCommand(channelCmd);
|
|
51471
|
+
registerChannelMuteCommand(channelCmd);
|
|
51472
|
+
registerChannelUnmuteCommand(channelCmd);
|
|
51391
51473
|
var threadCmd = program2.command("thread").description("Thread attention operations");
|
|
51392
51474
|
registerThreadUnfollowCommand(threadCmd);
|
|
51393
51475
|
var serverCmd = program2.command("server").description("Server / workspace introspection");
|
package/dist/core.js
CHANGED
|
@@ -44473,7 +44473,7 @@ var ApiClient = class {
|
|
|
44473
44473
|
if (reaction) {
|
|
44474
44474
|
return `/internal/agent-api/messages/${reaction[1]}/reactions`;
|
|
44475
44475
|
}
|
|
44476
|
-
const channelMembership = /^\/channels\/([^/]+)\/(join|leave)$/.exec(suffix);
|
|
44476
|
+
const channelMembership = /^\/channels\/([^/]+)\/(join|leave|mute|unmute)$/.exec(suffix);
|
|
44477
44477
|
if (channelMembership) {
|
|
44478
44478
|
return `/internal/agent-api/channels/${channelMembership[1]}/${channelMembership[2]}`;
|
|
44479
44479
|
}
|
|
@@ -47305,6 +47305,84 @@ function registerChannelJoinCommand(parent, runtimeOptions) {
|
|
|
47305
47305
|
registerCliCommand(parent, channelJoinCommand, runtimeOptions);
|
|
47306
47306
|
}
|
|
47307
47307
|
init_esm_shims();
|
|
47308
|
+
function formatSeq(value) {
|
|
47309
|
+
return value == null ? "none" : String(value);
|
|
47310
|
+
}
|
|
47311
|
+
function formatChannelMuteResult(target, result2) {
|
|
47312
|
+
const lines = [
|
|
47313
|
+
`${result2.activityMuted ? "Muted" : "Unmuted"} ${target}.`,
|
|
47314
|
+
`Activity muted: ${result2.activityMuted ? "yes" : "no"}`,
|
|
47315
|
+
`Mute from seq: ${formatSeq(result2.muteFromSeq)}`
|
|
47316
|
+
];
|
|
47317
|
+
if (result2.attention?.ordinaryActivity) lines.push(result2.attention.ordinaryActivity);
|
|
47318
|
+
if (result2.attention?.stillArrives?.length) {
|
|
47319
|
+
lines.push("Still arrives:");
|
|
47320
|
+
for (const item of result2.attention.stillArrives) lines.push(`- ${item}`);
|
|
47321
|
+
}
|
|
47322
|
+
if (result2.attention?.threadBoundary) lines.push(result2.attention.threadBoundary);
|
|
47323
|
+
if (result2.attention?.catchUp) lines.push(result2.attention.catchUp);
|
|
47324
|
+
if (result2.attention?.unmuteCommand) lines.push(`To unmute: ${result2.attention.unmuteCommand}`);
|
|
47325
|
+
if (result2.attention?.unmuteApi) lines.push(`Agent API: ${result2.attention.unmuteApi}`);
|
|
47326
|
+
if (result2.attention?.muteCommand) lines.push(`To mute: ${result2.attention.muteCommand}`);
|
|
47327
|
+
if (result2.attention?.muteApi) lines.push(`Agent API: ${result2.attention.muteApi}`);
|
|
47328
|
+
return lines.join("\n");
|
|
47329
|
+
}
|
|
47330
|
+
function makeChannelMuteCommand(action) {
|
|
47331
|
+
return defineCommand(
|
|
47332
|
+
{
|
|
47333
|
+
name: action,
|
|
47334
|
+
description: action === "mute" ? "Mute ordinary Activity delivery for a regular channel" : "Unmute ordinary Activity delivery for a regular channel",
|
|
47335
|
+
arguments: ["<target>"]
|
|
47336
|
+
},
|
|
47337
|
+
async (ctx, targetArg) => {
|
|
47338
|
+
const target = String(targetArg ?? "");
|
|
47339
|
+
const channelName = parseRegularChannelTarget(target);
|
|
47340
|
+
if (!channelName) {
|
|
47341
|
+
throw new CliError({
|
|
47342
|
+
code: "INVALID_TARGET",
|
|
47343
|
+
message: "Target must be a regular channel in the form '#channel-name'. DMs and thread targets are not supported."
|
|
47344
|
+
});
|
|
47345
|
+
}
|
|
47346
|
+
const agentContext = ctx.loadAgentContext();
|
|
47347
|
+
const client = ctx.createApiClient(agentContext);
|
|
47348
|
+
const infoRes = await createAgentApiClient2(client, agentContext.agentId).server.info();
|
|
47349
|
+
if (!infoRes.ok) {
|
|
47350
|
+
throw new CliError({
|
|
47351
|
+
code: infoRes.status >= 500 ? "SERVER_5XX" : "INFO_FAILED",
|
|
47352
|
+
message: infoRes.error ?? `HTTP ${infoRes.status}`
|
|
47353
|
+
});
|
|
47354
|
+
}
|
|
47355
|
+
const channel = (infoRes.data?.channels ?? []).find((candidate) => candidate.name === channelName);
|
|
47356
|
+
if (!channel) {
|
|
47357
|
+
throw new CliError({
|
|
47358
|
+
code: "NOT_FOUND",
|
|
47359
|
+
message: `Channel not found: ${target}`
|
|
47360
|
+
});
|
|
47361
|
+
}
|
|
47362
|
+
const res = await client.request(
|
|
47363
|
+
"POST",
|
|
47364
|
+
`/internal/agent/${encodeURIComponent(agentContext.agentId)}/channels/${encodeURIComponent(channel.id)}/${action}`
|
|
47365
|
+
);
|
|
47366
|
+
if (!res.ok) {
|
|
47367
|
+
throw new CliError({
|
|
47368
|
+
code: res.status >= 500 ? "SERVER_5XX" : action === "mute" ? "MUTE_FAILED" : "UNMUTE_FAILED",
|
|
47369
|
+
message: res.error ?? `HTTP ${res.status}`,
|
|
47370
|
+
suggestedNextAction: res.suggestedNextAction ?? void 0
|
|
47371
|
+
});
|
|
47372
|
+
}
|
|
47373
|
+
writeText(ctx.io, formatChannelMuteResult(target, res.data ?? {}) + "\n");
|
|
47374
|
+
}
|
|
47375
|
+
);
|
|
47376
|
+
}
|
|
47377
|
+
var channelMuteCommand = makeChannelMuteCommand("mute");
|
|
47378
|
+
var channelUnmuteCommand = makeChannelMuteCommand("unmute");
|
|
47379
|
+
function registerChannelMuteCommand(parent, runtimeOptions) {
|
|
47380
|
+
registerCliCommand(parent, channelMuteCommand, runtimeOptions);
|
|
47381
|
+
}
|
|
47382
|
+
function registerChannelUnmuteCommand(parent, runtimeOptions) {
|
|
47383
|
+
registerCliCommand(parent, channelUnmuteCommand, runtimeOptions);
|
|
47384
|
+
}
|
|
47385
|
+
init_esm_shims();
|
|
47308
47386
|
var serverInfoCommand = defineCommand(
|
|
47309
47387
|
{
|
|
47310
47388
|
name: "info",
|
|
@@ -50720,10 +50798,12 @@ var agentCmd = program2.command("agent").description("External agent onboarding
|
|
|
50720
50798
|
registerAgentLoginCommand(agentCmd);
|
|
50721
50799
|
registerAgentListCommand(agentCmd);
|
|
50722
50800
|
registerAgentBridgeCommand(agentCmd);
|
|
50723
|
-
var channelCmd = program2.command("channel").description("Channel membership operations");
|
|
50801
|
+
var channelCmd = program2.command("channel").description("Channel membership and attention operations");
|
|
50724
50802
|
registerChannelMembersCommand(channelCmd);
|
|
50725
50803
|
registerChannelJoinCommand(channelCmd);
|
|
50726
50804
|
registerChannelLeaveCommand(channelCmd);
|
|
50805
|
+
registerChannelMuteCommand(channelCmd);
|
|
50806
|
+
registerChannelUnmuteCommand(channelCmd);
|
|
50727
50807
|
var threadCmd = program2.command("thread").description("Thread attention operations");
|
|
50728
50808
|
registerThreadUnfollowCommand(threadCmd);
|
|
50729
50809
|
var serverCmd = program2.command("server").description("Server / workspace introspection");
|
package/dist/index.js
CHANGED