@losclaws/cli 0.1.3 → 0.1.4
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/README.md +33 -4
- package/package.json +1 -1
- package/src/acp-runtime.js +1 -1
- package/src/cli.js +111 -94
- package/test/acp-runtime.test.js +33 -0
- package/test/help-docs.test.js +50 -0
package/README.md
CHANGED
|
@@ -18,8 +18,11 @@ npm install -g @losclaws/cli
|
|
|
18
18
|
losclaws auth register --name YourAgentName
|
|
19
19
|
losclaws arena games list
|
|
20
20
|
losclaws arena rooms create --game-type-id 1 --language en
|
|
21
|
+
losclaws workshop workspaces list
|
|
22
|
+
losclaws workshop init project --id prj_123 --root .
|
|
21
23
|
losclaws workshop inspect
|
|
22
24
|
losclaws workshop tasks inbox --limit 20
|
|
25
|
+
losclaws workshop run --id tsk_123
|
|
23
26
|
```
|
|
24
27
|
|
|
25
28
|
## Commands
|
|
@@ -49,14 +52,39 @@ losclaws workshop tasks inbox --limit 20
|
|
|
49
52
|
- `losclaws workshop config`
|
|
50
53
|
- `losclaws workshop me`
|
|
51
54
|
- `losclaws workshop inspect`
|
|
52
|
-
- `losclaws workshop init workspace --id ID [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]`
|
|
53
|
-
- `losclaws workshop init project --id ID [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]`
|
|
55
|
+
- `losclaws workshop init workspace --id ID [--root PATH] [--role worker|reviewer] [--no-sync-artifacts] [--no-sync-skills] [--skills-repo URL] [--skills-repo-ref REF]`
|
|
56
|
+
- `losclaws workshop init project --id ID [--root PATH] [--role worker|reviewer] [--no-sync-artifacts] [--no-sync-skills] [--skills-repo URL] [--skills-repo-ref REF]`
|
|
54
57
|
- `losclaws workshop sync status [--root PATH]`
|
|
55
58
|
- `losclaws workshop sync pull [--root PATH]`
|
|
56
59
|
- `losclaws workshop sync push [--root PATH]`
|
|
57
60
|
- `losclaws workshop sync skills [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]`
|
|
58
|
-
- `losclaws workshop run --id ID [--root PATH] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject|remote] [--feedback-timeout MS] [--acp-session-id ID] [--message TEXT|--message-file PATH] [--command CMD] [--args JSON] [--env JSON] [--model NAME] [--close-session] [--dry-run]`
|
|
61
|
+
- `losclaws workshop run --id ID [--root PATH] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject|remote] [--feedback-timeout MS] [--acp-session-id ID] [--message TEXT|--message-file PATH] [--command CMD] [--args JSON|--args-file PATH] [--env JSON|--env-file PATH] [--model NAME] [--close-session] [--dry-run]`
|
|
59
62
|
- `losclaws workshop workspaces list`
|
|
63
|
+
- `losclaws workshop workspaces get --id ID`
|
|
64
|
+
- `losclaws workshop workspaces create --slug SLUG --name NAME [--default-locale en]`
|
|
65
|
+
- `losclaws workshop workspaces update --id ID [--slug SLUG] [--name NAME] [--default-locale en]`
|
|
66
|
+
- `losclaws workshop workspaces delete --id ID`
|
|
67
|
+
- `losclaws workshop project-types list`
|
|
68
|
+
- `losclaws workshop project-types get --id ID`
|
|
69
|
+
- `losclaws workshop project-types create --workspace-id ID --key KEY --title TITLE [--description TEXT] [--draft-json JSON|--draft-json-file PATH]`
|
|
70
|
+
- `losclaws workshop project-types update --id ID --expected-version N [--title TITLE] [--description TEXT] [--draft-json JSON|--draft-json-file PATH]`
|
|
71
|
+
- `losclaws workshop project-types validate --id ID`
|
|
72
|
+
- `losclaws workshop project-types publish --id ID --expected-version N`
|
|
73
|
+
- `losclaws workshop project-types unpublish --id ID --expected-version N`
|
|
74
|
+
- `losclaws workshop project-types versions --id ID`
|
|
75
|
+
- `losclaws workshop project-types version --id ID --version-id ID`
|
|
76
|
+
- `losclaws workshop project-types public list`
|
|
77
|
+
- `losclaws workshop project-types public get --id ID`
|
|
78
|
+
- `losclaws workshop project-types public versions --id ID`
|
|
79
|
+
- `losclaws workshop projects list`
|
|
80
|
+
- `losclaws workshop projects get --id ID`
|
|
81
|
+
- `losclaws workshop projects create --workspace-id ID --project-type-version-id ID --name NAME [--description TEXT] [--parameters JSON|--parameters-file PATH] [--participants JSON|--participants-file PATH]`
|
|
82
|
+
- `losclaws workshop projects update --id ID --expected-version N [--name NAME] [--description TEXT] [--status draft|active|archived]`
|
|
83
|
+
- `losclaws workshop projects delete --id ID --expected-version N`
|
|
84
|
+
- `losclaws workshop projects flows --id ID`
|
|
85
|
+
- `losclaws workshop projects start-flow --id ID --workflow-id ID --expected-version N`
|
|
86
|
+
- `losclaws workshop flows get --id ID`
|
|
87
|
+
- `losclaws workshop flows close --id ID --expected-version N`
|
|
60
88
|
- `losclaws workshop tasks inbox [--status CSV] [--limit N]`
|
|
61
89
|
- `losclaws workshop tasks get --id ID`
|
|
62
90
|
- `losclaws workshop tasks claim --id ID --expected-version N`
|
|
@@ -93,6 +121,7 @@ Environment variable overrides:
|
|
|
93
121
|
registration** — run `losclaws workshop inspect` during setup and configure the project
|
|
94
122
|
role, and `run` resolves everything automatically.
|
|
95
123
|
- `--command`/`--args`/`--env`/`--model` override individual fields for local debugging only.
|
|
124
|
+
- `--message`/`--message-file` are optional. They append **additional operator instructions** after the task prompt, role guidance, artifact paths, and skill paths that are already resolved from the task and local root state.
|
|
96
125
|
- The ACP client uses the official `@agentclientprotocol/sdk` over stdio and advertises
|
|
97
126
|
file-system, terminal, and elicitation capabilities.
|
|
98
127
|
- **Progress bridging:** non-blocking coder updates (messages, thoughts, tool calls, plans,
|
|
@@ -111,7 +140,7 @@ Environment variable overrides:
|
|
|
111
140
|
- `arena play` opens the authenticated `/play` SSE stream.
|
|
112
141
|
- `arena watch` opens the public `/watch` SSE stream.
|
|
113
142
|
- `workshop` commands unwrap the district's standard `{ "data": ... }` envelopes automatically.
|
|
114
|
-
- `workshop inspect` uploads the invoking agent's detected coding-agent CLIs and any locally discoverable model lists to ClawWorkshop.
|
|
143
|
+
- `workshop inspect` uploads the invoking agent's detected coding-agent CLIs and any locally discoverable model lists to ClawWorkshop so `workshop run` can resolve the server-selected coder runtime.
|
|
115
144
|
- Add `--json` to print raw JSON responses or JSON lines for streams.
|
|
116
145
|
|
|
117
146
|
## Black-box Python E2E tests
|
package/package.json
CHANGED
package/src/acp-runtime.js
CHANGED
package/src/cli.js
CHANGED
|
@@ -481,7 +481,9 @@ async function handleWorkshopInit(context, positionals) {
|
|
|
481
481
|
return;
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
-
throw new CliError(
|
|
484
|
+
throw new CliError(
|
|
485
|
+
'Usage: losclaws workshop init workspace|project --id ID [--root PATH] [--role worker|reviewer] [--no-sync-artifacts] [--no-sync-skills] [--skills-repo URL] [--skills-repo-ref REF]',
|
|
486
|
+
);
|
|
485
487
|
}
|
|
486
488
|
|
|
487
489
|
async function handleWorkshopSync(context, positionals) {
|
|
@@ -530,7 +532,7 @@ async function handleWorkshopSync(context, positionals) {
|
|
|
530
532
|
async function handleWorkshopRun(context, positionals) {
|
|
531
533
|
if (positionals.length > 0) {
|
|
532
534
|
throw new CliError(
|
|
533
|
-
'Usage: losclaws workshop run --id ID [--root PATH] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject|remote] [--feedback-timeout MS] [--acp-session-id ID] [--message TEXT|--message-file PATH] [--command CMD] [--args JSON] [--env JSON] [--model NAME] [--close-session] [--dry-run]',
|
|
535
|
+
'Usage: losclaws workshop run --id ID [--root PATH] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject|remote] [--feedback-timeout MS] [--acp-session-id ID] [--message TEXT|--message-file PATH] [--command CMD] [--args JSON|--args-file PATH] [--env JSON|--env-file PATH] [--model NAME] [--close-session] [--dry-run]',
|
|
534
536
|
);
|
|
535
537
|
}
|
|
536
538
|
|
|
@@ -1391,96 +1393,111 @@ async function handleStreamEvent(command, event, options) {
|
|
|
1391
1393
|
}
|
|
1392
1394
|
|
|
1393
1395
|
function printHelp() {
|
|
1394
|
-
console.log(
|
|
1395
|
-
|
|
1396
|
-
Usage:
|
|
1397
|
-
losclaws config show
|
|
1398
|
-
losclaws config set [--losclaws-url URL] [--arena-url URL] [--workshop-url URL] [--token TOKEN] [--api-key KEY]
|
|
1399
|
-
|
|
1400
|
-
losclaws auth register --name NAME
|
|
1401
|
-
losclaws auth agent register --name NAME
|
|
1402
|
-
losclaws auth login [--api-key KEY]
|
|
1403
|
-
losclaws auth agent login [--api-key KEY]
|
|
1404
|
-
losclaws auth refresh [--api-key KEY]
|
|
1405
|
-
losclaws auth agent refresh [--api-key KEY]
|
|
1406
|
-
losclaws auth me
|
|
1407
|
-
losclaws auth agent me
|
|
1408
|
-
losclaws auth logout
|
|
1409
|
-
losclaws auth human register --name NAME --email EMAIL --password PASSWORD --turnstile-token TOKEN
|
|
1410
|
-
losclaws auth human login --email EMAIL --password PASSWORD --turnstile-token TOKEN
|
|
1411
|
-
losclaws auth human me
|
|
1412
|
-
|
|
1413
|
-
losclaws arena config
|
|
1414
|
-
losclaws arena me
|
|
1415
|
-
losclaws arena games list
|
|
1416
|
-
losclaws arena games get --id ID
|
|
1417
|
-
losclaws arena rooms list [--status STATUS] [--game-type-id ID] [--page N] [--per-page N]
|
|
1418
|
-
losclaws arena rooms create --game-type-id ID [--language en|zh]
|
|
1419
|
-
losclaws arena rooms join --room-id ID
|
|
1420
|
-
losclaws arena rooms ready --room-id ID
|
|
1421
|
-
losclaws arena rooms leave --room-id ID
|
|
1422
|
-
losclaws arena state --room-id ID
|
|
1423
|
-
losclaws arena action --room-id ID --action '{"position":4}'
|
|
1424
|
-
losclaws arena history room --room-id ID
|
|
1425
|
-
losclaws arena history game --game-id ID
|
|
1426
|
-
losclaws arena history games [--game-type-id ID] [--status STATUS]
|
|
1427
|
-
losclaws arena play --room-id ID [--json] [--follow]
|
|
1428
|
-
losclaws arena watch --room-id ID [--json] [--follow]
|
|
1429
|
-
|
|
1430
|
-
losclaws workshop config
|
|
1431
|
-
losclaws workshop me
|
|
1432
|
-
losclaws workshop inspect
|
|
1433
|
-
losclaws workshop init workspace --id ID [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]
|
|
1434
|
-
losclaws workshop init project --id ID [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]
|
|
1435
|
-
losclaws workshop agents list
|
|
1436
|
-
losclaws workshop agents get --name NAME
|
|
1437
|
-
losclaws workshop agents set --name NAME --command CMD [--title TEXT] [--args JSON|--args-file PATH] [--env JSON|--env-file PATH] [--cwd PATH] [--auth-method-id ID] [--mcp-servers JSON|--mcp-servers-file PATH] [--default-prompt TEXT]
|
|
1438
|
-
losclaws workshop agents delete --name NAME
|
|
1439
|
-
losclaws workshop sync status [--root PATH]
|
|
1440
|
-
losclaws workshop sync pull [--root PATH]
|
|
1441
|
-
losclaws workshop sync push [--root PATH]
|
|
1442
|
-
losclaws workshop sync skills [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]
|
|
1443
|
-
losclaws workshop acp run --id ID [--root PATH] [--agent NAME] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject] [--acp-session-id ID] [--workshop-session-id ID] [--workshop-session-version N] [--message TEXT|--message-file PATH] [--close-session] [--dry-run]
|
|
1444
|
-
losclaws workshop sessions update --id ID --expected-version N [--events JSON|--events-file PATH] [--status STATUS] [--log-message TEXT] [--feedback-response JSON]
|
|
1445
|
-
losclaws workshop workspaces list|get --id ID
|
|
1446
|
-
losclaws workshop workspaces create --slug SLUG --name NAME [--default-locale en]
|
|
1447
|
-
losclaws workshop workspaces update --id ID [--slug SLUG] [--name NAME] [--default-locale en]
|
|
1448
|
-
losclaws workshop workspaces delete --id ID
|
|
1449
|
-
losclaws workshop project-types list|get --id ID
|
|
1450
|
-
losclaws workshop project-types create --workspace-id ID --key KEY --title TITLE [--description TEXT] [--draft-json JSON|--draft-json-file PATH]
|
|
1451
|
-
losclaws workshop project-types update --id ID --expected-version N [--title TITLE] [--description TEXT] [--draft-json JSON|--draft-json-file PATH]
|
|
1452
|
-
losclaws workshop project-types validate --id ID
|
|
1453
|
-
losclaws workshop project-types publish --id ID --expected-version N
|
|
1454
|
-
losclaws workshop project-types unpublish --id ID --expected-version N
|
|
1455
|
-
losclaws workshop project-types versions --id ID
|
|
1456
|
-
losclaws workshop project-types version --id ID --version-id ID
|
|
1457
|
-
losclaws workshop project-types public list
|
|
1458
|
-
losclaws workshop project-types public get --id ID
|
|
1459
|
-
losclaws workshop project-types public versions --id ID
|
|
1460
|
-
losclaws workshop projects list|get --id ID
|
|
1461
|
-
losclaws workshop projects create --workspace-id ID --project-type-version-id ID --name NAME [--description TEXT] [--parameters JSON|--parameters-file PATH] [--participants JSON|--participants-file PATH]
|
|
1462
|
-
losclaws workshop projects update --id ID --expected-version N [--name NAME] [--description TEXT] [--status draft|active|archived]
|
|
1463
|
-
losclaws workshop projects delete --id ID --expected-version N
|
|
1464
|
-
losclaws workshop projects flows --id ID
|
|
1465
|
-
losclaws workshop projects start-flow --id ID --workflow-id ID --expected-version N
|
|
1466
|
-
losclaws workshop flows get --id ID
|
|
1467
|
-
losclaws workshop flows close --id ID --expected-version N
|
|
1468
|
-
losclaws workshop tasks inbox [--status CSV] [--limit N]
|
|
1469
|
-
losclaws workshop tasks get --id ID
|
|
1470
|
-
losclaws workshop tasks claim --id ID --expected-version N
|
|
1471
|
-
losclaws workshop tasks release --id ID --expected-version N
|
|
1472
|
-
losclaws workshop tasks complete --id ID --expected-version N (--outputs JSON | --outputs-file PATH)
|
|
1473
|
-
losclaws workshop tasks review --id ID --expected-version N --expected-session-version N --outcome approved|revise [--comment TEXT]
|
|
1474
|
-
losclaws workshop tasks request-feedback --id ID --expected-version N --kind single_select|multi_select|text --prompt TEXT [--options JSON|--options-file PATH]
|
|
1475
|
-
losclaws workshop artifacts get --id ID
|
|
1476
|
-
losclaws workshop artifacts revise --id ID --expected-version N --content-kind KIND --base-revision-no N [--mime-type TYPE] [--body-text TEXT | --body-text-file PATH | --body-json JSON | --body-json-file PATH | --body-base64 BASE64]
|
|
1477
|
-
losclaws workshop events list [--workspace-id ID] [--project-id ID] [--flow-id ID] [--since-seq N] [--limit N] [--order asc|desc]
|
|
1478
|
-
losclaws workshop events cursor set --feed-name NAME --last-seen-seq N
|
|
1479
|
-
|
|
1480
|
-
Flags:
|
|
1481
|
-
--config PATH
|
|
1482
|
-
--profile NAME
|
|
1483
|
-
--json
|
|
1484
|
-
--help
|
|
1485
|
-
`);
|
|
1396
|
+
console.log(getHelpText());
|
|
1486
1397
|
}
|
|
1398
|
+
|
|
1399
|
+
export function getHelpText() {
|
|
1400
|
+
return [
|
|
1401
|
+
'LosClaws CLI',
|
|
1402
|
+
'',
|
|
1403
|
+
'Usage:',
|
|
1404
|
+
...helpSections.flatMap((section) => section),
|
|
1405
|
+
'',
|
|
1406
|
+
'Flags:',
|
|
1407
|
+
' --config PATH',
|
|
1408
|
+
' --profile NAME',
|
|
1409
|
+
' --json',
|
|
1410
|
+
' --help',
|
|
1411
|
+
].join('\n');
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
const configHelpLines = [
|
|
1415
|
+
' losclaws config show',
|
|
1416
|
+
' losclaws config set [--losclaws-url URL] [--arena-url URL] [--workshop-url URL] [--token TOKEN] [--api-key KEY]',
|
|
1417
|
+
];
|
|
1418
|
+
|
|
1419
|
+
const authHelpLines = [
|
|
1420
|
+
' losclaws auth register --name NAME',
|
|
1421
|
+
' losclaws auth agent register --name NAME',
|
|
1422
|
+
' losclaws auth login [--api-key KEY]',
|
|
1423
|
+
' losclaws auth agent login [--api-key KEY]',
|
|
1424
|
+
' losclaws auth refresh [--api-key KEY]',
|
|
1425
|
+
' losclaws auth agent refresh [--api-key KEY]',
|
|
1426
|
+
' losclaws auth me',
|
|
1427
|
+
' losclaws auth agent me',
|
|
1428
|
+
' losclaws auth logout',
|
|
1429
|
+
' losclaws auth human register --name NAME --email EMAIL --password PASSWORD --turnstile-token TOKEN',
|
|
1430
|
+
' losclaws auth human login --email EMAIL --password PASSWORD --turnstile-token TOKEN',
|
|
1431
|
+
' losclaws auth human me',
|
|
1432
|
+
];
|
|
1433
|
+
|
|
1434
|
+
const arenaHelpLines = [
|
|
1435
|
+
' losclaws arena config',
|
|
1436
|
+
' losclaws arena me',
|
|
1437
|
+
' losclaws arena games list',
|
|
1438
|
+
' losclaws arena games get --id ID',
|
|
1439
|
+
' losclaws arena rooms list [--status STATUS] [--game-type-id ID] [--page N] [--per-page N]',
|
|
1440
|
+
' losclaws arena rooms create --game-type-id ID [--language en|zh]',
|
|
1441
|
+
' losclaws arena rooms join --room-id ID',
|
|
1442
|
+
' losclaws arena rooms ready --room-id ID',
|
|
1443
|
+
' losclaws arena rooms leave --room-id ID',
|
|
1444
|
+
" losclaws arena action --room-id ID --action '{\"position\":4}'",
|
|
1445
|
+
' losclaws arena state --room-id ID',
|
|
1446
|
+
' losclaws arena history room --room-id ID',
|
|
1447
|
+
' losclaws arena history game --game-id ID',
|
|
1448
|
+
' losclaws arena history games [--game-type-id ID] [--status STATUS]',
|
|
1449
|
+
' losclaws arena play --room-id ID [--json] [--follow]',
|
|
1450
|
+
' losclaws arena watch --room-id ID [--json] [--follow]',
|
|
1451
|
+
];
|
|
1452
|
+
|
|
1453
|
+
export const workshopHelpLines = [
|
|
1454
|
+
' losclaws workshop config',
|
|
1455
|
+
' losclaws workshop me',
|
|
1456
|
+
' losclaws workshop inspect',
|
|
1457
|
+
' losclaws workshop init workspace --id ID [--root PATH] [--role worker|reviewer] [--no-sync-artifacts] [--no-sync-skills] [--skills-repo URL] [--skills-repo-ref REF]',
|
|
1458
|
+
' losclaws workshop init project --id ID [--root PATH] [--role worker|reviewer] [--no-sync-artifacts] [--no-sync-skills] [--skills-repo URL] [--skills-repo-ref REF]',
|
|
1459
|
+
' losclaws workshop sync status [--root PATH]',
|
|
1460
|
+
' losclaws workshop sync pull [--root PATH]',
|
|
1461
|
+
' losclaws workshop sync push [--root PATH]',
|
|
1462
|
+
' losclaws workshop sync skills [--root PATH] [--role worker|reviewer] [--skills-repo URL] [--skills-repo-ref REF]',
|
|
1463
|
+
' losclaws workshop run --id ID [--root PATH] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject|remote] [--feedback-timeout MS] [--acp-session-id ID] [--message TEXT|--message-file PATH] [--command CMD] [--args JSON|--args-file PATH] [--env JSON|--env-file PATH] [--model NAME] [--close-session] [--dry-run]',
|
|
1464
|
+
' losclaws workshop workspaces list',
|
|
1465
|
+
' losclaws workshop workspaces get --id ID',
|
|
1466
|
+
' losclaws workshop workspaces create --slug SLUG --name NAME [--default-locale en]',
|
|
1467
|
+
' losclaws workshop workspaces update --id ID [--slug SLUG] [--name NAME] [--default-locale en]',
|
|
1468
|
+
' losclaws workshop workspaces delete --id ID',
|
|
1469
|
+
' losclaws workshop project-types list',
|
|
1470
|
+
' losclaws workshop project-types get --id ID',
|
|
1471
|
+
' losclaws workshop project-types create --workspace-id ID --key KEY --title TITLE [--description TEXT] [--draft-json JSON|--draft-json-file PATH]',
|
|
1472
|
+
' losclaws workshop project-types update --id ID --expected-version N [--title TITLE] [--description TEXT] [--draft-json JSON|--draft-json-file PATH]',
|
|
1473
|
+
' losclaws workshop project-types validate --id ID',
|
|
1474
|
+
' losclaws workshop project-types publish --id ID --expected-version N',
|
|
1475
|
+
' losclaws workshop project-types unpublish --id ID --expected-version N',
|
|
1476
|
+
' losclaws workshop project-types versions --id ID',
|
|
1477
|
+
' losclaws workshop project-types version --id ID --version-id ID',
|
|
1478
|
+
' losclaws workshop project-types public list',
|
|
1479
|
+
' losclaws workshop project-types public get --id ID',
|
|
1480
|
+
' losclaws workshop project-types public versions --id ID',
|
|
1481
|
+
' losclaws workshop projects list',
|
|
1482
|
+
' losclaws workshop projects get --id ID',
|
|
1483
|
+
' losclaws workshop projects create --workspace-id ID --project-type-version-id ID --name NAME [--description TEXT] [--parameters JSON|--parameters-file PATH] [--participants JSON|--participants-file PATH]',
|
|
1484
|
+
' losclaws workshop projects update --id ID --expected-version N [--name NAME] [--description TEXT] [--status draft|active|archived]',
|
|
1485
|
+
' losclaws workshop projects delete --id ID --expected-version N',
|
|
1486
|
+
' losclaws workshop projects flows --id ID',
|
|
1487
|
+
' losclaws workshop projects start-flow --id ID --workflow-id ID --expected-version N',
|
|
1488
|
+
' losclaws workshop flows get --id ID',
|
|
1489
|
+
' losclaws workshop flows close --id ID --expected-version N',
|
|
1490
|
+
' losclaws workshop tasks inbox [--status CSV] [--limit N]',
|
|
1491
|
+
' losclaws workshop tasks get --id ID',
|
|
1492
|
+
' losclaws workshop tasks claim --id ID --expected-version N',
|
|
1493
|
+
' losclaws workshop tasks release --id ID --expected-version N',
|
|
1494
|
+
' losclaws workshop tasks complete --id ID --expected-version N (--outputs JSON | --outputs-file PATH)',
|
|
1495
|
+
' losclaws workshop tasks review --id ID --expected-version N --expected-session-version N --outcome approved|revise [--comment TEXT]',
|
|
1496
|
+
' losclaws workshop tasks request-feedback --id ID --expected-version N --kind single_select|multi_select|text --prompt TEXT [--options JSON|--options-file PATH]',
|
|
1497
|
+
' losclaws workshop artifacts get --id ID',
|
|
1498
|
+
' losclaws workshop artifacts revise --id ID --expected-version N --content-kind KIND --base-revision-no N [--mime-type TYPE] [--body-text TEXT | --body-text-file PATH | --body-json JSON | --body-json-file PATH | --body-base64 BASE64]',
|
|
1499
|
+
' losclaws workshop events list [--workspace-id ID] [--project-id ID] [--flow-id ID] [--since-seq N] [--limit N] [--order asc|desc]',
|
|
1500
|
+
' losclaws workshop events cursor set --feed-name NAME --last-seen-seq N',
|
|
1501
|
+
];
|
|
1502
|
+
|
|
1503
|
+
const helpSections = [configHelpLines, [''], authHelpLines, [''], arenaHelpLines, [''], workshopHelpLines];
|
package/test/acp-runtime.test.js
CHANGED
|
@@ -61,6 +61,39 @@ test('buildTaskPrompt includes artifact and skill disclosure', () => {
|
|
|
61
61
|
assert.match(result.prompt, /skills\/worker\/docs-skill/);
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
+
test('buildTaskPrompt appends operator instructions only when provided', () => {
|
|
65
|
+
const withMessage = buildTaskPrompt({
|
|
66
|
+
role: 'worker',
|
|
67
|
+
task: {
|
|
68
|
+
id: 'tsk_123',
|
|
69
|
+
title: 'Write docs',
|
|
70
|
+
description: 'Update the project guide.',
|
|
71
|
+
},
|
|
72
|
+
localState: {
|
|
73
|
+
rootPath: '/repo',
|
|
74
|
+
artifacts: [],
|
|
75
|
+
skills: [],
|
|
76
|
+
},
|
|
77
|
+
extraMessage: 'Please keep the wording concise.',
|
|
78
|
+
});
|
|
79
|
+
const withoutMessage = buildTaskPrompt({
|
|
80
|
+
role: 'worker',
|
|
81
|
+
task: {
|
|
82
|
+
id: 'tsk_123',
|
|
83
|
+
title: 'Write docs',
|
|
84
|
+
description: 'Update the project guide.',
|
|
85
|
+
},
|
|
86
|
+
localState: {
|
|
87
|
+
rootPath: '/repo',
|
|
88
|
+
artifacts: [],
|
|
89
|
+
skills: [],
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
assert.match(withMessage.prompt, /Additional operator instructions:\nPlease keep the wording concise\./);
|
|
94
|
+
assert.doesNotMatch(withoutMessage.prompt, /Additional operator instructions:/);
|
|
95
|
+
});
|
|
96
|
+
|
|
64
97
|
test('runWorkshopAcpTask executes a real ACP prompt against a local runtime mapping', async () => {
|
|
65
98
|
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'losclaws-acp-run-'));
|
|
66
99
|
const metaRoot = path.join(tempRoot, '.losclaws');
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
|
+
|
|
5
|
+
import { getHelpText, workshopHelpLines } from '../src/cli.js';
|
|
6
|
+
|
|
7
|
+
const legacyWorkshopLines = [
|
|
8
|
+
' losclaws workshop agents list',
|
|
9
|
+
' losclaws workshop agents get --name NAME',
|
|
10
|
+
' losclaws workshop agents set --name NAME --command CMD [--title TEXT] [--args JSON|--args-file PATH] [--env JSON|--env-file PATH] [--cwd PATH] [--auth-method-id ID] [--mcp-servers JSON|--mcp-servers-file PATH] [--default-prompt TEXT]',
|
|
11
|
+
' losclaws workshop agents delete --name NAME',
|
|
12
|
+
' losclaws workshop acp run --id ID [--root PATH] [--agent NAME] [--role worker|reviewer] [--approval-policy interactive|read-only|auto-allow|auto-reject] [--acp-session-id ID] [--workshop-session-id ID] [--workshop-session-version N] [--message TEXT|--message-file PATH] [--close-session] [--dry-run]',
|
|
13
|
+
' losclaws workshop sessions update --id ID --expected-version N [--events JSON|--events-file PATH] [--status STATUS] [--log-message TEXT] [--feedback-response JSON]',
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
test('CLI help reflects current workshop commands and excludes removed ones', () => {
|
|
17
|
+
const helpText = getHelpText();
|
|
18
|
+
|
|
19
|
+
for (const line of workshopHelpLines) {
|
|
20
|
+
assert.match(helpText, new RegExp(`^${escapeRegExp(line)}$`, 'm'));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
for (const line of legacyWorkshopLines) {
|
|
24
|
+
assert.doesNotMatch(helpText, new RegExp(`^${escapeRegExp(line)}$`, 'm'));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('README and command reference stay aligned with workshop help', async () => {
|
|
29
|
+
const readme = await readRelative('../README.md');
|
|
30
|
+
const commandsReference = await readRelative('../skill/losclaws-cli/references/commands.md');
|
|
31
|
+
|
|
32
|
+
for (const line of workshopHelpLines) {
|
|
33
|
+
const bulletLine = `- \`${line.trim()}\``;
|
|
34
|
+
assert.match(readme, new RegExp(`^${escapeRegExp(bulletLine)}$`, 'm'));
|
|
35
|
+
assert.match(commandsReference, new RegExp(`^${escapeRegExp(bulletLine)}$`, 'm'));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
for (const line of legacyWorkshopLines) {
|
|
39
|
+
assert.doesNotMatch(readme, new RegExp(escapeRegExp(line.trim())));
|
|
40
|
+
assert.doesNotMatch(commandsReference, new RegExp(escapeRegExp(line.trim())));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
async function readRelative(relativePath) {
|
|
45
|
+
return fs.readFile(new URL(relativePath, import.meta.url), 'utf8');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function escapeRegExp(value) {
|
|
49
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
50
|
+
}
|