@doist/comms-cli 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/commands/channel/delete.d.ts.map +1 -1
- package/dist/commands/channel/delete.js +1 -13
- package/dist/commands/channel/delete.js.map +1 -1
- package/dist/commands/conversation/helpers.d.ts +3 -1
- package/dist/commands/conversation/helpers.d.ts.map +1 -1
- package/dist/commands/conversation/index.d.ts.map +1 -1
- package/dist/commands/conversation/index.js +4 -1
- package/dist/commands/conversation/index.js.map +1 -1
- package/dist/commands/conversation/reply.d.ts.map +1 -1
- package/dist/commands/conversation/reply.js +29 -6
- package/dist/commands/conversation/reply.js.map +1 -1
- package/dist/commands/thread/create.d.ts +1 -0
- package/dist/commands/thread/create.d.ts.map +1 -1
- package/dist/commands/thread/create.js +24 -6
- package/dist/commands/thread/create.js.map +1 -1
- package/dist/commands/thread/index.d.ts.map +1 -1
- package/dist/commands/thread/index.js +8 -2
- package/dist/commands/thread/index.js.map +1 -1
- package/dist/commands/thread/reply.d.ts +1 -0
- package/dist/commands/thread/reply.d.ts.map +1 -1
- package/dist/commands/thread/reply.js +37 -10
- package/dist/commands/thread/reply.js.map +1 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +9 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/attachments.d.ts +20 -0
- package/dist/lib/attachments.d.ts.map +1 -0
- package/dist/lib/attachments.js +45 -0
- package/dist/lib/attachments.js.map +1 -0
- package/dist/lib/auth-provider.d.ts.map +1 -1
- package/dist/lib/auth-provider.js +3 -0
- package/dist/lib/auth-provider.js.map +1 -1
- package/dist/lib/errors.d.ts +8 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +25 -9
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/local-file.d.ts +29 -0
- package/dist/lib/local-file.d.ts.map +1 -0
- package/dist/lib/local-file.js +48 -0
- package/dist/lib/local-file.js.map +1 -0
- package/dist/lib/options.d.ts +5 -0
- package/dist/lib/options.d.ts.map +1 -1
- package/dist/lib/options.js +7 -1
- package/dist/lib/options.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 +3 -0
- package/dist/lib/skills/content.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [1.4.0](https://github.com/Doist/comms-cli/compare/v1.3.2...v1.4.0) (2026-05-31)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
- **attachments:** support uploading files on replies and thread creation ([#13](https://github.com/Doist/comms-cli/issues/13)) ([44dc3b7](https://github.com/Doist/comms-cli/commit/44dc3b7c203a5fb6466ffd82ee3de13d05c5bfd4))
|
|
6
|
+
|
|
1
7
|
## [1.3.2](https://github.com/Doist/comms-cli/compare/v1.3.1...v1.3.2) (2026-05-28)
|
|
2
8
|
|
|
3
9
|
### Bug Fixes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/channel/delete.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,KAAK,oBAAoB,GAAG,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnF,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC7F"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { CommsRequestError } from '@doist/comms-sdk';
|
|
2
1
|
import { getCommsClient } from '../../lib/api.js';
|
|
3
2
|
import { CliError } from '../../lib/errors.js';
|
|
4
3
|
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
@@ -21,18 +20,7 @@ export async function deleteChannel(ref, options) {
|
|
|
21
20
|
return;
|
|
22
21
|
}
|
|
23
22
|
const client = await getCommsClient();
|
|
24
|
-
|
|
25
|
-
await client.channels.deleteChannel(channel.id);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
if (error instanceof CommsRequestError && error.httpStatusCode === 403) {
|
|
29
|
-
throw new CliError('FORBIDDEN', `Comms refused to delete "${channel.name}" (id:${channel.id}): 403 Forbidden.`, [
|
|
30
|
-
'Channel deletion is typically restricted to workspace admins',
|
|
31
|
-
'Ask a workspace admin to delete it, or use the Comms web UI',
|
|
32
|
-
]);
|
|
33
|
-
}
|
|
34
|
-
throw error;
|
|
35
|
-
}
|
|
23
|
+
await client.channels.deleteChannel(channel.id);
|
|
36
24
|
if (options.json) {
|
|
37
25
|
console.log(formatJson({ id: channel.id, deleted: true }));
|
|
38
26
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/channel/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/channel/delete.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,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAIlD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,OAA6B;IAC1E,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,QAAQ,CACd,kBAAkB,EAClB,uDAAuD,CAC1D,CAAA;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACpC,OAAM;IACV,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAEjE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,gBAAgB,EAAE;YAC1B,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,QAAQ,OAAO,CAAC,EAAE,GAAG;YAC7C,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC,CAAA;QACF,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1D,OAAM;IACV,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,SAAS,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA;AACxE,CAAC"}
|
|
@@ -9,7 +9,9 @@ export type ConversationWithOptions = PaginatedViewOptions & {
|
|
|
9
9
|
includeGroups?: boolean;
|
|
10
10
|
snippet?: boolean;
|
|
11
11
|
};
|
|
12
|
-
export type ReplyOptions = MutationOptions
|
|
12
|
+
export type ReplyOptions = MutationOptions & {
|
|
13
|
+
file?: string[];
|
|
14
|
+
};
|
|
13
15
|
export type MuteOptions = MutationOptions & {
|
|
14
16
|
minutes?: string;
|
|
15
17
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAOpD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAG9F,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,CAAA;AAE1D,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAOpD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAG9F,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,CAAA;AAE1D,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,WAAW,GAAG,eAAe,CAAA;AAEzC,MAAM,MAAM,wBAAwB,GAAG;IACnC,kBAAkB,CAAC,EAAE,YAAY,CAAA;IACjC,sBAAsB,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,wBAAgB,sBAAsB,CAClC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC,EACrD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAKR;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,CAI1F;AAED,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAEnF;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAatF;AAyBD,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACrB,OAAO,CAAC,wBAAwB,CAAC,CAkBnC;AAED,wBAAsB,yBAAyB,CAC3C,aAAa,EAAE,YAAY,EAAE,EAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAU9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUnC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiIlE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { collect } from '../../lib/options.js';
|
|
1
2
|
import { markConversationDone } from './done.js';
|
|
2
3
|
import { muteConversation } from './mute.js';
|
|
3
4
|
import { replyToConversation } from './reply.js';
|
|
@@ -62,6 +63,7 @@ Examples:
|
|
|
62
63
|
conversation
|
|
63
64
|
.command('reply <conversation-ref> [content]')
|
|
64
65
|
.description('Send a message in a conversation')
|
|
66
|
+
.option('--file <path>', 'Attach a file (repeatable; content optional)', collect, [])
|
|
65
67
|
.option('--dry-run', 'Show what would be sent without sending')
|
|
66
68
|
.option('--json', 'Output sent message as JSON')
|
|
67
69
|
.option('--full', 'Include all fields in JSON output')
|
|
@@ -69,7 +71,8 @@ Examples:
|
|
|
69
71
|
Examples:
|
|
70
72
|
tdc conversation reply 12345 "Hello!"
|
|
71
73
|
echo "Message body" | tdc conversation reply 12345
|
|
72
|
-
tdc conversation reply 12345 "Update" --json
|
|
74
|
+
tdc conversation reply 12345 "Update" --json
|
|
75
|
+
tdc conversation reply 12345 "See attached" --file ./photo.jpg`)
|
|
73
76
|
.action(replyToConversation);
|
|
74
77
|
conversation
|
|
75
78
|
.command('done <conversation-ref>')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IACxD,MAAM,YAAY,GAAG,OAAO;SACvB,OAAO,CAAC,cAAc,CAAC;SACvB,KAAK,CAAC,OAAO,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC,CAAA;IAEtD,YAAY;SACP,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;iCAGqB,CACxB;SACA,MAAM,CAAC,UAAU,CAAC,CAAA;IAEvB,YAAY;SACP,OAAO,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACvD,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAC/C,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAC/C,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;;wDAI4C,CAC/C;SACA,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,YAAY,CAAC,IAAI,EAAE,CAAA;YACnB,OAAM;QACV,CAAC;QACD,OAAO,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEN,YAAY;SACP,OAAO,CAAC,iCAAiC,CAAC;SAC1C,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,kBAAkB,EAAE,+CAA+C,CAAC;SAC3E,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;;0DAI8C,CACjD;SACA,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAErC,YAAY;SACP,OAAO,CAAC,oCAAoC,CAAC;SAC7C,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/conversation/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/reply.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/commands/conversation/reply.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,wBAAsB,mBAAmB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
|
@@ -1,37 +1,60 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { getCommsClient } from '../../lib/api.js';
|
|
3
|
+
import { uploadAttachments, validateAttachmentFiles } from '../../lib/attachments.js';
|
|
2
4
|
import { CliError } from '../../lib/errors.js';
|
|
3
5
|
import { openEditor, readStdin } from '../../lib/input.js';
|
|
4
6
|
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
5
7
|
import { resolveConversationId } from '../../lib/refs.js';
|
|
6
8
|
export async function replyToConversation(ref, content, options) {
|
|
7
9
|
const conversationId = resolveConversationId(ref);
|
|
10
|
+
const files = options.file ?? [];
|
|
11
|
+
const hasFiles = files.length > 0;
|
|
8
12
|
let replyContent = await readStdin();
|
|
9
13
|
if (!replyContent && content) {
|
|
10
14
|
replyContent = content;
|
|
11
15
|
}
|
|
12
|
-
|
|
16
|
+
// A file-only message is allowed: skip the editor prompt and the empty-content guard.
|
|
17
|
+
if (!replyContent && !hasFiles) {
|
|
13
18
|
replyContent = await openEditor();
|
|
14
19
|
}
|
|
15
|
-
if (!replyContent || replyContent.trim() === '') {
|
|
16
|
-
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument
|
|
20
|
+
if ((!replyContent || replyContent.trim() === '') && !hasFiles) {
|
|
21
|
+
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument, pipe via stdin, or attach a file.');
|
|
17
22
|
}
|
|
23
|
+
const messageContent = replyContent ?? '';
|
|
18
24
|
if (options.dryRun) {
|
|
19
|
-
|
|
25
|
+
// Validate attachment paths so the preview fails on a bad path exactly
|
|
26
|
+
// as a real run would (no upload happens in dry-run).
|
|
27
|
+
if (hasFiles) {
|
|
28
|
+
await validateAttachmentFiles(files);
|
|
29
|
+
}
|
|
30
|
+
const preview = messageContent.length > 200 ? `${messageContent.slice(0, 200)}...` : messageContent;
|
|
20
31
|
printDryRun('send message to conversation', {
|
|
21
32
|
Conversation: String(conversationId),
|
|
22
|
-
|
|
33
|
+
Attach: hasFiles ? files.join(', ') : undefined,
|
|
34
|
+
Content: preview || undefined,
|
|
23
35
|
});
|
|
24
36
|
return;
|
|
25
37
|
}
|
|
26
38
|
const client = await getCommsClient();
|
|
39
|
+
// Preflight the target before uploading so an invalid or forbidden
|
|
40
|
+
// conversation fails fast instead of leaving an orphaned upload behind.
|
|
41
|
+
if (hasFiles) {
|
|
42
|
+
await client.conversations.getConversation(conversationId);
|
|
43
|
+
}
|
|
44
|
+
const attachments = hasFiles ? await uploadAttachments(files) : undefined;
|
|
27
45
|
const message = await client.conversationMessages.createMessage({
|
|
28
46
|
conversationId,
|
|
29
|
-
content:
|
|
47
|
+
content: messageContent,
|
|
48
|
+
attachments,
|
|
30
49
|
});
|
|
31
50
|
if (options.json) {
|
|
32
51
|
console.log(formatJson(message, 'message', options.full));
|
|
33
52
|
return;
|
|
34
53
|
}
|
|
35
54
|
console.log(`Message sent: ${message.url}`);
|
|
55
|
+
if (attachments && attachments.length > 0) {
|
|
56
|
+
const names = attachments.map((a) => a.fileName ?? 'file').join(', ');
|
|
57
|
+
console.log(chalk.dim(`Attached: ${names}`));
|
|
58
|
+
}
|
|
36
59
|
}
|
|
37
60
|
//# sourceMappingURL=reply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/commands/conversation/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAGzD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,GAAW,EACX,OAA2B,EAC3B,OAAqB;IAErB,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAEjD,IAAI,YAAY,GAAG,MAAM,SAAS,EAAE,CAAA;IACpC,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;QAC3B,YAAY,GAAG,OAAO,CAAA;IAC1B,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/commands/conversation/reply.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { MutationOptions } from '../../lib/options.js';
|
|
|
2
2
|
type CreateOptions = MutationOptions & {
|
|
3
3
|
notify?: string;
|
|
4
4
|
unarchive?: boolean;
|
|
5
|
+
file?: string[];
|
|
5
6
|
};
|
|
6
7
|
export declare function createThread(channelRef: string, title: string, content: string | undefined, options: CreateOptions): Promise<void>;
|
|
7
8
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/create.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3D,KAAK,aAAa,GAAG,eAAe,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,wBAAsB,YAAY,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Ff"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { getCommsClient } from '../../lib/api.js';
|
|
3
|
+
import { uploadAttachments, validateAttachmentFiles } from '../../lib/attachments.js';
|
|
2
4
|
import { getConfig } from '../../lib/config.js';
|
|
3
5
|
import { CliError } from '../../lib/errors.js';
|
|
4
6
|
import { openEditor, readStdin } from '../../lib/input.js';
|
|
@@ -8,16 +10,20 @@ import { parseNotifyIdRefs, resolveChannelId } from '../../lib/refs.js';
|
|
|
8
10
|
import { formatNotifyLabel, resolveNotifyIds } from './helpers.js';
|
|
9
11
|
export async function createThread(channelRef, title, content, options) {
|
|
10
12
|
const channelId = resolveChannelId(channelRef);
|
|
13
|
+
const files = options.file ?? [];
|
|
14
|
+
const hasFiles = files.length > 0;
|
|
11
15
|
let threadContent = await readStdin();
|
|
12
16
|
if (!threadContent && content) {
|
|
13
17
|
threadContent = content;
|
|
14
18
|
}
|
|
15
|
-
|
|
19
|
+
// A file-only thread is allowed: skip the editor prompt and the empty-content guard.
|
|
20
|
+
if (!threadContent && !hasFiles) {
|
|
16
21
|
threadContent = await openEditor();
|
|
17
22
|
}
|
|
18
|
-
if (!threadContent || threadContent.trim() === '') {
|
|
19
|
-
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument
|
|
23
|
+
if ((!threadContent || threadContent.trim() === '') && !hasFiles) {
|
|
24
|
+
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument, pipe via stdin, or attach a file.');
|
|
20
25
|
}
|
|
26
|
+
const messageContent = threadContent ?? '';
|
|
21
27
|
const allIds = options.notify ? parseNotifyIdRefs(options.notify) : undefined;
|
|
22
28
|
const client = await getCommsClient();
|
|
23
29
|
const channel = await client.channels.getChannel(channelId);
|
|
@@ -29,7 +35,12 @@ export async function createThread(channelRef, title, content, options) {
|
|
|
29
35
|
const config = await getConfig();
|
|
30
36
|
const shouldUnarchive = options.unarchive ?? config.userSettings?.unarchiveNewThreads ?? false;
|
|
31
37
|
if (options.dryRun) {
|
|
32
|
-
|
|
38
|
+
// Validate attachment paths so the preview fails on a bad path exactly
|
|
39
|
+
// as a real run would (no upload happens in dry-run).
|
|
40
|
+
if (hasFiles) {
|
|
41
|
+
await validateAttachmentFiles(files);
|
|
42
|
+
}
|
|
43
|
+
const preview = messageContent.length > 200 ? `${messageContent.slice(0, 200)}...` : messageContent;
|
|
33
44
|
printDryRun('create thread', {
|
|
34
45
|
Channel: `${channel.name} (${channelId})`,
|
|
35
46
|
Title: title,
|
|
@@ -40,16 +51,19 @@ export async function createThread(channelRef, title, content, options) {
|
|
|
40
51
|
? formatNotifyLabel(resolved.notified.groups)
|
|
41
52
|
: undefined,
|
|
42
53
|
Unarchive: shouldUnarchive ? 'yes' : undefined,
|
|
43
|
-
|
|
54
|
+
Attach: hasFiles ? files.join(', ') : undefined,
|
|
55
|
+
Content: preview || undefined,
|
|
44
56
|
});
|
|
45
57
|
return;
|
|
46
58
|
}
|
|
59
|
+
const attachments = hasFiles ? await uploadAttachments(files) : undefined;
|
|
47
60
|
const thread = await client.threads.createThread({
|
|
48
61
|
channelId,
|
|
49
62
|
title,
|
|
50
|
-
content:
|
|
63
|
+
content: messageContent,
|
|
51
64
|
recipients: resolved?.recipients,
|
|
52
65
|
groups: resolved?.groups,
|
|
66
|
+
attachments,
|
|
53
67
|
});
|
|
54
68
|
if (shouldUnarchive) {
|
|
55
69
|
try {
|
|
@@ -66,5 +80,9 @@ export async function createThread(channelRef, title, content, options) {
|
|
|
66
80
|
return;
|
|
67
81
|
}
|
|
68
82
|
console.log(`Thread created: ${thread.url}`);
|
|
83
|
+
if (attachments && attachments.length > 0) {
|
|
84
|
+
const names = attachments.map((a) => a.fileName ?? 'file').join(', ');
|
|
85
|
+
console.log(chalk.dim(`Attached: ${names}`));
|
|
86
|
+
}
|
|
69
87
|
}
|
|
70
88
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/thread/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAuB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/thread/create.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;AAY3C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4K5D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Option } from 'commander';
|
|
2
2
|
import { withUnvalidatedChoices } from '../../lib/completion.js';
|
|
3
|
+
import { collect } from '../../lib/options.js';
|
|
3
4
|
import { createThread } from './create.js';
|
|
4
5
|
import { deleteThread } from './delete.js';
|
|
5
6
|
import { markThreadDone } from './mutate.js';
|
|
@@ -41,6 +42,7 @@ Examples:
|
|
|
41
42
|
.addOption(withUnvalidatedChoices(new Option('--notify <recipients>', 'Notification recipients: EVERYONE, EVERYONE_IN_THREAD, or comma-separated user IDs (default: EVERYONE_IN_THREAD)'), ['EVERYONE', 'EVERYONE_IN_THREAD']))
|
|
42
43
|
.option('--close', 'Close the thread after replying')
|
|
43
44
|
.option('--reopen', 'Reopen the thread after replying')
|
|
45
|
+
.option('--file <path>', 'Attach a file (repeatable; content optional)', collect, [])
|
|
44
46
|
.option('--dry-run', 'Show what would be posted without posting')
|
|
45
47
|
.option('--json', 'Output posted comment as JSON')
|
|
46
48
|
.option('--full', 'Include all fields in JSON output')
|
|
@@ -48,7 +50,9 @@ Examples:
|
|
|
48
50
|
Examples:
|
|
49
51
|
tdc thread reply 12345 "Sounds good!"
|
|
50
52
|
echo "Long reply" | tdc thread reply 12345
|
|
51
|
-
tdc thread reply 12345 "Done" --close --json
|
|
53
|
+
tdc thread reply 12345 "Done" --close --json
|
|
54
|
+
tdc thread reply 12345 "See attached" --file ./diagram.png
|
|
55
|
+
tdc thread reply 12345 --file ./a.png --file ./b.pdf`)
|
|
52
56
|
.action(replyToThread);
|
|
53
57
|
thread
|
|
54
58
|
.command('create <channel-ref> <title> [content]')
|
|
@@ -56,6 +60,7 @@ Examples:
|
|
|
56
60
|
.option('--notify <recipients>', 'Comma-separated user IDs to notify')
|
|
57
61
|
.option('--unarchive', 'Unarchive after creation so the thread appears in your Inbox (overrides userSettings.unarchiveNewThreads when false)')
|
|
58
62
|
.option('--no-unarchive', 'Skip unarchive even if userSettings.unarchiveNewThreads is true')
|
|
63
|
+
.option('--file <path>', 'Attach a file (repeatable; content optional)', collect, [])
|
|
59
64
|
.option('--dry-run', 'Show what would be posted without posting')
|
|
60
65
|
.option('--json', 'Output created thread as JSON')
|
|
61
66
|
.option('--full', 'Include all fields in JSON output')
|
|
@@ -64,7 +69,8 @@ Examples:
|
|
|
64
69
|
tdc thread create 12345 "Weekly update" "Here's what happened..."
|
|
65
70
|
echo "Body from stdin" | tdc thread create id:12345 "Title"
|
|
66
71
|
tdc thread create 12345 "Title" "Body" --notify 67890,11111 --json
|
|
67
|
-
tdc thread create 12345 "Title" "Body" --unarchive
|
|
72
|
+
tdc thread create 12345 "Title" "Body" --unarchive
|
|
73
|
+
tdc thread create 12345 "Title" --file ./report.pdf`)
|
|
68
74
|
.action(createThread);
|
|
69
75
|
thread
|
|
70
76
|
.command('done <thread-ref>')
|
|
@@ -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,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEtC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAA;IAEzE,MAAM;SACD,OAAO,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACjD,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;SACxD,MAAM,CAAC,UAAU,EAAE,4DAA4D,CAAC;SAChF,MAAM,CAAC,eAAe,EAAE,2DAA2D,CAAC;SACpF,MAAM,CAAC,aAAa,EAAE,oCAAoC,CAAC;SAC3D,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAC/C,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAC/C,MAAM,CAAC,OAAO,EAAE,uCAAuC,CAAC;SACxD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP;;;;0CAI8B,CACjC;SACA,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,MAAM,CAAC,IAAI,EAAE,CAAA;YACb,OAAM;QACV,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEN,MAAM;SACD,OAAO,CAAC,8BAA8B,CAAC;SACvC,WAAW,CAAC,4BAA4B,CAAC;SACzC,SAAS,CACN,sBAAsB,CAClB,IAAI,MAAM,CACN,uBAAuB,EACvB,kHAAkH,CACrH,EACD,CAAC,UAAU,EAAE,oBAAoB,CAAC,CACrC,CACJ;SACA,MAAM,CAAC,SAAS,EAAE,iCAAiC,CAAC;SACpD,MAAM,CAAC,UAAU,EAAE,kCAAkC,CAAC;SACtD,MAAM,CAAC,WAAW,EAAE,2CAA2C,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,+BAA+B,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,WAAW,CACR,OAAO,EACP
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/thread/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/reply.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reply.d.ts","sourceRoot":"","sources":["../../../src/commands/thread/reply.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3D,KAAK,YAAY,GAAG,eAAe,GAAG;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED,wBAAsB,aAAa,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,YAAY,GACtB,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { getCommsClient } from '../../lib/api.js';
|
|
3
|
+
import { uploadAttachments, validateAttachmentFiles } from '../../lib/attachments.js';
|
|
2
4
|
import { CliError } from '../../lib/errors.js';
|
|
3
5
|
import { openEditor, readStdin } from '../../lib/input.js';
|
|
4
6
|
import { formatJson, printDryRun } from '../../lib/output.js';
|
|
@@ -10,16 +12,23 @@ export async function replyToThread(ref, content, options) {
|
|
|
10
12
|
if (options.close && options.reopen) {
|
|
11
13
|
throw new CliError('CONFLICTING_OPTIONS', 'Cannot use --close and --reopen together.');
|
|
12
14
|
}
|
|
15
|
+
const files = options.file ?? [];
|
|
16
|
+
const hasFiles = files.length > 0;
|
|
17
|
+
if (hasFiles && (options.close || options.reopen)) {
|
|
18
|
+
throw new CliError('CONFLICTING_OPTIONS', 'Cannot attach files with --close or --reopen. Post the attachment separately.');
|
|
19
|
+
}
|
|
13
20
|
let replyContent = await readStdin();
|
|
14
21
|
if (!replyContent && content) {
|
|
15
22
|
replyContent = content;
|
|
16
23
|
}
|
|
17
|
-
|
|
24
|
+
// A file-only reply is allowed: skip the editor prompt and the empty-content guard.
|
|
25
|
+
if (!replyContent && !hasFiles) {
|
|
18
26
|
replyContent = await openEditor();
|
|
19
27
|
}
|
|
20
|
-
if (!replyContent || replyContent.trim() === '') {
|
|
21
|
-
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument
|
|
28
|
+
if ((!replyContent || replyContent.trim() === '') && !hasFiles) {
|
|
29
|
+
throw new CliError('MISSING_CONTENT', 'No content provided. Pass content as an argument, pipe via stdin, or attach a file.');
|
|
22
30
|
}
|
|
31
|
+
const messageContent = replyContent ?? '';
|
|
23
32
|
const notifyValue = options.notify ?? 'EVERYONE_IN_THREAD';
|
|
24
33
|
const isSpecialRecipient = notifyValue === 'EVERYONE' || notifyValue === 'EVERYONE_IN_THREAD';
|
|
25
34
|
const client = await getCommsClient();
|
|
@@ -38,8 +47,13 @@ export async function replyToThread(ref, content, options) {
|
|
|
38
47
|
const action = options.close ? 'close' : options.reopen ? 'reopen' : undefined;
|
|
39
48
|
const actionLabel = action === 'close' ? 'close' : action === 'reopen' ? 'reopen' : undefined;
|
|
40
49
|
if (options.dryRun) {
|
|
50
|
+
// Validate attachment paths so the preview fails on a bad path exactly
|
|
51
|
+
// as a real run would (no upload happens in dry-run).
|
|
52
|
+
if (hasFiles) {
|
|
53
|
+
await validateAttachmentFiles(files);
|
|
54
|
+
}
|
|
41
55
|
const actionSuffix = actionLabel ? ` and ${actionLabel} it` : '';
|
|
42
|
-
const preview =
|
|
56
|
+
const preview = messageContent.length > 200 ? `${messageContent.slice(0, 200)}...` : messageContent;
|
|
43
57
|
printDryRun(`post comment to thread${actionSuffix}`, {
|
|
44
58
|
Thread: `${thread.title} (${threadId})`,
|
|
45
59
|
Notify: isSpecialRecipient ? notifyValue : undefined,
|
|
@@ -49,30 +63,39 @@ export async function replyToThread(ref, content, options) {
|
|
|
49
63
|
'Notify groups': !isSpecialRecipient && resolved && resolved.notified.groups.length > 0
|
|
50
64
|
? formatNotifyLabel(resolved.notified.groups)
|
|
51
65
|
: undefined,
|
|
52
|
-
|
|
66
|
+
Attach: hasFiles ? files.join(', ') : undefined,
|
|
67
|
+
Content: preview || undefined,
|
|
53
68
|
});
|
|
54
69
|
return;
|
|
55
70
|
}
|
|
71
|
+
const attachments = hasFiles ? await uploadAttachments(files) : undefined;
|
|
56
72
|
const groupsPayload = resolved?.groups ? { groups: resolved.groups } : {};
|
|
73
|
+
// Type-checked against the SDK contract — notably `attachments`. Only `recipients`
|
|
74
|
+
// needs the assertion below: it carries the EVERYONE / EVERYONE_IN_THREAD sentinels
|
|
75
|
+
// the SDK type doesn't model.
|
|
76
|
+
const createCommentArgs = {
|
|
77
|
+
threadId,
|
|
78
|
+
content: messageContent,
|
|
79
|
+
...groupsPayload,
|
|
80
|
+
...(attachments ? { attachments } : {}),
|
|
81
|
+
};
|
|
57
82
|
const comment = action === 'close'
|
|
58
83
|
? await client.threads.closeThread({
|
|
59
84
|
id: threadId,
|
|
60
|
-
content:
|
|
85
|
+
content: messageContent,
|
|
61
86
|
recipients,
|
|
62
87
|
...groupsPayload,
|
|
63
88
|
})
|
|
64
89
|
: action === 'reopen'
|
|
65
90
|
? await client.threads.reopenThread({
|
|
66
91
|
id: threadId,
|
|
67
|
-
content:
|
|
92
|
+
content: messageContent,
|
|
68
93
|
recipients,
|
|
69
94
|
...groupsPayload,
|
|
70
95
|
})
|
|
71
96
|
: await client.comments.createComment({
|
|
72
|
-
|
|
73
|
-
content: replyContent,
|
|
97
|
+
...createCommentArgs,
|
|
74
98
|
recipients,
|
|
75
|
-
...groupsPayload,
|
|
76
99
|
});
|
|
77
100
|
if (options.json) {
|
|
78
101
|
const output = resolved ? { ...comment, notified: resolved.notified } : comment;
|
|
@@ -81,5 +104,9 @@ export async function replyToThread(ref, content, options) {
|
|
|
81
104
|
}
|
|
82
105
|
const suffix = actionLabel ? ` (thread ${actionLabel === 'close' ? 'closed' : 'reopened'})` : '';
|
|
83
106
|
console.log(`Comment posted${suffix}: ${comment.url}`);
|
|
107
|
+
if (attachments && attachments.length > 0) {
|
|
108
|
+
const names = attachments.map((a) => a.fileName ?? 'file').join(', ');
|
|
109
|
+
console.log(chalk.dim(`Attached: ${names}`));
|
|
110
|
+
}
|
|
84
111
|
}
|
|
85
112
|
//# sourceMappingURL=reply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/commands/thread/reply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAuB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"reply.js","sourceRoot":"","sources":["../../../src/commands/thread/reply.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EACR,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EACrB,MAAM,kBAAkB,CAAA;AAgPzB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAIhE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,CAMxD;AAKD,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAO5D;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAsB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B/E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAqBD,wBAAsB,iBAAiB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB9B;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAG9E;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAG9E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGjB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGjB;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAsB,eAAe,CACjC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,oBAAoB,CACtC,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzF;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA"}
|
package/dist/lib/api.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CommsApi, } from '@doist/comms-sdk';
|
|
2
2
|
import { getApiToken } from './auth.js';
|
|
3
3
|
import { getConfig, updateConfig } from './config.js';
|
|
4
|
-
import { CliError, isInsufficientScope } from './errors.js';
|
|
4
|
+
import { CliError, isForbidden, isInsufficientScope } from './errors.js';
|
|
5
5
|
import { ensureWriteAllowed, isMutatingMethod } from './permissions.js';
|
|
6
6
|
import { getProgressTracker } from './progress.js';
|
|
7
7
|
import { withSpinner } from './spinner.js';
|
|
@@ -79,6 +79,8 @@ const API_SPINNER_MESSAGES = {
|
|
|
79
79
|
'inbox.getInbox': { text: 'Loading inbox...', color: 'blue' },
|
|
80
80
|
'inbox.archiveThread': { text: 'Archiving thread...', color: 'yellow' },
|
|
81
81
|
'inbox.unarchiveThread': { text: 'Unarchiving thread...', color: 'yellow' },
|
|
82
|
+
// Attachment operations
|
|
83
|
+
'attachments.upload': { text: 'Uploading file...', color: 'blue' },
|
|
82
84
|
};
|
|
83
85
|
function createSpinnerWrappedApi(api) {
|
|
84
86
|
return new Proxy(api, {
|
|
@@ -154,6 +156,12 @@ function wrapResult(result, progressTracker, spinnerConfig) {
|
|
|
154
156
|
if (isInsufficientScope(error)) {
|
|
155
157
|
throw new CliError('INSUFFICIENT_SCOPE', 'This action requires permissions your current token does not have.', ['Run `tdc auth login` to re-authenticate with the required scopes']);
|
|
156
158
|
}
|
|
159
|
+
if (isForbidden(error)) {
|
|
160
|
+
throw new CliError('FORBIDDEN', 'Comms refused this action: 403 Forbidden.', [
|
|
161
|
+
'You may not have permission for this action',
|
|
162
|
+
'Contact your workspace admin, or re-authenticate with `tdc auth login` if your token looks wrong',
|
|
163
|
+
]);
|
|
164
|
+
}
|
|
157
165
|
throw error;
|
|
158
166
|
});
|
|
159
167
|
if (spinnerConfig) {
|