@cydm/happy-elves 0.1.0-beta.11 → 0.1.0-beta.13
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/apps/cli/dist/commands/app.js +10 -19
- package/apps/cli/dist/commands/app.js.map +1 -1
- package/apps/cli/dist/commands/collect.js +8 -2
- package/apps/cli/dist/commands/collect.js.map +1 -1
- package/apps/cli/dist/commands/lib/exit.js +7 -7
- package/apps/cli/dist/commands/lib/exit.js.map +1 -1
- package/apps/cli/dist/commands/lib/index.d.ts +1 -1
- package/apps/cli/dist/commands/lib/index.js.map +1 -1
- package/apps/cli/dist/commands/lib/scope.d.ts +1 -0
- package/apps/cli/dist/commands/lib/scope.js +1 -0
- package/apps/cli/dist/commands/lib/scope.js.map +1 -1
- package/apps/cli/dist/commands/lib/session-output.d.ts +8 -5
- package/apps/cli/dist/commands/lib/session-output.js +5 -13
- package/apps/cli/dist/commands/lib/session-output.js.map +1 -1
- package/apps/cli/dist/commands/lib/session-view.d.ts +16 -3
- package/apps/cli/dist/commands/lib/session-view.js +25 -7
- package/apps/cli/dist/commands/lib/session-view.js.map +1 -1
- package/apps/cli/dist/commands/lib/status.js +4 -4
- package/apps/cli/dist/commands/lib/status.js.map +1 -1
- package/apps/cli/dist/commands/lib/usage.d.ts +1 -0
- package/apps/cli/dist/commands/lib/usage.js +127 -147
- package/apps/cli/dist/commands/lib/usage.js.map +1 -1
- package/apps/cli/dist/commands/lib/workspace.d.ts +1 -16
- package/apps/cli/dist/commands/lib/workspace.js +0 -40
- package/apps/cli/dist/commands/lib/workspace.js.map +1 -1
- package/apps/cli/dist/commands/loop.js +14 -7
- package/apps/cli/dist/commands/loop.js.map +1 -1
- package/apps/cli/dist/commands/machine.js +35 -51
- package/apps/cli/dist/commands/machine.js.map +1 -1
- package/apps/cli/dist/commands/remote.js +13 -6
- package/apps/cli/dist/commands/remote.js.map +1 -1
- package/apps/cli/dist/commands/run.js +4 -8
- package/apps/cli/dist/commands/run.js.map +1 -1
- package/apps/cli/dist/commands/session.js +159 -171
- package/apps/cli/dist/commands/session.js.map +1 -1
- package/apps/cli/dist/commands/token.js +17 -2
- package/apps/cli/dist/commands/token.js.map +1 -1
- package/apps/cli/dist/commands/turn.d.ts +2 -0
- package/apps/cli/dist/commands/turn.js +247 -0
- package/apps/cli/dist/commands/turn.js.map +1 -0
- package/apps/cli/dist/commands/wait.js +3 -4
- package/apps/cli/dist/commands/wait.js.map +1 -1
- package/apps/cli/dist/commands/workspace.js +32 -15
- package/apps/cli/dist/commands/workspace.js.map +1 -1
- package/apps/daemon/dist/session/events.js +2 -1
- package/apps/daemon/dist/session/events.js.map +1 -1
- package/apps/daemon/dist/session/lifecycle.js +2 -0
- package/apps/daemon/dist/session/lifecycle.js.map +1 -1
- package/apps/daemon/dist/session/prompt.js +6 -1
- package/apps/daemon/dist/session/prompt.js.map +1 -1
- package/apps/relay/dist/db.js +2 -0
- package/apps/relay/dist/db.js.map +1 -1
- package/apps/relay/dist/machine-handlers.d.ts +2 -0
- package/apps/relay/dist/machine-handlers.js +3 -2
- package/apps/relay/dist/machine-handlers.js.map +1 -1
- package/apps/relay/dist/projections.js +1 -0
- package/apps/relay/dist/projections.js.map +1 -1
- package/apps/relay/dist/relay-context.d.ts +2 -0
- package/apps/relay/dist/relay-context.js +19 -3
- package/apps/relay/dist/relay-context.js.map +1 -1
- package/apps/relay/dist/types.d.ts +1 -0
- package/package.json +1 -1
- package/packages/runtime/dist/index.d.ts +2 -0
- package/packages/runtime/dist/index.d.ts.map +1 -1
- package/packages/runtime-acpx/dist/index.d.ts.map +1 -1
- package/packages/runtime-acpx/dist/index.js +69 -0
- package/packages/runtime-acpx/dist/index.js.map +1 -1
- package/packages/runtime-cli/dist/claude-history.d.ts.map +1 -1
- package/packages/runtime-cli/dist/claude-history.js +46 -4
- package/packages/runtime-cli/dist/claude-history.js.map +1 -1
- package/packages/runtime-cli/dist/claude-json.d.ts +1 -0
- package/packages/runtime-cli/dist/claude-json.d.ts.map +1 -1
- package/packages/runtime-cli/dist/claude-json.js +1 -0
- package/packages/runtime-cli/dist/claude-json.js.map +1 -1
- package/packages/runtime-cli/dist/codex-app-server.d.ts.map +1 -1
- package/packages/runtime-cli/dist/codex-app-server.js +1 -1
- package/packages/runtime-cli/dist/codex-app-server.js.map +1 -1
- package/packages/runtime-cli/dist/codex-history.d.ts.map +1 -1
- package/packages/runtime-cli/dist/codex-history.js +60 -5
- package/packages/runtime-cli/dist/codex-history.js.map +1 -1
- package/packages/runtime-cli/dist/codex-protocol.d.ts +1 -1
- package/packages/runtime-cli/dist/codex-protocol.d.ts.map +1 -1
- package/packages/runtime-cli/dist/codex-protocol.js +16 -2
- package/packages/runtime-cli/dist/codex-protocol.js.map +1 -1
- package/packages/shared/dist/protocol-schemas.d.ts +2 -0
- package/packages/shared/dist/protocol-schemas.d.ts.map +1 -1
- package/packages/shared/dist/protocol-schemas.js +2 -0
- package/packages/shared/dist/protocol-schemas.js.map +1 -1
- package/packages/shared/dist/protocol-types.d.ts +2 -0
- package/packages/shared/dist/protocol-types.d.ts.map +1 -1
- package/packages/shared/dist/protocol.d.ts +1 -0
- package/packages/shared/dist/protocol.d.ts.map +1 -1
- package/packages/shared/dist/protocol.js +1 -0
- package/packages/shared/dist/protocol.js.map +1 -1
|
@@ -22,7 +22,7 @@ Check local controller config, relay reachability, and daemon state.
|
|
|
22
22
|
`,
|
|
23
23
|
remote: `Usage:
|
|
24
24
|
happy-elves remote status [--json]
|
|
25
|
-
happy-elves remote devices [--json]
|
|
25
|
+
happy-elves remote devices [--verbose] [--json]
|
|
26
26
|
happy-elves remote pairing new --json
|
|
27
27
|
happy-elves remote machine-pairing new --json
|
|
28
28
|
happy-elves remote invite-controller [--device-name <name>] [--ttl 10m] [--join-url-base <url>] [--json]
|
|
@@ -31,59 +31,54 @@ Check local controller config, relay reachability, and daemon state.
|
|
|
31
31
|
happy-elves remote revoke <deviceId> --json
|
|
32
32
|
`,
|
|
33
33
|
machine: `Usage:
|
|
34
|
-
happy-elves machine list [--json]
|
|
35
|
-
happy-elves machine
|
|
36
|
-
happy-elves machine status <machineId> [--json]
|
|
37
|
-
`,
|
|
38
|
-
workspace: `Usage:
|
|
39
|
-
happy-elves workspace sessions --cwd <path> [--machine <machineId>] [--agent codex] [--limit 50] [--json]
|
|
40
|
-
|
|
41
|
-
Discover runtime historical sessions for Resume Existing/import. Use
|
|
42
|
-
session list --cwd <path> for Happy Elves-managed sessions.
|
|
34
|
+
happy-elves machine list [--verbose] [--json]
|
|
35
|
+
happy-elves machine status <machineId> [--verbose] [--json]
|
|
43
36
|
`,
|
|
44
37
|
session: `Usage:
|
|
45
38
|
happy-elves session create --machine <machineId> [--agent codex] [--cwd <path>] [--name <name>] [--permission-mode <mode>] --json
|
|
46
|
-
happy-elves session list [--machine <machineId>] [--agent <agent>] [--cwd <cwd>] [--name <name>] [--
|
|
47
|
-
happy-elves session
|
|
48
|
-
happy-elves session
|
|
49
|
-
happy-elves session
|
|
50
|
-
happy-elves session history <sessionId> [--limit 20] [--verbose] [--json]
|
|
51
|
-
happy-elves session last-output <sessionId> [--json]
|
|
52
|
-
happy-elves session resume <sessionId> --json
|
|
53
|
-
happy-elves session rename <sessionId> <name> [--json]
|
|
54
|
-
happy-elves session rewind <sessionId> --to <turn-or-checkpoint-id> --json
|
|
55
|
-
happy-elves session fork <sessionId> --from <turn-or-checkpoint-id> --name <name> --json
|
|
39
|
+
happy-elves session list [--machine <machineId>] [--agent <agent>] [--cwd <cwd>] [--name <name>] [--limit n] [--all] [--verbose] [--json]
|
|
40
|
+
happy-elves session history --machine <machineId> [--cwd <path>] [--agent <agent>] [--limit 20] --json
|
|
41
|
+
happy-elves session continue <runtimeSessionId> --machine <machineId> [--name <name>] --json
|
|
42
|
+
happy-elves session status <sessionId> [--verbose] [--json]
|
|
56
43
|
happy-elves session close <sessionId> [--reason <reason>] --json
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
happy-elves
|
|
44
|
+
|
|
45
|
+
Session management:
|
|
46
|
+
list/status inspect loaded sessions: Happy Elves control-plane records that
|
|
47
|
+
can be operated through this CLI.
|
|
48
|
+
history is read-only runtime/provider history discovery.
|
|
49
|
+
continue turns a runtime history row into a loaded session, or returns the
|
|
50
|
+
existing loaded session if it already exists.
|
|
51
|
+
close archives a loaded session. There is no separate archive command.
|
|
52
|
+
`,
|
|
53
|
+
turn: `Usage:
|
|
54
|
+
happy-elves turn list <sessionId> [--limit 10] [--verbose] [--json]
|
|
55
|
+
happy-elves turn status <sessionId> <turnId> [--verbose] [--json]
|
|
56
|
+
happy-elves turn result <sessionId> [<turnId>] [--verbose] [--json]
|
|
57
|
+
happy-elves turn run <sessionId> (--text <prompt> | --text-file <path>) [--detach] [--timeout 1000s] [--runtime-timeout 1000s] [--permission-mode approve-reads|approve-all|deny-all] [--json]
|
|
58
|
+
happy-elves turn wait <sessionId> <turnId> [--timeout 1000s] --json
|
|
59
|
+
happy-elves turn cancel <sessionId> <turnId> [--reason <reason>] --json
|
|
60
|
+
happy-elves turn rewind <sessionId> <turn-or-checkpoint-id> --json
|
|
61
|
+
happy-elves turn fork <sessionId> <turn-or-checkpoint-id> --name <name> --json
|
|
62
|
+
|
|
63
|
+
Turn management:
|
|
64
|
+
run starts one agent execution. It waits by default; use --detach for
|
|
65
|
+
background execution.
|
|
66
|
+
wait/result inspect a specific turn.
|
|
67
|
+
rewind/fork operate on a turn or checkpoint id supplied by runtime history.
|
|
68
68
|
`,
|
|
69
69
|
collect: `Usage:
|
|
70
70
|
happy-elves collect <sessionId> [--since <eventId|event:id|cursor_id>] [--limit 20] [--verbose] [--json]
|
|
71
|
-
`,
|
|
72
|
-
cancel: `Usage:
|
|
73
|
-
happy-elves cancel <sessionId> [--turn <turnId>] [--reason <reason>] --json
|
|
74
|
-
|
|
75
|
-
Interrupts a running turn. It does not roll back file changes, commands, or external side effects.
|
|
76
71
|
`,
|
|
77
72
|
token: `Usage:
|
|
78
73
|
happy-elves token create [--name <name>] [--machines a,b] [--sessions a,b] [--loops a,b] --actions a,b [--expires-in 24h] --json
|
|
79
|
-
happy-elves token list [--json]
|
|
74
|
+
happy-elves token list [--verbose] [--json]
|
|
80
75
|
happy-elves token revoke <tokenId> --json
|
|
81
76
|
`,
|
|
82
77
|
loop: `Usage:
|
|
83
78
|
happy-elves loop create <sessionId> [--every 15m] (--prompt <text> | --prompt-file <path>) [--stop-on blocked] --json
|
|
84
|
-
happy-elves loop list [--all] [--json]
|
|
79
|
+
happy-elves loop list [--all] [--verbose] [--json]
|
|
85
80
|
happy-elves loop show <loopId> --json
|
|
86
|
-
happy-elves loop run <loopId> [--timeout
|
|
81
|
+
happy-elves loop run <loopId> [--timeout 1000s] --json
|
|
87
82
|
happy-elves loop pause <loopId> --json
|
|
88
83
|
happy-elves loop resume <loopId> --json
|
|
89
84
|
happy-elves loop delete <loopId> --json
|
|
@@ -119,123 +114,108 @@ export function commandUsage(command, exitCode = 1) {
|
|
|
119
114
|
export function usageText() {
|
|
120
115
|
return `happy-elves
|
|
121
116
|
|
|
122
|
-
|
|
123
|
-
Happy Elves is a remote control plane for coding agents. Use it to discover
|
|
124
|
-
machines, inspect workspaces, resume existing runtime sessions, create worker
|
|
125
|
-
sessions, run prompts, collect outputs, and manage scoped automation tokens.
|
|
117
|
+
Happy Elves is a remote controller and orchestration layer for coding agents across machines. The local agent remains the authority for runtime state. Agents should run happy-elves --skill before using this CLI.
|
|
126
118
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
119
|
+
Core commands:
|
|
120
|
+
machine list [--json]
|
|
121
|
+
machine status <machineId> [--verbose] [--json]
|
|
122
|
+
|
|
123
|
+
session list [--machine <machineId>] [--cwd <path>] [--limit 20] [--json]
|
|
124
|
+
session create --machine <machineId> [--agent codex] [--cwd <path>] [--name <name>] --json
|
|
125
|
+
session history --machine <machineId> [--cwd <path>] [--limit 20] --json
|
|
126
|
+
session continue <runtimeSessionId> --machine <machineId> --json
|
|
127
|
+
session status <sessionId> [--verbose] [--json]
|
|
128
|
+
session close <sessionId> [--reason <reason>] --json
|
|
132
129
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
130
|
+
turn list <sessionId> [--limit 10] [--json]
|
|
131
|
+
turn status <sessionId> <turnId> [--json]
|
|
132
|
+
turn run <sessionId> --text <prompt> [--timeout 1000s] [--json]
|
|
133
|
+
turn wait <sessionId> <turnId> [--timeout 1000s] [--json]
|
|
134
|
+
turn result <sessionId> [<turnId>] [--json]
|
|
135
|
+
turn cancel <sessionId> <turnId> [--reason <reason>] --json
|
|
136
|
+
turn rewind <sessionId> <turn-or-checkpoint-id> --json
|
|
137
|
+
turn fork <sessionId> <turn-or-checkpoint-id> --name <name> --json
|
|
138
|
+
|
|
139
|
+
remote status --json
|
|
140
|
+
remote devices [--json]
|
|
141
|
+
remote invite-controller [--device-name <name>] [--ttl 10m] --json
|
|
142
|
+
remote join-controller --url <url> [--device-name <name>] --json
|
|
143
|
+
|
|
144
|
+
relay serve [--host 0.0.0.0] [--port 8787] [--json]
|
|
145
|
+
relay status [--relay <url>] [--json]
|
|
146
|
+
relay doctor [--relay <url>] [--json]
|
|
147
|
+
|
|
148
|
+
Usage:
|
|
149
|
+
happy-elves <domain> <action> [args] [flags]
|
|
150
|
+
happy-elves <domain> --help
|
|
151
|
+
happy-elves --help
|
|
152
|
+
|
|
153
|
+
Common flows:
|
|
154
|
+
Discover: machine list --json; session list --machine <machineId> --json
|
|
155
|
+
Continue: session history --machine <machineId> --json; session continue <runtimeSessionId> --machine <machineId> --json
|
|
156
|
+
Execute: turn run <sessionId> --text <prompt> --json; turn result <sessionId> <turnId> --json
|
|
157
|
+
Branch: turn rewind <sessionId> <turnId> --json; turn fork <sessionId> <turnId> --name <name> --json
|
|
158
|
+
|
|
159
|
+
More:
|
|
160
|
+
happy-elves --skill
|
|
161
|
+
happy-elves <domain> --help
|
|
162
|
+
start, status, doctor, collect, config, account, daemon, relay, token, loop.
|
|
163
|
+
`;
|
|
164
|
+
}
|
|
165
|
+
export function skillText() {
|
|
166
|
+
return `Happy Elves agent skill
|
|
167
|
+
|
|
168
|
+
When to use:
|
|
169
|
+
Use Happy Elves when the user asks about Happy Elves machines, workspaces,
|
|
170
|
+
sessions, remote agents, handoff, resume, fork, rewind, or remote execution.
|
|
171
|
+
|
|
172
|
+
Do not:
|
|
173
|
+
Do not bypass Happy Elves by operating on a local checkout just because a
|
|
174
|
+
similarly named project exists on your machine.
|
|
175
|
+
Do not use old top-level run/wait/result/cancel commands.
|
|
176
|
+
Do not treat runtime history as a loaded session until session continue
|
|
177
|
+
returns a sessionId.
|
|
136
178
|
|
|
137
179
|
Recommended agent workflow:
|
|
138
180
|
1. machine list --json
|
|
139
|
-
2. session list --machine <machineId> --
|
|
140
|
-
3.
|
|
141
|
-
4. session
|
|
142
|
-
5. run <sessionId> --text <prompt> --json
|
|
143
|
-
6. wait <sessionId>
|
|
144
|
-
7. result <sessionId>
|
|
181
|
+
2. session list --machine <machineId> --limit 20 --json
|
|
182
|
+
3. session history --machine <machineId> --limit 20 --json
|
|
183
|
+
4. session continue <runtimeSessionId> --machine <machineId> --json
|
|
184
|
+
5. turn run <sessionId> --text <prompt> --json
|
|
185
|
+
6. turn wait <sessionId> <turnId> --json
|
|
186
|
+
7. turn result <sessionId> <turnId> --json
|
|
187
|
+
|
|
188
|
+
Concepts:
|
|
189
|
+
Loaded session: a Happy Elves control-plane session that can be operated by
|
|
190
|
+
this CLI.
|
|
191
|
+
Runtime history: read-only provider history discovered by session history.
|
|
192
|
+
Turn: one execution within a loaded session.
|
|
193
|
+
Relay: encrypted transport between controllers and daemons. Use relay
|
|
194
|
+
serve/status/doctor when self-hosting or debugging connectivity.
|
|
195
|
+
|
|
196
|
+
Session management:
|
|
197
|
+
session list/status inspect loaded sessions.
|
|
198
|
+
session history is read-only runtime history discovery.
|
|
199
|
+
session continue <runtimeSessionId> --machine <machineId> --json continues a
|
|
200
|
+
runtime history row as a loaded session, or returns an existing sessionId.
|
|
201
|
+
session close <sessionId> --reason "archived" --json archives a loaded
|
|
202
|
+
session. There is no separate archive command.
|
|
145
203
|
|
|
146
204
|
Output modes:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
Add --verbose to history
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
status [--json]
|
|
156
|
-
doctor [--relay <url>] [--json]
|
|
157
|
-
|
|
158
|
-
Config:
|
|
159
|
-
account create --relay <url> [--device-id <id>] [--device-name <name>] --json
|
|
160
|
-
account reset --json
|
|
161
|
-
config init --relay <url> --token <controller-token> --secret <account-secret> --json
|
|
162
|
-
config show --json
|
|
163
|
-
remote pairing new --json
|
|
164
|
-
remote machine-pairing new --json
|
|
165
|
-
remote invite-controller [--device-name <name>] [--ttl 10m] [--join-url-base <url>] [--json]
|
|
166
|
-
remote join-controller (--url <url> | --code <code> --invite-secret <secret>) [--relay <url>] [--device-id <id>] [--device-name <name>] --json
|
|
167
|
-
remote status --json
|
|
168
|
-
remote add-controller [--device-id <id>] [--device-name <name>] --json
|
|
169
|
-
remote devices --json
|
|
170
|
-
remote revoke <deviceId> --json
|
|
171
|
-
|
|
172
|
-
Machines:
|
|
173
|
-
machine list --json
|
|
174
|
-
machine show <machineId> --json
|
|
175
|
-
machine status <machineId> --json
|
|
176
|
-
|
|
177
|
-
Workspaces:
|
|
178
|
-
workspace sessions --cwd <path> [--machine <machineId>] [--agent codex] [--limit 50] [--json]
|
|
179
|
-
Runtime historical sessions for Resume Existing/import; not the managed
|
|
180
|
-
Happy Elves session list. Use session list --cwd <path> --json for managed sessions.
|
|
181
|
-
|
|
182
|
-
Sessions:
|
|
183
|
-
session create --machine <machineId> [--agent codex] [--cwd <path>] [--name <name>] [--permission-mode <mode>] --json
|
|
184
|
-
session list [--machine <machineId>] [--agent <agent>] [--cwd <cwd>] [--name <name>] [--summary] [--verbose] [--json]
|
|
185
|
-
session show <sessionId> --json
|
|
186
|
-
session status <sessionId> --json
|
|
187
|
-
session turns <sessionId> [--limit 10] [--json]
|
|
188
|
-
session history <sessionId> [--limit 20] [--verbose] [--json] # debug/API events
|
|
189
|
-
session last-output <sessionId> [--json]
|
|
190
|
-
session resume <sessionId> --json
|
|
191
|
-
session rename <sessionId> <name> [--json]
|
|
192
|
-
session rewind <sessionId> --to <turn-or-checkpoint-id> --json
|
|
193
|
-
session fork <sessionId> --from <turn-or-checkpoint-id> --name <name> --json
|
|
194
|
-
session close <sessionId> [--reason <reason>] --json
|
|
195
|
-
|
|
196
|
-
Run:
|
|
197
|
-
run <sessionId> --text <prompt> [--detach] [--timeout 30m] [--runtime-timeout 30m] [--permission-mode approve-reads|approve-all|deny-all] [--json]
|
|
198
|
-
run <sessionId> --text-file <path> [--detach] [--timeout 30m] [--runtime-timeout 30m] [--permission-mode approve-reads|approve-all|deny-all] [--json]
|
|
199
|
-
result <sessionId> [--turn <turnId>] [--json]
|
|
200
|
-
wait <sessionId> --turn <turnId> [--timeout 30m] [--json]
|
|
201
|
-
wait <sessionId> [--until idle|ready|running|completed|failed|cancelled|offline|closed] [--timeout 30m] --json
|
|
202
|
-
collect <sessionId> [--since <eventId|event:id|cursor_id>] [--limit 20] [--verbose] [--json] # debug/API events
|
|
203
|
-
cancel <sessionId> [--turn <turnId>] [--reason <reason>] --json
|
|
204
|
-
Interrupts a running turn; does not roll back side effects.
|
|
205
|
-
|
|
206
|
-
Scoped Tokens:
|
|
207
|
-
token create [--name <name>] [--machines a,b] [--sessions a,b] [--loops a,b] --actions a,b [--expires-in 24h] --json
|
|
208
|
-
token list --json
|
|
209
|
-
token revoke <tokenId> --json
|
|
210
|
-
|
|
211
|
-
Loops:
|
|
212
|
-
loop create <sessionId> [--every 15m] (--prompt <text> | --prompt-file <path>) [--stop-on blocked] --json
|
|
213
|
-
loop list [--all] [--json]
|
|
214
|
-
loop show <loopId> --json
|
|
215
|
-
loop run <loopId> [--timeout 30m] --json
|
|
216
|
-
loop pause <loopId> --json
|
|
217
|
-
loop resume <loopId> --json
|
|
218
|
-
loop delete <loopId> --json
|
|
219
|
-
|
|
220
|
-
Daemon:
|
|
221
|
-
daemon pair --relay <url> --code <code> --secret <account-secret> [--name <machine-name>] --json
|
|
222
|
-
daemon start [--relay <url>] --json
|
|
223
|
-
daemon stop --json
|
|
224
|
-
daemon restart [--relay <url>] --json
|
|
225
|
-
daemon status [--machine <machineId>] [--local] --json
|
|
226
|
-
daemon config --json
|
|
227
|
-
daemon doctor --json
|
|
228
|
-
daemon logs [--tail 100] --json
|
|
229
|
-
|
|
230
|
-
Relay:
|
|
231
|
-
relay serve [--host 0.0.0.0] [--port 8787] --json
|
|
232
|
-
relay status [--relay <url>] --json
|
|
233
|
-
relay doctor [--relay <url>] --json
|
|
205
|
+
Prefer --json when another agent or program will parse the result.
|
|
206
|
+
Use human output for direct terminal inspection.
|
|
207
|
+
Default JSON is compact: list/status/turn answer with bounded projections,
|
|
208
|
+
not raw metadata or event streams.
|
|
209
|
+
Add --verbose to status, list, history, turn list, or collect when internal
|
|
210
|
+
details are needed for debugging.
|
|
211
|
+
turn run waits for completion by default with a 1000s timeout. Use --detach
|
|
212
|
+
only when you intentionally want background execution.
|
|
234
213
|
|
|
235
214
|
Security notes:
|
|
236
|
-
Account secrets stay on controllers and daemons.
|
|
237
|
-
|
|
238
|
-
|
|
215
|
+
Account secrets stay on controllers and daemons.
|
|
216
|
+
Relay payloads are encrypted.
|
|
217
|
+
Scoped credentials should include only the actions they need, such as
|
|
218
|
+
snapshot, session.run, collect, or directory.list.
|
|
239
219
|
`;
|
|
240
220
|
}
|
|
241
221
|
export function usage() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/lib/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,iBAAiB,GAA2B;IAChD,KAAK,EAAE;;;CAGR;IACC,MAAM,EAAE;;;CAGT;IACC,MAAM,EAAE;;;CAGT;IACC,OAAO,EAAE;;;CAGV;IACC,MAAM,EAAE;;;CAGT;IACC,MAAM,EAAE;;;;;;;;;CAST;IACC,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/lib/usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,iBAAiB,GAA2B;IAChD,KAAK,EAAE;;;CAGR;IACC,MAAM,EAAE;;;CAGT;IACC,MAAM,EAAE;;;CAGT;IACC,OAAO,EAAE;;;CAGV;IACC,MAAM,EAAE;;;CAGT;IACC,MAAM,EAAE;;;;;;;;;CAST;IACC,OAAO,EAAE;;;CAGV;IACC,OAAO,EAAE;;;;;;;;;;;;;;;CAeV;IACC,IAAI,EAAE;;;;;;;;;;;;;;;CAeP;IACC,OAAO,EAAE;;CAEV;IACC,KAAK,EAAE;;;;CAIR;IACC,IAAI,EAAE;;;;;;;;CAQP;IACC,MAAM,EAAE;;;;;;;;;CAST;IACC,KAAK,EAAE;;;;CAIR;CACA,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,OAA2B;IAC1D,OAAO,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA2B,EAAE,QAAQ,GAAG,CAAC;IACpE,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,SAAS,EAAE,CAAC;IACtD,IAAI,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,UAAU,CAAC,OAAO,EAAE,sDAAsD,OAAO,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,UAAU,CAAC,OAAO,EAAE,sEAAsE,CAAC,CAAC;IAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -4,17 +4,8 @@ export type WorkspaceHistoricalSession = HistoricalSessionSnapshot & {
|
|
|
4
4
|
machineId: string;
|
|
5
5
|
machineName: string;
|
|
6
6
|
};
|
|
7
|
-
export type ManagedSessionsHint = {
|
|
8
|
-
command: string;
|
|
9
|
-
argv: string[];
|
|
10
|
-
};
|
|
11
|
-
export declare function managedSessionsHint(input: {
|
|
12
|
-
cwd: string;
|
|
13
|
-
machineId?: string;
|
|
14
|
-
agent?: string;
|
|
15
|
-
}): ManagedSessionsHint;
|
|
16
7
|
export declare function listWorkspaceHistoricalSessions(client: ControllerClient, input: {
|
|
17
|
-
cwd
|
|
8
|
+
cwd?: string;
|
|
18
9
|
machineId?: string;
|
|
19
10
|
agent?: string;
|
|
20
11
|
limit: number;
|
|
@@ -31,9 +22,3 @@ export declare function listWorkspaceHistoricalSessions(client: ControllerClient
|
|
|
31
22
|
machineName: string;
|
|
32
23
|
}>;
|
|
33
24
|
}>;
|
|
34
|
-
export declare function printWorkspaceHistoricalSessions(sessions: WorkspaceHistoricalSession[], errors: Array<{
|
|
35
|
-
machineId: string;
|
|
36
|
-
machineName: string;
|
|
37
|
-
code?: string;
|
|
38
|
-
message: string;
|
|
39
|
-
}>, managedHint?: ManagedSessionsHint): void;
|
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
import { CliError } from "../../errors.js";
|
|
2
|
-
import { compactText } from "./session-output.js";
|
|
3
2
|
import { showMachine } from "./session-view.js";
|
|
4
|
-
function quoteShellArg(value) {
|
|
5
|
-
if (/^[A-Za-z0-9_./:=@+-]+$/.test(value))
|
|
6
|
-
return value;
|
|
7
|
-
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
8
|
-
}
|
|
9
|
-
export function managedSessionsHint(input) {
|
|
10
|
-
const argv = ["happy-elves", "session", "list"];
|
|
11
|
-
if (input.machineId)
|
|
12
|
-
argv.push("--machine", input.machineId);
|
|
13
|
-
argv.push("--cwd", input.cwd);
|
|
14
|
-
if (input.agent)
|
|
15
|
-
argv.push("--agent", input.agent);
|
|
16
|
-
argv.push("--json");
|
|
17
|
-
return { argv, command: argv.map(quoteShellArg).join(" ") };
|
|
18
|
-
}
|
|
19
3
|
export async function listWorkspaceHistoricalSessions(client, input) {
|
|
20
4
|
const snapshot = await client.snapshot();
|
|
21
5
|
const providerLimit = Math.min(200, Math.max(input.limit, 50));
|
|
@@ -68,28 +52,4 @@ export async function listWorkspaceHistoricalSessions(client, input) {
|
|
|
68
52
|
machines: rows.map((row) => row.machine),
|
|
69
53
|
};
|
|
70
54
|
}
|
|
71
|
-
export function printWorkspaceHistoricalSessions(sessions, errors, managedHint) {
|
|
72
|
-
if (sessions.length === 0) {
|
|
73
|
-
console.log("No runtime historical sessions found for this workspace.");
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
console.log("Runtime historical sessions:");
|
|
77
|
-
for (const session of sessions) {
|
|
78
|
-
const updated = new Date(session.updatedAt).toISOString();
|
|
79
|
-
const loaded = session.loadedSessionId ?? "-";
|
|
80
|
-
const summary = compactText(session.summary ?? session.runtimeSessionName ?? "", 140);
|
|
81
|
-
console.log(`${session.runtimeSessionId} ${session.agent} ${updated}`);
|
|
82
|
-
console.log(` machine: ${session.machineName} (${session.machineId})`);
|
|
83
|
-
console.log(` loaded: ${loaded}`);
|
|
84
|
-
if (summary)
|
|
85
|
-
console.log(` summary: ${summary}`);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (managedHint) {
|
|
89
|
-
console.log(`Happy Elves-managed sessions are separate. Run: ${managedHint.command}`);
|
|
90
|
-
}
|
|
91
|
-
for (const error of errors) {
|
|
92
|
-
console.error(`Warning: ${error.machineName} (${error.machineId}) ${error.code ? `${error.code}: ` : ""}${error.message}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
55
|
//# sourceMappingURL=workspace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/lib/workspace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/commands/lib/workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CliError, ControllerClient, appendLoop, compactText, localScopeFor, loopVisibleToScope, ok, parseDurationMs, parseStopOn, randomId, readConfig, readLoopStore, readPromptTextFile, requirePositional, requireScopedAction, requireScopedLoop, scopeAllows, updateLoop, wantsJson } from "./lib/index.js";
|
|
1
|
+
import { CliError, ControllerClient, DEFAULT_COMMAND_TIMEOUT_MS, appendLoop, compactText, localScopeFor, loopVisibleToScope, ok, parseDurationMs, parseStopOn, randomId, readConfig, readLoopStore, readPromptTextFile, requirePositional, requireScopedAction, requireScopedLoop, scopeAllows, updateLoop, wantsJson, wantsVerbose } from "./lib/index.js";
|
|
2
2
|
export async function handleLoop({ domain, action, positional, flags }) {
|
|
3
3
|
if (domain === "loop" && action === "create") {
|
|
4
4
|
const config = await readConfig(flags);
|
|
@@ -64,14 +64,21 @@ export async function handleLoop({ domain, action, positional, flags }) {
|
|
|
64
64
|
const last = loop.lastRun ? `${loop.lastRun.status}${loop.lastRun.stopReason ? `: ${compactText(loop.lastRun.stopReason, 80)}` : ""}` : "never";
|
|
65
65
|
const sessionAgent = loop.session?.agent ?? "-";
|
|
66
66
|
const sessionName = loop.session?.name ?? "-";
|
|
67
|
-
console.log(`${loop.id} ${loop.status} every ${every}`);
|
|
68
|
-
console.log(` session: ${loop.sessionId} ${sessionAgent} ${sessionName}`);
|
|
69
|
-
console.log(` prompt: ${compactText(loop.prompt, 120)}`);
|
|
70
|
-
console.log(` last: ${last}`);
|
|
67
|
+
console.log(`${loop.id} ${loop.status} every ${every} ${loop.sessionId} ${sessionAgent} ${compactText(sessionName, 42)} last:${compactText(last, 42)}`);
|
|
71
68
|
}
|
|
72
69
|
return true;
|
|
73
70
|
}
|
|
74
|
-
ok("loop.list", { loops }
|
|
71
|
+
ok("loop.list", wantsVerbose(flags) ? { loops } : {
|
|
72
|
+
loops: loops.map((loop) => ({
|
|
73
|
+
loopId: loop.id,
|
|
74
|
+
sessionId: loop.sessionId,
|
|
75
|
+
name: loop.session?.name,
|
|
76
|
+
state: loop.status,
|
|
77
|
+
interval: loop.everyMs ? `${Math.round(loop.everyMs / 60_000)}m` : "manual",
|
|
78
|
+
nextRunAt: loop.nextRunAt,
|
|
79
|
+
lastRunStatus: loop.lastRun?.status,
|
|
80
|
+
})),
|
|
81
|
+
});
|
|
75
82
|
return true;
|
|
76
83
|
}
|
|
77
84
|
if (domain === "loop" && action === "show") {
|
|
@@ -137,7 +144,7 @@ export async function handleLoop({ domain, action, positional, flags }) {
|
|
|
137
144
|
requireScopedLoop(localScope, current);
|
|
138
145
|
return { ...current, pendingRunId: runId };
|
|
139
146
|
});
|
|
140
|
-
const timeoutMs = parseDurationMs(flags.timeout,
|
|
147
|
+
const timeoutMs = parseDurationMs(flags.timeout, DEFAULT_COMMAND_TIMEOUT_MS);
|
|
141
148
|
const startedAt = Date.now();
|
|
142
149
|
while (true) {
|
|
143
150
|
const store = await readLoopStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAyC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAyC,MAAM,gBAAgB,CAAC;AAGnY,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAgB;IAClF,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAChE,MAAM,MAAM,GACV,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YAC9B,CAAC,CAAC,KAAK,CAAC,MAAM;YACd,CAAC,CAAC,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,QAAQ;gBACxC,CAAC,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAChD,CAAC,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,QAAQ,CAAC,mCAAmC,EAAE,kBAAkB,CAAC,CAAC;QAChG,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,oBAAoB,KAAK,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;QACrH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,QAAQ,CAAC,yCAAyC,EAAE,wBAAwB,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAoB,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,IAAI,GAAe;YACvB,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC;YACpB,SAAS;YACT,MAAM;YACN,OAAO;YACP,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;YAC7E,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK;gBACtC,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;gBACnC,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B;YACD,YAAY,EAAE,UAAU;SACzB,CAAC;QACF,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,mBAAmB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACjH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACnG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC;gBACvG,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAChF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAChJ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;gBAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,GAAG,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,WAAW,KAAK,KAAK,IAAI,CAAC,SAAS,KAAK,YAAY,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChK,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAChD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI;gBACxB,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ;gBAC3E,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM;aACpC,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAClE,mBAAmB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7C,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACpC,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO;gBACL,GAAG,OAAO;gBACV,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS;aACtG,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IAEH,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClE,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3E,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,gCAAgC,EAAE,kBAAkB,CAAC,CAAC;YACjH,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC"}
|