overlord-cli 0.2606060757.0 → 0.2606070914.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/bin/_cli/protocol.mjs +41 -3
- package/bin/_cli/runner.mjs +13 -0
- package/package.json +1 -1
- package/plugins/claude/commands/create.md +1 -1
- package/plugins/claude/commands/prompt.md +1 -1
- package/plugins/claude/commands/spawn.md +1 -1
- package/plugins/claude/skills/overlord-ticket/reference/cli.md +1 -0
- package/plugins/cursor/skills/overlord-ticket/reference/cli.md +1 -0
- package/plugins/overlord/scripts/overlord-mcp.mjs +28 -0
- package/plugins/overlord/skills/overlord-ticket/reference/cli.md +1 -0
package/bin/_cli/protocol.mjs
CHANGED
|
@@ -2242,6 +2242,24 @@ async function protocolListExecutionRequests(args) {
|
|
|
2242
2242
|
console.log(JSON.stringify(data, null, 2));
|
|
2243
2243
|
}
|
|
2244
2244
|
|
|
2245
|
+
async function protocolListExecutionTargets(args) {
|
|
2246
|
+
const flags = parseFlags(args);
|
|
2247
|
+
const { platformUrl, bearerToken, localSecret, organizationId } =
|
|
2248
|
+
await resolveProtocolAuthForFlags(flags);
|
|
2249
|
+
const timeoutMs = resolveTimeout(flags);
|
|
2250
|
+
|
|
2251
|
+
const data = await apiPost(
|
|
2252
|
+
platformUrl,
|
|
2253
|
+
bearerToken,
|
|
2254
|
+
localSecret,
|
|
2255
|
+
organizationId,
|
|
2256
|
+
'/api/protocol/list-execution-targets',
|
|
2257
|
+
{},
|
|
2258
|
+
timeoutMs
|
|
2259
|
+
);
|
|
2260
|
+
console.log(JSON.stringify(data, null, 2));
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2245
2263
|
async function protocolClearExecutionRequests(args) {
|
|
2246
2264
|
const flags = parseFlags(args);
|
|
2247
2265
|
const { platformUrl, bearerToken, localSecret, organizationId } =
|
|
@@ -2471,6 +2489,7 @@ async function protocolPrompt(args) {
|
|
|
2471
2489
|
...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
|
|
2472
2490
|
...(forHuman !== undefined ? { forHuman } : {}),
|
|
2473
2491
|
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier),
|
|
2492
|
+
...(flags['assigned-to'] ? { assignedTo: String(flags['assigned-to']) } : {}),
|
|
2474
2493
|
...(flags['parent-session-key']
|
|
2475
2494
|
? { parentSessionKey: String(flags['parent-session-key']) }
|
|
2476
2495
|
: {}),
|
|
@@ -2559,7 +2578,8 @@ async function protocolCreateTicket(args) {
|
|
|
2559
2578
|
: {}),
|
|
2560
2579
|
...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
|
|
2561
2580
|
...(forHuman !== undefined ? { forHuman } : {}),
|
|
2562
|
-
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier)
|
|
2581
|
+
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier),
|
|
2582
|
+
...(flags['assigned-to'] ? { assignedTo: String(flags['assigned-to']) } : {})
|
|
2563
2583
|
};
|
|
2564
2584
|
|
|
2565
2585
|
const data = await apiPost(
|
|
@@ -2599,7 +2619,8 @@ async function protocolCreateTicket(args) {
|
|
|
2599
2619
|
: {}),
|
|
2600
2620
|
...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
|
|
2601
2621
|
...(forHuman !== undefined ? { forHuman } : {}),
|
|
2602
|
-
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier)
|
|
2622
|
+
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier),
|
|
2623
|
+
...(flags['assigned-to'] ? { assignedTo: String(flags['assigned-to']) } : {})
|
|
2603
2624
|
};
|
|
2604
2625
|
|
|
2605
2626
|
const data = await apiPost(
|
|
@@ -2694,7 +2715,8 @@ async function protocolRecordWork(args) {
|
|
|
2694
2715
|
? { acceptanceCriteria: String(flags['acceptance-criteria']) }
|
|
2695
2716
|
: {}),
|
|
2696
2717
|
...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
|
|
2697
|
-
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier)
|
|
2718
|
+
delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier),
|
|
2719
|
+
...(flags['assigned-to'] ? { assignedTo: String(flags['assigned-to']) } : {})
|
|
2698
2720
|
};
|
|
2699
2721
|
|
|
2700
2722
|
const { platformUrl, bearerToken, localSecret, organizationId } =
|
|
@@ -2867,6 +2889,7 @@ Subcommands:
|
|
|
2867
2889
|
claim-execution Claim one queued execution request for this device
|
|
2868
2890
|
list-organizations List organizations the authenticated user belongs to
|
|
2869
2891
|
list-execution-requests List active execution requests in the runner queue
|
|
2892
|
+
list-execution-targets List execution targets (runner devices) the user has access to
|
|
2870
2893
|
clear-execution-requests Clear active execution requests by objective or wholesale
|
|
2871
2894
|
complete-execution-launch Mark a claimed execution request launched
|
|
2872
2895
|
fail-execution-launch Mark a claimed execution request failed
|
|
@@ -3145,6 +3168,7 @@ prompt:
|
|
|
3145
3168
|
--for-human Mark the new ticket as requiring a human
|
|
3146
3169
|
--execution-target <t> Deprecated alias: agent | human
|
|
3147
3170
|
--delegate <model> Model or delegate identifier that created the ticket
|
|
3171
|
+
--assigned-to <member> Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator)
|
|
3148
3172
|
--parent-session-key <key>
|
|
3149
3173
|
--parent-ticket-id <ticket_id>
|
|
3150
3174
|
--agent <identifier>
|
|
@@ -3185,6 +3209,7 @@ create:
|
|
|
3185
3209
|
--for-human Mark the new ticket as requiring a human
|
|
3186
3210
|
--execution-target <t> Deprecated alias: agent | human
|
|
3187
3211
|
--delegate <model> Model or delegate identifier that created the ticket
|
|
3212
|
+
--assigned-to <member> Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator)
|
|
3188
3213
|
--agent <identifier>
|
|
3189
3214
|
--model <identifier>
|
|
3190
3215
|
Returns:
|
|
@@ -3233,6 +3258,7 @@ record-work:
|
|
|
3233
3258
|
--acceptance-criteria <text>
|
|
3234
3259
|
--available-tools <text>
|
|
3235
3260
|
--delegate <model>
|
|
3261
|
+
--assigned-to <member> Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator)
|
|
3236
3262
|
--agent <identifier>
|
|
3237
3263
|
--model <identifier>
|
|
3238
3264
|
Notes:
|
|
@@ -3398,6 +3424,13 @@ list-execution-requests:
|
|
|
3398
3424
|
--device-fingerprint <fp> Filter queue visibility to one execution target
|
|
3399
3425
|
--project-id <uuid> Restrict to one project
|
|
3400
3426
|
|
|
3427
|
+
list-execution-targets:
|
|
3428
|
+
Purpose:
|
|
3429
|
+
List all execution targets (runner devices) accessible to the authenticated user
|
|
3430
|
+
in the current organization, including their label and id.
|
|
3431
|
+
Returns:
|
|
3432
|
+
JSON with { targets: [ { id, label, host, platform, transport, is_placeholder, last_seen_at } ] }
|
|
3433
|
+
|
|
3401
3434
|
clear-execution-requests:
|
|
3402
3435
|
Purpose:
|
|
3403
3436
|
Clear active execution requests from the runner queue by marking them failed.
|
|
@@ -3456,6 +3489,7 @@ Examples:
|
|
|
3456
3489
|
ovld protocol claim-execution --device-fingerprint $OVERLORD_DEVICE_FINGERPRINT
|
|
3457
3490
|
ovld protocol list-organizations
|
|
3458
3491
|
ovld protocol list-execution-requests --device-fingerprint $OVERLORD_DEVICE_FINGERPRINT
|
|
3492
|
+
ovld protocol list-execution-targets
|
|
3459
3493
|
ovld protocol clear-execution-requests --objective-id <objective-uuid>
|
|
3460
3494
|
ovld protocol clear-execution-requests --clear-all
|
|
3461
3495
|
ovld protocol deliver --session-key <key> --ticket-id <ticket_id> --summary "Done"
|
|
@@ -3587,6 +3621,10 @@ EOF
|
|
|
3587
3621
|
await protocolListExecutionRequests(args);
|
|
3588
3622
|
return;
|
|
3589
3623
|
}
|
|
3624
|
+
if (subcommand === 'list-execution-targets') {
|
|
3625
|
+
await protocolListExecutionTargets(args);
|
|
3626
|
+
return;
|
|
3627
|
+
}
|
|
3590
3628
|
if (subcommand === 'clear-execution-requests') {
|
|
3591
3629
|
await protocolClearExecutionRequests(args);
|
|
3592
3630
|
return;
|
package/bin/_cli/runner.mjs
CHANGED
|
@@ -22,6 +22,7 @@ function printRunnerHelp(primaryCommand = 'ovld') {
|
|
|
22
22
|
${primaryCommand} runner once [options]
|
|
23
23
|
${primaryCommand} runner start [options]
|
|
24
24
|
${primaryCommand} runner status [options]
|
|
25
|
+
${primaryCommand} runner targets [options]
|
|
25
26
|
${primaryCommand} runner clear <objective_id> [options]
|
|
26
27
|
${primaryCommand} runner clear-all [options]
|
|
27
28
|
|
|
@@ -147,6 +148,12 @@ function clearExecutionRequests(flags, deviceFingerprint, organizationId, option
|
|
|
147
148
|
});
|
|
148
149
|
}
|
|
149
150
|
|
|
151
|
+
function listExecutionTargets(deviceFingerprint) {
|
|
152
|
+
return protocolJson('list-execution-targets', [], {
|
|
153
|
+
OVERLORD_DEVICE_FINGERPRINT: deviceFingerprint
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
150
157
|
function listOrganizationIds(deviceFingerprint) {
|
|
151
158
|
const data = protocolJson('list-organizations', [], {
|
|
152
159
|
OVERLORD_DEVICE_FINGERPRINT: deviceFingerprint
|
|
@@ -583,6 +590,12 @@ export async function runRunnerCommand(subcommand, args, primaryCommand = 'ovld'
|
|
|
583
590
|
const flags = parseFlags(args);
|
|
584
591
|
const deviceFingerprint = readOrCreateDeviceFingerprint(flags);
|
|
585
592
|
|
|
593
|
+
if (subcommand === 'targets') {
|
|
594
|
+
const data = listExecutionTargets(deviceFingerprint);
|
|
595
|
+
console.log(JSON.stringify({ ok: true, targets: data.targets ?? [] }, null, 2));
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
|
|
586
599
|
if (subcommand === 'status') {
|
|
587
600
|
const organizationScope = createOrganizationScope(flags, deviceFingerprint);
|
|
588
601
|
const data = protocolJson(
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@ Create a draft Overlord ticket from the user's request.
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Use `$ARGUMENTS` as the input.
|
|
11
|
-
If it already contains flags such as `--title`, `--priority`, `--project-id`, or `--for-human`, pass those flags through after `ovld protocol create --agent claude-code`.
|
|
11
|
+
If it already contains flags such as `--title`, `--priority`, `--project-id`, `--assigned-to`, or `--for-human`, pass those flags through after `ovld protocol create --agent claude-code`.
|
|
12
12
|
Otherwise, treat `$ARGUMENTS` as the objective text and run:
|
|
13
13
|
`ovld protocol create --agent claude-code --objective "<objective>"`
|
|
14
14
|
|
|
@@ -8,7 +8,7 @@ Create a new Overlord ticket from the user's request.
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Use `$ARGUMENTS` as the input.
|
|
11
|
-
If it already contains flags such as `--title`, `--priority`, `--project-id`, or `--for-human`, pass those flags through after `ovld protocol prompt --agent claude-code`.
|
|
11
|
+
If it already contains flags such as `--title`, `--priority`, `--project-id`, `--assigned-to`, or `--for-human`, pass those flags through after `ovld protocol prompt --agent claude-code`.
|
|
12
12
|
Otherwise, treat `$ARGUMENTS` as the objective text and run:
|
|
13
13
|
`ovld protocol prompt --agent claude-code --objective "<objective>"`
|
|
14
14
|
|
|
@@ -9,7 +9,7 @@ This command is deprecated. Use `/overlord:prompt` instead.
|
|
|
9
9
|
Create a new Overlord ticket from the user's request.
|
|
10
10
|
|
|
11
11
|
Use `$ARGUMENTS` as the input.
|
|
12
|
-
If it already contains flags such as `--title`, `--priority`, `--project-id`, or `--for-human`, pass those flags through after `ovld protocol prompt --agent claude-code`.
|
|
12
|
+
If it already contains flags such as `--title`, `--priority`, `--project-id`, `--assigned-to`, or `--for-human`, pass those flags through after `ovld protocol prompt --agent claude-code`.
|
|
13
13
|
Otherwise, treat `$ARGUMENTS` as the objective text and run:
|
|
14
14
|
`ovld protocol prompt --agent claude-code --objective "<objective>"`
|
|
15
15
|
|
|
@@ -118,6 +118,7 @@ When creating tickets from within a repository:
|
|
|
118
118
|
- Create multiple tickets when each prompt represents a different feature or goal.
|
|
119
119
|
- Add objectives to the same ticket when each prompt is a sequential step toward the same feature or goal; use `ovld protocol add-objectives --ticket-id <ticket_id> --objectives-json '[{"objective":"..."}]'`.
|
|
120
120
|
- `create`, `prompt`, and `record-work` require `--objectives-json` or `--objectives-file` with an ordered array of `{ "objective": "...", "title": "...", "autoAdvance": true }` objects. A single objective is just an array with one item.
|
|
121
|
+
- `create`, `prompt`, `create-ticket`, and `record-work` accept `--assigned-to <member>` to set the ticket's human owner. Accepts a username, an email, a user-id UUID, or the `orgid:username` member ID. When omitted, the assignee defaults to the ticket creator.
|
|
121
122
|
|
|
122
123
|
```bash
|
|
123
124
|
ovld protocol create --agent claude-code --objectives-json '[{"objective":"Capture follow-up work from this repository"}]'
|
|
@@ -118,6 +118,7 @@ When creating tickets from within a repository:
|
|
|
118
118
|
- Create multiple tickets when each prompt represents a different feature or goal.
|
|
119
119
|
- Add objectives to the same ticket when each prompt is a sequential step toward the same feature or goal; use `ovld protocol add-objectives --ticket-id <ticket_id> --objectives-json '[{"objective":"..."}]'`.
|
|
120
120
|
- `create`, `prompt`, and `record-work` require `--objectives-json` or `--objectives-file` with an ordered array of `{ "objective": "...", "title": "...", "autoAdvance": true }` objects. A single objective is just an array with one item.
|
|
121
|
+
- `create`, `prompt`, `create-ticket`, and `record-work` accept `--assigned-to <member>` to set the ticket's human owner. Accepts a username, an email, a user-id UUID, or the `orgid:username` member ID. When omitted, the assignee defaults to the ticket creator.
|
|
121
122
|
|
|
122
123
|
```bash
|
|
123
124
|
ovld protocol create --agent cursor --objectives-json '[{"objective":"Capture follow-up work from this repository"}]'
|
|
@@ -244,6 +244,11 @@ const tools = [
|
|
|
244
244
|
available_tools: { type: 'string' },
|
|
245
245
|
for_human: { type: 'boolean' },
|
|
246
246
|
delegate: { type: 'string' },
|
|
247
|
+
assigned_to: {
|
|
248
|
+
type: 'string',
|
|
249
|
+
description:
|
|
250
|
+
'Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator).'
|
|
251
|
+
},
|
|
247
252
|
parent_session_key: { type: 'string' },
|
|
248
253
|
parent_ticket_id: { type: 'string' },
|
|
249
254
|
agent: { type: 'string' },
|
|
@@ -262,6 +267,7 @@ const tools = [
|
|
|
262
267
|
'available-tools': args.available_tools,
|
|
263
268
|
'for-human': args.for_human === true ? true : undefined,
|
|
264
269
|
delegate: args.delegate,
|
|
270
|
+
'assigned-to': args.assigned_to,
|
|
265
271
|
'parent-session-key': args.parent_session_key,
|
|
266
272
|
'parent-ticket-id': args.parent_ticket_id,
|
|
267
273
|
agent: args.agent,
|
|
@@ -286,6 +292,11 @@ const tools = [
|
|
|
286
292
|
available_tools: { type: 'string' },
|
|
287
293
|
for_human: { type: 'boolean' },
|
|
288
294
|
delegate: { type: 'string' },
|
|
295
|
+
assigned_to: {
|
|
296
|
+
type: 'string',
|
|
297
|
+
description:
|
|
298
|
+
'Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator).'
|
|
299
|
+
},
|
|
289
300
|
session_key: { type: 'string' },
|
|
290
301
|
ticket_id: { type: 'string' },
|
|
291
302
|
agent: { type: 'string' }
|
|
@@ -303,6 +314,7 @@ const tools = [
|
|
|
303
314
|
'available-tools': args.available_tools,
|
|
304
315
|
'for-human': args.for_human === true ? true : undefined,
|
|
305
316
|
delegate: args.delegate,
|
|
317
|
+
'assigned-to': args.assigned_to,
|
|
306
318
|
'session-key': args.session_key,
|
|
307
319
|
'ticket-id': args.ticket_id,
|
|
308
320
|
agent: args.agent
|
|
@@ -628,6 +640,11 @@ const tools = [
|
|
|
628
640
|
acceptance_criteria: { type: 'string' },
|
|
629
641
|
available_tools: { type: 'string' },
|
|
630
642
|
delegate: { type: 'string' },
|
|
643
|
+
assigned_to: {
|
|
644
|
+
type: 'string',
|
|
645
|
+
description:
|
|
646
|
+
'Assign the ticket to a member: username, email, user-id, or orgid:username (defaults to creator).'
|
|
647
|
+
},
|
|
631
648
|
agent: { type: 'string' },
|
|
632
649
|
skip_file_change_check: { type: 'boolean' }
|
|
633
650
|
},
|
|
@@ -643,6 +660,7 @@ const tools = [
|
|
|
643
660
|
'acceptance-criteria': args.acceptance_criteria,
|
|
644
661
|
'available-tools': args.available_tools,
|
|
645
662
|
delegate: args.delegate,
|
|
663
|
+
'assigned-to': args.assigned_to,
|
|
646
664
|
agent: args.agent,
|
|
647
665
|
'skip-file-change-check': args.skip_file_change_check
|
|
648
666
|
}),
|
|
@@ -1090,6 +1108,16 @@ const tools = [
|
|
|
1090
1108
|
}),
|
|
1091
1109
|
subcommand: 'list-execution-requests'
|
|
1092
1110
|
},
|
|
1111
|
+
{
|
|
1112
|
+
name: 'list_execution_targets',
|
|
1113
|
+
description: 'List execution targets (runner devices) the authenticated user has access to, including their label and id.',
|
|
1114
|
+
inputSchema: {
|
|
1115
|
+
type: 'object',
|
|
1116
|
+
properties: {}
|
|
1117
|
+
},
|
|
1118
|
+
toCliFlags: () => ({}),
|
|
1119
|
+
subcommand: 'list-execution-targets'
|
|
1120
|
+
},
|
|
1093
1121
|
{
|
|
1094
1122
|
name: 'clear_execution_requests',
|
|
1095
1123
|
description: 'Clear active execution requests from the local runner queue.',
|
|
@@ -118,6 +118,7 @@ When creating tickets from within a repository:
|
|
|
118
118
|
- Create multiple tickets when each prompt represents a different feature or goal.
|
|
119
119
|
- Add objectives to the same ticket when each prompt is a sequential step toward the same feature or goal; use `ovld protocol add-objectives --ticket-id <ticket_id> --objectives-json '[{"objective":"..."}]'`.
|
|
120
120
|
- `create`, `prompt`, and `record-work` require `--objectives-json` or `--objectives-file` with an ordered array of `{ "objective": "...", "title": "...", "autoAdvance": true }` objects. A single objective is just an array with one item.
|
|
121
|
+
- `create`, `prompt`, `create-ticket`, and `record-work` accept `--assigned-to <member>` to set the ticket's human owner. Accepts a username, an email, a user-id UUID, or the `orgid:username` member ID. When omitted, the assignee defaults to the ticket creator.
|
|
121
122
|
|
|
122
123
|
```bash
|
|
123
124
|
ovld protocol create --agent codex --objectives-json '[{"objective":"Capture follow-up work from this repository"}]'
|