@doist/comms-cli 3.3.0 → 3.4.1
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 +12 -0
- package/README.md +6 -0
- package/dist/commands/conversation/{done.d.ts → archive.d.ts} +2 -1
- package/dist/commands/conversation/archive.d.ts.map +1 -0
- package/dist/commands/conversation/archive.js +47 -0
- package/dist/commands/conversation/archive.js.map +1 -0
- package/dist/commands/conversation/index.d.ts.map +1 -1
- package/dist/commands/conversation/index.js +12 -1
- package/dist/commands/conversation/index.js.map +1 -1
- package/dist/commands/thread/helpers.d.ts +35 -0
- package/dist/commands/thread/helpers.d.ts.map +1 -1
- package/dist/commands/thread/helpers.js +116 -3
- package/dist/commands/thread/helpers.js.map +1 -1
- package/dist/commands/thread/index.d.ts.map +1 -1
- package/dist/commands/thread/index.js +34 -1
- package/dist/commands/thread/index.js.map +1 -1
- package/dist/commands/thread/mutate.d.ts +1 -0
- package/dist/commands/thread/mutate.d.ts.map +1 -1
- package/dist/commands/thread/mutate.js +25 -8
- package/dist/commands/thread/mutate.js.map +1 -1
- package/dist/commands/thread/read.d.ts.map +1 -1
- package/dist/commands/thread/read.js +16 -101
- package/dist/commands/thread/read.js.map +1 -1
- package/dist/commands/thread/unread.d.ts +6 -0
- package/dist/commands/thread/unread.d.ts.map +1 -0
- package/dist/commands/thread/unread.js +52 -0
- package/dist/commands/thread/unread.js.map +1 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +13 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/errors.d.ts +14 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +37 -10
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/refs.d.ts +8 -0
- package/dist/lib/refs.d.ts.map +1 -1
- package/dist/lib/refs.js +59 -13
- package/dist/lib/refs.js.map +1 -1
- package/dist/lib/skills/content.d.ts +1 -1
- package/dist/lib/skills/content.d.ts.map +1 -1
- package/dist/lib/skills/content.js +9 -1
- package/dist/lib/skills/content.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/conversation/done.d.ts.map +0 -1
- package/dist/commands/conversation/done.js +0 -32
- package/dist/commands/conversation/done.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [3.4.1](https://github.com/Doist/comms-cli/compare/v3.4.0...v3.4.1) (2026-09-21)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
- accept digit-free opaque ids and map 404/409 to CliError ([#66](https://github.com/Doist/comms-cli/issues/66)) ([45052b3](https://github.com/Doist/comms-cli/commit/45052b3aa488caa1c2a51a856285bc81859cd391)), closes [#65](https://github.com/Doist/comms-cli/issues/65)
|
|
6
|
+
|
|
7
|
+
## [3.4.0](https://github.com/Doist/comms-cli/compare/v3.3.0...v3.4.0) (2026-09-18)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- add thread undone, conversation undone and thread mark-unread ([#64](https://github.com/Doist/comms-cli/issues/64)) ([98ae72b](https://github.com/Doist/comms-cli/commit/98ae72bb329e1784e11ec2c5a324f60c799dd1fc))
|
|
12
|
+
|
|
1
13
|
## [3.3.0](https://github.com/Doist/comms-cli/compare/v3.2.0...v3.3.0) (2026-09-16)
|
|
2
14
|
|
|
3
15
|
### Features
|
package/README.md
CHANGED
|
@@ -128,9 +128,15 @@ tdc thread reply <ref> # reply to a thread
|
|
|
128
128
|
tdc thread reply <ref> "Update" --notify NONE # reply without notifying anyone
|
|
129
129
|
tdc thread rename <ref> "New title" # rename a thread
|
|
130
130
|
tdc thread update <ref> "New body" # edit a thread's body (first post)
|
|
131
|
+
tdc thread done <ref> --yes # archive a thread (mark done)
|
|
132
|
+
tdc thread undone <ref> --yes # move it back to your inbox
|
|
133
|
+
tdc thread mark-read <ref> # mark a thread read
|
|
134
|
+
tdc thread mark-unread <ref> # mark it unread again (--from <comment-ref> for part of it)
|
|
131
135
|
tdc conversation unread # list unread conversations
|
|
132
136
|
tdc conversation list # list conversations (--kind, --participant, --name, --state)
|
|
133
137
|
tdc conversation view <ref> # view conversation messages
|
|
138
|
+
tdc conversation done <ref> --yes # archive a conversation
|
|
139
|
+
tdc conversation undone <ref> --yes # unarchive it
|
|
134
140
|
tdc msg view <ref> # view a conversation message
|
|
135
141
|
tdc search "keyword" # search across workspace
|
|
136
142
|
tdc search "keyword" --all # fetch all result pages
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { type DoneOptions } from './helpers.js';
|
|
2
2
|
export declare function markConversationDone(ref: string, options: DoneOptions): Promise<void>;
|
|
3
|
-
|
|
3
|
+
export declare function markConversationUndone(ref: string, options: DoneOptions): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/archive.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAqDlE,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { getCommsClient } from '../../lib/api.js';
|
|
2
|
+
import { CliError } from '../../lib/errors.js';
|
|
3
|
+
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
|
+
import { resolveConversationId } from '../../lib/refs.js';
|
|
5
|
+
import { conversationLabel } from './helpers.js';
|
|
6
|
+
async function setConversationArchiveState(ref, options, archive) {
|
|
7
|
+
const action = archive ? 'archive' : 'unarchive';
|
|
8
|
+
const conversationId = resolveConversationId(ref);
|
|
9
|
+
const client = await getCommsClient();
|
|
10
|
+
const conversation = await client.conversations.getConversation(conversationId);
|
|
11
|
+
const noop = conversation.archived === archive;
|
|
12
|
+
if (options.dryRun) {
|
|
13
|
+
printDryRun(`${action} conversation`, {
|
|
14
|
+
Conversation: conversationLabel(conversation),
|
|
15
|
+
Status: noop ? (archive ? 'already archived' : 'not archived') : undefined,
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!options.yes) {
|
|
20
|
+
if (options.json) {
|
|
21
|
+
throw new CliError('MISSING_YES_FLAG', `--yes is required to execute ${action} in --json mode.`);
|
|
22
|
+
}
|
|
23
|
+
console.log(`Would ${action}: ${conversationLabel(conversation)}`);
|
|
24
|
+
console.log('Use --yes to confirm.');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!noop) {
|
|
28
|
+
if (archive) {
|
|
29
|
+
await client.conversations.archiveConversation(conversationId);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
await client.conversations.unarchiveConversation(conversationId);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(formatJson({ id: conversationId, archived: archive }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(`Conversation ${conversationId} ${action}d${noop ? ' (already in target state)' : ''}.`);
|
|
40
|
+
}
|
|
41
|
+
export async function markConversationDone(ref, options) {
|
|
42
|
+
await setConversationArchiveState(ref, options, true);
|
|
43
|
+
}
|
|
44
|
+
export async function markConversationUndone(ref, options) {
|
|
45
|
+
await setConversationArchiveState(ref, options, false);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/commands/conversation/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAA;AAElE,KAAK,UAAU,2BAA2B,CACtC,GAAW,EACX,OAAoB,EACpB,OAAgB;IAEhB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;IAChD,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAEjD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;IAE/E,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,KAAK,OAAO,CAAA;IAE9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,GAAG,MAAM,eAAe,EAAE;YAClC,YAAY,EAAE,iBAAiB,CAAC,YAAY,CAAC;YAC7C,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7E,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CACd,kBAAkB,EAClB,gCAAgC,MAAM,kBAAkB,CAC3D,CAAA;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,KAAK,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAM;IACV,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAA;QAClE,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAA;QACpE,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAClE,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CACP,gBAAgB,cAAc,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,GAAG,CAC1F,CAAA;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW,EAAE,OAAoB;IACxE,MAAM,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAW,EAAE,OAAoB;IAC1E,MAAM,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAY3C,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAY3C,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkMlE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import { withCaseInsensitiveChoices } from '../../lib/completion.js';
|
|
3
3
|
import { collect } from '../../lib/options.js';
|
|
4
|
-
import { markConversationDone } from './
|
|
4
|
+
import { markConversationDone, markConversationUndone } from './archive.js';
|
|
5
5
|
import { listConversations } from './list.js';
|
|
6
6
|
import { muteConversation } from './mute.js';
|
|
7
7
|
import { replyToConversation } from './reply.js';
|
|
@@ -118,6 +118,17 @@ Examples:
|
|
|
118
118
|
tdc conversation done id:CbV8n2Kp4Qx6Rz9Lm3Va --yes
|
|
119
119
|
tdc conversation done id:CbV8n2Kp4Qx6Rz9Lm3Va --dry-run`)
|
|
120
120
|
.action(markConversationDone);
|
|
121
|
+
conversation
|
|
122
|
+
.command('undone <conversation-ref>')
|
|
123
|
+
.description('Unarchive a conversation; inverse of done')
|
|
124
|
+
.option('--yes', 'Confirm unarchive')
|
|
125
|
+
.option('--dry-run', 'Show what would happen without executing')
|
|
126
|
+
.option('--json', 'Output result as JSON')
|
|
127
|
+
.addHelpText('after', `
|
|
128
|
+
Examples:
|
|
129
|
+
tdc conversation undone id:CbV8n2Kp4Qx6Rz9Lm3Va --yes
|
|
130
|
+
tdc conversation undone id:CbV8n2Kp4Qx6Rz9Lm3Va --dry-run`)
|
|
131
|
+
.action(markConversationUndone);
|
|
121
132
|
conversation
|
|
122
133
|
.command('mute <conversation-ref>')
|
|
123
134
|
.description('Mute a conversation (stop notifications)')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CommsApi, Thread } from '@doist/comms-sdk';
|
|
2
|
+
import type { MutationOptions } from '../../lib/options.js';
|
|
1
3
|
export declare function printSeparator(label: string): void;
|
|
2
4
|
export interface CommentLike {
|
|
3
5
|
id: string;
|
|
@@ -21,4 +23,37 @@ export interface ResolvedNotify {
|
|
|
21
23
|
}
|
|
22
24
|
export declare function resolveNotifyIds(ids: string[], workspaceId: number): Promise<ResolvedNotify>;
|
|
23
25
|
export declare function formatNotifyLabel(items: NamedEntity[]): string;
|
|
26
|
+
export type ReadStateTextStatus = 'changed' | 'preview' | 'unchanged';
|
|
27
|
+
export type ThreadReadState = {
|
|
28
|
+
thread: Thread;
|
|
29
|
+
/**
|
|
30
|
+
* Object index of the last comment the user has read, or `null` when the
|
|
31
|
+
* thread is fully read (absent from the workspace's unread list). `-1`
|
|
32
|
+
* means nothing has been read, including the thread body.
|
|
33
|
+
*/
|
|
34
|
+
lastReadObjIndex: number | null;
|
|
35
|
+
};
|
|
36
|
+
export type ReadStatePlan<Status> = {
|
|
37
|
+
/** Appended to messages, e.g. `' from comment X'`; empty for the whole thread. */
|
|
38
|
+
scope: string;
|
|
39
|
+
isUnchanged(state: ThreadReadState): boolean;
|
|
40
|
+
/** JSON row; `outcome` is `'unchanged'` when nothing needs to move. */
|
|
41
|
+
status(state: ThreadReadState, outcome: 'planned' | 'unchanged'): Status;
|
|
42
|
+
/** Performs the mutation and returns the thread's new `lastReadObjIndex`. */
|
|
43
|
+
apply(client: CommsApi, state: ThreadReadState): Promise<number | null>;
|
|
44
|
+
};
|
|
45
|
+
export type ReadStateMutation<Status> = {
|
|
46
|
+
verb: 'read' | 'unread';
|
|
47
|
+
/** Runs on the full ref list (positional plus stdin) before anything is loaded. */
|
|
48
|
+
validateRefs?(rawRefs: string[]): void;
|
|
49
|
+
/**
|
|
50
|
+
* Builds the per-thread plan. Runs before the unread lookup so an invalid
|
|
51
|
+
* option (a bad `--from` ref) fails without a workspace-wide request.
|
|
52
|
+
*/
|
|
53
|
+
plan(client: CommsApi, threadId: string): Promise<ReadStatePlan<Status>>;
|
|
54
|
+
};
|
|
55
|
+
export declare function runThreadReadStateMutation<Status extends {
|
|
56
|
+
id: string;
|
|
57
|
+
}>(refs: string[], options: MutationOptions, mutation: ReadStateMutation<Status>): Promise<void>;
|
|
58
|
+
export declare function threadLabel(thread: Pick<Thread, 'id' | 'title'>): string;
|
|
24
59
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAQxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAK3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAalD;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,IAAI,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,wBAAsB,YAAY,CAC9B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,GAAG,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/D,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,MAAM,EAAE,WAAW,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAChC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,YAAY,CAAA;CACzB;AAED,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,MAAM,EAAE,EACb,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAE9D;AAKD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA;AAErE,MAAM,MAAM,eAAe,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI;IAChC,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAA;IAC5C,uEAAuE;IACvE,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAA;IACxE,6EAA6E;IAC7E,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC1E,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,MAAM,IAAI;IACpC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;IACvB,mFAAmF;IACnF,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACtC;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC3E,CAAA;AAED,wBAAsB,0BAA0B,CAAC,MAAM,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC1E,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CAiFf;AAyCD,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,CAExE"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import { getWorkspaceGroups, getWorkspaceUsers } from '../../lib/api.js';
|
|
2
|
+
import { getCommsClient, getWorkspaceGroups, getWorkspaceUsers } from '../../lib/api.js';
|
|
3
3
|
import { formatRelativeDate } from '../../lib/dates.js';
|
|
4
|
+
import { CliError } from '../../lib/errors.js';
|
|
4
5
|
import { isAccessible } from '../../lib/global-args.js';
|
|
6
|
+
import { readStdinToEnd } from '../../lib/input.js';
|
|
5
7
|
import { renderMarkdown } from '../../lib/markdown.js';
|
|
6
|
-
import { colors } from '../../lib/output.js';
|
|
7
|
-
import {
|
|
8
|
+
import { colors, formatJson, pluralize } from '../../lib/output.js';
|
|
9
|
+
import { assertChannelIsPublic } from '../../lib/public-channels.js';
|
|
10
|
+
import { partitionNotifyIds, resolveThreadId } from '../../lib/refs.js';
|
|
8
11
|
export function printSeparator(label) {
|
|
9
12
|
const totalWidth = 60;
|
|
10
13
|
const labelWithPadding = ` ${label} `;
|
|
@@ -42,4 +45,114 @@ export async function resolveNotifyIds(ids, workspaceId) {
|
|
|
42
45
|
export function formatNotifyLabel(items) {
|
|
43
46
|
return items.map((i) => `${i.name} (${i.id})`).join(', ');
|
|
44
47
|
}
|
|
48
|
+
export async function runThreadReadStateMutation(refs, options, mutation) {
|
|
49
|
+
const rawRefs = await collectThreadRefs(refs);
|
|
50
|
+
if (rawRefs.length === 0) {
|
|
51
|
+
throw new CliError('INVALID_REF', 'No thread references provided. Pass refs as arguments or pipe them via stdin.');
|
|
52
|
+
}
|
|
53
|
+
mutation.validateRefs?.(rawRefs);
|
|
54
|
+
const needsConfirmation = rawRefs.length > 1 && !options.yes && !options.dryRun;
|
|
55
|
+
if (options.json && needsConfirmation) {
|
|
56
|
+
throw new CliError('MISSING_YES_FLAG', `--yes is required to execute bulk mark-${mutation.verb} in --json mode.`);
|
|
57
|
+
}
|
|
58
|
+
const client = await getCommsClient();
|
|
59
|
+
const unreadCache = new Map();
|
|
60
|
+
const jsonStatuses = [];
|
|
61
|
+
const textStatuses = [];
|
|
62
|
+
for (const rawRef of rawRefs) {
|
|
63
|
+
const threadId = resolveThreadId(rawRef);
|
|
64
|
+
const plan = await mutation.plan(client, threadId);
|
|
65
|
+
const state = await loadThreadReadState(client, unreadCache, threadId);
|
|
66
|
+
const label = threadLabel(state.thread);
|
|
67
|
+
if (plan.isUnchanged(state)) {
|
|
68
|
+
jsonStatuses.push(plan.status(state, 'unchanged'));
|
|
69
|
+
textStatuses.push('unchanged');
|
|
70
|
+
if (!options.json) {
|
|
71
|
+
console.log(`Thread ${label} is already ${mutation.verb}${plan.scope}.`);
|
|
72
|
+
}
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (needsConfirmation || options.dryRun) {
|
|
76
|
+
jsonStatuses.push(plan.status(state, 'planned'));
|
|
77
|
+
textStatuses.push('preview');
|
|
78
|
+
if (!options.json) {
|
|
79
|
+
const prefix = options.dryRun ? 'Dry run: would' : 'Would';
|
|
80
|
+
console.log(`${prefix} mark ${mutation.verb} thread ${label}${plan.scope}.`);
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const lastReadObjIndex = await plan.apply(client, state);
|
|
85
|
+
const unreadByThread = unreadCache.get(state.thread.workspaceId);
|
|
86
|
+
if (lastReadObjIndex === null) {
|
|
87
|
+
unreadByThread?.delete(threadId);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
unreadByThread?.set(threadId, lastReadObjIndex);
|
|
91
|
+
}
|
|
92
|
+
jsonStatuses.push(plan.status(state, 'planned'));
|
|
93
|
+
textStatuses.push('changed');
|
|
94
|
+
if (!options.json) {
|
|
95
|
+
console.log(`Thread ${label} marked ${mutation.verb}${plan.scope}.`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (options.json) {
|
|
99
|
+
console.log(formatJson(options.dryRun
|
|
100
|
+
? jsonStatuses.map((status) => ({ ...status, dryRun: true }))
|
|
101
|
+
: jsonStatuses));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (rawRefs.length > 1) {
|
|
105
|
+
printReadStateSummary(textStatuses);
|
|
106
|
+
}
|
|
107
|
+
if (needsConfirmation) {
|
|
108
|
+
console.log('Use --yes to confirm.');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function collectThreadRefs(refs) {
|
|
112
|
+
const inlineRefs = refs.map((ref) => ref.trim()).filter(Boolean);
|
|
113
|
+
const stdinContent = await readStdinToEnd();
|
|
114
|
+
if (!stdinContent)
|
|
115
|
+
return inlineRefs;
|
|
116
|
+
const stdinRefs = stdinContent
|
|
117
|
+
.split(/\r?\n/)
|
|
118
|
+
.map((line) => line.trim())
|
|
119
|
+
.filter((line) => line !== '' && !line.startsWith('#'));
|
|
120
|
+
return [...inlineRefs, ...stdinRefs];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Loads a thread and its unread position. `unreadCache` maps a workspace id to
|
|
124
|
+
* its unread threads (`threadId` -> last read `objIndex`) so bulk runs fetch
|
|
125
|
+
* the unread list once per workspace.
|
|
126
|
+
*/
|
|
127
|
+
async function loadThreadReadState(client, unreadCache, threadId) {
|
|
128
|
+
const thread = await client.threads.getThread(threadId);
|
|
129
|
+
await assertChannelIsPublic(thread.channelId, thread.workspaceId);
|
|
130
|
+
let unreadByThread = unreadCache.get(thread.workspaceId);
|
|
131
|
+
if (!unreadByThread) {
|
|
132
|
+
const unread = await client.threads.getUnread(thread.workspaceId);
|
|
133
|
+
unreadByThread = new Map(unread.data.map((unreadThread) => [unreadThread.threadId, unreadThread.objIndex]));
|
|
134
|
+
unreadCache.set(thread.workspaceId, unreadByThread);
|
|
135
|
+
}
|
|
136
|
+
return { thread, lastReadObjIndex: unreadByThread.get(thread.id) ?? null };
|
|
137
|
+
}
|
|
138
|
+
export function threadLabel(thread) {
|
|
139
|
+
return `${thread.title} (${thread.id})`;
|
|
140
|
+
}
|
|
141
|
+
function printReadStateSummary(statuses) {
|
|
142
|
+
const summary = [
|
|
143
|
+
summarizeStatus(statuses, 'changed'),
|
|
144
|
+
summarizeStatus(statuses, 'unchanged'),
|
|
145
|
+
summarizeStatus(statuses, 'preview'),
|
|
146
|
+
].filter(Boolean);
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log(`Summary: ${summary.join(', ')}`);
|
|
149
|
+
}
|
|
150
|
+
function summarizeStatus(statuses, status) {
|
|
151
|
+
const count = statuses.filter((value) => value === status).length;
|
|
152
|
+
if (count === 0) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const noun = status === 'preview' ? pluralize(count, 'preview') : pluralize(count, 'thread');
|
|
156
|
+
return status === 'preview' ? `${count} ${noun}` : `${count} ${status} ${noun}`;
|
|
157
|
+
}
|
|
45
158
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/thread/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/commands/thread/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAc3C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgP5D"}
|
|
@@ -3,11 +3,12 @@ import { withUnvalidatedChoices } from '../../lib/completion.js';
|
|
|
3
3
|
import { collect } from '../../lib/options.js';
|
|
4
4
|
import { createThread } from './create.js';
|
|
5
5
|
import { deleteThread } from './delete.js';
|
|
6
|
-
import { markThreadDone } from './mutate.js';
|
|
6
|
+
import { markThreadDone, markThreadUndone } from './mutate.js';
|
|
7
7
|
import { muteThread, unmuteThread } from './mute.js';
|
|
8
8
|
import { markThreadRead } from './read.js';
|
|
9
9
|
import { renameThread } from './rename.js';
|
|
10
10
|
import { replyToThread } from './reply.js';
|
|
11
|
+
import { markThreadUnread } from './unread.js';
|
|
11
12
|
import { updateThread } from './update.js';
|
|
12
13
|
import { viewThread } from './view.js';
|
|
13
14
|
export function registerThreadCommand(program) {
|
|
@@ -88,6 +89,18 @@ Examples:
|
|
|
88
89
|
tdc thread done id:CbT8n2Kp4Qx6Rz9Lm3Va --dry-run
|
|
89
90
|
tdc thread done id:CbT8n2Kp4Qx6Rz9Lm3Va --json --yes`)
|
|
90
91
|
.action(markThreadDone);
|
|
92
|
+
thread
|
|
93
|
+
.command('undone <thread-ref>')
|
|
94
|
+
.description('Unarchive a thread (move it back to your inbox); inverse of done')
|
|
95
|
+
.option('--yes', 'Confirm unarchive')
|
|
96
|
+
.option('--dry-run', 'Show what would happen without executing')
|
|
97
|
+
.option('--json', 'Output result as JSON')
|
|
98
|
+
.addHelpText('after', `
|
|
99
|
+
Examples:
|
|
100
|
+
tdc thread undone id:CbT8n2Kp4Qx6Rz9Lm3Va --yes
|
|
101
|
+
tdc thread undone id:CbT8n2Kp4Qx6Rz9Lm3Va --dry-run
|
|
102
|
+
tdc thread undone id:CbT8n2Kp4Qx6Rz9Lm3Va --json --yes`)
|
|
103
|
+
.action(markThreadUndone);
|
|
91
104
|
const markReadCmd = thread
|
|
92
105
|
.command('mark-read [thread-refs...]')
|
|
93
106
|
.description('Mark a thread read for the current user')
|
|
@@ -106,6 +119,26 @@ Examples:
|
|
|
106
119
|
}
|
|
107
120
|
return markThreadRead(refs, options);
|
|
108
121
|
});
|
|
122
|
+
const markUnreadCmd = thread
|
|
123
|
+
.command('mark-unread [thread-refs...]')
|
|
124
|
+
.description('Mark a thread unread for the current user; inverse of mark-read')
|
|
125
|
+
.option('--from <comment-ref>', 'Mark unread from this comment onward (single thread only; default: whole thread)')
|
|
126
|
+
.option('--yes', 'Skip confirmation for bulk operations')
|
|
127
|
+
.option('--dry-run', 'Show what would happen without executing')
|
|
128
|
+
.option('--json', 'Output result as JSON')
|
|
129
|
+
.addHelpText('after', `
|
|
130
|
+
Examples:
|
|
131
|
+
tdc thread mark-unread id:CbT8n2Kp4Qx6Rz9Lm3Va
|
|
132
|
+
tdc thread mark-unread id:CbT8n2Kp4Qx6Rz9Lm3Va --from id:CbM8n2Kp4Qx6Rz9Lm3Va
|
|
133
|
+
tdc thread mark-unread id:CbT8n2Kp4Qx6Rz9Lm3Va id:CbT9m4Qr7Vz2Nx8Lp5Sa --yes
|
|
134
|
+
printf "id:CbT8n2Kp4Qx6Rz9Lm3Va\\nid:CbT9m4Qr7Vz2Nx8Lp5Sa\\n" | tdc thread mark-unread --yes`)
|
|
135
|
+
.action((refs, options) => {
|
|
136
|
+
if (refs.length === 0 && process.stdin.isTTY) {
|
|
137
|
+
markUnreadCmd.help();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
return markThreadUnread(refs, options);
|
|
141
|
+
});
|
|
109
142
|
thread
|
|
110
143
|
.command('delete <thread-ref>')
|
|
111
144
|
.description('Permanently delete a thread')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/thread/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/thread/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { MutationOptions } from '../../lib/options.js';
|
|
2
2
|
export declare function markThreadDone(ref: string, options: MutationOptions): Promise<void>;
|
|
3
|
+
export declare function markThreadUndone(ref: string, options: MutationOptions): Promise<void>;
|
|
3
4
|
//# sourceMappingURL=mutate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/mutate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/mutate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAwD3D,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F"}
|
|
@@ -3,30 +3,47 @@ import { CliError } from '../../lib/errors.js';
|
|
|
3
3
|
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
4
4
|
import { assertChannelIsPublic } from '../../lib/public-channels.js';
|
|
5
5
|
import { resolveThreadId } from '../../lib/refs.js';
|
|
6
|
-
|
|
6
|
+
import { threadLabel } from './helpers.js';
|
|
7
|
+
async function setThreadArchiveState(ref, options, archive) {
|
|
8
|
+
const action = archive ? 'archive' : 'unarchive';
|
|
7
9
|
const threadId = resolveThreadId(ref);
|
|
8
10
|
const client = await getCommsClient();
|
|
9
11
|
const thread = await client.threads.getThread(threadId);
|
|
10
12
|
await assertChannelIsPublic(thread.channelId, thread.workspaceId);
|
|
13
|
+
const noop = thread.isArchived === archive;
|
|
11
14
|
if (options.dryRun) {
|
|
12
|
-
printDryRun(
|
|
13
|
-
Thread:
|
|
15
|
+
printDryRun(`${action} thread`, {
|
|
16
|
+
Thread: threadLabel(thread),
|
|
17
|
+
Status: noop ? (archive ? 'already archived' : 'already in inbox') : undefined,
|
|
14
18
|
});
|
|
15
19
|
return;
|
|
16
20
|
}
|
|
17
21
|
if (!options.yes) {
|
|
18
22
|
if (options.json) {
|
|
19
|
-
throw new CliError('MISSING_YES_FLAG',
|
|
23
|
+
throw new CliError('MISSING_YES_FLAG', `--yes is required to execute ${action} in --json mode.`);
|
|
20
24
|
}
|
|
21
|
-
console.log(`Would
|
|
25
|
+
console.log(`Would ${action}: ${threadLabel(thread)}`);
|
|
22
26
|
console.log('Use --yes to confirm.');
|
|
23
27
|
return;
|
|
24
28
|
}
|
|
25
|
-
|
|
29
|
+
if (!noop) {
|
|
30
|
+
if (archive) {
|
|
31
|
+
await client.inbox.archiveThread(threadId);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
await client.inbox.unarchiveThread(threadId);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
26
37
|
if (options.json) {
|
|
27
|
-
console.log(formatJson({ id: threadId, isArchived:
|
|
38
|
+
console.log(formatJson({ id: threadId, isArchived: archive }));
|
|
28
39
|
return;
|
|
29
40
|
}
|
|
30
|
-
console.log(`Thread ${threadId}
|
|
41
|
+
console.log(`Thread ${threadId} ${action}d${noop ? ' (already in target state)' : ''}.`);
|
|
42
|
+
}
|
|
43
|
+
export async function markThreadDone(ref, options) {
|
|
44
|
+
await setThreadArchiveState(ref, options, true);
|
|
45
|
+
}
|
|
46
|
+
export async function markThreadUndone(ref, options) {
|
|
47
|
+
await setThreadArchiveState(ref, options, false);
|
|
31
48
|
}
|
|
32
49
|
//# sourceMappingURL=mutate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../../src/commands/thread/mutate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../../src/commands/thread/mutate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,KAAK,UAAU,qBAAqB,CAChC,GAAW,EACX,OAAwB,EACxB,OAAgB;IAEhB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;IAChD,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAErC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACvD,MAAM,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;IAEjE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,KAAK,OAAO,CAAA;IAE1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,GAAG,MAAM,SAAS,EAAE;YAC5B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;YAC3B,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;SACjF,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CACd,kBAAkB,EAClB,gCAAgC,MAAM,kBAAkB,CAC3D,CAAA;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAM;IACV,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAChD,CAAC;IACL,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAC9D,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,OAAwB;IACtE,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAwB;IACxE,MAAM,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/read.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAG3D,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAA;AAOnD,wBAAsB,cAAc,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|