@junctionpanel/cli 0.1.16

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.
Files changed (196) hide show
  1. package/LICENSE +671 -0
  2. package/bin/junction +2 -0
  3. package/bin/junction-daemon +5 -0
  4. package/dist/cli.d.ts +13 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +211 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/agent/archive.d.ts +17 -0
  9. package/dist/commands/agent/archive.d.ts.map +1 -0
  10. package/dist/commands/agent/archive.js +92 -0
  11. package/dist/commands/agent/archive.js.map +1 -0
  12. package/dist/commands/agent/attach.d.ts +10 -0
  13. package/dist/commands/agent/attach.d.ts.map +1 -0
  14. package/dist/commands/agent/attach.js +153 -0
  15. package/dist/commands/agent/attach.js.map +1 -0
  16. package/dist/commands/agent/index.d.ts +3 -0
  17. package/dist/commands/agent/index.d.ts.map +1 -0
  18. package/dist/commands/agent/index.js +125 -0
  19. package/dist/commands/agent/index.js.map +1 -0
  20. package/dist/commands/agent/inspect.d.ts +14 -0
  21. package/dist/commands/agent/inspect.d.ts.map +1 -0
  22. package/dist/commands/agent/inspect.js +198 -0
  23. package/dist/commands/agent/inspect.js.map +1 -0
  24. package/dist/commands/agent/logs.d.ts +15 -0
  25. package/dist/commands/agent/logs.d.ts.map +1 -0
  26. package/dist/commands/agent/logs.js +163 -0
  27. package/dist/commands/agent/logs.js.map +1 -0
  28. package/dist/commands/agent/ls.d.ts +37 -0
  29. package/dist/commands/agent/ls.d.ts.map +1 -0
  30. package/dist/commands/agent/ls.js +185 -0
  31. package/dist/commands/agent/ls.js.map +1 -0
  32. package/dist/commands/agent/mode.d.ts +18 -0
  33. package/dist/commands/agent/mode.d.ts.map +1 -0
  34. package/dist/commands/agent/mode.js +100 -0
  35. package/dist/commands/agent/mode.js.map +1 -0
  36. package/dist/commands/agent/run.d.ts +40 -0
  37. package/dist/commands/agent/run.d.ts.map +1 -0
  38. package/dist/commands/agent/run.js +354 -0
  39. package/dist/commands/agent/run.js.map +1 -0
  40. package/dist/commands/agent/send.d.ts +16 -0
  41. package/dist/commands/agent/send.d.ts.map +1 -0
  42. package/dist/commands/agent/send.js +172 -0
  43. package/dist/commands/agent/send.js.map +1 -0
  44. package/dist/commands/agent/stop.d.ts +16 -0
  45. package/dist/commands/agent/stop.d.ts.map +1 -0
  46. package/dist/commands/agent/stop.js +105 -0
  47. package/dist/commands/agent/stop.js.map +1 -0
  48. package/dist/commands/agent/update.d.ts +18 -0
  49. package/dist/commands/agent/update.d.ts.map +1 -0
  50. package/dist/commands/agent/update.js +139 -0
  51. package/dist/commands/agent/update.js.map +1 -0
  52. package/dist/commands/agent/wait.d.ts +16 -0
  53. package/dist/commands/agent/wait.d.ts.map +1 -0
  54. package/dist/commands/agent/wait.js +194 -0
  55. package/dist/commands/agent/wait.js.map +1 -0
  56. package/dist/commands/daemon/index.d.ts +4 -0
  57. package/dist/commands/daemon/index.d.ts.map +1 -0
  58. package/dist/commands/daemon/index.js +50 -0
  59. package/dist/commands/daemon/index.js.map +1 -0
  60. package/dist/commands/daemon/local-daemon.d.ts +60 -0
  61. package/dist/commands/daemon/local-daemon.d.ts.map +1 -0
  62. package/dist/commands/daemon/local-daemon.js +501 -0
  63. package/dist/commands/daemon/local-daemon.js.map +1 -0
  64. package/dist/commands/daemon/package-context.d.ts +7 -0
  65. package/dist/commands/daemon/package-context.d.ts.map +1 -0
  66. package/dist/commands/daemon/package-context.js +41 -0
  67. package/dist/commands/daemon/package-context.js.map +1 -0
  68. package/dist/commands/daemon/pair.d.ts +3 -0
  69. package/dist/commands/daemon/pair.d.ts.map +1 -0
  70. package/dist/commands/daemon/pair.js +11 -0
  71. package/dist/commands/daemon/pair.js.map +1 -0
  72. package/dist/commands/daemon/restart.d.ts +12 -0
  73. package/dist/commands/daemon/restart.d.ts.map +1 -0
  74. package/dist/commands/daemon/restart.js +102 -0
  75. package/dist/commands/daemon/restart.js.map +1 -0
  76. package/dist/commands/daemon/runtime-toolchain.d.ts +24 -0
  77. package/dist/commands/daemon/runtime-toolchain.d.ts.map +1 -0
  78. package/dist/commands/daemon/runtime-toolchain.js +93 -0
  79. package/dist/commands/daemon/runtime-toolchain.js.map +1 -0
  80. package/dist/commands/daemon/start.d.ts +6 -0
  81. package/dist/commands/daemon/start.d.ts.map +1 -0
  82. package/dist/commands/daemon/start.js +48 -0
  83. package/dist/commands/daemon/start.js.map +1 -0
  84. package/dist/commands/daemon/status.d.ts +11 -0
  85. package/dist/commands/daemon/status.d.ts.map +1 -0
  86. package/dist/commands/daemon/status.js +389 -0
  87. package/dist/commands/daemon/status.js.map +1 -0
  88. package/dist/commands/daemon/stop.d.ts +12 -0
  89. package/dist/commands/daemon/stop.d.ts.map +1 -0
  90. package/dist/commands/daemon/stop.js +69 -0
  91. package/dist/commands/daemon/stop.js.map +1 -0
  92. package/dist/commands/daemon/update.d.ts +11 -0
  93. package/dist/commands/daemon/update.d.ts.map +1 -0
  94. package/dist/commands/daemon/update.js +88 -0
  95. package/dist/commands/daemon/update.js.map +1 -0
  96. package/dist/commands/onboard.d.ts +9 -0
  97. package/dist/commands/onboard.d.ts.map +1 -0
  98. package/dist/commands/onboard.js +299 -0
  99. package/dist/commands/onboard.js.map +1 -0
  100. package/dist/commands/permit/allow.d.ts +20 -0
  101. package/dist/commands/permit/allow.d.ts.map +1 -0
  102. package/dist/commands/permit/allow.js +134 -0
  103. package/dist/commands/permit/allow.js.map +1 -0
  104. package/dist/commands/permit/deny.d.ts +12 -0
  105. package/dist/commands/permit/deny.d.ts.map +1 -0
  106. package/dist/commands/permit/deny.js +106 -0
  107. package/dist/commands/permit/deny.js.map +1 -0
  108. package/dist/commands/permit/index.d.ts +3 -0
  109. package/dist/commands/permit/index.d.ts.map +1 -0
  110. package/dist/commands/permit/index.js +37 -0
  111. package/dist/commands/permit/index.js.map +1 -0
  112. package/dist/commands/permit/ls.d.ts +18 -0
  113. package/dist/commands/permit/ls.d.ts.map +1 -0
  114. package/dist/commands/permit/ls.js +66 -0
  115. package/dist/commands/permit/ls.js.map +1 -0
  116. package/dist/commands/provider/index.d.ts +3 -0
  117. package/dist/commands/provider/index.d.ts.map +1 -0
  118. package/dist/commands/provider/index.js +23 -0
  119. package/dist/commands/provider/index.js.map +1 -0
  120. package/dist/commands/provider/ls.d.ts +17 -0
  121. package/dist/commands/provider/ls.d.ts.map +1 -0
  122. package/dist/commands/provider/ls.js +51 -0
  123. package/dist/commands/provider/ls.js.map +1 -0
  124. package/dist/commands/provider/models.d.ts +20 -0
  125. package/dist/commands/provider/models.d.ts.map +1 -0
  126. package/dist/commands/provider/models.js +53 -0
  127. package/dist/commands/provider/models.js.map +1 -0
  128. package/dist/commands/worktree/archive.d.ts +16 -0
  129. package/dist/commands/worktree/archive.d.ts.map +1 -0
  130. package/dist/commands/worktree/archive.js +98 -0
  131. package/dist/commands/worktree/archive.js.map +1 -0
  132. package/dist/commands/worktree/index.d.ts +3 -0
  133. package/dist/commands/worktree/index.d.ts.map +1 -0
  134. package/dist/commands/worktree/index.js +22 -0
  135. package/dist/commands/worktree/index.js.map +1 -0
  136. package/dist/commands/worktree/ls.d.ts +19 -0
  137. package/dist/commands/worktree/ls.d.ts.map +1 -0
  138. package/dist/commands/worktree/ls.js +97 -0
  139. package/dist/commands/worktree/ls.js.map +1 -0
  140. package/dist/daemon-only-cli.d.ts +4 -0
  141. package/dist/daemon-only-cli.d.ts.map +1 -0
  142. package/dist/daemon-only-cli.js +5 -0
  143. package/dist/daemon-only-cli.js.map +1 -0
  144. package/dist/index.d.ts +2 -0
  145. package/dist/index.d.ts.map +1 -0
  146. package/dist/index.js +7 -0
  147. package/dist/index.js.map +1 -0
  148. package/dist/output/index.d.ts +45 -0
  149. package/dist/output/index.d.ts.map +1 -0
  150. package/dist/output/index.js +47 -0
  151. package/dist/output/index.js.map +1 -0
  152. package/dist/output/json.d.ts +11 -0
  153. package/dist/output/json.d.ts.map +1 -0
  154. package/dist/output/json.js +37 -0
  155. package/dist/output/json.js.map +1 -0
  156. package/dist/output/quiet.d.ts +9 -0
  157. package/dist/output/quiet.d.ts.map +1 -0
  158. package/dist/output/quiet.js +22 -0
  159. package/dist/output/quiet.js.map +1 -0
  160. package/dist/output/render.d.ts +15 -0
  161. package/dist/output/render.d.ts.map +1 -0
  162. package/dist/output/render.js +80 -0
  163. package/dist/output/render.js.map +1 -0
  164. package/dist/output/table.d.ts +13 -0
  165. package/dist/output/table.d.ts.map +1 -0
  166. package/dist/output/table.js +135 -0
  167. package/dist/output/table.js.map +1 -0
  168. package/dist/output/types.d.ts +71 -0
  169. package/dist/output/types.d.ts.map +1 -0
  170. package/dist/output/types.js +8 -0
  171. package/dist/output/types.js.map +1 -0
  172. package/dist/output/with-output.d.ts +37 -0
  173. package/dist/output/with-output.d.ts.map +1 -0
  174. package/dist/output/with-output.js +87 -0
  175. package/dist/output/with-output.js.map +1 -0
  176. package/dist/output/yaml.d.ts +11 -0
  177. package/dist/output/yaml.d.ts.map +1 -0
  178. package/dist/output/yaml.js +38 -0
  179. package/dist/output/yaml.js.map +1 -0
  180. package/dist/utils/client-id.d.ts +2 -0
  181. package/dist/utils/client-id.d.ts.map +1 -0
  182. package/dist/utils/client-id.js +37 -0
  183. package/dist/utils/client-id.js.map +1 -0
  184. package/dist/utils/client.d.ts +35 -0
  185. package/dist/utils/client.d.ts.map +1 -0
  186. package/dist/utils/client.js +113 -0
  187. package/dist/utils/client.js.map +1 -0
  188. package/dist/utils/errors.d.ts +5 -0
  189. package/dist/utils/errors.d.ts.map +1 -0
  190. package/dist/utils/errors.js +10 -0
  191. package/dist/utils/errors.js.map +1 -0
  192. package/dist/utils/timeline.d.ts +8 -0
  193. package/dist/utils/timeline.d.ts.map +1 -0
  194. package/dist/utils/timeline.js +9 -0
  195. package/dist/utils/timeline.js.map +1 -0
  196. package/package.json +66 -0
