@parall/cli 1.20.1 → 1.21.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.
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAicnD"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA8bnD"}
@@ -2,7 +2,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  import * as z from 'zod/v4';
4
4
  import { resolveCredentials, resolveRuntimeContext } from '../lib/client.js';
5
- import { getWikiBlob, getWikiChangesetDiff, getWikiOutline, backfillProposedChangeset, queryWiki, getWikiSection, getWikiTree, getWikiWorkspaceDiff, getWikiWorkspaceStatus, listWikis, proposeWikiChangeset, searchWiki, } from '../lib/wiki.js';
5
+ import { getWikiBlob, getWikiChangesetDiff, getWikiOutline, queryWiki, getWikiSection, getWikiTree, getWikiWorkspaceDiff, getWikiWorkspaceStatus, listWikis, proposeWikiChangeset, searchWiki, } from '../lib/wiki.js';
6
6
  export function registerMcpCommands(program) {
7
7
  program
8
8
  .command('mcp')
@@ -428,9 +428,6 @@ export function registerMcpCommands(program) {
428
428
  sourceMessageId: sourceMessageId ?? runtime.triggerMessageId,
429
429
  sourceRunId: sourceRunId ?? runtime.sessionId,
430
430
  });
431
- await backfillProposedChangeset(ctx, runtime, result.changeset, {
432
- includeComment: !changesetId,
433
- });
434
431
  return {
435
432
  content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
436
433
  structuredContent: result,
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerScheduleCommands(program: Command): void;
3
+ //# sourceMappingURL=schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/commands/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,QAmRxD"}
@@ -0,0 +1,266 @@
1
+ import { resolveCredentials } from '../lib/client.js';
2
+ import { printJson, printError, printRefHint, stripPrllScheme } from '../lib/output.js';
3
+ function stripUndefined(obj) {
4
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
5
+ }
6
+ export function registerScheduleCommands(program) {
7
+ const schedules = program
8
+ .command('schedules')
9
+ .description('Manage schedules (platform time triggers)');
10
+ schedules
11
+ .command('list')
12
+ .description('List schedules in the organization')
13
+ .option('--attached-to <uri>', 'Filter by attached prll:// URI (exact match)')
14
+ .option('--target-id <id>', 'Filter by target user ID')
15
+ .option('--creator-id <id>', 'Filter by creator user ID')
16
+ .option('--status <statuses>', 'Comma-separated statuses (e.g. active,paused)')
17
+ .option('--limit <n>', 'Maximum number of schedules to return', '50')
18
+ .option('--cursor <cursor>', 'Pagination cursor')
19
+ .action(async (opts) => {
20
+ try {
21
+ const { client, orgId } = resolveCredentials();
22
+ const params = stripUndefined({
23
+ attached_to: opts.attachedTo,
24
+ target_id: opts.targetId ? stripPrllScheme(opts.targetId) : undefined,
25
+ creator_id: opts.creatorId ? stripPrllScheme(opts.creatorId) : undefined,
26
+ status: opts.status,
27
+ limit: Number(opts.limit),
28
+ cursor: opts.cursor,
29
+ });
30
+ const result = await client.listSchedules(orgId, params);
31
+ printJson(result);
32
+ }
33
+ catch (err) {
34
+ printError(err);
35
+ }
36
+ });
37
+ schedules
38
+ .command('create')
39
+ .description('Create a schedule. Provide exactly one of --cron-expr, --interval-seconds, or --run-at.')
40
+ .requiredOption('--name <name>', 'Schedule name')
41
+ .requiredOption('--description <text>', 'Message delivered to the target on fire')
42
+ .requiredOption('--target-id <id>', 'Target user ID (agent or human)')
43
+ .option('--spec-type <type>', 'cron | interval | one_shot (inferred from spec flags if omitted)')
44
+ .option('--cron-expr <expr>', '5-field cron expression')
45
+ .option('--interval-seconds <n>', 'Interval in seconds (>= 60)')
46
+ .option('--run-at <ts>', 'One-shot fire time (RFC3339)')
47
+ .option('--timezone <tz>', 'IANA timezone (default UTC)')
48
+ .option('--attached-to-uri <uri>', 'Attach to a prll:// resource URI')
49
+ .option('--start-at <ts>', 'Earliest fire time (RFC3339)')
50
+ .option('--end-at <ts>', 'Latest fire time (RFC3339)')
51
+ .option('--max-runs <n>', 'Maximum successful fires before auto-complete')
52
+ .option('--catchup-window-seconds <n>', 'Missed-fire window (seconds)')
53
+ .action(async (opts) => {
54
+ try {
55
+ const { client, orgId } = resolveCredentials();
56
+ const specFlagCount = [opts.cronExpr, opts.intervalSeconds, opts.runAt].filter((v) => v !== undefined).length;
57
+ if (!opts.specType && specFlagCount !== 1) {
58
+ printError(new Error('Provide exactly one of --cron-expr / --interval-seconds / --run-at (or pass --spec-type with the matching field).'));
59
+ return;
60
+ }
61
+ const specType = opts.specType ??
62
+ (opts.cronExpr ? 'cron' : opts.intervalSeconds ? 'interval' : opts.runAt ? 'one_shot' : undefined);
63
+ if (!specType) {
64
+ printError(new Error('spec_type could not be inferred. Pass --spec-type or one of --cron-expr / --interval-seconds / --run-at.'));
65
+ return;
66
+ }
67
+ const data = {
68
+ name: opts.name,
69
+ description: opts.description,
70
+ target_id: stripPrllScheme(opts.targetId),
71
+ spec_type: specType,
72
+ ...stripUndefined({
73
+ attached_to_uri: opts.attachedToUri,
74
+ cron_expr: opts.cronExpr,
75
+ interval_seconds: opts.intervalSeconds !== undefined ? Number(opts.intervalSeconds) : undefined,
76
+ run_at: opts.runAt,
77
+ timezone: opts.timezone,
78
+ start_at: opts.startAt,
79
+ end_at: opts.endAt,
80
+ max_runs: opts.maxRuns !== undefined ? Number(opts.maxRuns) : undefined,
81
+ catchup_window_seconds: opts.catchupWindowSeconds !== undefined ? Number(opts.catchupWindowSeconds) : undefined,
82
+ }),
83
+ };
84
+ const result = await client.createSchedule(orgId, data);
85
+ printJson(result);
86
+ printRefHint(result.id);
87
+ }
88
+ catch (err) {
89
+ printError(err);
90
+ }
91
+ });
92
+ schedules
93
+ .command('get')
94
+ .description('Get a schedule by ID')
95
+ .argument('<scheduleId>', 'Schedule ID')
96
+ .action(async (scheduleId) => {
97
+ try {
98
+ const { client, orgId } = resolveCredentials();
99
+ const result = await client.getSchedule(orgId, stripPrllScheme(scheduleId));
100
+ printJson(result);
101
+ }
102
+ catch (err) {
103
+ printError(err);
104
+ }
105
+ });
106
+ schedules
107
+ .command('update')
108
+ .description('Update a schedule. spec_type cannot be changed — create a new schedule instead.')
109
+ .argument('<scheduleId>', 'Schedule ID')
110
+ .option('--name <name>', 'Schedule name')
111
+ .option('--description <text>', 'Message delivered to the target on fire')
112
+ .option('--target-id <id>', 'Target user ID')
113
+ .option('--attached-to-uri <uri>', 'Attach to a prll:// resource URI')
114
+ .option('--clear-attached-to', 'Explicitly clear attached_to_uri')
115
+ .option('--cron-expr <expr>', '5-field cron expression')
116
+ .option('--interval-seconds <n>', 'Interval in seconds (>= 60)')
117
+ .option('--run-at <ts>', 'One-shot fire time (RFC3339)')
118
+ .option('--timezone <tz>', 'IANA timezone')
119
+ .option('--start-at <ts>', 'Earliest fire time')
120
+ .option('--clear-start-at', 'Explicitly clear start_at')
121
+ .option('--end-at <ts>', 'Latest fire time')
122
+ .option('--clear-end-at', 'Explicitly clear end_at')
123
+ .option('--max-runs <n>', 'Maximum successful fires')
124
+ .option('--clear-max-runs', 'Explicitly clear max_runs')
125
+ .option('--catchup-window-seconds <n>', 'Missed-fire window (seconds)')
126
+ .action(async (scheduleId, opts) => {
127
+ try {
128
+ const { client, orgId } = resolveCredentials();
129
+ const conflicts = [
130
+ ['--attached-to-uri', '--clear-attached-to'],
131
+ ['--start-at', '--clear-start-at'],
132
+ ['--end-at', '--clear-end-at'],
133
+ ['--max-runs', '--clear-max-runs'],
134
+ ];
135
+ const pairs = [
136
+ [opts.attachedToUri, opts.clearAttachedTo],
137
+ [opts.startAt, opts.clearStartAt],
138
+ [opts.endAt, opts.clearEndAt],
139
+ [opts.maxRuns, opts.clearMaxRuns],
140
+ ];
141
+ for (let i = 0; i < pairs.length; i++) {
142
+ if (pairs[i][0] !== undefined && pairs[i][1]) {
143
+ printError(new Error(`Do not pass ${conflicts[i][0]} together with ${conflicts[i][1]}.`));
144
+ return;
145
+ }
146
+ }
147
+ const data = stripUndefined({
148
+ name: opts.name,
149
+ description: opts.description,
150
+ target_id: opts.targetId ? stripPrllScheme(opts.targetId) : undefined,
151
+ attached_to_uri: opts.attachedToUri,
152
+ attached_to_uri_clear: opts.clearAttachedTo || undefined,
153
+ cron_expr: opts.cronExpr,
154
+ interval_seconds: opts.intervalSeconds !== undefined ? Number(opts.intervalSeconds) : undefined,
155
+ run_at: opts.runAt,
156
+ timezone: opts.timezone,
157
+ start_at: opts.startAt,
158
+ start_at_clear: opts.clearStartAt || undefined,
159
+ end_at: opts.endAt,
160
+ end_at_clear: opts.clearEndAt || undefined,
161
+ max_runs: opts.maxRuns !== undefined ? Number(opts.maxRuns) : undefined,
162
+ max_runs_clear: opts.clearMaxRuns || undefined,
163
+ catchup_window_seconds: opts.catchupWindowSeconds !== undefined ? Number(opts.catchupWindowSeconds) : undefined,
164
+ });
165
+ if (Object.keys(data).length === 0) {
166
+ printError(new Error('No fields to update. Provide at least one option.'));
167
+ return;
168
+ }
169
+ const result = await client.updateSchedule(orgId, stripPrllScheme(scheduleId), data);
170
+ printJson(result);
171
+ }
172
+ catch (err) {
173
+ printError(err);
174
+ }
175
+ });
176
+ schedules
177
+ .command('pause')
178
+ .description('Pause a schedule (reversible; clears next_fire_at)')
179
+ .argument('<scheduleId>', 'Schedule ID')
180
+ .action(async (scheduleId) => {
181
+ try {
182
+ const { client, orgId } = resolveCredentials();
183
+ const result = await client.pauseSchedule(orgId, stripPrllScheme(scheduleId));
184
+ printJson(result);
185
+ }
186
+ catch (err) {
187
+ printError(err);
188
+ }
189
+ });
190
+ schedules
191
+ .command('resume')
192
+ .description('Resume a paused schedule (does not catch up missed slots)')
193
+ .argument('<scheduleId>', 'Schedule ID')
194
+ .action(async (scheduleId) => {
195
+ try {
196
+ const { client, orgId } = resolveCredentials();
197
+ const result = await client.resumeSchedule(orgId, stripPrllScheme(scheduleId));
198
+ printJson(result);
199
+ }
200
+ catch (err) {
201
+ printError(err);
202
+ }
203
+ });
204
+ schedules
205
+ .command('cancel')
206
+ .description('Cancel a schedule (terminal; row + runs preserved; prll://sch_ ref remains valid)')
207
+ .argument('<scheduleId>', 'Schedule ID')
208
+ .action(async (scheduleId) => {
209
+ try {
210
+ const { client, orgId } = resolveCredentials();
211
+ const result = await client.cancelSchedule(orgId, stripPrllScheme(scheduleId));
212
+ printJson(result);
213
+ }
214
+ catch (err) {
215
+ printError(err);
216
+ }
217
+ });
218
+ schedules
219
+ .command('delete')
220
+ .description('Hard-delete a schedule (requires status=cancelled AND run_count=0; once fired, a schedule is permanently undeletable — cancel it instead)')
221
+ .argument('<scheduleId>', 'Schedule ID')
222
+ .action(async (scheduleId) => {
223
+ try {
224
+ const { client, orgId } = resolveCredentials();
225
+ await client.deleteSchedule(orgId, stripPrllScheme(scheduleId));
226
+ printJson({ ok: true });
227
+ }
228
+ catch (err) {
229
+ printError(err);
230
+ }
231
+ });
232
+ schedules
233
+ .command('runs')
234
+ .description('List run history for a schedule')
235
+ .argument('<scheduleId>', 'Schedule ID')
236
+ .option('--limit <n>', 'Maximum number of runs to return', '50')
237
+ .option('--cursor <cursor>', 'Pagination cursor')
238
+ .action(async (scheduleId, opts) => {
239
+ try {
240
+ const { client, orgId } = resolveCredentials();
241
+ const params = stripUndefined({
242
+ limit: Number(opts.limit),
243
+ cursor: opts.cursor,
244
+ });
245
+ const result = await client.listScheduleRuns(orgId, stripPrllScheme(scheduleId), params);
246
+ printJson(result);
247
+ }
248
+ catch (err) {
249
+ printError(err);
250
+ }
251
+ });
252
+ schedules
253
+ .command('run')
254
+ .description('Get a single schedule run (includes fire-time snapshot of description + attached URI)')
255
+ .argument('<runId>', 'Schedule run ID (srn_...)')
256
+ .action(async (runId) => {
257
+ try {
258
+ const { client, orgId } = resolveCredentials();
259
+ const result = await client.getScheduleRun(orgId, stripPrllScheme(runId));
260
+ printJson(result);
261
+ }
262
+ catch (err) {
263
+ printError(err);
264
+ }
265
+ });
266
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/commands/wiki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAmxBpD"}
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/commands/wiki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QA8wBpD"}
@@ -1,6 +1,6 @@
1
1
  import { resolveCredentials, resolveRuntimeContext } from '../lib/client.js';
2
2
  import { printError, printJson } from '../lib/output.js';
3
- import { getAfcsDiff, getAfcsStatus, getWikiBlob, getWikiChangesetDetail, getWikiChangesetDiff, getWikiLog, getWikiOutline, getWikiSection, getWikiTree, listWikiChangesets, queryWiki, requestWikiAccess, resetWikiWorkspace, backfillProposedChangeset, backfillMergedChangeset, listWikis, proposeWikiChangeset, searchWiki, syncAllMounts, watchMounts, } from '../lib/wiki.js';
3
+ import { getAfcsDiff, getAfcsStatus, getWikiBlob, getWikiChangesetDetail, getWikiChangesetDiff, getWikiLog, getWikiOutline, getWikiSection, getWikiTree, listWikiChangesets, queryWiki, requestWikiAccess, resetWikiWorkspace, listWikis, proposeWikiChangeset, searchWiki, syncAllMounts, watchMounts, } from '../lib/wiki.js';
4
4
  export function registerWikiCommands(program) {
5
5
  const wiki = program.command('wiki').description('Parall Wiki — read, edit, and propose changes');
6
6
  // ---- CRUD ----
@@ -209,9 +209,6 @@ export function registerWikiCommands(program) {
209
209
  sourceMessageId: options.messageId ?? rtx.triggerMessageId,
210
210
  sourceRunId: options.sessionId ?? rtx.sessionId,
211
211
  });
212
- await backfillProposedChangeset(ctx, rtx, result.changeset, {
213
- includeComment: !options.update,
214
- });
215
212
  const verb = options.update ? 'Re-proposed' : 'Created';
216
213
  process.stderr.write(`${verb} changeset ${result.changeset.id}\n`);
217
214
  process.stderr.write(`Changed files: ${result.changed_paths.join(', ')}\n`);
@@ -312,11 +309,9 @@ export function registerWikiCommands(program) {
312
309
  .action(async (changesetId, wikiRef) => {
313
310
  try {
314
311
  const ctx = resolveCredentials();
315
- const rtx = resolveRuntimeContext();
316
312
  const { resolveWikiRefOrDefault } = await import('../lib/wiki.js');
317
313
  const wiki = await resolveWikiRefOrDefault(ctx, wikiRef);
318
314
  const result = await ctx.client.mergeWikiChangeset(ctx.orgId, wiki.id, changesetId);
319
- await backfillMergedChangeset(ctx, rtx, result);
320
315
  process.stderr.write(`Merged changeset ${result.id} — "${result.title}"\n`);
321
316
  printJson(result);
322
317
  }
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import { registerDMCommands } from './commands/dm.js';
7
7
  import { registerMessageCommands } from './commands/messages.js';
8
8
  import { registerTaskCommands } from './commands/tasks.js';
9
9
  import { registerProjectCommands } from './commands/projects.js';
10
+ import { registerScheduleCommands } from './commands/schedules.js';
10
11
  import { registerUserCommands } from './commands/users.js';
11
12
  import { registerWikiCommands } from './commands/wiki.js';
12
13
  import { registerMcpCommands } from './commands/mcp.js';
@@ -26,6 +27,7 @@ registerDMCommands(program);
26
27
  registerMessageCommands(program);
27
28
  registerTaskCommands(program);
28
29
  registerProjectCommands(program);
30
+ registerScheduleCommands(program);
29
31
  registerUserCommands(program);
30
32
  registerWikiCommands(program);
31
33
  registerMcpCommands(program);
@@ -1,5 +1,4 @@
1
1
  import { type ParallClient, type Wiki, type WikiChangeset, type WikiDiff, type WikiDiffFile, type WikiTreeEntry } from '@parall/sdk';
2
- import type { RuntimeContext } from './client.js';
3
2
  export type ParallContext = {
4
3
  client: ParallClient;
5
4
  orgId: string;
@@ -120,15 +119,6 @@ export type WikiProposeResult = {
120
119
  changeset: WikiChangeset;
121
120
  source: 'local_mount';
122
121
  };
123
- export type ChangesetBackfillMode = 'proposed' | 'merged';
124
- export type ChangesetTaskBackfillAttempt = {
125
- task_id: string;
126
- relation_created: boolean;
127
- comment_created: boolean;
128
- };
129
- export type ChangesetTaskBackfillResult = {
130
- attempts: ChangesetTaskBackfillAttempt[];
131
- };
132
122
  type WikiContentSource = 'local_mount' | 'api';
133
123
  export declare function listWikis(ctx: ParallContext): Promise<Wiki[]>;
134
124
  export declare function resolveWikiRef(ctx: ParallContext, wikiRef?: string): Promise<Wiki>;
@@ -204,11 +194,6 @@ export type AfcsDiffResult = {
204
194
  };
205
195
  export declare function getAfcsDiff(ctx: ParallContext, wikiRef?: string): Promise<AfcsDiffResult>;
206
196
  export declare function proposeWikiChangeset(ctx: ParallContext, wikiRef: string | undefined, options: WikiProposeOptions): Promise<WikiProposeResult>;
207
- export declare function backfillProposedChangeset(ctx: ParallContext, runtime: RuntimeContext, changeset: WikiChangeset, options?: {
208
- relationType?: 'reference' | 'execution';
209
- includeComment?: boolean;
210
- }): Promise<ChangesetTaskBackfillResult>;
211
- export declare function backfillMergedChangeset(ctx: ParallContext, runtime: RuntimeContext, changeset: WikiChangeset): Promise<ChangesetTaskBackfillResult>;
212
197
  /**
213
198
  * Discard all local changes and restore files to the last synced state.
214
199
  * Reads the local manifest and restores all files from the server.
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/lib/wiki.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/lib/wiki.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,YAAY,EAEjB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAMrB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAWF,KAAK,iBAAiB,GAAG,aAAa,GAAG,KAAK,CAAC;AA+H/C,wBAAsB,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAEnE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBxF;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjG;AAMD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC,CAUjE;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBxD;AAMD,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,OAAO,CAAC,iBAAiB,CAAC,CAmB5B;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkB7B;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CA+B1B;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAMD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAelC;AAMD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,yBAAyB,CAAC,CAgBpC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,uBAAuB,CAAC,CAelC;AAMD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,gDAAgD;IAChD,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,iEAAiE;IACjE,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAsB,aAAa,CACjC,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAkC3B;AAMD,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAezB;AAMD,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA0E5B;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCzE;AAMD,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAS/B;AAMD,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,CAAC,CAepC;AAMD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,aAAa,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC,CAwClC;AAMD,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,cAAc,GAAG,WAAW,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAMD,MAAM,MAAM,UAAU,GAAG;IACvB;;;kDAG8C;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,EAAE,CAAA;KAAE,EAAE,CAAC;CACpI,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB3E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CA0BtB;AAMD;;;;;;;GAOG;AACH,6DAA6D;AAC7D,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAChI;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE,GAAG,UAAU,EAAE,CAuCf;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iDAAiD;IACjD,MAAM,EAAE,6BAA6B,GAAG,6BAA6B,GAAG,6BAA6B,GAAG,8BAA8B,CAAC;CACxI,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;OAQG;IACH,MAAM,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACtC,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,gIAAgI;IAChI,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,OAAO,aAAa,EAAE,IAAI,EAChC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAyQ1B;AA4CD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAYjB;AAiGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD"}
package/dist/lib/wiki.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { promises as fs } from 'node:fs';
3
3
  import path from 'node:path';
4
- import { ApiError, COMMENT_TARGET, } from '@parall/sdk';
4
+ import { ApiError, } from '@parall/sdk';
5
5
  // ---------------------------------------------------------------------------
6
6
  // Constants
7
7
  // ---------------------------------------------------------------------------
@@ -73,6 +73,15 @@ export async function getWikiBlob(ctx, wikiRef, options) {
73
73
  const blob = await ctx.client.getWikiBlob(ctx.orgId, wiki.id, {
74
74
  path: normalizeRequiredWikiPath(options.path),
75
75
  });
76
+ // Phase 2 widened WikiBlob to allow encoding='signed_url' (binary served
77
+ // via preview URL) and still admits the legacy 'base64' inline shape,
78
+ // both of which omit or encode `content` in ways the CLI's string surface
79
+ // cannot use. Only utf-8 text is safe to return verbatim; anything else
80
+ // gets a clear error — callers that want bytes should fetch via the
81
+ // signed_url flow.
82
+ if (blob.encoding !== 'utf-8' || blob.content == null) {
83
+ throw new Error(`wiki blob is not inline utf-8 (encoding=${blob.encoding}): ${options.path}`);
84
+ }
76
85
  return {
77
86
  wiki,
78
87
  content: blob.content,
@@ -350,96 +359,6 @@ export async function proposeWikiChangeset(ctx, wikiRef, options) {
350
359
  source: 'local_mount',
351
360
  };
352
361
  }
353
- // backfillProposedChangeset attaches the current runtime's task to a
354
- // freshly-proposed changeset: one relation (task → changeset) and a no_reply
355
- // "Proposed" comment on the task. Best-effort: failures are logged and
356
- // swallowed so the propose action itself stays authoritative.
357
- export async function backfillProposedChangeset(ctx, runtime, changeset, options = {}) {
358
- const step = await resolveRuntimeTaskStep(ctx, runtime);
359
- if (!step?.target_id) {
360
- return { attempts: [] };
361
- }
362
- const taskId = step.target_id;
363
- const sessionId = normalizeOptionalString(runtime.sessionId);
364
- const agentId = resolveAgentId(ctx.agentId);
365
- const attempt = {
366
- task_id: taskId,
367
- relation_created: false,
368
- comment_created: false,
369
- };
370
- try {
371
- await ctx.client.createTaskRelation(ctx.orgId, taskId, {
372
- target_type: 'wiki_changeset',
373
- target_id: changeset.id,
374
- relation_type: options.relationType ?? 'reference',
375
- });
376
- attempt.relation_created = true;
377
- }
378
- catch (err) {
379
- process.stderr.write(`warning: changeset ${changeset.id} relation backfill to task ${taskId} failed: ${formatBackfillError(err)}\n`);
380
- }
381
- if (options.includeComment !== false && sessionId && agentId) {
382
- try {
383
- await ctx.client.createAgentTaskBackfillComment(ctx.orgId, agentId, sessionId, {
384
- task_id: taskId,
385
- body: buildChangesetTaskComment(changeset, 'proposed'),
386
- });
387
- attempt.comment_created = true;
388
- }
389
- catch (err) {
390
- process.stderr.write(`warning: changeset ${changeset.id} "Proposed" comment backfill to task ${taskId} failed: ${formatBackfillError(err)}\n`);
391
- }
392
- }
393
- return { attempts: [attempt] };
394
- }
395
- // backfillMergedChangeset posts a no_reply "Merged" comment on every task that
396
- // was linked to the changeset at propose time. It does NOT consult the
397
- // merging runtime's current task: that task may be unrelated to the
398
- // changeset, and recording the merge there would leak wrong context.
399
- // If no task was ever linked (e.g. changeset proposed via UI/human), this
400
- // quietly does nothing.
401
- export async function backfillMergedChangeset(ctx, runtime, changeset) {
402
- const sessionId = normalizeOptionalString(runtime.sessionId);
403
- const agentId = resolveAgentId(ctx.agentId);
404
- if (!sessionId || !agentId) {
405
- return { attempts: [] };
406
- }
407
- let relations;
408
- try {
409
- relations = await ctx.client.listTaskRelationsByTarget(ctx.orgId, {
410
- target_type: 'wiki_changeset',
411
- target_id: changeset.id,
412
- });
413
- }
414
- catch (err) {
415
- process.stderr.write(`warning: changeset ${changeset.id} merge backfill could not list task relations: ${formatBackfillError(err)}\n`);
416
- return { attempts: [] };
417
- }
418
- const taskIds = Array.from(new Set(relations.map((r) => r.task_id)));
419
- if (taskIds.length === 0) {
420
- return { attempts: [] };
421
- }
422
- const attempts = [];
423
- for (const taskId of taskIds) {
424
- const attempt = {
425
- task_id: taskId,
426
- relation_created: true, // relation already exists — that's how we found this task
427
- comment_created: false,
428
- };
429
- try {
430
- await ctx.client.createAgentTaskBackfillComment(ctx.orgId, agentId, sessionId, {
431
- task_id: taskId,
432
- body: buildChangesetTaskComment(changeset, 'merged'),
433
- });
434
- attempt.comment_created = true;
435
- }
436
- catch (err) {
437
- process.stderr.write(`warning: changeset ${changeset.id} "Merged" comment backfill to task ${taskId} failed: ${formatBackfillError(err)}\n`);
438
- }
439
- attempts.push(attempt);
440
- }
441
- return { attempts };
442
- }
443
362
  // ---------------------------------------------------------------------------
444
363
  // AFCS: reset workspace
445
364
  // ---------------------------------------------------------------------------
@@ -1350,7 +1269,15 @@ async function loadRemoteMarkdownFile(ctx, wiki, ref, filePath) {
1350
1269
  }
1351
1270
  const blob = await ctx.client.getWikiBlob(ctx.orgId, wiki.id, {
1352
1271
  path: filePath,
1272
+ ref,
1353
1273
  });
1274
+ // Markdown files should always come back as utf-8 text. Any other
1275
+ // encoding (signed_url, legacy base64) means the backend served a
1276
+ // binary for a markdown path — surface clearly rather than passing
1277
+ // encoded bytes or undefined into downstream parsers.
1278
+ if (blob.encoding !== 'utf-8' || blob.content == null) {
1279
+ throw new Error(`wiki markdown file unexpectedly returned as non-utf8 content (encoding=${blob.encoding}): ${filePath}`);
1280
+ }
1354
1281
  return {
1355
1282
  path: filePath,
1356
1283
  content: blob.content,
@@ -2126,38 +2053,6 @@ function normalizeOptionalString(value) {
2126
2053
  const normalized = value?.trim();
2127
2054
  return normalized ? normalized : undefined;
2128
2055
  }
2129
- async function resolveRuntimeTaskStep(ctx, runtime) {
2130
- const sessionId = normalizeOptionalString(runtime.sessionId);
2131
- const stepId = normalizeOptionalString(runtime.stepId);
2132
- const agentId = resolveAgentId(ctx.agentId);
2133
- if (!sessionId || !stepId || !agentId) {
2134
- return null;
2135
- }
2136
- try {
2137
- const step = await ctx.client.getAgentSessionStep(ctx.orgId, agentId, sessionId, stepId);
2138
- if (step.target_type !== 'task' || !step.target_id) {
2139
- return null;
2140
- }
2141
- return step;
2142
- }
2143
- catch {
2144
- return null;
2145
- }
2146
- }
2147
- function buildChangesetTaskComment(changeset, mode) {
2148
- const verb = mode === 'merged' ? 'Merged wiki changeset' : 'Proposed wiki changeset';
2149
- const normalizedTitle = changeset.title.replace(/\s+/g, ' ').trim();
2150
- return `${verb}: [changeset ${changeset.id}](${COMMENT_TARGET.changeset(changeset.id, changeset.wiki_id)}) - ${normalizedTitle}`;
2151
- }
2152
- function formatBackfillError(err) {
2153
- if (err instanceof ApiError) {
2154
- return `${err.code ?? err.status} ${err.message}`;
2155
- }
2156
- if (err instanceof Error) {
2157
- return err.message;
2158
- }
2159
- return String(err);
2160
- }
2161
2056
  async function pathExists(target) {
2162
2057
  try {
2163
2058
  await fs.access(target);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parall/cli",
3
- "version": "1.20.1",
3
+ "version": "1.21.0",
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.20.1"
33
+ "@parall/sdk": "1.21.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^22.0.0",