@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,105 @@
1
+ import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
2
+ /** Schema for stop command output */
3
+ export const stopSchema = {
4
+ // For quiet mode, output the stopped agent IDs (one per line)
5
+ idField: (item) => item.agentIds.join('\n'),
6
+ columns: [{ header: 'STOPPED', field: 'stoppedCount' }],
7
+ };
8
+ export async function runStopCommand(id, options, _command) {
9
+ const host = getDaemonHost({ host: options.host });
10
+ // Validate arguments - need either an id, --all, or --cwd
11
+ if (!id && !options.all && !options.cwd) {
12
+ const error = {
13
+ code: 'MISSING_ARGUMENT',
14
+ message: 'Agent ID required unless --all or --cwd is specified',
15
+ details: 'Usage: junction agent stop <id> | --all | --cwd <path>',
16
+ };
17
+ throw error;
18
+ }
19
+ let client;
20
+ try {
21
+ client = await connectToDaemon({ host: options.host });
22
+ }
23
+ catch (err) {
24
+ const message = err instanceof Error ? err.message : String(err);
25
+ const error = {
26
+ code: 'DAEMON_NOT_RUNNING',
27
+ message: `Cannot connect to daemon at ${host}: ${message}`,
28
+ details: 'Start the daemon with: junction daemon start',
29
+ };
30
+ throw error;
31
+ }
32
+ try {
33
+ const fetchPayload = await client.fetchAgents({ filter: { includeArchived: true } });
34
+ let agents = fetchPayload.entries.map((entry) => entry.agent);
35
+ const stoppedIds = [];
36
+ if (options.all) {
37
+ // Stop all agents (not archived)
38
+ agents = agents.filter((a) => !a.archivedAt);
39
+ }
40
+ else if (options.cwd) {
41
+ // Stop agents in directory
42
+ const filterCwd = options.cwd;
43
+ agents = agents.filter((a) => {
44
+ if (a.archivedAt)
45
+ return false;
46
+ const agentCwd = a.cwd.replace(/\/$/, '');
47
+ const targetCwd = filterCwd.replace(/\/$/, '');
48
+ return agentCwd === targetCwd || agentCwd.startsWith(targetCwd + '/');
49
+ });
50
+ }
51
+ else if (id) {
52
+ // Stop specific agent
53
+ const fetchResult = await client.fetchAgent(id);
54
+ if (!fetchResult) {
55
+ const error = {
56
+ code: 'AGENT_NOT_FOUND',
57
+ message: `No agent found matching: ${id}`,
58
+ details: 'Use `junction ls` to list available agents',
59
+ };
60
+ throw error;
61
+ }
62
+ agents = [fetchResult.agent];
63
+ }
64
+ // Stop each agent
65
+ for (const agent of agents) {
66
+ try {
67
+ // Cancel if running
68
+ if (agent.status === 'running') {
69
+ await client.cancelAgent(agent.id);
70
+ }
71
+ // Delete the agent
72
+ await client.deleteAgent(agent.id);
73
+ stoppedIds.push(agent.id);
74
+ }
75
+ catch (err) {
76
+ // Continue stopping other agents even if one fails
77
+ const message = err instanceof Error ? err.message : String(err);
78
+ console.error(`Warning: Failed to stop agent ${agent.id.slice(0, 7)}: ${message}`);
79
+ }
80
+ }
81
+ await client.close();
82
+ return {
83
+ type: 'single',
84
+ data: {
85
+ stoppedCount: stoppedIds.length,
86
+ agentIds: stoppedIds,
87
+ },
88
+ schema: stopSchema,
89
+ };
90
+ }
91
+ catch (err) {
92
+ await client.close().catch(() => { });
93
+ // Re-throw if it's already a CommandError
94
+ if (err && typeof err === 'object' && 'code' in err) {
95
+ throw err;
96
+ }
97
+ const message = err instanceof Error ? err.message : String(err);
98
+ const error = {
99
+ code: 'STOP_AGENT_FAILED',
100
+ message: `Failed to stop agent(s): ${message}`,
101
+ };
102
+ throw error;
103
+ }
104
+ }
105
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/agent/stop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, SingleResult, OutputSchema } from '../../output/index.js';
3
+ /** Result type for agent update command */
4
+ export interface AgentUpdateResult {
5
+ agentId: string;
6
+ name: string | null;
7
+ labels: string;
8
+ }
9
+ /** Schema for update command output */
10
+ export declare const updateSchema: OutputSchema<AgentUpdateResult>;
11
+ export interface AgentUpdateOptions extends CommandOptions {
12
+ name?: string;
13
+ label?: string[];
14
+ host?: string;
15
+ }
16
+ export type AgentUpdateCommandResult = SingleResult<AgentUpdateResult>;
17
+ export declare function runUpdateCommand(agentIdArg: string, options: AgentUpdateOptions, _command: Command): Promise<AgentUpdateCommandResult>;
18
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AAErG,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,uCAAuC;AACvC,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAOxD,CAAA;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAA;AAmDtE,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,wBAAwB,CAAC,CA8FnC"}
@@ -0,0 +1,139 @@
1
+ import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
2
+ /** Schema for update command output */
3
+ export const updateSchema = {
4
+ idField: 'agentId',
5
+ columns: [
6
+ { header: 'AGENT ID', field: 'agentId' },
7
+ { header: 'NAME', field: 'name' },
8
+ { header: 'LABELS', field: 'labels' },
9
+ ],
10
+ };
11
+ function parseLabelOptions(labels) {
12
+ const parsed = {};
13
+ if (!labels) {
14
+ return parsed;
15
+ }
16
+ for (const rawLabel of labels) {
17
+ for (const segment of rawLabel.split(',')) {
18
+ const label = segment.trim();
19
+ if (!label) {
20
+ continue;
21
+ }
22
+ const eqIndex = label.indexOf('=');
23
+ if (eqIndex === -1) {
24
+ const error = {
25
+ code: 'INVALID_LABEL',
26
+ message: `Invalid label format: ${label}`,
27
+ details: 'Labels must be in key=value format',
28
+ };
29
+ throw error;
30
+ }
31
+ const key = label.slice(0, eqIndex).trim();
32
+ const value = label.slice(eqIndex + 1);
33
+ if (!key) {
34
+ const error = {
35
+ code: 'INVALID_LABEL',
36
+ message: `Invalid label format: ${label}`,
37
+ details: 'Labels must include a non-empty key in key=value format',
38
+ };
39
+ throw error;
40
+ }
41
+ parsed[key] = value;
42
+ }
43
+ }
44
+ return parsed;
45
+ }
46
+ function formatLabels(labels) {
47
+ const entries = Object.entries(labels);
48
+ if (entries.length === 0) {
49
+ return '-';
50
+ }
51
+ return entries.map(([key, value]) => `${key}=${value}`).join(',');
52
+ }
53
+ export async function runUpdateCommand(agentIdArg, options, _command) {
54
+ const host = getDaemonHost({ host: options.host });
55
+ // Validate arguments
56
+ if (!agentIdArg || agentIdArg.trim().length === 0) {
57
+ const error = {
58
+ code: 'MISSING_AGENT_ID',
59
+ message: 'Agent ID is required',
60
+ details: 'Usage: junction agent update <id> [--name <name>] [--label <key=value>]',
61
+ };
62
+ throw error;
63
+ }
64
+ const name = options.name?.trim();
65
+ if (options.name !== undefined && !name) {
66
+ const error = {
67
+ code: 'INVALID_NAME',
68
+ message: 'Name cannot be empty',
69
+ details: 'Use --name <name> with a non-empty value',
70
+ };
71
+ throw error;
72
+ }
73
+ const labels = parseLabelOptions(options.label);
74
+ if (!name && Object.keys(labels).length === 0) {
75
+ const error = {
76
+ code: 'NO_CHANGES_PROVIDED',
77
+ message: 'Nothing to update',
78
+ details: 'Provide at least one of: --name <name>, --label <key=value>',
79
+ };
80
+ throw error;
81
+ }
82
+ let client;
83
+ try {
84
+ client = await connectToDaemon({ host: options.host });
85
+ }
86
+ catch (err) {
87
+ const message = err instanceof Error ? err.message : String(err);
88
+ const error = {
89
+ code: 'DAEMON_NOT_RUNNING',
90
+ message: `Cannot connect to daemon at ${host}: ${message}`,
91
+ details: 'Start the daemon with: junction daemon start',
92
+ };
93
+ throw error;
94
+ }
95
+ try {
96
+ const fetchResult = await client.fetchAgent(agentIdArg);
97
+ if (!fetchResult) {
98
+ const error = {
99
+ code: 'AGENT_NOT_FOUND',
100
+ message: `Agent not found: ${agentIdArg}`,
101
+ details: 'Use "junction ls" to list available agents',
102
+ };
103
+ throw error;
104
+ }
105
+ const agentId = fetchResult.agent.id;
106
+ await client.updateAgent(agentId, {
107
+ ...(name ? { name } : {}),
108
+ ...(Object.keys(labels).length > 0 ? { labels } : {}),
109
+ });
110
+ const updatedResult = await client.fetchAgent(agentId);
111
+ if (!updatedResult) {
112
+ throw new Error(`Agent not found after update: ${agentId}`);
113
+ }
114
+ await client.close();
115
+ return {
116
+ type: 'single',
117
+ data: {
118
+ agentId,
119
+ name: updatedResult.agent.title,
120
+ labels: formatLabels(updatedResult.agent.labels),
121
+ },
122
+ schema: updateSchema,
123
+ };
124
+ }
125
+ catch (err) {
126
+ await client.close().catch(() => { });
127
+ // Re-throw CommandError as-is
128
+ if (err && typeof err === 'object' && 'code' in err) {
129
+ throw err;
130
+ }
131
+ const message = err instanceof Error ? err.message : String(err);
132
+ const error = {
133
+ code: 'UPDATE_FAILED',
134
+ message: `Failed to update agent: ${message}`,
135
+ };
136
+ throw error;
137
+ }
138
+ }
139
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/agent/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandOptions, SingleResult, OutputSchema } from '../../output/index.js';
3
+ /** Result type for agent wait command */
4
+ export interface AgentWaitResult {
5
+ agentId: string;
6
+ status: 'idle' | 'timeout' | 'permission' | 'error';
7
+ message: string;
8
+ }
9
+ /** Schema for agent wait output */
10
+ export declare const agentWaitSchema: OutputSchema<AgentWaitResult>;
11
+ export interface AgentWaitOptions extends CommandOptions {
12
+ timeout?: string;
13
+ host?: string;
14
+ }
15
+ export declare function runWaitCommand(agentIdArg: string, options: AgentWaitOptions, _command: Command): Promise<SingleResult<AgentWaitResult>>;
16
+ //# sourceMappingURL=wait.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/wait.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAA;AAGrG,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAA;IACnD,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,eAAe,CAOzD,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAoED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CA0IxC"}
@@ -0,0 +1,194 @@
1
+ import { connectToDaemon, getDaemonHost } from '../../utils/client.js';
2
+ import { fetchAgentTimelineItems, formatAgentActivityTranscript } from './logs.js';
3
+ /** Schema for agent wait output */
4
+ export const agentWaitSchema = {
5
+ idField: 'agentId',
6
+ columns: [
7
+ { header: 'AGENT ID', field: 'agentId', width: 12 },
8
+ { header: 'STATUS', field: 'status', width: 12 },
9
+ { header: 'MESSAGE', field: 'message', width: 40 },
10
+ ],
11
+ };
12
+ const WAIT_ACTIVITY_PREVIEW_COUNT = 5;
13
+ function appendRecentActivity(message, transcript) {
14
+ if (!transcript || transcript.trim().length === 0) {
15
+ return message;
16
+ }
17
+ return `${message}\nLast ${WAIT_ACTIVITY_PREVIEW_COUNT} activity items:\n${transcript}`;
18
+ }
19
+ async function getRecentActivityTranscript(client, agentId) {
20
+ try {
21
+ const timelineItems = await fetchAgentTimelineItems(client, agentId);
22
+ return formatAgentActivityTranscript(timelineItems, WAIT_ACTIVITY_PREVIEW_COUNT);
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /**
29
+ * Parse duration string to milliseconds.
30
+ * Supports formats like: 5m, 30s, 1h, 2h30m, 90, etc.
31
+ * If no unit is specified, assumes seconds.
32
+ */
33
+ function parseDuration(input) {
34
+ const trimmed = input.trim();
35
+ // If it's just a number, treat as seconds
36
+ if (/^\d+$/.test(trimmed)) {
37
+ return parseInt(trimmed, 10) * 1000;
38
+ }
39
+ // Parse duration with units
40
+ let totalMs = 0;
41
+ const regex = /(\d+)([smh])/g;
42
+ let match;
43
+ let hasMatch = false;
44
+ while ((match = regex.exec(trimmed)) !== null) {
45
+ hasMatch = true;
46
+ const value = parseInt(match[1], 10);
47
+ const unit = match[2];
48
+ switch (unit) {
49
+ case 's':
50
+ totalMs += value * 1000;
51
+ break;
52
+ case 'm':
53
+ totalMs += value * 60 * 1000;
54
+ break;
55
+ case 'h':
56
+ totalMs += value * 60 * 60 * 1000;
57
+ break;
58
+ }
59
+ }
60
+ if (!hasMatch) {
61
+ throw new Error(`Invalid duration format: ${input}. Use formats like: 5m, 30s, 1h, 2h30m`);
62
+ }
63
+ return totalMs;
64
+ }
65
+ export async function runWaitCommand(agentIdArg, options, _command) {
66
+ const host = getDaemonHost({ host: options.host });
67
+ // Validate arguments
68
+ if (!agentIdArg || agentIdArg.trim().length === 0) {
69
+ const error = {
70
+ code: 'MISSING_AGENT_ID',
71
+ message: 'Agent ID is required',
72
+ details: 'Usage: junction agent wait <id>',
73
+ };
74
+ throw error;
75
+ }
76
+ // Parse timeout (no limit unless explicitly provided)
77
+ let timeoutMs = 0;
78
+ let timeoutLabel = null;
79
+ if (options.timeout) {
80
+ try {
81
+ timeoutMs = parseDuration(options.timeout);
82
+ if (timeoutMs <= 0) {
83
+ throw new Error('Timeout must be positive');
84
+ }
85
+ const timeoutSeconds = Math.floor(timeoutMs / 1000);
86
+ timeoutLabel = `${timeoutSeconds} second${timeoutSeconds === 1 ? '' : 's'}`;
87
+ }
88
+ catch (err) {
89
+ const message = err instanceof Error ? err.message : String(err);
90
+ const error = {
91
+ code: 'INVALID_TIMEOUT',
92
+ message: 'Invalid timeout value',
93
+ details: message,
94
+ };
95
+ throw error;
96
+ }
97
+ }
98
+ let client;
99
+ try {
100
+ client = await connectToDaemon({ host: options.host });
101
+ }
102
+ catch (err) {
103
+ const message = err instanceof Error ? err.message : String(err);
104
+ const error = {
105
+ code: 'DAEMON_NOT_RUNNING',
106
+ message: `Cannot connect to daemon at ${host}: ${message}`,
107
+ details: 'Start the daemon with: junction daemon start',
108
+ };
109
+ throw error;
110
+ }
111
+ try {
112
+ try {
113
+ const state = await client.waitForFinish(agentIdArg, timeoutMs);
114
+ const resolvedAgentId = state.final?.id ?? agentIdArg;
115
+ const recentActivity = state.status === 'timeout' || state.status === 'idle'
116
+ ? await getRecentActivityTranscript(client, resolvedAgentId)
117
+ : null;
118
+ await client.close();
119
+ if (state.status === 'timeout') {
120
+ const timeoutMessage = timeoutLabel
121
+ ? `Agent did not finish within ${timeoutLabel}. Run \`junction wait ${resolvedAgentId}\` again to keep waiting.`
122
+ : `Agent wait timed out. Run \`junction wait ${resolvedAgentId}\` again to keep waiting.`;
123
+ return {
124
+ type: 'single',
125
+ data: {
126
+ agentId: resolvedAgentId,
127
+ status: 'timeout',
128
+ message: appendRecentActivity(timeoutMessage, recentActivity),
129
+ },
130
+ schema: agentWaitSchema,
131
+ };
132
+ }
133
+ if (state.status === 'permission') {
134
+ const permission = state.final?.pendingPermissions?.[0];
135
+ return {
136
+ type: 'single',
137
+ data: {
138
+ agentId: resolvedAgentId,
139
+ status: 'permission',
140
+ message: permission
141
+ ? `Agent is waiting for permission: ${permission.kind}`
142
+ : 'Agent is waiting for permission',
143
+ },
144
+ schema: agentWaitSchema,
145
+ };
146
+ }
147
+ if (state.status === 'error') {
148
+ return {
149
+ type: 'single',
150
+ data: {
151
+ agentId: resolvedAgentId,
152
+ status: 'error',
153
+ message: state.error ?? 'Agent finished with error',
154
+ },
155
+ schema: agentWaitSchema,
156
+ };
157
+ }
158
+ // Agent is idle
159
+ return {
160
+ type: 'single',
161
+ data: {
162
+ agentId: resolvedAgentId,
163
+ status: 'idle',
164
+ message: appendRecentActivity('Agent is idle.', recentActivity),
165
+ },
166
+ schema: agentWaitSchema,
167
+ };
168
+ }
169
+ catch (waitErr) {
170
+ await client.close().catch(() => { });
171
+ const waitMessage = waitErr instanceof Error ? waitErr.message : String(waitErr);
172
+ // Other errors
173
+ const error = {
174
+ code: 'WAIT_FAILED',
175
+ message: `Failed to wait for agent: ${waitMessage}`,
176
+ };
177
+ throw error;
178
+ }
179
+ }
180
+ catch (err) {
181
+ await client.close().catch(() => { });
182
+ // Re-throw CommandError as-is
183
+ if (err && typeof err === 'object' && 'code' in err) {
184
+ throw err;
185
+ }
186
+ const message = err instanceof Error ? err.message : String(err);
187
+ const error = {
188
+ code: 'WAIT_FAILED',
189
+ message: `Failed to wait for agent: ${message}`,
190
+ };
191
+ throw error;
192
+ }
193
+ }
194
+ //# sourceMappingURL=wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/agent/wait.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ import { type DaemonPackageContext } from './package-context.js';
3
+ export declare function createDaemonCommand(packageContext?: Partial<DaemonPackageContext>): Command;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAA;AAG7B,wBAAgB,mBAAmB,CAAC,cAAc,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAAG,OAAO,CAmD/F"}
@@ -0,0 +1,50 @@
1
+ import { Command } from 'commander';
2
+ import { startCommand } from './start.js';
3
+ import { runStatusCommand } from './status.js';
4
+ import { runStopCommand } from './stop.js';
5
+ import { runRestartCommand } from './restart.js';
6
+ import { pairCommand } from './pair.js';
7
+ import { updateCommand } from './update.js';
8
+ import { resolveDaemonPackageContext, } from './package-context.js';
9
+ import { withOutput } from '../../output/index.js';
10
+ export function createDaemonCommand(packageContext = {}) {
11
+ const resolvedPackageContext = resolveDaemonPackageContext(packageContext);
12
+ const daemon = new Command('daemon').description('Manage the Junction daemon');
13
+ daemon.addCommand(startCommand());
14
+ daemon.addCommand(pairCommand());
15
+ daemon.addCommand(updateCommand(resolvedPackageContext));
16
+ daemon
17
+ .command('status')
18
+ .description('Show local daemon status')
19
+ .option('--json', 'Output in JSON format')
20
+ .option('--home <path>', 'Junction home directory (default: ~/.junction)')
21
+ .option('--all', 'Show status of all running daemons')
22
+ .option('--port <port>', 'Show status of daemon on specific port')
23
+ .action(withOutput(async (options, command) => runStatusCommand(options, command, resolvedPackageContext)));
24
+ daemon
25
+ .command('stop')
26
+ .description('Stop the local daemon')
27
+ .option('--json', 'Output in JSON format')
28
+ .option('--home <path>', 'Junction home directory (default: ~/.junction)')
29
+ .option('--timeout <seconds>', 'Wait timeout before failing (default: 15)')
30
+ .option('--force', 'Send SIGKILL if graceful stop times out')
31
+ .option('--all', 'Stop all running daemons')
32
+ .option('--port <port>', 'Stop daemon on specific port')
33
+ .option('--listen <listen>', 'Stop daemon on specific listen address')
34
+ .action(withOutput(runStopCommand));
35
+ daemon
36
+ .command('restart')
37
+ .description('Restart the local daemon')
38
+ .option('--json', 'Output in JSON format')
39
+ .option('--home <path>', 'Junction home directory (default: ~/.junction)')
40
+ .option('--timeout <seconds>', 'Wait timeout before force step (default: 15)')
41
+ .option('--force', 'Send SIGKILL if graceful stop times out')
42
+ .option('--listen <listen>', 'Listen target for restarted daemon (host:port, port, or unix socket)')
43
+ .option('--port <port>', 'Port for restarted daemon listen target')
44
+ .option('--no-relay', 'Disable relay on restarted daemon')
45
+ .option('--no-mcp', 'Disable Agent MCP on restarted daemon')
46
+ .option('--allowed-hosts <hosts>', 'Comma-separated Host allowlist values (example: "localhost,.example.com" or "true")')
47
+ .action(withOutput(runRestartCommand));
48
+ return daemon;
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/daemon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EACL,2BAA2B,GAE5B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAA;AAEvE,MAAM,UAAU,mBAAmB,CAAC,iBAAgD,EAAE;IACpF,MAAM,sBAAsB,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAA;IAC1E,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAA;IAE9E,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;IACjC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;IAChC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAExD,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,OAAO,EAAE,oCAAoC,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACjE,MAAM,CACL,UAAU,CAAC,KAAK,EAAE,OAAuB,EAAE,OAAgB,EAAE,EAAE,CAC7D,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAC3D,CACF,CAAA;IAEH,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,qBAAqB,EAAE,2CAA2C,CAAC;SAC1E,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC;SAC5D,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAAC;SAC3C,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;SACrE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAA;IAErC,MAAM;SACH,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CAAC,qBAAqB,EAAE,8CAA8C,CAAC;SAC7E,MAAM,CAAC,SAAS,EAAE,yCAAyC,CAAC;SAC5D,MAAM,CAAC,mBAAmB,EAAE,sEAAsE,CAAC;SACnG,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;SAClE,MAAM,CAAC,YAAY,EAAE,mCAAmC,CAAC;SACzD,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;SAC3D,MAAM,CACL,yBAAyB,EACzB,qFAAqF,CACtF;SACA,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAExC,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,60 @@
1
+ export interface DaemonStartOptions {
2
+ port?: string;
3
+ listen?: string;
4
+ home?: string;
5
+ foreground?: boolean;
6
+ relay?: boolean;
7
+ mcp?: boolean;
8
+ allowedHosts?: string;
9
+ }
10
+ export interface LocalDaemonPidInfo {
11
+ pid: number;
12
+ startedAt?: string;
13
+ hostname?: string;
14
+ uid?: number;
15
+ sockPath?: string;
16
+ }
17
+ export interface LocalDaemonState {
18
+ home: string;
19
+ listen: string;
20
+ logPath: string;
21
+ pidPath: string;
22
+ pidInfo: LocalDaemonPidInfo | null;
23
+ running: boolean;
24
+ stalePidFile: boolean;
25
+ }
26
+ export interface DetachedStartResult {
27
+ pid: number | null;
28
+ logPath: string;
29
+ }
30
+ export interface StopLocalDaemonOptions {
31
+ home?: string;
32
+ listen?: string;
33
+ port?: string;
34
+ all?: boolean;
35
+ timeoutMs?: number;
36
+ force?: boolean;
37
+ }
38
+ export interface StopLocalDaemonResult {
39
+ action: 'stopped' | 'not_running';
40
+ home: string;
41
+ pid: number | null;
42
+ forced: boolean;
43
+ message: string;
44
+ }
45
+ export declare const DEFAULT_STOP_TIMEOUT_MS = 15000;
46
+ export declare function resolveLocalJunctionHome(home?: string): string;
47
+ export declare function resolveTcpHostFromListen(listen: string): string | null;
48
+ export declare function resolveAllLocalDaemonStates(options?: {
49
+ home?: string;
50
+ }): LocalDaemonState[];
51
+ export declare function resolveLocalDaemonState(options?: {
52
+ home?: string;
53
+ listen?: string;
54
+ port?: string;
55
+ }): LocalDaemonState;
56
+ export declare function tailDaemonLog(home?: string, lines?: number): string | null;
57
+ export declare function startLocalDaemonDetached(options: DaemonStartOptions): Promise<DetachedStartResult>;
58
+ export declare function startLocalDaemonForeground(options: DaemonStartOptions): number;
59
+ export declare function stopLocalDaemon(options?: StopLocalDaemonOptions): Promise<StopLocalDaemonResult | StopLocalDaemonResult[]>;
60
+ //# sourceMappingURL=local-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-daemon.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/local-daemon.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,GAAG,aAAa,CAAA;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAmBD,eAAO,MAAM,uBAAuB,QAAS,CAAA;AA+M7C,wBAAgB,wBAAwB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBtE;AAuDD,wBAAgB,2BAA2B,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,gBAAgB,EAAE,CAG/F;AAED,wBAAgB,uBAAuB,CACrC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D,gBAAgB,CAuDlB;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,GAAG,IAAI,CAGtE;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAqE9B;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAqB9E;AAmGD,wBAAsB,eAAe,CACnC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,EAAE,CAAC,CA2B1D"}