@eve-horizon/cli 0.2.10 → 0.2.12

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/dist/lib/git.js CHANGED
@@ -5,6 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.isGitSha = isGitSha;
7
7
  exports.resolveGitRef = resolveGitRef;
8
+ exports.getGitRoot = getGitRoot;
9
+ exports.isGitDirty = isGitDirty;
10
+ exports.getGitBranch = getGitBranch;
11
+ exports.resolveGitBranch = resolveGitBranch;
8
12
  const node_child_process_1 = require("node:child_process");
9
13
  const node_path_1 = __importDefault(require("node:path"));
10
14
  const client_js_1 = require("./client.js");
@@ -50,12 +54,55 @@ async function resolveGitRef(context, projectId, ref, repoDir) {
50
54
  'Make sure the ref exists in the repository, or use a 40-character SHA.');
51
55
  }
52
56
  }
53
- function getGitRoot() {
57
+ function getGitRoot(repoDir) {
54
58
  try {
55
59
  return (0, node_child_process_1.execSync)('git rev-parse --show-toplevel', {
60
+ cwd: repoDir,
61
+ encoding: 'utf-8',
62
+ stdio: ['pipe', 'pipe', 'pipe'],
63
+ }).trim();
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ function isGitDirty(repoDir) {
70
+ try {
71
+ const status = (0, node_child_process_1.execSync)('git status --porcelain', {
72
+ cwd: repoDir,
73
+ encoding: 'utf-8',
74
+ stdio: ['pipe', 'pipe', 'pipe'],
75
+ }).trim();
76
+ return status.length > 0;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ function getGitBranch(repoDir) {
83
+ try {
84
+ const branch = (0, node_child_process_1.execSync)('git branch --show-current', {
85
+ cwd: repoDir,
56
86
  encoding: 'utf-8',
57
87
  stdio: ['pipe', 'pipe', 'pipe'],
58
88
  }).trim();
89
+ return branch || null;
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ }
95
+ function resolveGitBranch(repoDir, ref) {
96
+ if (!ref || isGitSha(ref)) {
97
+ return null;
98
+ }
99
+ try {
100
+ (0, node_child_process_1.execSync)(`git show-ref --verify --quiet refs/heads/${ref}`, {
101
+ cwd: repoDir,
102
+ encoding: 'utf-8',
103
+ stdio: ['pipe', 'pipe', 'pipe'],
104
+ });
105
+ return ref;
59
106
  }
60
107
  catch {
61
108
  return null;
package/dist/lib/help.js CHANGED
@@ -33,8 +33,12 @@ exports.HELP = {
33
33
  },
34
34
  ensure: {
35
35
  description: 'Create org if it doesn\'t exist, or return existing',
36
- usage: 'eve org ensure <name>',
37
- examples: ['eve org ensure "My Company"'],
36
+ usage: 'eve org ensure <name> [--slug <slug>] [--id <id>]',
37
+ options: [
38
+ '--slug <slug> Organization slug (used in URLs)',
39
+ '--id <id> Organization ID override (optional)',
40
+ ],
41
+ examples: ['eve org ensure "My Company" --slug myco'],
38
42
  },
39
43
  update: {
40
44
  description: 'Update organization',
@@ -45,11 +49,26 @@ exports.HELP = {
45
49
  usage: 'eve org delete <org_id>',
46
50
  examples: ['eve org delete org_xxx'],
47
51
  },
52
+ members: {
53
+ description: 'Manage organization members (list, add, remove)',
54
+ usage: 'eve org members [list|add|remove] [options]',
55
+ options: [
56
+ '--org <id> Organization ID (uses profile default)',
57
+ '--email <email> Email for add',
58
+ '--role <role> Role: member, admin, owner (default: member)',
59
+ ],
60
+ examples: [
61
+ 'eve org members --org org_xxx',
62
+ 'eve org members add user@example.com --role admin --org org_xxx',
63
+ 'eve org members remove user_abc --org org_xxx',
64
+ ],
65
+ },
48
66
  },
49
67
  examples: [
50
68
  'eve org ensure "Acme Corp"',
51
69
  'eve org list --limit 20',
52
70
  'eve org delete org_xxx',
71
+ 'eve org members --org org_xxx',
53
72
  ],
54
73
  },
55
74
  project: {
@@ -104,6 +123,20 @@ exports.HELP = {
104
123
  'eve project sync --path ./custom-manifest.yaml',
105
124
  ],
106
125
  },
126
+ members: {
127
+ description: 'Manage project members (list, add, remove)',
128
+ usage: 'eve project members [list|add|remove] [options]',
129
+ options: [
130
+ '--project <id> Project ID (uses profile default)',
131
+ '--email <email> Email for add',
132
+ '--role <role> Role: member, admin, owner (default: member)',
133
+ ],
134
+ examples: [
135
+ 'eve project members --project proj_xxx',
136
+ 'eve project members add user@example.com --role admin --project proj_xxx',
137
+ 'eve project members remove user_abc --project proj_xxx',
138
+ ],
139
+ },
107
140
  },
108
141
  },
109
142
  manifest: {
@@ -241,6 +274,8 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
241
274
  '--assignee <id> Assign to agent/user',
242
275
  '--defer-until <date> Hide until date (ISO 8601)',
243
276
  '--due-at <date> Deadline (ISO 8601)',
277
+ '--env <name> Environment name for persistent execution',
278
+ '--execution-mode <mode> Execution mode: persistent|ephemeral',
244
279
  '',
245
280
  'Harness selection (top-level job fields):',
246
281
  '--harness <name> Preferred harness, e.g., mclaude',
@@ -281,9 +316,11 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
281
316
  },
282
317
  list: {
283
318
  description: 'List jobs in a project',
284
- usage: 'eve job list [--project <id>] [--phase <phase>] [--assignee <id>] [--since <time>] [--stuck]',
319
+ usage: 'eve job list [--project <id>] [--phase <phase>] [--assignee <id>] [--since <time>] [--stuck] [--all --org <id>]',
285
320
  options: [
286
321
  '--project <id> Project ID (or use profile default)',
322
+ '--all Admin mode: list across projects',
323
+ '--org <id> Org filter for --all',
287
324
  '--phase <phase> Filter by phase',
288
325
  '--assignee <id> Filter by assignee',
289
326
  '--priority <n> Filter by priority',
@@ -297,6 +334,7 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
297
334
  'eve job list --phase active',
298
335
  'eve job list --since 1h',
299
336
  'eve job list --stuck',
337
+ 'eve job list --all --org org_xxx',
300
338
  ],
301
339
  },
302
340
  ready: {
@@ -457,18 +495,21 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
457
495
  },
458
496
  result: {
459
497
  description: 'Get job execution result',
460
- usage: 'eve job result <job-id> [--attempt <n>]',
498
+ usage: 'eve job result <job-id> [--format text|json|full] [--attempt <n>]',
461
499
  options: [
500
+ '--format <mode> Output format: text|json|full (default: text)',
462
501
  '--attempt <n> Attempt number (default: latest)',
463
502
  ],
464
503
  examples: ['eve job result MyProj-abc123'],
465
504
  },
466
505
  wait: {
467
506
  description: 'Wait for job completion, polling until done',
468
- usage: 'eve job wait <job-id> [--timeout <seconds>] [--quiet]',
507
+ usage: 'eve job wait <job-id> [--timeout <seconds>] [--quiet] [--verbose] [--json]',
469
508
  options: [
470
509
  '--timeout <seconds> Max wait time (default: 300)',
471
510
  '--quiet Suppress progress output',
511
+ '--verbose Show phase/status transitions',
512
+ '--json Output JSON summary',
472
513
  ],
473
514
  examples: ['eve job wait MyProj-abc123', 'eve job wait MyProj-abc123 --timeout 600'],
474
515
  },
@@ -481,6 +522,16 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
481
522
  ],
482
523
  examples: ['eve job follow MyProj-abc123'],
483
524
  },
525
+ watch: {
526
+ description: 'Combined status polling + log streaming',
527
+ usage: 'eve job watch <job-id>',
528
+ examples: ['eve job watch MyProj-abc123'],
529
+ },
530
+ 'runner-logs': {
531
+ description: 'Stream runner pod logs (kubectl required)',
532
+ usage: 'eve job runner-logs <job-id>',
533
+ examples: ['eve job runner-logs MyProj-abc123'],
534
+ },
484
535
  },
485
536
  examples: [
486
537
  'eve job create --description "Fix the bug in auth.ts"',
@@ -510,13 +561,14 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
510
561
  },
511
562
  agents: {
512
563
  description: 'Inspect agent policy config and harness capabilities for orchestration. Default profile: primary-orchestrator.',
513
- usage: 'eve agents config [--path <dir>] [--no-harnesses]',
564
+ usage: 'eve agents <config|sync|runtime-status> [options]',
514
565
  subcommands: {
515
566
  config: {
516
567
  description: 'Show agent policy (profiles/councils) and harness availability',
517
568
  usage: 'eve agents config [--path <dir>] [--no-harnesses]',
518
569
  options: [
519
570
  '--path <dir> Repository root to inspect (default: cwd)',
571
+ '--repo-dir <dir> Alias for --path',
520
572
  '--no-harnesses Skip harness availability lookup',
521
573
  ],
522
574
  examples: [
@@ -525,8 +577,40 @@ Jobs default to 'ready' phase, making them immediately schedulable.`,
525
577
  'eve agents config --path ../my-repo',
526
578
  ],
527
579
  },
580
+ sync: {
581
+ description: 'Sync agents.yaml/teams.yaml/chat.yaml to the API',
582
+ usage: 'eve agents sync --project <id> --ref <sha|branch> [--repo-dir <path>]',
583
+ options: [
584
+ '--project <id> Project ID (uses profile default)',
585
+ '--ref <ref> Git ref to sync (required unless --local)',
586
+ '--local Allow local sync (only for localhost/lvh.me API)',
587
+ '--allow-dirty Allow syncing a dirty working tree',
588
+ '--repo-dir <path> Repository root (default: cwd)',
589
+ '--force-nonlocal Allow --local against non-local API URL',
590
+ ],
591
+ examples: [
592
+ 'eve agents sync --project proj_xxx --ref main',
593
+ 'eve agents sync --project proj_xxx --ref HEAD',
594
+ 'eve agents sync --project proj_xxx --local --allow-dirty',
595
+ ],
596
+ },
597
+ 'runtime-status': {
598
+ description: 'Show agent runtime status for an org',
599
+ usage: 'eve agents runtime-status [--org <id>]',
600
+ options: [
601
+ '--org <id> Organization ID (uses profile default)',
602
+ ],
603
+ examples: [
604
+ 'eve agents runtime-status --org org_xxx',
605
+ 'eve agents runtime-status --json',
606
+ ],
607
+ },
528
608
  },
529
- examples: ['eve agents config --json'],
609
+ examples: [
610
+ 'eve agents config --json',
611
+ 'eve agents sync --project proj_xxx --ref main',
612
+ 'eve agents runtime-status --org org_xxx',
613
+ ],
530
614
  },
531
615
  profile: {
532
616
  description: `Manage repo-local CLI profiles. Profiles store defaults (API URL, org, project) so you don't
@@ -573,7 +657,7 @@ and switching profiles won't affect other checkouts.`,
573
657
  '--default-ssh-key <path> Default SSH key path for auth login',
574
658
  ],
575
659
  examples: [
576
- 'eve profile create local --api-url http://localhost:4701',
660
+ 'eve profile create local --api-url http://localhost:4801',
577
661
  'eve profile create prod --api-url https://api.example.com --org org_xxx',
578
662
  ],
579
663
  },
@@ -610,7 +694,7 @@ and switching profiles won't affect other checkouts.`,
610
694
  auth: {
611
695
  description: `Authenticate with Eve Horizon. Auth is optional for local development but required
612
696
  for cloud deployments. Credentials are stored globally per API URL.`,
613
- usage: 'eve auth <login|logout|status|whoami|bootstrap|sync|creds|token|mint>',
697
+ usage: 'eve auth <login|logout|status|whoami|bootstrap|sync|creds|token|mint|permissions>',
614
698
  subcommands: {
615
699
  login: {
616
700
  description: 'Login via GitHub SSH challenge (default) or Supabase (legacy)',
@@ -731,6 +815,14 @@ for cloud deployments. Credentials are stored globally per API URL.`,
731
815
  'eve auth creds --json',
732
816
  ],
733
817
  },
818
+ permissions: {
819
+ description: 'Show the permission matrix (which permissions each role has)',
820
+ usage: 'eve auth permissions',
821
+ examples: [
822
+ 'eve auth permissions',
823
+ 'eve auth permissions --json',
824
+ ],
825
+ },
734
826
  },
735
827
  },
736
828
  env: {
@@ -800,9 +892,20 @@ for cloud deployments. Credentials are stored globally per API URL.`,
800
892
  'eve env diagnose proj_xxx staging --events 20',
801
893
  ],
802
894
  },
895
+ services: {
896
+ description: 'Show per-service pod status summary (k8s-only)',
897
+ usage: 'eve env services <project> <env>',
898
+ options: [
899
+ '<project> Project ID or slug',
900
+ '<env> Environment name',
901
+ ],
902
+ examples: [
903
+ 'eve env services proj_xxx staging',
904
+ ],
905
+ },
803
906
  logs: {
804
907
  description: 'Fetch logs for a service in an environment (k8s-only)',
805
- usage: 'eve env logs <project> <env> <service> [--since <seconds>] [--tail <n>] [--grep <text>]',
908
+ usage: 'eve env logs <project> <env> <service> [--since <seconds>] [--tail <n>] [--grep <text>] [--pod <name>] [--container <name>] [--previous] [--all-pods]',
806
909
  options: [
807
910
  '<project> Project ID or slug',
808
911
  '<env> Environment name (staging, production, test)',
@@ -810,10 +913,15 @@ for cloud deployments. Credentials are stored globally per API URL.`,
810
913
  '--since <seconds> Seconds since now (optional)',
811
914
  '--tail <n> Tail line count (optional)',
812
915
  '--grep <text> Filter lines containing text (optional)',
916
+ '--pod <name> Specific pod name (optional)',
917
+ '--container <name> Specific container name (optional)',
918
+ '--previous Use previous container logs (optional)',
919
+ '--all-pods Fetch logs for all matching pods (optional)',
813
920
  ],
814
921
  examples: [
815
922
  'eve env logs proj_xxx staging api --tail 200',
816
923
  'eve env logs proj_xxx staging api --since 3600 --grep ERROR',
924
+ 'eve env logs proj_xxx staging api --all-pods',
817
925
  ],
818
926
  },
819
927
  delete: {
@@ -837,6 +945,7 @@ for cloud deployments. Credentials are stored globally per API URL.`,
837
945
  'eve env deploy staging --ref abc123',
838
946
  'eve env logs proj_xxx staging api --tail 200',
839
947
  'eve env diagnose proj_xxx staging',
948
+ 'eve env services proj_xxx staging',
840
949
  ],
841
950
  },
842
951
  api: {
@@ -1008,7 +1117,7 @@ for cloud deployments. Credentials are stored globally per API URL.`,
1008
1117
  examples: ['eve pipeline list', 'eve pipeline run deploy-test --ref 0123456789abcdef0123456789abcdef01234567 --env test', 'eve pipeline logs deploy-test prun_xxx --follow'],
1009
1118
  },
1010
1119
  workflow: {
1011
- description: 'Inspect workflows defined in the project manifest (read-only in Phase 1).',
1120
+ description: 'Inspect and invoke workflows defined in the project manifest.',
1012
1121
  usage: 'eve workflow <subcommand> [options]',
1013
1122
  subcommands: {
1014
1123
  list: {
@@ -1024,8 +1133,42 @@ for cloud deployments. Credentials are stored globally per API URL.`,
1024
1133
  usage: 'eve workflow show <project> <name>',
1025
1134
  examples: ['eve workflow show proj_xxx qa-review', 'eve workflow show my-project release-notes'],
1026
1135
  },
1136
+ run: {
1137
+ description: 'Invoke a workflow (fire-and-forget)',
1138
+ usage: 'eve workflow run [project] <workflow-name> [--input <json>]',
1139
+ options: [
1140
+ '--input <json> Input payload (JSON string)',
1141
+ '--project <id> Project ID (uses profile default)',
1142
+ ],
1143
+ examples: [
1144
+ 'eve workflow run qa-review --input "{\"task\":\"audit\"}"',
1145
+ 'eve workflow run proj_xxx release-notes --input "{\"tag\":\"v1.2.3\"}"',
1146
+ ],
1147
+ },
1148
+ invoke: {
1149
+ description: 'Invoke a workflow and wait for result',
1150
+ usage: 'eve workflow invoke [project] <workflow-name> [--input <json>] [--no-wait]',
1151
+ options: [
1152
+ '--input <json> Input payload (JSON string)',
1153
+ '--no-wait Return immediately without waiting',
1154
+ '--project <id> Project ID (uses profile default)',
1155
+ ],
1156
+ examples: [
1157
+ 'eve workflow invoke qa-review --input "{\"task\":\"audit\"}"',
1158
+ 'eve workflow invoke proj_xxx release-notes --no-wait',
1159
+ ],
1160
+ },
1161
+ logs: {
1162
+ description: 'Show logs for a workflow job',
1163
+ usage: 'eve workflow logs <job-id>',
1164
+ examples: ['eve workflow logs job_abc123'],
1165
+ },
1027
1166
  },
1028
- examples: ['eve workflow list', 'eve workflow show proj_xxx qa-review'],
1167
+ examples: [
1168
+ 'eve workflow list',
1169
+ 'eve workflow show proj_xxx qa-review',
1170
+ 'eve workflow run qa-review --input "{\"task\":\"audit\"}"',
1171
+ ],
1029
1172
  },
1030
1173
  event: {
1031
1174
  description: 'Emit and inspect events. Apps use this to participate in the Event Ecosystem.',
@@ -1072,17 +1215,48 @@ for cloud deployments. Credentials are stored globally per API URL.`,
1072
1215
  'eve event emit --type app.ready --source app --project proj_xxx',
1073
1216
  ],
1074
1217
  },
1218
+ packs: {
1219
+ description: 'Manage AgentPack lockfile and resolution.',
1220
+ usage: 'eve packs <subcommand> [options]',
1221
+ subcommands: {
1222
+ status: {
1223
+ description: 'Show resolved packs from lockfile, effective config stats, and drift detection',
1224
+ usage: 'eve packs status [--path <dir>]',
1225
+ options: [
1226
+ '--path <dir> Repository root to inspect (default: cwd)',
1227
+ ],
1228
+ examples: [
1229
+ 'eve packs status',
1230
+ 'eve packs status --path ../my-repo',
1231
+ ],
1232
+ },
1233
+ resolve: {
1234
+ description: 'Resolve packs and merge configs (delegates to agents sync)',
1235
+ usage: 'eve packs resolve [--dry-run]',
1236
+ options: [
1237
+ '--dry-run Preview resolution without writing lockfile',
1238
+ '--path <dir> Repository root to inspect (default: cwd)',
1239
+ ],
1240
+ examples: [
1241
+ 'eve packs resolve --dry-run',
1242
+ 'eve packs resolve',
1243
+ ],
1244
+ },
1245
+ },
1246
+ examples: [
1247
+ 'eve packs status',
1248
+ 'eve packs resolve --dry-run',
1249
+ ],
1250
+ },
1075
1251
  skills: {
1076
- description: 'Install skills from skills.txt using openskills --universal.',
1252
+ description: 'Install skills from skills.txt using skills CLI.',
1077
1253
  usage: 'eve skills <subcommand> [options]',
1078
1254
  subcommands: {
1079
1255
  install: {
1080
1256
  description: 'Install skills from skills.txt manifest',
1081
- usage: 'eve skills install [--skip-installed] [--no-sync] [--no-commit]',
1257
+ usage: 'eve skills install [--skip-installed]',
1082
1258
  options: [
1083
1259
  '--skip-installed Skip skills that are already installed',
1084
- '--no-sync Skip AGENTS.md sync after install',
1085
- '--no-commit Skip committing AGENTS.md changes',
1086
1260
  ],
1087
1261
  examples: [
1088
1262
  'eve skills install',
@@ -1320,12 +1494,13 @@ eve-new-project-setup skill to complete configuration.`,
1320
1494
  },
1321
1495
  logs: {
1322
1496
  description: 'Fetch recent logs for a system service (admin only)',
1323
- usage: 'eve system logs <service> [--tail <n>]',
1497
+ usage: 'eve system logs <api|orchestrator|worker|agent-runtime|postgres> [--tail <n>]',
1324
1498
  options: [
1325
1499
  '--tail <n> Number of log lines (default: 100)',
1326
1500
  ],
1327
1501
  examples: [
1328
1502
  'eve system logs api',
1503
+ 'eve system logs agent-runtime --tail 200',
1329
1504
  'eve system logs worker --tail 200',
1330
1505
  ],
1331
1506
  },
@@ -1382,6 +1557,146 @@ eve-new-project-setup skill to complete configuration.`,
1382
1557
  'eve system orchestrator status',
1383
1558
  ],
1384
1559
  },
1560
+ integrations: {
1561
+ description: 'Manage chat integrations (Slack) for an organization.',
1562
+ usage: 'eve integrations <subcommand> [options]',
1563
+ subcommands: {
1564
+ list: {
1565
+ description: 'List integrations for an org',
1566
+ usage: 'eve integrations list --org <org_id>',
1567
+ options: ['--org <id> Organization ID'],
1568
+ },
1569
+ slack: {
1570
+ description: 'Connect a Slack workspace (stub OAuth)',
1571
+ usage: 'eve integrations slack connect --org <org_id> --team-id <team_id> [--token <token>]',
1572
+ options: [
1573
+ '--org <id> Organization ID',
1574
+ '--team-id <id> Slack team ID',
1575
+ '--token <token> Slack access token (stored in tokens_json)',
1576
+ '--tokens-json <json> Raw tokens_json payload',
1577
+ '--status <status> Integration status (default: active)',
1578
+ ],
1579
+ },
1580
+ test: {
1581
+ description: 'Test an integration',
1582
+ usage: 'eve integrations test <integration_id>',
1583
+ },
1584
+ },
1585
+ examples: [
1586
+ 'eve integrations list --org org_xxx',
1587
+ 'eve integrations slack connect --org org_xxx --team-id T123 --token xoxb-...',
1588
+ ],
1589
+ },
1590
+ supervise: {
1591
+ description: 'Long-poll for child job events and coordination messages. Used by lead agents to stay alive and react.',
1592
+ usage: 'eve supervise [job-id] [--timeout <seconds>] [--since <cursor>] [--json]',
1593
+ subcommands: {
1594
+ '': {
1595
+ description: 'Poll for child events and inbox messages',
1596
+ usage: 'eve supervise [job-id] [--timeout <seconds>] [--since <cursor>] [--json]',
1597
+ options: [
1598
+ '[job-id] Parent job ID (defaults to $EVE_JOB_ID)',
1599
+ '--timeout <seconds> Max wait in seconds (default: 30, max: 120)',
1600
+ '--since <cursor> ISO cursor for incremental polling',
1601
+ '--json Output as JSON',
1602
+ ],
1603
+ examples: [
1604
+ 'eve supervise',
1605
+ 'eve supervise MyProj-abc123 --timeout 60',
1606
+ 'eve supervise --since 2026-02-08T19:00:00Z --json',
1607
+ ],
1608
+ },
1609
+ },
1610
+ examples: [
1611
+ 'eve supervise',
1612
+ 'eve supervise MyProj-abc123 --timeout 60',
1613
+ ],
1614
+ },
1615
+ thread: {
1616
+ description: 'Inspect coordination threads used for agent team communication.',
1617
+ usage: 'eve thread <subcommand> [options]',
1618
+ subcommands: {
1619
+ messages: {
1620
+ description: 'List messages in a coordination thread',
1621
+ usage: 'eve thread messages <thread-id> [--since <duration>] [--limit <n>] [--json]',
1622
+ options: [
1623
+ '--since <duration> Time window: 5m, 1h, 30s, 2d, or ISO timestamp',
1624
+ '--limit <n> Max messages to return',
1625
+ '--json Output as JSON',
1626
+ ],
1627
+ examples: [
1628
+ 'eve thread messages thr_xxx',
1629
+ 'eve thread messages thr_xxx --since 5m',
1630
+ 'eve thread messages thr_xxx --since 1h --limit 20 --json',
1631
+ ],
1632
+ },
1633
+ post: {
1634
+ description: 'Post a message to a coordination thread',
1635
+ usage: 'eve thread post <thread-id> --body <json-string>',
1636
+ options: [
1637
+ '--body <json> Message body (required)',
1638
+ '--actor-type <type> Actor type (default: user)',
1639
+ '--actor-id <id> Actor identifier',
1640
+ '--job-id <id> Associated job ID',
1641
+ ],
1642
+ examples: [
1643
+ 'eve thread post thr_xxx --body "hello team"',
1644
+ 'eve thread post thr_xxx --body \'{"kind":"directive","body":"focus on auth"}\'',
1645
+ ],
1646
+ },
1647
+ follow: {
1648
+ description: 'Follow a thread in real-time (polls every 3s)',
1649
+ usage: 'eve thread follow <thread-id>',
1650
+ examples: [
1651
+ 'eve thread follow thr_xxx',
1652
+ ],
1653
+ },
1654
+ },
1655
+ examples: [
1656
+ 'eve thread messages thr_xxx --since 5m',
1657
+ 'eve thread post thr_xxx --body "status update"',
1658
+ 'eve thread follow thr_xxx',
1659
+ ],
1660
+ },
1661
+ chat: {
1662
+ description: 'Chat tooling for gateway testing.',
1663
+ usage: 'eve chat <subcommand> [options]',
1664
+ subcommands: {
1665
+ simulate: {
1666
+ description: 'Simulate an inbound chat message',
1667
+ usage: 'eve chat simulate --project <id> --team-id <team> --text <message>',
1668
+ options: [
1669
+ '--project <id> Project ID (uses profile default)',
1670
+ '--provider <name> Provider name (default: slack)',
1671
+ '--team-id <id> Slack team ID',
1672
+ '--channel-id <id> Channel ID',
1673
+ '--user-id <id> User ID',
1674
+ '--thread-key <key> Thread key override',
1675
+ '--metadata <json> Extra metadata JSON',
1676
+ ],
1677
+ },
1678
+ },
1679
+ examples: [
1680
+ 'eve chat simulate --project proj_xxx --team-id T123 --text "hello"',
1681
+ ],
1682
+ },
1683
+ migrate: {
1684
+ description: 'Migration helpers for upgrading config formats.',
1685
+ usage: 'eve migrate <subcommand>',
1686
+ subcommands: {
1687
+ 'skills-to-packs': {
1688
+ description: 'Generate AgentPack config from skills.txt',
1689
+ usage: 'eve migrate skills-to-packs',
1690
+ examples: [
1691
+ 'eve migrate skills-to-packs',
1692
+ 'eve migrate skills-to-packs > packs-fragment.yaml',
1693
+ ],
1694
+ },
1695
+ },
1696
+ examples: [
1697
+ 'eve migrate skills-to-packs',
1698
+ ],
1699
+ },
1385
1700
  };
1386
1701
  function showMainHelp() {
1387
1702
  console.log('Eve Horizon CLI');
@@ -1407,10 +1722,16 @@ function showMainHelp() {
1407
1722
  console.log(' secrets Manage secrets (project/org/user scope)');
1408
1723
  console.log(' harness Inspect harnesses and auth status');
1409
1724
  console.log(' agents Inspect agent policy and harness capabilities');
1725
+ console.log(' packs Manage AgentPack lockfile and resolution');
1726
+ console.log(' integrations Manage chat integrations (Slack)');
1727
+ console.log(' chat Simulate chat messages (gateway testing)');
1728
+ console.log(' supervise Long-poll child events (lead agent coordination)');
1729
+ console.log(' thread Inspect coordination threads (agent teams)');
1410
1730
  console.log(' profile Manage CLI profiles (API URL, defaults)');
1411
1731
  console.log(' auth Authentication (login, logout, status)');
1412
1732
  console.log(' admin User and identity management (invite)');
1413
- console.log(' skills Install skills from skills.txt (openskills --universal)');
1733
+ console.log(' skills Install skills from skills.txt (skills CLI)');
1734
+ console.log(' migrate Migration helpers for upgrading config formats');
1414
1735
  console.log(' system System health and status checks');
1415
1736
  console.log('');
1416
1737
  console.log('Global options:');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eve-horizon/cli",
3
- "version": "0.2.10",
3
+ "version": "0.2.12",
4
4
  "description": "Eve Horizon CLI",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -24,7 +24,8 @@
24
24
  "node": ">=22.0.0"
25
25
  },
26
26
  "dependencies": {
27
- "yaml": "^2.5.1"
27
+ "yaml": "^2.5.1",
28
+ "@eve/shared": "0.0.1"
28
29
  },
29
30
  "devDependencies": {
30
31
  "@types/node": "^22.0.0",