@parall/cli 1.14.5 → 1.15.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.
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAsGpD"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAuGpD"}
@@ -1,5 +1,5 @@
1
1
  import { resolveCredentials } from '../lib/client.js';
2
- import { printJson, printError } from '../lib/output.js';
2
+ import { printJson, printError, printRefHint, stripPrllScheme } from '../lib/output.js';
3
3
  export function registerChatCommands(program) {
4
4
  const chats = program.command('chats').description('Manage chats');
5
5
  chats
@@ -27,7 +27,7 @@ export function registerChatCommands(program) {
27
27
  .action(async (chatId) => {
28
28
  try {
29
29
  const { client, orgId } = resolveCredentials();
30
- const result = await client.getChat(orgId, chatId);
30
+ const result = await client.getChat(orgId, stripPrllScheme(chatId));
31
31
  printJson(result);
32
32
  }
33
33
  catch (err) {
@@ -46,11 +46,12 @@ export function registerChatCommands(program) {
46
46
  const { client, orgId } = resolveCredentials();
47
47
  const result = await client.createChat(orgId, {
48
48
  type: opts.type,
49
- member_ids: opts.memberIds.split(',').map((s) => s.trim()).filter(Boolean),
49
+ member_ids: opts.memberIds.split(',').map((s) => stripPrllScheme(s.trim())).filter(Boolean),
50
50
  name: opts.name,
51
51
  description: opts.description,
52
52
  });
53
53
  printJson(result);
54
+ printRefHint(result.id);
54
55
  }
55
56
  catch (err) {
56
57
  printError(err);
@@ -64,7 +65,7 @@ export function registerChatCommands(program) {
64
65
  .action(async (chatId) => {
65
66
  try {
66
67
  const { client, orgId } = resolveCredentials();
67
- const result = await client.getChatMembers(orgId, chatId);
68
+ const result = await client.getChatMembers(orgId, stripPrllScheme(chatId));
68
69
  printJson(result);
69
70
  }
70
71
  catch (err) {
@@ -80,7 +81,7 @@ export function registerChatCommands(program) {
80
81
  .action(async (chatId, opts) => {
81
82
  try {
82
83
  const { client, orgId } = resolveCredentials();
83
- await client.addChatMember(orgId, chatId, opts.userId, opts.role);
84
+ await client.addChatMember(orgId, stripPrllScheme(chatId), stripPrllScheme(opts.userId), opts.role);
84
85
  printJson({ ok: true });
85
86
  }
86
87
  catch (err) {
@@ -95,7 +96,7 @@ export function registerChatCommands(program) {
95
96
  .action(async (chatId, opts) => {
96
97
  try {
97
98
  const { client, orgId } = resolveCredentials();
98
- await client.removeChatMember(orgId, chatId, opts.userId);
99
+ await client.removeChatMember(orgId, stripPrllScheme(chatId), stripPrllScheme(opts.userId));
99
100
  printJson({ ok: true });
100
101
  }
101
102
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"dm.d.ts","sourceRoot":"","sources":["../../src/commands/dm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QA4BlD"}
1
+ {"version":3,"file":"dm.d.ts","sourceRoot":"","sources":["../../src/commands/dm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QA6BlD"}
@@ -1,10 +1,11 @@
1
1
  import { resolveCredentials, resolveRuntimeContext } from '../lib/client.js';
2
- import { printJson, printError } from '../lib/output.js';
2
+ import { printJson, printError, printRefHint, stripPrllScheme } from '../lib/output.js';
3
3
  /**
4
4
  * Resolve a name-or-id argument to a user ID.
5
5
  * If it starts with "usr_", treat as ID. Otherwise, search org members by display_name.
6
6
  */
7
7
  async function resolveUserId(client, orgId, nameOrId) {
8
+ nameOrId = stripPrllScheme(nameOrId);
8
9
  if (nameOrId.startsWith('usr_'))
9
10
  return nameOrId;
10
11
  const members = await client.getOrgMembers(orgId);
@@ -43,6 +44,7 @@ export function registerDMCommands(program) {
43
44
  req.agent_step_id = ctx.stepId;
44
45
  const result = await client.sendDirectMessage(orgId, req);
45
46
  printJson(result);
47
+ printRefHint(result.message.id, 'Sent');
46
48
  }
47
49
  catch (err) {
48
50
  printError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAiGvD"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/commands/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAkGvD"}
@@ -1,5 +1,5 @@
1
1
  import { resolveCredentials, resolveRuntimeContext } from '../lib/client.js';
2
- import { printJson, printError } from '../lib/output.js';
2
+ import { printJson, printError, printRefHint, stripPrllScheme } from '../lib/output.js';
3
3
  export function registerMessageCommands(program) {
4
4
  const messages = program.command('messages').description('Manage messages');
5
5
  messages
@@ -20,10 +20,10 @@ export function registerMessageCommands(program) {
20
20
  if (opts.after !== undefined)
21
21
  params.after = opts.after;
22
22
  if (opts.threadRootId !== undefined)
23
- params.thread_root_id = opts.threadRootId;
23
+ params.thread_root_id = stripPrllScheme(opts.threadRootId);
24
24
  if (opts.topLevel)
25
25
  params.top_level = true;
26
- const result = await client.getMessages(orgId, chatId, params);
26
+ const result = await client.getMessages(orgId, stripPrllScheme(chatId), params);
27
27
  printJson(result);
28
28
  }
29
29
  catch (err) {
@@ -37,7 +37,7 @@ export function registerMessageCommands(program) {
37
37
  .action(async (messageId) => {
38
38
  try {
39
39
  const { client } = resolveCredentials();
40
- const result = await client.getMessage(messageId);
40
+ const result = await client.getMessage(stripPrllScheme(messageId));
41
41
  printJson(result);
42
42
  }
43
43
  catch (err) {
@@ -55,7 +55,7 @@ export function registerMessageCommands(program) {
55
55
  try {
56
56
  const { client, orgId } = resolveCredentials();
57
57
  const ctx = resolveRuntimeContext();
58
- const chatId = chatIdArg?.trim() || ctx.chatId;
58
+ const chatId = stripPrllScheme(chatIdArg?.trim() || ctx.chatId || '');
59
59
  if (!chatId) {
60
60
  printError(new Error('Chat ID required — provide as argument or set PRLL_CHAT_ID'));
61
61
  return;
@@ -65,13 +65,14 @@ export function registerMessageCommands(program) {
65
65
  content: { text: opts.text },
66
66
  };
67
67
  if (opts.threadRootId !== undefined)
68
- req.thread_root_id = opts.threadRootId;
68
+ req.thread_root_id = stripPrllScheme(opts.threadRootId);
69
69
  if (opts.reply === false)
70
70
  req.hints = { no_reply: true };
71
71
  if (ctx.stepId)
72
72
  req.agent_step_id = ctx.stepId;
73
73
  const result = await client.sendMessage(orgId, chatId, req);
74
74
  printJson(result);
75
+ printRefHint(result.id, 'Sent');
75
76
  }
76
77
  catch (err) {
77
78
  printError(err);
@@ -92,7 +93,7 @@ export function registerMessageCommands(program) {
92
93
  params.before = opts.before;
93
94
  if (opts.after !== undefined)
94
95
  params.after = opts.after;
95
- const result = await client.getMessageReplies(messageId, params);
96
+ const result = await client.getMessageReplies(stripPrllScheme(messageId), params);
96
97
  printJson(result);
97
98
  }
98
99
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA6OpD"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAgPpD"}
@@ -1,5 +1,5 @@
1
1
  import { resolveCredentials } from '../lib/client.js';
2
- import { printJson, printError } from '../lib/output.js';
2
+ import { printJson, printError, printRefHint, stripPrllScheme } from '../lib/output.js';
3
3
  function stripUndefined(obj) {
4
4
  return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
5
5
  }
@@ -23,9 +23,9 @@ export function registerTaskCommands(program) {
23
23
  const params = stripUndefined({
24
24
  status: opts.status,
25
25
  priority: opts.priority,
26
- assignee_id: opts.assigneeId,
27
- project_id: opts.projectId,
28
- parent_id: opts.parentId,
26
+ assignee_id: opts.assigneeId ? stripPrllScheme(opts.assigneeId) : undefined,
27
+ project_id: opts.projectId ? stripPrllScheme(opts.projectId) : undefined,
28
+ parent_id: opts.parentId ? stripPrllScheme(opts.parentId) : undefined,
29
29
  limit: Number(opts.limit),
30
30
  cursor: opts.cursor,
31
31
  sort: opts.sort,
@@ -57,13 +57,14 @@ export function registerTaskCommands(program) {
57
57
  description: opts.description,
58
58
  status: opts.status,
59
59
  priority: opts.priority,
60
- assignee_id: opts.assigneeId,
61
- project_id: opts.projectId,
62
- parent_id: opts.parentId,
63
- source_chat_id: opts.sourceChatId,
60
+ assignee_id: opts.assigneeId ? stripPrllScheme(opts.assigneeId) : undefined,
61
+ project_id: opts.projectId ? stripPrllScheme(opts.projectId) : undefined,
62
+ parent_id: opts.parentId ? stripPrllScheme(opts.parentId) : undefined,
63
+ source_chat_id: opts.sourceChatId ? stripPrllScheme(opts.sourceChatId) : undefined,
64
64
  });
65
65
  const result = await client.createTask(orgId, data);
66
66
  printJson(result);
67
+ printRefHint(result.id);
67
68
  }
68
69
  catch (err) {
69
70
  printError(err);
@@ -76,7 +77,7 @@ export function registerTaskCommands(program) {
76
77
  .action(async (taskId) => {
77
78
  try {
78
79
  const { client, orgId } = resolveCredentials();
79
- const result = await client.getTask(orgId, taskId);
80
+ const result = await client.getTask(orgId, stripPrllScheme(taskId));
80
81
  printJson(result);
81
82
  }
82
83
  catch (err) {
@@ -97,15 +98,16 @@ export function registerTaskCommands(program) {
97
98
  .option('--sort-order <n>', 'Sort order')
98
99
  .action(async (taskId, opts) => {
99
100
  try {
101
+ taskId = stripPrllScheme(taskId);
100
102
  const { client, orgId } = resolveCredentials();
101
103
  const data = stripUndefined({
102
104
  title: opts.title,
103
105
  status: opts.status,
104
106
  priority: opts.priority,
105
- assignee_id: opts.assigneeId,
107
+ assignee_id: opts.assigneeId ? stripPrllScheme(opts.assigneeId) : undefined,
106
108
  description: opts.description,
107
- project_id: opts.projectId,
108
- parent_id: opts.parentId,
109
+ project_id: opts.projectId ? stripPrllScheme(opts.projectId) : undefined,
110
+ parent_id: opts.parentId ? stripPrllScheme(opts.parentId) : undefined,
109
111
  sort_order: opts.sortOrder !== undefined ? Number(opts.sortOrder) : undefined,
110
112
  });
111
113
  if (Object.keys(data).length === 0) {
@@ -125,7 +127,7 @@ export function registerTaskCommands(program) {
125
127
  .action(async (taskId) => {
126
128
  try {
127
129
  const { client, orgId } = resolveCredentials();
128
- await client.deleteTask(orgId, taskId);
130
+ await client.deleteTask(orgId, stripPrllScheme(taskId));
129
131
  printJson({ ok: true });
130
132
  }
131
133
  catch (err) {
@@ -139,7 +141,7 @@ export function registerTaskCommands(program) {
139
141
  .action(async (taskId) => {
140
142
  try {
141
143
  const { client, orgId } = resolveCredentials();
142
- const result = await client.getSubtasks(orgId, taskId);
144
+ const result = await client.getSubtasks(orgId, stripPrllScheme(taskId));
143
145
  printJson(result);
144
146
  }
145
147
  catch (err) {
@@ -163,7 +165,7 @@ export function registerTaskCommands(program) {
163
165
  cursor: opts.cursor,
164
166
  order: opts.order,
165
167
  });
166
- const result = await client.getTaskComments(orgId, taskId, params);
168
+ const result = await client.getTaskComments(orgId, stripPrllScheme(taskId), params);
167
169
  printJson(result);
168
170
  }
169
171
  catch (err) {
@@ -178,8 +180,9 @@ export function registerTaskCommands(program) {
178
180
  .action(async (taskId, opts) => {
179
181
  try {
180
182
  const { client, orgId } = resolveCredentials();
181
- const result = await client.createTaskComment(orgId, taskId, { body: opts.body });
183
+ const result = await client.createTaskComment(orgId, stripPrllScheme(taskId), { body: opts.body });
182
184
  printJson(result);
185
+ printRefHint(result.id);
183
186
  }
184
187
  catch (err) {
185
188
  printError(err);
@@ -194,7 +197,7 @@ export function registerTaskCommands(program) {
194
197
  .action(async (taskId, commentId, opts) => {
195
198
  try {
196
199
  const { client, orgId } = resolveCredentials();
197
- const result = await client.updateTaskComment(orgId, taskId, commentId, { body: opts.body });
200
+ const result = await client.updateTaskComment(orgId, stripPrllScheme(taskId), stripPrllScheme(commentId), { body: opts.body });
198
201
  printJson(result);
199
202
  }
200
203
  catch (err) {
@@ -209,7 +212,7 @@ export function registerTaskCommands(program) {
209
212
  .action(async (taskId, commentId) => {
210
213
  try {
211
214
  const { client, orgId } = resolveCredentials();
212
- await client.deleteTaskComment(orgId, taskId, commentId);
215
+ await client.deleteTaskComment(orgId, stripPrllScheme(taskId), stripPrllScheme(commentId));
213
216
  printJson({ ok: true });
214
217
  }
215
218
  catch (err) {
@@ -230,7 +233,7 @@ export function registerTaskCommands(program) {
230
233
  limit: Number(opts.limit),
231
234
  cursor: opts.cursor,
232
235
  });
233
- const result = await client.getTaskActivities(orgId, taskId, params);
236
+ const result = await client.getTaskActivities(orgId, stripPrllScheme(taskId), params);
234
237
  printJson(result);
235
238
  }
236
239
  catch (err) {
@@ -1,3 +1,13 @@
1
1
  export declare function printJson(data: unknown): void;
2
+ /**
3
+ * Print a prll:// URI hint to stderr after a mutation command.
4
+ * Does not affect stdout JSON, but LLMs see it and can copy-paste the URI.
5
+ */
6
+ export declare function printRefHint(entityId: string, action?: string): void;
7
+ /**
8
+ * Strip the `prll://` scheme prefix from an entity ID if present.
9
+ * Allows CLI commands to accept both raw IDs (`tsk_abc`) and URIs (`prll://tsk_abc`).
10
+ */
11
+ export declare function stripPrllScheme(idOrUri: string): string;
2
12
  export declare function printError(err: unknown): never;
3
13
  //# sourceMappingURL=output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAW9C"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAY,GAAG,IAAI,CAEvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAW9C"}
@@ -2,6 +2,20 @@ import { ApiError } from '@parall/sdk';
2
2
  export function printJson(data) {
3
3
  console.log(JSON.stringify(data, null, 2));
4
4
  }
5
+ /**
6
+ * Print a prll:// URI hint to stderr after a mutation command.
7
+ * Does not affect stdout JSON, but LLMs see it and can copy-paste the URI.
8
+ */
9
+ export function printRefHint(entityId, action = 'Created') {
10
+ console.error(`${action}: prll://${entityId}`);
11
+ }
12
+ /**
13
+ * Strip the `prll://` scheme prefix from an entity ID if present.
14
+ * Allows CLI commands to accept both raw IDs (`tsk_abc`) and URIs (`prll://tsk_abc`).
15
+ */
16
+ export function stripPrllScheme(idOrUri) {
17
+ return idOrUri.startsWith('prll://') ? idOrUri.slice(7) : idOrUri;
18
+ }
5
19
  export function printError(err) {
6
20
  let msg;
7
21
  if (err instanceof ApiError) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/cli",
3
- "version": "1.14.5",
3
+ "version": "1.15.1",
4
4
  "description": "CLI client for Parall — universal agent & human access to Parall API",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -30,7 +30,7 @@
30
30
  "@modelcontextprotocol/sdk": "1.27.1",
31
31
  "commander": "^13.0.0",
32
32
  "zod": "^4.3.6",
33
- "@parall/sdk": "1.14.5"
33
+ "@parall/sdk": "1.15.1"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^22.0.0",