@@ -0,0 +1,125 @@
1
+ import { Command } from 'commander';
2
+ import { runModeCommand } from './mode.js';
3
+ import { runArchiveCommand } from './archive.js';
4
+ import { runLsCommand } from './ls.js';
5
+ import { runRunCommand } from './run.js';
6
+ import { runLogsCommand } from './logs.js';
7
+ import { runStopCommand } from './stop.js';
8
+ import { runSendCommand } from './send.js';
9
+ import { runInspectCommand } from './inspect.js';
10
+ import { runWaitCommand } from './wait.js';
11
+ import { runAttachCommand } from './attach.js';
12
+ import { runUpdateCommand } from './update.js';
13
+ import { withOutput } from '../../output/index.js';
14
+ export function createAgentCommand() {
15
+ const agent = new Command('agent').description('Manage agents (advanced operations)');
16
+ // Helper function to collect multiple option values into an array
17
+ const collectMultiple = (value, previous) => {
18
+ return previous.concat([value]);
19
+ };
20
+ // Primary agent commands (same as top-level)
21
+ agent
22
+ .command('ls')
23
+ .description('List agents. By default excludes archived agents.')
24
+ .option('-a, --all', 'Include archived agents')
25
+ .option('-g, --global', 'Legacy no-op (kept for compatibility)')
26
+ .option('--label <key=value>', 'Filter by label (can be used multiple times)', collectMultiple, [])
27
+ .option('--thinking <id>', 'Filter by thinking option ID')
28
+ .option('--json', 'Output in JSON format')
29
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
30
+ .action(withOutput(runLsCommand));
31
+ agent
32
+ .command('run')
33
+ .description('Create and start an agent with a task')
34
+ .argument('<prompt>', 'The task/prompt for the agent')
35
+ .option('-d, --detach', 'Run in background (detached)')
36
+ .option('--name <name>', 'Assign a name/title to the agent')
37
+ .option('--provider <provider>', 'Agent provider: claude | codex | opencode', 'claude')
38
+ .option('--model <model>', 'Model to use (e.g., claude-sonnet-4-20250514, claude-3-5-haiku-20241022)')
39
+ .option('--thinking <id>', 'Thinking option ID to use for this run')
40
+ .option('--mode <mode>', 'Provider-specific mode (e.g., plan, default, bypass)')
41
+ .option('--cwd <path>', 'Working directory (default: current)')
42
+ .option('--label <key=value>', 'Add label(s) to the agent (can be used multiple times)', collectMultiple, [])
43
+ .option('--ui', 'Mark as UI agent (equivalent to --label ui=true)')
44
+ .option('--output-schema <schema>', 'Output JSON matching the provided schema file path or inline JSON schema')
45
+ .option('--json', 'Output in JSON format')
46
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
47
+ .action(withOutput(runRunCommand));
48
+ agent
49
+ .command('attach')
50
+ .description("Attach to a running agent's output stream")
51
+ .argument('<id>', 'Agent ID (or prefix)')
52
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
53
+ .action(runAttachCommand);
54
+ agent
55
+ .command('logs')
56
+ .description('View agent activity/timeline')
57
+ .argument('<id>', 'Agent ID (or prefix)')
58
+ .option('-f, --follow', 'Follow log output (streaming)')
59
+ .option('--tail <n>', 'Show last n entries')
60
+ .option('--filter <type>', 'Filter by event type (tools, text, errors, permissions)')
61
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
62
+ .action(runLogsCommand);
63
+ agent
64
+ .command('stop')
65
+ .description('Stop an agent (cancel if running, then terminate)')
66
+ .argument('[id]', 'Agent ID (or prefix) - optional if --all or --cwd specified')
67
+ .option('--all', 'Stop all agents')
68
+ .option('--cwd <path>', 'Stop all agents in directory')
69
+ .option('--json', 'Output in JSON format')
70
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
71
+ .action(withOutput(runStopCommand));
72
+ agent
73
+ .command('send')
74
+ .description('Send a message/task to an existing agent')
75
+ .argument('<id>', 'Agent ID (or prefix)')
76
+ .argument('<prompt>', 'The message to send')
77
+ .option('--no-wait', 'Return immediately without waiting for completion')
78
+ .option('--json', 'Output in JSON format')
79
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
80
+ .action(withOutput(runSendCommand));
81
+ agent
82
+ .command('inspect')
83
+ .description('Show detailed information about an agent')
84
+ .argument('<id>', 'Agent ID (or prefix)')
85
+ .option('--json', 'Output in JSON format')
86
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
87
+ .action(withOutput(runInspectCommand));
88
+ agent
89
+ .command('wait')
90
+ .description('Wait for an agent to become idle')
91
+ .argument('<id>', 'Agent ID (or prefix)')
92
+ .option('--timeout <seconds>', 'Maximum wait time (default: no limit)')
93
+ .option('--json', 'Output in JSON format')
94
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
95
+ .action(withOutput(runWaitCommand));
96
+ // Advanced agent commands (less common operations)
97
+ agent
98
+ .command('mode')
99
+ .description("Change an agent's operational mode")
100
+ .argument('<id>', 'Agent ID (or prefix)')
101
+ .argument('[mode]', 'Mode to set (required unless --list)')
102
+ .option('--list', 'List available modes for this agent')
103
+ .option('--json', 'Output in JSON format')
104
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
105
+ .action(withOutput(runModeCommand));
106
+ agent
107
+ .command('archive')
108
+ .description('Archive an agent (soft-delete)')
109
+ .argument('<id>', 'Agent ID (or prefix)')
110
+ .option('--force', 'Force archive running agent (interrupts active run first)')
111
+ .option('--json', 'Output in JSON format')
112
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
113
+ .action(withOutput(runArchiveCommand));
114
+ agent
115
+ .command('update')
116
+ .description("Update an agent's metadata")
117
+ .argument('<id>', 'Agent ID (or prefix)')
118
+ .option('--name <name>', "Update the agent's display name")
119
+ .option('--label <label>', 'Add/set label(s) on the agent (can be used multiple times or comma-separated)', collectMultiple, [])
120
+ .option('--json', 'Output in JSON format')
121
+ .option('--host <host>', 'Daemon host:port (default: localhost:6767)')
122
+ .action(withOutput(runUpdateCommand));
123
+ return agent;
124
+ }
125
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAElD,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAA;IAErF,kEAAkE;IAClE,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,QAAkB,EAAY,EAAE;QACtE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IACjC,CAAC,CAAA;IAED,6CAA6C;IAC7C,KAAK;SACF,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,WAAW,EAAE,yBAAyB,CAAC;SAC9C,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;SAC/D,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,EAAE,eAAe,EAAE,EAAE,CAAC;SAClG,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;SACzD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAA;IAEnC,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,UAAU,EAAE,+BAA+B,CAAC;SACrD,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;SACtD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,EAAE,QAAQ,CAAC;SACtF,MAAM,CAAC,iBAAiB,EAAE,0EAA0E,CAAC;SACrG,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACnE,MAAM,CAAC,eAAe,EAAE,sDAAsD,CAAC;SAC/E,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;SAC9D,MAAM,CAAC,qBAAqB,EAAE,wDAAwD,EAAE,eAAe,EAAE,EAAE,CAAC;SAC5G,MAAM,CAAC,MAAM,EAAE,kDAAkD,CAAC;SAClE,MAAM,CAAC,0BAA0B,EAAE,0EAA0E,CAAC;SAC9G,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAA;IAEpC,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2CAA2C,CAAC;SACxD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAE3B,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;SAC3C,MAAM,CAAC,iBAAiB,EAAE,yDAAyD,CAAC;SACpF,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,cAAc,CAAC,CAAA;IAEzB,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mDAAmD,CAAC;SAChE,QAAQ,CAAC,MAAM,EAAE,6DAA6D,CAAC;SAC/E,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC;SAClC,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;IAErC,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;IAErC,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0CAA0C,CAAC;SACvD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAExC,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,qBAAqB,EAAE,uCAAuC,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;IAErC,mDAAmD;IACnD,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,QAAQ,CAAC,QAAQ,EAAE,sCAAsC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC;SACvD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;IAErC,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,SAAS,EAAE,2DAA2D,CAAC;SAC9E,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAExC,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC;SAC1D,MAAM,CACL,iBAAiB,EACjB,+EAA+E,EAC/E,eAAe,EACf,EAAE,CACH;SACA,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEvC,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, ListResult } from '../../output/index.js';
3
+ /** Key-value row for table display */
4
+ interface InspectRow {
5
+ key: string;
6
+ value: string;
7
+ }
8
+ export type AgentInspectResult = ListResult<InspectRow>;
9
+ export interface AgentInspectOptions extends CommandOptions {
10
+ host?: string;
11
+ }
12
+ export declare function runInspectCommand(agentIdArg: string, options: AgentInspectOptions, _command: Command): Promise<AgentInspectResult>;
13
+ export {};
14
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAA8B,MAAM,uBAAuB,CAAA;AAsCnG,sCAAsC;AACtC,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAuJD,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AAEvD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA6D7B"}
@@ -0,0 +1,198 @@
1
+ import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
2
+ /** Schema for key-value display with custom serialization for JSON/YAML */
3
+ function createInspectSchema(agent) {
4
+ return {
5
+ idField: 'key',
6
+ columns: [
7
+ { header: 'KEY', field: 'key' },
8
+ {
9
+ header: 'VALUE',
10
+ field: 'value',
11
+ color: (_, item) => {
12
+ if (item.key === 'Status') {
13
+ if (item.value === 'running')
14
+ return 'green';
15
+ if (item.value === 'idle')
16
+ return 'yellow';
17
+ if (item.value === 'error')
18
+ return 'red';
19
+ }
20
+ return undefined;
21
+ },
22
+ },
23
+ ],
24
+ // For JSON/YAML, return the structured agent object
25
+ serialize: (_item) => agent,
26
+ };
27
+ }
28
+ /** Shorten home directory in path */
29
+ function shortenPath(path) {
30
+ const home = process.env.HOME;
31
+ if (home && path.startsWith(home)) {
32
+ return '~' + path.slice(home.length);
33
+ }
34
+ return path;
35
+ }
36
+ /** Format cost in USD */
37
+ function formatCost(costUsd) {
38
+ if (costUsd === 0)
39
+ return '$0.00';
40
+ if (costUsd < 0.01)
41
+ return `$${costUsd.toFixed(4)}`;
42
+ return `$${costUsd.toFixed(2)}`;
43
+ }
44
+ function normalizeModelId(value) {
45
+ if (typeof value !== 'string')
46
+ return null;
47
+ const normalized = value.trim();
48
+ if (!normalized || normalized.toLowerCase() === 'default')
49
+ return null;
50
+ return normalized;
51
+ }
52
+ function resolveModel(snapshot) {
53
+ return normalizeModelId(snapshot.runtimeInfo?.model) ?? normalizeModelId(snapshot.model);
54
+ }
55
+ /** Convert agent snapshot to inspection data */
56
+ function toInspectData(snapshot) {
57
+ const lastUsage = snapshot.lastUsage
58
+ ? {
59
+ InputTokens: snapshot.lastUsage.inputTokens ?? 0,
60
+ OutputTokens: snapshot.lastUsage.outputTokens ?? 0,
61
+ CachedTokens: snapshot.lastUsage.cachedInputTokens ?? 0,
62
+ CostUsd: snapshot.lastUsage.totalCostUsd ?? 0,
63
+ }
64
+ : null;
65
+ const capabilities = snapshot.capabilities
66
+ ? {
67
+ Streaming: snapshot.capabilities.supportsStreaming ?? false,
68
+ Persistence: snapshot.capabilities.supportsSessionPersistence ?? false,
69
+ DynamicModes: snapshot.capabilities.supportsDynamicModes ?? false,
70
+ McpServers: snapshot.capabilities.supportsMcpServers ?? false,
71
+ }
72
+ : null;
73
+ // Extract worktree and parentAgentId from labels if they exist
74
+ const worktree = snapshot.labels?.['junction.worktree'] ?? null;
75
+ const parentAgentId = snapshot.labels?.['junction.parent-agent-id'] ?? null;
76
+ return {
77
+ Id: snapshot.id,
78
+ Name: snapshot.title ?? '-',
79
+ Provider: snapshot.provider,
80
+ Model: resolveModel(snapshot) ?? '-',
81
+ Thinking: snapshot.effectiveThinkingOptionId ?? 'auto',
82
+ Status: snapshot.status,
83
+ Mode: snapshot.currentModeId ?? 'default',
84
+ Cwd: snapshot.cwd,
85
+ CreatedAt: snapshot.createdAt,
86
+ UpdatedAt: snapshot.updatedAt,
87
+ LastUsage: lastUsage,
88
+ Capabilities: capabilities,
89
+ AvailableModes: snapshot.availableModes
90
+ ? snapshot.availableModes.map((m) => ({ id: m.id, label: m.label }))
91
+ : null,
92
+ PendingPermissions: (snapshot.pendingPermissions ?? []).map((p) => ({
93
+ id: p.id,
94
+ tool: p.name ?? 'unknown',
95
+ })),
96
+ Worktree: worktree,
97
+ ParentAgentId: parentAgentId,
98
+ };
99
+ }
100
+ /** Convert agent to key-value rows for table display */
101
+ function toInspectRows(agent) {
102
+ const rows = [
103
+ { key: 'Id', value: agent.Id },
104
+ { key: 'Name', value: agent.Name },
105
+ { key: 'Provider', value: agent.Provider },
106
+ { key: 'Model', value: agent.Model },
107
+ { key: 'Thinking', value: agent.Thinking },
108
+ { key: 'Status', value: agent.Status },
109
+ { key: 'Mode', value: agent.Mode },
110
+ { key: 'Cwd', value: shortenPath(agent.Cwd) },
111
+ { key: 'CreatedAt', value: agent.CreatedAt },
112
+ { key: 'UpdatedAt', value: agent.UpdatedAt },
113
+ ];
114
+ if (agent.LastUsage) {
115
+ rows.push({
116
+ key: 'LastUsage',
117
+ value: `InputTokens: ${agent.LastUsage.InputTokens}, OutputTokens: ${agent.LastUsage.OutputTokens}, CachedTokens: ${agent.LastUsage.CachedTokens}, CostUsd: ${formatCost(agent.LastUsage.CostUsd)}`,
118
+ });
119
+ }
120
+ if (agent.Capabilities) {
121
+ rows.push({
122
+ key: 'Capabilities',
123
+ value: `Streaming: ${agent.Capabilities.Streaming}, Persistence: ${agent.Capabilities.Persistence}, DynamicModes: ${agent.Capabilities.DynamicModes}, McpServers: ${agent.Capabilities.McpServers}`,
124
+ });
125
+ }
126
+ if (agent.AvailableModes && agent.AvailableModes.length > 0) {
127
+ rows.push({
128
+ key: 'AvailableModes',
129
+ value: agent.AvailableModes.map((m) => `${m.id} (${m.label})`).join(', '),
130
+ });
131
+ }
132
+ rows.push({
133
+ key: 'PendingPermissions',
134
+ value: agent.PendingPermissions.length > 0
135
+ ? agent.PendingPermissions.map(p => `${p.id} (${p.tool})`).join(', ')
136
+ : '[]'
137
+ });
138
+ rows.push({ key: 'Worktree', value: agent.Worktree ?? 'null' });
139
+ rows.push({ key: 'ParentAgentId', value: agent.ParentAgentId ?? 'null' });
140
+ return rows;
141
+ }
142
+ export async function runInspectCommand(agentIdArg, options, _command) {
143
+ const host = getDaemonHost({ host: options.host });
144
+ // Validate arguments
145
+ if (!agentIdArg || agentIdArg.trim().length === 0) {
146
+ const error = {
147
+ code: 'MISSING_AGENT_ID',
148
+ message: 'Agent ID is required',
149
+ details: 'Usage: junction agent inspect <id>',
150
+ };
151
+ throw error;
152
+ }
153
+ let client;
154
+ try {
155
+ client = await connectToDaemon({ host: options.host });
156
+ }
157
+ catch (err) {
158
+ const message = err instanceof Error ? err.message : String(err);
159
+ const error = {
160
+ code: 'DAEMON_NOT_RUNNING',
161
+ message: `Cannot connect to daemon at ${host}: ${message}`,
162
+ details: 'Start the daemon with: junction daemon start',
163
+ };
164
+ throw error;
165
+ }
166
+ try {
167
+ const fetchResult = await client.fetchAgent(agentIdArg);
168
+ if (!fetchResult) {
169
+ const error = {
170
+ code: 'AGENT_NOT_FOUND',
171
+ message: `Agent not found: ${agentIdArg}`,
172
+ details: 'Use "junction ls" to list available agents',
173
+ };
174
+ throw error;
175
+ }
176
+ await client.close();
177
+ const inspectData = toInspectData(fetchResult.agent);
178
+ return {
179
+ type: 'list',
180
+ data: toInspectRows(inspectData),
181
+ schema: createInspectSchema(inspectData),
182
+ };
183
+ }
184
+ catch (err) {
185
+ await client.close().catch(() => { });
186
+ // Re-throw CommandError as-is
187
+ if (err && typeof err === 'object' && 'code' in err) {
188
+ throw err;
189
+ }
190
+ const message = err instanceof Error ? err.message : String(err);
191
+ const error = {
192
+ code: 'INSPECT_FAILED',
193
+ message: `Failed to inspect agent: ${message}`,
194
+ };
195
+ throw error;
196
+ }
197
+ }
198
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/commands/agent/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions } from '../../output/index.js';
3
+ import type { DaemonClient, AgentTimelineItem } from '@junctionpanel/server';
4
+ export interface AgentLogsOptions extends CommandOptions {
5
+ follow?: boolean;
6
+ tail?: string;
7
+ filter?: string;
8
+ since?: string;
9
+ }
10
+ export type AgentLogsResult = void;
11
+ export declare const NO_ACTIVITY_MESSAGE = "No activity to display.";
12
+ export declare function fetchAgentTimelineItems(client: DaemonClient, agentId: string): Promise<AgentTimelineItem[]>;
13
+ export declare function formatAgentActivityTranscript(timelineItems: AgentTimelineItem[], tailCount?: number): string;
14
+ export declare function runLogsCommand(id: string, options: AgentLogsOptions, _command: Command): Promise<AgentLogsResult>;
15
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAClB,MAAM,uBAAuB,CAAA;AAG9B,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAGD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAA;AAElC,eAAO,MAAM,mBAAmB,4BAA4B,CAAA;AAE5D,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAE9B;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,iBAAiB,EAAE,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAQR;AAoCD,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,eAAe,CAAC,CAwE1B"}
@@ -0,0 +1,163 @@
1
+ import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
2
+ import { fetchProjectedTimelineItems } from '../../utils/timeline.js';
3
+ import { curateAgentActivity } from '@junctionpanel/server';
4
+ export const NO_ACTIVITY_MESSAGE = 'No activity to display.';
5
+ export async function fetchAgentTimelineItems(client, agentId) {
6
+ return fetchProjectedTimelineItems({ client, agentId });
7
+ }
8
+ export function formatAgentActivityTranscript(timelineItems, tailCount) {
9
+ if (tailCount === 0) {
10
+ return '';
11
+ }
12
+ return curateAgentActivity(timelineItems, tailCount !== undefined ? { maxItems: tailCount } : undefined);
13
+ }
14
+ function parseTailCount(raw) {
15
+ if (raw === undefined)
16
+ return undefined;
17
+ const parsed = Number.parseInt(raw, 10);
18
+ if (Number.isNaN(parsed) || parsed < 0) {
19
+ return undefined;
20
+ }
21
+ return parsed;
22
+ }
23
+ /**
24
+ * Check if a timeline item matches the filter type
25
+ */
26
+ function matchesFilter(item, filter) {
27
+ if (!filter)
28
+ return true;
29
+ const filterLower = filter.toLowerCase();
30
+ const type = item.type.toLowerCase();
31
+ switch (filterLower) {
32
+ case 'tools':
33
+ return type === 'tool_call';
34
+ case 'text':
35
+ return type === 'user_message' || type === 'assistant_message' || type === 'reasoning';
36
+ case 'errors':
37
+ return type === 'error';
38
+ case 'permissions':
39
+ // Permissions might be in tool_call status or a separate event type
40
+ return type.includes('permission');
41
+ default:
42
+ // If filter doesn't match predefined types, match against the actual type
43
+ return type.includes(filterLower);
44
+ }
45
+ }
46
+ export async function runLogsCommand(id, options, _command) {
47
+ const host = getDaemonHost({ host: options.host });
48
+ if (!id) {
49
+ console.error('Error: Agent ID required');
50
+ console.error('Usage: junction agent logs <id>');
51
+ process.exit(1);
52
+ }
53
+ let client;
54
+ try {
55
+ client = await connectToDaemon({ host: options.host });
56
+ }
57
+ catch (err) {
58
+ const message = err instanceof Error ? err.message : String(err);
59
+ console.error(`Error: Cannot connect to daemon at ${host}: ${message}`);
60
+ console.error('Start the daemon with: junction daemon start');
61
+ process.exit(1);
62
+ }
63
+ try {
64
+ const fetchResult = await client.fetchAgent(id);
65
+ if (!fetchResult) {
66
+ console.error(`Error: No agent found matching: ${id}`);
67
+ console.error('Use `junction ls` to list available agents');
68
+ await client.close();
69
+ process.exit(1);
70
+ }
71
+ const resolvedId = fetchResult.agent.id;
72
+ // For follow mode, we stream events continuously
73
+ if (options.follow) {
74
+ if (options.tail !== undefined && parseTailCount(options.tail) === undefined) {
75
+ console.error(`Error: Invalid --tail value: ${options.tail}`);
76
+ console.error('Usage: --tail <n> (where n is >= 0)');
77
+ await client.close().catch(() => { });
78
+ process.exit(1);
79
+ }
80
+ await runFollowMode(client, resolvedId, options);
81
+ return;
82
+ }
83
+ // Fetch timeline directly via cursor RPC.
84
+ let timelineItems = await fetchAgentTimelineItems(client, resolvedId);
85
+ // Apply filter
86
+ if (options.filter) {
87
+ timelineItems = timelineItems.filter((item) => matchesFilter(item, options.filter));
88
+ }
89
+ const tailCount = parseTailCount(options.tail);
90
+ if (options.tail !== undefined && tailCount === undefined) {
91
+ console.error(`Error: Invalid --tail value: ${options.tail}`);
92
+ console.error('Usage: --tail <n> (where n is >= 0)');
93
+ await client.close().catch(() => { });
94
+ process.exit(1);
95
+ }
96
+ await client.close();
97
+ // Use curateAgentActivity to format the transcript
98
+ if (tailCount === 0) {
99
+ return;
100
+ }
101
+ const transcript = formatAgentActivityTranscript(timelineItems, tailCount);
102
+ console.log(transcript);
103
+ }
104
+ catch (err) {
105
+ const message = err instanceof Error ? err.message : String(err);
106
+ console.error(`Error: Failed to get logs: ${message}`);
107
+ await client.close().catch(() => { });
108
+ process.exit(1);
109
+ }
110
+ }
111
+ /**
112
+ * Follow mode: stream logs in real-time until interrupted
113
+ */
114
+ async function runFollowMode(client, agentId, options) {
115
+ const DEFAULT_FOLLOW_TAIL = 10;
116
+ const tailCount = parseTailCount(options.tail) ?? DEFAULT_FOLLOW_TAIL;
117
+ // First, get existing timeline.
118
+ let existingItems = await fetchAgentTimelineItems(client, agentId);
119
+ // Apply filter to existing items
120
+ if (options.filter) {
121
+ existingItems = existingItems.filter((item) => matchesFilter(item, options.filter));
122
+ }
123
+ // Print existing transcript (tail-like behavior)
124
+ if (tailCount > 0) {
125
+ const existingTranscript = formatAgentActivityTranscript(existingItems, tailCount);
126
+ if (existingTranscript !== NO_ACTIVITY_MESSAGE) {
127
+ console.log(existingTranscript);
128
+ }
129
+ }
130
+ // Subscribe to new events
131
+ const tailLabel = tailCount === 0 ? 'no history' : `last ${tailCount} entr${tailCount === 1 ? 'y' : 'ies'}`;
132
+ console.log(`\n--- Following logs (${tailLabel}; Ctrl+C to stop) ---\n`);
133
+ const unsubscribe = client.on('agent_stream', (msg) => {
134
+ const message = msg;
135
+ if (message.type !== 'agent_stream')
136
+ return;
137
+ if (message.payload.agentId !== agentId)
138
+ return;
139
+ if (message.payload.event.type === 'timeline') {
140
+ const item = message.payload.event.item;
141
+ // Apply filter
142
+ if (options.filter && !matchesFilter(item, options.filter)) {
143
+ return;
144
+ }
145
+ // Print each timeline item as it arrives using the curator format
146
+ const transcript = formatAgentActivityTranscript([item]);
147
+ if (transcript !== NO_ACTIVITY_MESSAGE) {
148
+ console.log(transcript);
149
+ }
150
+ }
151
+ });
152
+ // Wait for interrupt
153
+ await new Promise((resolve) => {
154
+ const cleanup = () => {
155
+ unsubscribe();
156
+ resolve();
157
+ };
158
+ process.on('SIGINT', cleanup);
159
+ process.on('SIGTERM', cleanup);
160
+ });
161
+ await client.close();
162
+ }
163
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/commands/agent/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, ListResult, OutputSchema } from '../../output/index.js';
3
+ /** Agent list item for display */
4
+ export interface AgentListItem {
5
+ id: string;
6
+ shortId: string;
7
+ name: string;
8
+ provider: string;
9
+ thinking: string;
10
+ status: string;
11
+ cwd: string;
12
+ created: string;
13
+ }
14
+ /** Schema for agent ls output */
15
+ export declare const agentLsSchema: OutputSchema<AgentListItem>;
16
+ export type AgentLsResult = ListResult<AgentListItem>;
17
+ export interface AgentLsOptions extends CommandOptions {
18
+ /** -a: Include archived agents */
19
+ all?: boolean;
20
+ /** Legacy flag retained for CLI compatibility */
21
+ global?: boolean;
22
+ /** Filter by specific status */
23
+ status?: string;
24
+ /** Filter by specific cwd */
25
+ cwd?: string;
26
+ /** Filter by labels (key=value format) */
27
+ label?: string[];
28
+ /** Filter by thinking option ID */
29
+ thinking?: string;
30
+ }
31
+ /**
32
+ * Agent ls command semantics:
33
+ * - `junction agent ls` → all non-archived agents
34
+ * - `junction agent ls -a` → include archived agents
35
+ */
36
+ export declare function runLsCommand(options: AgentLsOptions, _command: Command): Promise<AgentLsResult>;
37
+ //# sourceMappingURL=ls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/ls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AAEnG,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AA8BD,iCAAiC;AACjC,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,aAAa,CAqBrD,CAAA;AAiBD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAA;AAErD,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,kCAAkC;IAClC,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC,CA2HxB"}