document360-writer 0.3.1 → 0.4.1
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/LICENSE +10 -16
- package/README.md +1 -1
- package/dist/cli.js +63 -118
- package/dist/commands/doctor.d.ts +13 -0
- package/dist/commands/index.d.ts +5 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/logsCli.d.ts +2 -0
- package/dist/commands/model.d.ts +16 -0
- package/dist/commands/profile.d.ts +3 -0
- package/dist/commands/publish.d.ts +12 -1
- package/dist/commands/scope.d.ts +9 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/d360/authCli.d.ts +3 -0
- package/dist/d360/portalLink.d.ts +18 -0
- package/dist/lib/colors.d.ts +2 -0
- package/dist/lib/commandSuggest.d.ts +7 -0
- package/dist/lib/diffRender.d.ts +8 -0
- package/dist/lib/hyperlink.d.ts +5 -0
- package/dist/lib/inputLayout.d.ts +19 -0
- package/dist/lib/mascot.d.ts +5 -0
- package/dist/lib/mdRender.d.ts +7 -0
- package/dist/lib/modelChoices.d.ts +14 -0
- package/dist/lib/paste.d.ts +19 -0
- package/dist/lib/streaming.d.ts +23 -0
- package/dist/lib/syncRender.d.ts +6 -0
- package/dist/lib/toolFormat.d.ts +30 -0
- package/dist/repl.d.ts +2 -0
- package/dist/tui/App.d.ts +1 -1
- package/dist/tui/catalog.d.ts +4 -0
- package/dist/tui/itemRender.d.ts +70 -0
- package/package.json +8 -5
- package/dist/cli.js.map +0 -1
- package/dist/commands/allowProd.js +0 -18
- package/dist/commands/allowProd.js.map +0 -1
- package/dist/commands/audit.js +0 -12
- package/dist/commands/audit.js.map +0 -1
- package/dist/commands/clear.js +0 -14
- package/dist/commands/clear.js.map +0 -1
- package/dist/commands/exit.js +0 -4
- package/dist/commands/exit.js.map +0 -1
- package/dist/commands/help.js +0 -30
- package/dist/commands/help.js.map +0 -1
- package/dist/commands/index.js +0 -44
- package/dist/commands/index.js.map +0 -1
- package/dist/commands/init.js +0 -83
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/mcp.js +0 -103
- package/dist/commands/mcp.js.map +0 -1
- package/dist/commands/profile.js +0 -16
- package/dist/commands/profile.js.map +0 -1
- package/dist/commands/publish.js +0 -19
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/rename.js +0 -22
- package/dist/commands/rename.js.map +0 -1
- package/dist/commands/resume.js +0 -58
- package/dist/commands/resume.js.map +0 -1
- package/dist/commands/screenshot.js +0 -20
- package/dist/commands/screenshot.js.map +0 -1
- package/dist/commands/workspace.js +0 -8
- package/dist/commands/workspace.js.map +0 -1
- package/dist/d360/authCli.js +0 -106
- package/dist/d360/authCli.js.map +0 -1
- package/dist/d360/profileCli.js +0 -54
- package/dist/d360/profileCli.js.map +0 -1
- package/dist/d360/workspaceCli.js +0 -72
- package/dist/d360/workspaceCli.js.map +0 -1
- package/dist/lib/colors.js +0 -10
- package/dist/lib/colors.js.map +0 -1
- package/dist/oneShot.js +0 -96
- package/dist/oneShot.js.map +0 -1
- package/dist/repl.js +0 -244
- package/dist/repl.js.map +0 -1
- package/dist/tui/App.js +0 -439
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/catalog.js +0 -21
- package/dist/tui/catalog.js.map +0 -1
- package/dist/tui/index.js +0 -24
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/markdown.d.ts +0 -4
- package/dist/tui/markdown.js +0 -139
- package/dist/tui/markdown.js.map +0 -1
package/dist/oneShot.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { createSession, resolveAuth, findByName, slugify, touchSession, upsertSession, resolveActiveProfile, } from 'document360-engine';
|
|
2
|
-
import { accent, dim, error, muted, warn } from './lib/colors.js';
|
|
3
|
-
/**
|
|
4
|
-
* Headless one-shot mode (`d360-writer --prompt "..."`), the writer's `claude -p`.
|
|
5
|
-
* Answer text streams to STDOUT (pipeable); banner, auth notice, tool indicators,
|
|
6
|
-
* and token counts go to STDERR. Exit codes: 0 success, 1 agent error, 2 usage.
|
|
7
|
-
*/
|
|
8
|
-
export async function runOnce(cwd, prompt, authMode, resumeName, profileName, yes) {
|
|
9
|
-
const auth = resolveAuth(authMode);
|
|
10
|
-
if (auth.kind === 'none') {
|
|
11
|
-
console.error('');
|
|
12
|
-
console.error(error('ANTHROPIC_API_KEY is not set (required for --auth api).'));
|
|
13
|
-
console.error(`Get a key at ${accent('https://console.anthropic.com/settings/keys')}`);
|
|
14
|
-
console.error(`Or use your Claude subscription instead: ${accent('d360-writer --auth subscription')}`);
|
|
15
|
-
process.exit(2);
|
|
16
|
-
}
|
|
17
|
-
if (auth.kind === 'subscription') {
|
|
18
|
-
console.error(dim('Using your Claude subscription (no API key set).'));
|
|
19
|
-
}
|
|
20
|
-
// Production-profile guard: headless mode has no interactive confirm, so writes to a
|
|
21
|
-
// production profile require --yes. A config that EXISTS but is invalid must fail loud
|
|
22
|
-
// here — never silently skip the guard (a broken prod profile must not slip through).
|
|
23
|
-
let active = null;
|
|
24
|
-
try {
|
|
25
|
-
active = resolveActiveProfile(cwd, profileName);
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
console.error(error(`Document360 profile error: ${e.message}`));
|
|
29
|
-
process.exit(2);
|
|
30
|
-
}
|
|
31
|
-
if (active.production) {
|
|
32
|
-
console.error(warn(`⚠ Profile "${active.name}" is PRODUCTION.`));
|
|
33
|
-
if (!yes) {
|
|
34
|
-
console.error(error('Refusing to run against a production profile without --yes.'));
|
|
35
|
-
process.exit(2);
|
|
36
|
-
}
|
|
37
|
-
console.error(dim(' --yes given — proceeding against production.'));
|
|
38
|
-
}
|
|
39
|
-
let resumeUuid;
|
|
40
|
-
if (resumeName) {
|
|
41
|
-
const rec = findByName(cwd, resumeName);
|
|
42
|
-
if (!rec) {
|
|
43
|
-
console.error(error(`No saved session matches "${resumeName}" in this repo.`));
|
|
44
|
-
console.error(dim('List sessions inside the REPL with /resume.'));
|
|
45
|
-
process.exit(2);
|
|
46
|
-
}
|
|
47
|
-
resumeUuid = rec.uuid;
|
|
48
|
-
console.error(dim(`Resuming "${rec.name}"`));
|
|
49
|
-
}
|
|
50
|
-
// On a production profile we only reach here with --yes (gated above), so writes
|
|
51
|
-
// are authorized; non-production profiles always allow writes.
|
|
52
|
-
const session = createSession({ cwd, resume: resumeUuid, profileName, allowProdWrites: yes === true });
|
|
53
|
-
let uuid = resumeUuid ?? null;
|
|
54
|
-
let exitCode = 1;
|
|
55
|
-
for await (const ev of session.send(prompt)) {
|
|
56
|
-
switch (ev.type) {
|
|
57
|
-
case 'session':
|
|
58
|
-
if (!uuid) {
|
|
59
|
-
uuid = ev.sessionId;
|
|
60
|
-
const now = new Date().toISOString();
|
|
61
|
-
upsertSession({
|
|
62
|
-
uuid,
|
|
63
|
-
name: slugify(prompt),
|
|
64
|
-
renamed: false,
|
|
65
|
-
titled: false, // one-shots skip LLM titling — nothing should delay exit
|
|
66
|
-
cwd,
|
|
67
|
-
firstPrompt: prompt,
|
|
68
|
-
createdAt: now,
|
|
69
|
-
updatedAt: now,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
break;
|
|
73
|
-
case 'text':
|
|
74
|
-
process.stdout.write(ev.delta);
|
|
75
|
-
break;
|
|
76
|
-
case 'tool':
|
|
77
|
-
console.error(muted(` ⚙ ${ev.name}`));
|
|
78
|
-
break;
|
|
79
|
-
case 'result':
|
|
80
|
-
exitCode = ev.ok ? 0 : 1;
|
|
81
|
-
console.error(dim(`(${ev.inputTokens}→${ev.outputTokens} tokens)`));
|
|
82
|
-
if (!ev.ok)
|
|
83
|
-
console.error(error('agent finished with an error result'));
|
|
84
|
-
break;
|
|
85
|
-
case 'error':
|
|
86
|
-
console.error('');
|
|
87
|
-
console.error(error(`agent error: ${ev.message}`));
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
if (uuid)
|
|
92
|
-
touchSession(uuid);
|
|
93
|
-
process.stdout.write('\n');
|
|
94
|
-
process.exit(exitCode);
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=oneShot.js.map
|
package/dist/oneShot.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oneShot.js","sourceRoot":"","sources":["../src/oneShot.ts"],"names":[],"mappings":"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"}
|
package/dist/repl.js
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { createInterface } from 'node:readline/promises';
|
|
2
|
-
import { createSession, resolveAuth, getSession, setTitle, slugify, touchSession, upsertSession, generateTitle, resolveActiveProfile, decodeJwtClaims, isExpired, loadTokens, } from 'document360-engine';
|
|
3
|
-
import { slashCommands, parseSlash } from './commands/index.js';
|
|
4
|
-
import { accent, banner, dim, error, muted, ok, warn } from './lib/colors.js';
|
|
5
|
-
export async function runRepl(cwd = process.cwd(), authMode = 'auto', profileName) {
|
|
6
|
-
const auth = resolveAuth(authMode);
|
|
7
|
-
if (auth.kind === 'none') {
|
|
8
|
-
console.error('');
|
|
9
|
-
console.error(error('ANTHROPIC_API_KEY is not set (required for --auth api).'));
|
|
10
|
-
console.error('');
|
|
11
|
-
console.error(` ${accent('export ANTHROPIC_API_KEY=sk-ant-...')} (macOS / Linux)`);
|
|
12
|
-
console.error(` ${accent('$env:ANTHROPIC_API_KEY="sk-ant-..."')} (PowerShell)`);
|
|
13
|
-
console.error('');
|
|
14
|
-
console.error(`Get a key at ${accent('https://console.anthropic.com/settings/keys')}`);
|
|
15
|
-
console.error(`Or use your Claude subscription instead: ${accent('d360-writer --auth subscription')}`);
|
|
16
|
-
console.error('');
|
|
17
|
-
process.exit(2);
|
|
18
|
-
}
|
|
19
|
-
printWelcome(cwd, profileName);
|
|
20
|
-
if (auth.kind === 'subscription') {
|
|
21
|
-
if (auth.stored) {
|
|
22
|
-
console.log(dim(' Using your Claude subscription (no API key set).'));
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
console.log(dim(' No API key or stored Claude Code login found — trying your Claude session anyway.'));
|
|
26
|
-
}
|
|
27
|
-
console.log('');
|
|
28
|
-
}
|
|
29
|
-
let allowProdWrites = false; // armed by /allow-prod for production profiles
|
|
30
|
-
let session = createSession({ cwd, profileName, allowProdWrites });
|
|
31
|
-
let tracker = { uuid: null, firstPrompt: null, titleFired: false };
|
|
32
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
33
|
-
// Buffering line reader: readline's promise API drops lines that arrive while
|
|
34
|
-
// no question is pending, which breaks piped/scripted input. Buffer every line;
|
|
35
|
-
// null = stdin closed.
|
|
36
|
-
const pendingLines = [];
|
|
37
|
-
let waiter = null;
|
|
38
|
-
let stdinClosed = false;
|
|
39
|
-
rl.on('line', l => {
|
|
40
|
-
if (waiter) {
|
|
41
|
-
const w = waiter;
|
|
42
|
-
waiter = null;
|
|
43
|
-
w(l);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
pendingLines.push(l);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
rl.on('close', () => {
|
|
50
|
-
stdinClosed = true;
|
|
51
|
-
if (waiter) {
|
|
52
|
-
const w = waiter;
|
|
53
|
-
waiter = null;
|
|
54
|
-
w(null);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
function nextLine() {
|
|
58
|
-
if (pendingLines.length > 0)
|
|
59
|
-
return Promise.resolve(pendingLines.shift());
|
|
60
|
-
if (stdinClosed)
|
|
61
|
-
return Promise.resolve(null);
|
|
62
|
-
process.stdout.write(accent('> '));
|
|
63
|
-
return new Promise(resolve => {
|
|
64
|
-
waiter = resolve;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
const ctx = {
|
|
68
|
-
cwd,
|
|
69
|
-
restartAgent: () => {
|
|
70
|
-
session.close();
|
|
71
|
-
session = createSession({ cwd, profileName, allowProdWrites });
|
|
72
|
-
tracker = { uuid: null, firstPrompt: null, titleFired: false };
|
|
73
|
-
},
|
|
74
|
-
currentUuid: () => tracker.uuid,
|
|
75
|
-
withPausedInput: async (fn) => {
|
|
76
|
-
rl.pause();
|
|
77
|
-
try {
|
|
78
|
-
return await fn();
|
|
79
|
-
}
|
|
80
|
-
finally {
|
|
81
|
-
rl.resume();
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
try {
|
|
86
|
-
while (true) {
|
|
87
|
-
const line = await nextLine();
|
|
88
|
-
if (line === null)
|
|
89
|
-
break; // stdin closed (Ctrl+D or piped input exhausted)
|
|
90
|
-
const trimmed = line.trim();
|
|
91
|
-
if (!trimmed)
|
|
92
|
-
continue;
|
|
93
|
-
if (trimmed.startsWith('/')) {
|
|
94
|
-
const parsed = parseSlash(trimmed);
|
|
95
|
-
if (!parsed)
|
|
96
|
-
continue;
|
|
97
|
-
const cmd = slashCommands[parsed.name];
|
|
98
|
-
if (!cmd) {
|
|
99
|
-
console.log(error(`Unknown command: /${parsed.name}`));
|
|
100
|
-
console.log(dim('Type /help for the list.'));
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
const result = await cmd(parsed.args, ctx);
|
|
104
|
-
if (result.kind === 'exit')
|
|
105
|
-
break;
|
|
106
|
-
if (result.kind === 'clear') {
|
|
107
|
-
ctx.restartAgent();
|
|
108
|
-
continue;
|
|
109
|
-
}
|
|
110
|
-
if (result.kind === 'allow-prod') {
|
|
111
|
-
allowProdWrites = true;
|
|
112
|
-
ctx.restartAgent();
|
|
113
|
-
console.log(ok('✓ Production writes authorized for this session.'));
|
|
114
|
-
console.log('');
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (result.kind === 'resume') {
|
|
118
|
-
session.close();
|
|
119
|
-
session = createSession({ cwd, resume: result.uuid, profileName, allowProdWrites });
|
|
120
|
-
const rec = getSession(result.uuid);
|
|
121
|
-
tracker = { uuid: result.uuid, firstPrompt: rec?.firstPrompt ?? null, titleFired: true };
|
|
122
|
-
touchSession(result.uuid);
|
|
123
|
-
console.log(ok(`✓ Resumed "${result.name}"`));
|
|
124
|
-
console.log('');
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
if (result.kind === 'forward-to-agent') {
|
|
128
|
-
if (!tracker.firstPrompt)
|
|
129
|
-
tracker.firstPrompt = result.prompt;
|
|
130
|
-
await runTurn(session, result.prompt, auth, tracker, cwd);
|
|
131
|
-
}
|
|
132
|
-
continue;
|
|
133
|
-
}
|
|
134
|
-
if (!tracker.firstPrompt)
|
|
135
|
-
tracker.firstPrompt = trimmed;
|
|
136
|
-
await runTurn(session, trimmed, auth, tracker, cwd);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
finally {
|
|
140
|
-
session.close();
|
|
141
|
-
rl.close();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
function printWelcome(cwd, profileName) {
|
|
145
|
-
console.log('');
|
|
146
|
-
console.log(banner('document360-writer'));
|
|
147
|
-
console.log(dim(` cwd: ${cwd}`));
|
|
148
|
-
console.log(d360StatusLine(cwd, profileName));
|
|
149
|
-
console.log(dim(' Type a prompt, or /help for slash commands. /exit to quit.'));
|
|
150
|
-
console.log('');
|
|
151
|
-
}
|
|
152
|
-
function d360StatusLine(cwd, profileName) {
|
|
153
|
-
try {
|
|
154
|
-
const active = resolveActiveProfile(cwd, profileName);
|
|
155
|
-
const prod = active.production ? warn(' ⚠ PRODUCTION') : '';
|
|
156
|
-
const tokens = loadTokens(active.name);
|
|
157
|
-
if (!tokens) {
|
|
158
|
-
return dim(` Document360: profile "${active.name}"${prod} — not logged in (d360-writer login)`);
|
|
159
|
-
}
|
|
160
|
-
const claims = { ...(decodeJwtClaims(tokens.idToken) ?? {}), ...(decodeJwtClaims(tokens.accessToken) ?? {}) };
|
|
161
|
-
const who = (claims['email'] ?? claims['preferred_username'] ?? 'signed in');
|
|
162
|
-
if (isExpired(tokens) && !tokens.refreshToken) {
|
|
163
|
-
return warn(` Document360: profile "${active.name}"${prod} — session expired (d360-writer login)`);
|
|
164
|
-
}
|
|
165
|
-
return dim(` Document360: ${who} · profile "${active.name}"${prod}`);
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
// Old-shape/invalid config — surface the migration hint.
|
|
169
|
-
return dim(` Document360: ${e.message.split('.')[0]}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
function printSignInHelp() {
|
|
173
|
-
console.error('');
|
|
174
|
-
console.error(`Sign in with your Claude subscription: run ${accent('claude')} once, then retry.`);
|
|
175
|
-
console.error(` (No Claude Code? ${accent('npm install -g @anthropic-ai/claude-code')})`);
|
|
176
|
-
console.error(`Or set an API key: ${accent('https://console.anthropic.com/settings/keys')}`);
|
|
177
|
-
}
|
|
178
|
-
/** Register the session record the first time the engine reveals its session UUID. */
|
|
179
|
-
function registerSession(tracker, sessionId, cwd) {
|
|
180
|
-
tracker.uuid = sessionId;
|
|
181
|
-
const now = new Date().toISOString();
|
|
182
|
-
upsertSession({
|
|
183
|
-
uuid: sessionId,
|
|
184
|
-
name: slugify(tracker.firstPrompt ?? 'session'),
|
|
185
|
-
renamed: false,
|
|
186
|
-
titled: false,
|
|
187
|
-
cwd,
|
|
188
|
-
firstPrompt: tracker.firstPrompt ?? '',
|
|
189
|
-
createdAt: now,
|
|
190
|
-
updatedAt: now,
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
/** Fire-and-forget Claude Code-style title generation after the first exchange. */
|
|
194
|
-
function fireTitleGeneration(tracker, cwd) {
|
|
195
|
-
tracker.titleFired = true;
|
|
196
|
-
const uuid = tracker.uuid;
|
|
197
|
-
const firstPrompt = tracker.firstPrompt;
|
|
198
|
-
if (!uuid || !firstPrompt)
|
|
199
|
-
return;
|
|
200
|
-
void generateTitle(firstPrompt, cwd)
|
|
201
|
-
.then(title => {
|
|
202
|
-
if (title)
|
|
203
|
-
setTitle(uuid, title);
|
|
204
|
-
})
|
|
205
|
-
.catch(() => { });
|
|
206
|
-
}
|
|
207
|
-
/** Drive one user turn through the engine, rendering EngineEvents to the terminal. */
|
|
208
|
-
async function runTurn(session, text, auth, tracker, cwd) {
|
|
209
|
-
for await (const ev of session.send(text)) {
|
|
210
|
-
renderEvent(ev, tracker, cwd, auth);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
function renderEvent(ev, tracker, cwd, auth) {
|
|
214
|
-
switch (ev.type) {
|
|
215
|
-
case 'session':
|
|
216
|
-
if (!tracker.uuid)
|
|
217
|
-
registerSession(tracker, ev.sessionId, cwd);
|
|
218
|
-
break;
|
|
219
|
-
case 'text':
|
|
220
|
-
process.stdout.write(ev.delta);
|
|
221
|
-
break;
|
|
222
|
-
case 'tool':
|
|
223
|
-
process.stdout.write('\n');
|
|
224
|
-
console.log(muted(` ⚙ ${ev.name}`));
|
|
225
|
-
break;
|
|
226
|
-
case 'result':
|
|
227
|
-
process.stdout.write('\n');
|
|
228
|
-
console.log(dim(` (${ev.inputTokens}→${ev.outputTokens} tokens)`));
|
|
229
|
-
console.log('');
|
|
230
|
-
if (tracker.uuid) {
|
|
231
|
-
touchSession(tracker.uuid);
|
|
232
|
-
if (!tracker.titleFired)
|
|
233
|
-
fireTitleGeneration(tracker, cwd);
|
|
234
|
-
}
|
|
235
|
-
break;
|
|
236
|
-
case 'error':
|
|
237
|
-
console.error('');
|
|
238
|
-
console.error(error(`agent error: ${ev.message}`));
|
|
239
|
-
if (auth.kind === 'subscription' && ev.kind === 'auth')
|
|
240
|
-
printSignInHelp();
|
|
241
|
-
break;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=repl.js.map
|
package/dist/repl.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,aAAa,EAGb,WAAW,EAGX,UAAU,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAiB9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,WAAqB,MAAM,EAAE,WAAoB;IAC1G,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,qCAAqC,CAAC,oBAAoB,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,qCAAqC,CAAC,iBAAiB,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,6CAA6C,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,4CAA4C,MAAM,CAAC,iCAAiC,CAAC,EAAE,CAAC,CAAC;QACvG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,eAAe,GAAG,KAAK,CAAC,CAAC,+CAA+C;IAC5E,IAAI,OAAO,GAAkB,aAAa,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;IAClF,IAAI,OAAO,GAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAEnF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,8EAA8E;IAC9E,gFAAgF;IAChF,uBAAuB;IACvB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAA2C,IAAI,CAAC;IAC1D,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,MAAM,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;YACd,CAAC,CAAC,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,WAAW,GAAG,IAAI,CAAC;QACnB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,MAAM,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;YACd,CAAC,CAAC,IAAI,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IACH,SAAS,QAAQ;QACf,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAG,CAAC,CAAC;QAC3E,IAAI,WAAW;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,GAAG,GAAgB;QACvB,GAAG;QACH,YAAY,EAAE,GAAG,EAAE;YACjB,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,GAAG,aAAa,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;YAC/D,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACjE,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;QAC/B,eAAe,EAAE,KAAK,EAAC,EAAE,EAAC,EAAE;YAC1B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,MAAM,EAAE,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,IAAI,IAAI,KAAK,IAAI;gBAAE,MAAM,CAAC,iDAAiD;YAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACvD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBAC7C,SAAS;gBACX,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;oBAAE,MAAM;gBAClC,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5B,GAAG,CAAC,YAAY,EAAE,CAAC;oBACnB,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACjC,eAAe,GAAG,IAAI,CAAC;oBACvB,GAAG,CAAC,YAAY,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,kDAAkD,CAAC,CAAC,CAAC;oBACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC7B,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,GAAG,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;oBACpF,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpC,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;oBACzF,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,SAAS;gBACX,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACvC,IAAI,CAAC,OAAO,CAAC,WAAW;wBAAE,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC9D,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW;gBAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;YACxD,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,WAAoB;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,WAAoB;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,2BAA2B,MAAM,CAAC,IAAI,IAAI,IAAI,sCAAsC,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC9G,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,oBAAoB,CAAC,IAAI,WAAW,CAAW,CAAC;QACvF,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,2BAA2B,MAAM,CAAC,IAAI,IAAI,IAAI,wCAAwC,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,GAAG,CAAC,kBAAkB,GAAG,eAAe,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yDAAyD;QACzD,OAAO,GAAG,CAAC,kBAAmB,CAAW,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,8CAA8C,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAClG,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,0CAA0C,CAAC,GAAG,CAAC,CAAC;IAC3F,OAAO,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,6CAA6C,CAAC,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,sFAAsF;AACtF,SAAS,eAAe,CAAC,OAAuB,EAAE,SAAiB,EAAE,GAAW;IAC9E,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,aAAa,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;QAC/C,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,GAAG;QACH,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,SAAS,mBAAmB,CAAC,OAAuB,EAAE,GAAW;IAC/D,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO;IAClC,KAAK,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC;SACjC,IAAI,CAAC,KAAK,CAAC,EAAE;QACZ,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,sFAAsF;AACtF,KAAK,UAAU,OAAO,CACpB,OAAsB,EACtB,IAAY,EACZ,IAAkB,EAClB,OAAuB,EACvB,GAAW;IAEX,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAe,EAAE,OAAuB,EAAE,GAAW,EAAE,IAAkB;IAC5F,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC/D,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,UAAU;oBAAE,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM;gBAAE,eAAe,EAAE,CAAC;YAC1E,MAAM;IACV,CAAC;AACH,CAAC"}
|