aicodeman 1.46.0 → 1.48.0
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/README.md +3 -0
- package/dist/cli-notify.d.ts +34 -0
- package/dist/cli-notify.d.ts.map +1 -0
- package/dist/cli-notify.js +100 -0
- package/dist/cli-notify.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/config/cli-registry/patterns.d.ts +1 -1
- package/dist/config/cli-registry/patterns.d.ts.map +1 -1
- package/dist/config/cli-registry/patterns.js +4 -0
- package/dist/config/cli-registry/patterns.js.map +1 -1
- package/dist/config/cli-registry/schema.d.ts +6 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +62 -2
- package/dist/config/cli-registry/schema.js.map +1 -1
- package/dist/config/cli-registry/stock.d.ts.map +1 -1
- package/dist/config/cli-registry/stock.js +43 -26
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +47 -17
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/config/path-probe.d.ts +6 -0
- package/dist/config/path-probe.d.ts.map +1 -1
- package/dist/config/path-probe.js +6 -0
- package/dist/config/path-probe.js.map +1 -1
- package/dist/config-backup.d.ts +1 -1
- package/dist/config-backup.d.ts.map +1 -1
- package/dist/config-backup.js +2 -0
- package/dist/config-backup.js.map +1 -1
- package/dist/custom-model-hosts.d.ts +32 -8
- package/dist/custom-model-hosts.d.ts.map +1 -1
- package/dist/custom-model-hosts.js +10 -0
- package/dist/custom-model-hosts.js.map +1 -1
- package/dist/custom-model-injection-apply.d.ts +19 -5
- package/dist/custom-model-injection-apply.d.ts.map +1 -1
- package/dist/custom-model-injection-apply.js +88 -8
- package/dist/custom-model-injection-apply.js.map +1 -1
- package/dist/custom-model-injection.d.ts +6 -0
- package/dist/custom-model-injection.d.ts.map +1 -1
- package/dist/custom-model-injection.js +92 -10
- package/dist/custom-model-injection.js.map +1 -1
- package/dist/discord-bridge.d.ts +338 -0
- package/dist/discord-bridge.d.ts.map +1 -0
- package/dist/discord-bridge.js +1256 -0
- package/dist/discord-bridge.js.map +1 -0
- package/dist/edit-history-local-source.d.ts +83 -0
- package/dist/edit-history-local-source.d.ts.map +1 -0
- package/dist/edit-history-local-source.js +198 -0
- package/dist/edit-history-local-source.js.map +1 -0
- package/dist/edit-history-parse.d.ts +114 -0
- package/dist/edit-history-parse.d.ts.map +1 -0
- package/dist/edit-history-parse.js +312 -0
- package/dist/edit-history-parse.js.map +1 -0
- package/dist/edit-history-store.d.ts +209 -0
- package/dist/edit-history-store.d.ts.map +1 -0
- package/dist/edit-history-store.js +599 -0
- package/dist/edit-history-store.js.map +1 -0
- package/dist/git-clone.d.ts +6 -1
- package/dist/git-clone.d.ts.map +1 -1
- package/dist/git-clone.js +79 -14
- package/dist/git-clone.js.map +1 -1
- package/dist/image-watcher.js +4 -4
- package/dist/image-watcher.js.map +1 -1
- package/dist/mux-interface.d.ts +10 -1
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/ralph-fix-plan-watcher.d.ts +13 -1
- package/dist/ralph-fix-plan-watcher.d.ts.map +1 -1
- package/dist/ralph-fix-plan-watcher.js +21 -3
- package/dist/ralph-fix-plan-watcher.js.map +1 -1
- package/dist/ralph-tracker.d.ts +6 -0
- package/dist/ralph-tracker.d.ts.map +1 -1
- package/dist/ralph-tracker.js +8 -0
- package/dist/ralph-tracker.js.map +1 -1
- package/dist/session-cli-registry-bridge.d.ts.map +1 -1
- package/dist/session-cli-registry-bridge.js +4 -0
- package/dist/session-cli-registry-bridge.js.map +1 -1
- package/dist/session.d.ts +70 -3
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +147 -4
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts +40 -0
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +62 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/discord.d.ts +55 -0
- package/dist/types/discord.d.ts.map +1 -0
- package/dist/types/discord.js +18 -0
- package/dist/types/discord.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/session.d.ts +13 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/web/case-path.d.ts +2 -0
- package/dist/web/case-path.d.ts.map +1 -1
- package/dist/web/case-path.js +3 -3
- package/dist/web/case-path.js.map +1 -1
- package/dist/web/edit-history-sync.d.ts +158 -0
- package/dist/web/edit-history-sync.d.ts.map +1 -0
- package/dist/web/edit-history-sync.js +445 -0
- package/dist/web/edit-history-sync.js.map +1 -0
- package/dist/web/paste-image-gc.d.ts +6 -0
- package/dist/web/paste-image-gc.d.ts.map +1 -1
- package/dist/web/paste-image-gc.js +6 -0
- package/dist/web/paste-image-gc.js.map +1 -1
- package/dist/web/ports/session-port.d.ts +13 -0
- package/dist/web/ports/session-port.d.ts.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/{app.3093527f.js → app.963b5ba8.js} +18 -18
- package/dist/web/public/app.963b5ba8.js.br +0 -0
- package/dist/web/public/app.963b5ba8.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/{constants.affcdde6.js → constants.782170e1.js} +114 -25
- package/dist/web/public/constants.782170e1.js.br +0 -0
- package/dist/web/public/constants.782170e1.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/edit-history-ui.js +630 -0
- package/dist/web/public/edit-history-ui.js.br +0 -0
- package/dist/web/public/edit-history-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/git-status-ui.js.gz +0 -0
- package/dist/web/public/header-divider.eb2d2463.js.gz +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/host-wake-ui.js.gz +0 -0
- package/dist/web/public/i18n.33f930d7.js +2 -0
- package/dist/web/public/i18n.33f930d7.js.br +0 -0
- package/dist/web/public/i18n.33f930d7.js.gz +0 -0
- package/dist/web/public/{image-input.941386e7.js → image-input.a5d0f8f3.js} +18 -9
- package/dist/web/public/image-input.a5d0f8f3.js.br +0 -0
- package/dist/web/public/image-input.a5d0f8f3.js.gz +0 -0
- package/dist/web/public/index.html +162 -16
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
- package/dist/web/public/{keyboard-accessory.4e8b20ac.js → keyboard-accessory.d4ec5957.js} +77 -2
- package/dist/web/public/keyboard-accessory.d4ec5957.js.br +0 -0
- package/dist/web/public/keyboard-accessory.d4ec5957.js.gz +0 -0
- package/dist/web/public/mobile-handlers.f7c3f692.js.gz +0 -0
- package/dist/web/public/mobile-ime-preview.2dbaf262.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.5ef2ce85.css +1 -0
- package/dist/web/public/mobile.5ef2ce85.css.br +0 -0
- package/dist/web/public/mobile.5ef2ce85.css.gz +0 -0
- package/dist/web/public/notification-manager.feb82c04.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.4a56ee63.js → panels-ui.b100727d.js} +2 -2
- package/dist/web/public/panels-ui.b100727d.js.br +0 -0
- package/dist/web/public/{panels-ui.4a56ee63.js.gz → panels-ui.b100727d.js.gz} +0 -0
- package/dist/web/public/ralph-panel.b350e2ef.js.gz +0 -0
- package/dist/web/public/ralph-wizard.b6c0dd19.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/reboot-restore-ui.js.gz +0 -0
- package/dist/web/public/{respawn-ui.d7adcf6a.js → respawn-ui.304ba0d4.js} +1 -1
- package/dist/web/public/respawn-ui.304ba0d4.js.br +0 -0
- package/dist/web/public/respawn-ui.304ba0d4.js.gz +0 -0
- package/dist/web/public/sanitize-html.e7147e76.js.gz +0 -0
- package/dist/web/public/security-notices.json +1 -21
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/{session-ui.186f9419.js → session-ui.5ac82f2c.js} +30 -30
- package/dist/web/public/session-ui.5ac82f2c.js.br +0 -0
- package/dist/web/public/session-ui.5ac82f2c.js.gz +0 -0
- package/dist/web/public/settings-ui.d1d4fb99.js +106 -0
- package/dist/web/public/settings-ui.d1d4fb99.js.br +0 -0
- package/dist/web/public/settings-ui.d1d4fb99.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview-worker.js.gz +0 -0
- package/dist/web/public/spreadsheet-preview.75c751de.js.gz +0 -0
- package/dist/web/public/spreadsheet-xlsx-core.js.gz +0 -0
- package/dist/web/public/styles.77dc538f.css +1 -0
- package/dist/web/public/styles.77dc538f.css.br +0 -0
- package/dist/web/public/styles.77dc538f.css.gz +0 -0
- package/dist/web/public/subagent-windows.07277a58.js.gz +0 -0
- package/dist/web/public/sw.js +2 -2
- package/dist/web/public/sw.js.br +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-layout-browser.2d6189f7.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.b5cdceaf.js.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.98843069.js +1 -0
- package/dist/web/public/terminal-keycode229-recovery.98843069.js.br +0 -0
- package/dist/web/public/terminal-keycode229-recovery.98843069.js.gz +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-tile.js +8 -6
- package/dist/web/public/terminal-tile.js.br +0 -0
- package/dist/web/public/terminal-tile.js.gz +0 -0
- package/dist/web/public/{terminal-ui.7e787829.js → terminal-ui.d7c75ce8.js} +3 -3
- package/dist/web/public/terminal-ui.d7c75ce8.js.br +0 -0
- package/dist/web/public/terminal-ui.d7c75ce8.js.gz +0 -0
- package/dist/web/public/tile-grid.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/exceljs.min.js.gz +0 -0
- package/dist/web/public/vendor/fflate.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-predictive-echo.276b11d9.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.1be42307.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.2342c37b.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/public/whats-new.json +9 -9
- package/dist/web/request-body-parser.d.ts +23 -0
- package/dist/web/request-body-parser.d.ts.map +1 -0
- package/dist/web/request-body-parser.js +57 -0
- package/dist/web/request-body-parser.js.map +1 -0
- package/dist/web/routes/case-routes.d.ts.map +1 -1
- package/dist/web/routes/case-routes.js +104 -8
- package/dist/web/routes/case-routes.js.map +1 -1
- package/dist/web/routes/config-backup-routes.d.ts +5 -1
- package/dist/web/routes/config-backup-routes.d.ts.map +1 -1
- package/dist/web/routes/config-backup-routes.js +4 -1
- package/dist/web/routes/config-backup-routes.js.map +1 -1
- package/dist/web/routes/custom-model-routes.d.ts +7 -2
- package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
- package/dist/web/routes/custom-model-routes.js +51 -6
- package/dist/web/routes/custom-model-routes.js.map +1 -1
- package/dist/web/routes/discord-routes.d.ts +25 -0
- package/dist/web/routes/discord-routes.d.ts.map +1 -0
- package/dist/web/routes/discord-routes.js +206 -0
- package/dist/web/routes/discord-routes.js.map +1 -0
- package/dist/web/routes/edit-history-routes.d.ts +43 -0
- package/dist/web/routes/edit-history-routes.d.ts.map +1 -0
- package/dist/web/routes/edit-history-routes.js +106 -0
- package/dist/web/routes/edit-history-routes.js.map +1 -0
- package/dist/web/routes/file-routes.d.ts +5 -0
- package/dist/web/routes/file-routes.d.ts.map +1 -1
- package/dist/web/routes/file-routes.js +67 -3
- package/dist/web/routes/file-routes.js.map +1 -1
- package/dist/web/routes/index.d.ts +2 -0
- package/dist/web/routes/index.d.ts.map +1 -1
- package/dist/web/routes/index.js +2 -0
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/ralph-routes.d.ts.map +1 -1
- package/dist/web/routes/ralph-routes.js +45 -2
- package/dist/web/routes/ralph-routes.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +17 -0
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +92 -37
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/routes/system-routes.d.ts.map +1 -1
- package/dist/web/routes/system-routes.js +4 -2
- package/dist/web/routes/system-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +68 -1
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +77 -1
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/sensitive-path.d.ts.map +1 -1
- package/dist/web/sensitive-path.js +15 -0
- package/dist/web/sensitive-path.js.map +1 -1
- package/dist/web/server.d.ts +43 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +237 -15
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/app.3093527f.js.br +0 -0
- package/dist/web/public/app.3093527f.js.gz +0 -0
- package/dist/web/public/constants.affcdde6.js.br +0 -0
- package/dist/web/public/constants.affcdde6.js.gz +0 -0
- package/dist/web/public/i18n.70265257.js +0 -2
- package/dist/web/public/i18n.70265257.js.br +0 -0
- package/dist/web/public/i18n.70265257.js.gz +0 -0
- package/dist/web/public/image-input.941386e7.js.br +0 -0
- package/dist/web/public/image-input.941386e7.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.4e8b20ac.js.br +0 -0
- package/dist/web/public/keyboard-accessory.4e8b20ac.js.gz +0 -0
- package/dist/web/public/mobile.1bbd2d67.css +0 -1
- package/dist/web/public/mobile.1bbd2d67.css.br +0 -0
- package/dist/web/public/mobile.1bbd2d67.css.gz +0 -0
- package/dist/web/public/panels-ui.4a56ee63.js.br +0 -0
- package/dist/web/public/respawn-ui.d7adcf6a.js.br +0 -0
- package/dist/web/public/respawn-ui.d7adcf6a.js.gz +0 -0
- package/dist/web/public/session-ui.186f9419.js.br +0 -0
- package/dist/web/public/session-ui.186f9419.js.gz +0 -0
- package/dist/web/public/settings-ui.a191154e.js +0 -106
- package/dist/web/public/settings-ui.a191154e.js.br +0 -0
- package/dist/web/public/settings-ui.a191154e.js.gz +0 -0
- package/dist/web/public/styles.7238eae8.css +0 -1
- package/dist/web/public/styles.7238eae8.css.br +0 -0
- package/dist/web/public/styles.7238eae8.css.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js +0 -1
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.br +0 -0
- package/dist/web/public/terminal-keycode229-recovery.af09f99a.js.gz +0 -0
- package/dist/web/public/terminal-ui.7e787829.js.br +0 -0
- package/dist/web/public/terminal-ui.7e787829.js.gz +0 -0
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
* see docs/custom-model-endpoints-plan.md and the "dynamic to support
|
|
10
10
|
* cli-registry changes" requirement it was written against.
|
|
11
11
|
*/
|
|
12
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, rmSync, symlinkSync } from 'node:fs';
|
|
12
|
+
import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, writeFileSync, rmSync, symlinkSync } from 'node:fs';
|
|
13
13
|
import { homedir, platform } from 'node:os';
|
|
14
|
-
import { join, dirname } from 'node:path';
|
|
14
|
+
import { join, dirname, isAbsolute } from 'node:path';
|
|
15
15
|
import { dataPath } from './config/instance.js';
|
|
16
16
|
import { buildCustomModelInjection, } from './custom-model-injection.js';
|
|
17
17
|
/** Where a session's isolated `configDir`-kind files live: never the user's real CLI config path. */
|
|
@@ -22,24 +22,98 @@ export function customModelConfigDir(sessionId) {
|
|
|
22
22
|
* Writes a `ConfigDirInjection`'s files under `baseDir` and returns the full
|
|
23
23
|
* envOverrides object a caller should merge into the session/process env
|
|
24
24
|
* (the dir-redirect var plus any `extraEnv` the config file references by
|
|
25
|
-
* name).
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* name). The generated files stay under `baseDir`, but a recipe that declares
|
|
26
|
+
* `linkFromRealHome` additionally links (and, for missing directory targets,
|
|
27
|
+
* creates) entries in the CLI's REAL home: the caller is still responsible
|
|
28
|
+
* for choosing an isolated `baseDir` (never the user's real `~/.codex`,
|
|
29
|
+
* `~/.pi`, etc.), it is just no longer the only directory touched.
|
|
28
30
|
*
|
|
29
31
|
* pi and omp embed the API key literally in the file, so the tree is written
|
|
30
32
|
* 0700/0600 like every other secret-bearing file under `~/.codeman`; the chmod
|
|
31
33
|
* covers a re-apply onto a file that already exists (`mode` only applies at
|
|
32
34
|
* creation).
|
|
33
35
|
*/
|
|
34
|
-
export function applyConfigDirInjection(baseDir, injection
|
|
36
|
+
export function applyConfigDirInjection(baseDir, injection,
|
|
37
|
+
/**
|
|
38
|
+
* The value this SESSION's own env overrides set for `injection.dirEnvVar`, when it
|
|
39
|
+
* set one: a user who relocated the CLI's real home (an allowlisted key like
|
|
40
|
+
* DSH_HOME) must have their state linked from THAT directory, not the server's.
|
|
41
|
+
*/
|
|
42
|
+
sessionHomeOverride) {
|
|
35
43
|
for (const file of injection.files) {
|
|
36
44
|
const filePath = join(baseDir, file.relPath);
|
|
37
45
|
mkdirSync(dirname(filePath), { recursive: true, mode: 0o700 });
|
|
38
46
|
writeFileSync(filePath, file.content, { encoding: 'utf8', mode: 0o600 });
|
|
39
47
|
chmodSync(filePath, 0o600);
|
|
40
48
|
}
|
|
49
|
+
linkRealHomeEntries(baseDir, injection, sessionHomeOverride);
|
|
41
50
|
return { [injection.dirEnvVar]: baseDir, ...injection.extraEnv };
|
|
42
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Symlinks the registry recipe's `linkFromRealHome` entries out of the CLI's real home
|
|
54
|
+
* into the otherwise-isolated `baseDir`, so redirecting `dirEnvVar` moves only the
|
|
55
|
+
* generated config file and not the state that has to survive the session (deepseek:
|
|
56
|
+
* the `sessions` transcript root `removeConfigDir` would otherwise delete, the `profiles`
|
|
57
|
+
* bundles the patch composes over, and `settings.yaml`). Declared per entry in stock.ts:
|
|
58
|
+
* this consumer is recipe-driven and names no CLI itself.
|
|
59
|
+
*
|
|
60
|
+
* Home resolution: the session's own override first (unless it IS `baseDir`, a re-apply
|
|
61
|
+
* onto a session already holding a previous injection's value must not self-link), then
|
|
62
|
+
* the server's environment, then the recipe's `realHomeFallback`. Only ABSOLUTE values
|
|
63
|
+
* are considered: a set-but-relative `DSH_HOME`-style home resolves against the CLI's
|
|
64
|
+
* cwd, and joining it here would mkdir/symlink under the SERVER's working directory and
|
|
65
|
+
* leave relative links that dangle. No home resolvable =
|
|
66
|
+
* no links, same best-effort posture as `linkSharedProjectsDir()`.
|
|
67
|
+
*/
|
|
68
|
+
function linkRealHomeEntries(baseDir, injection, sessionHomeOverride) {
|
|
69
|
+
const names = injection.linkFromRealHome;
|
|
70
|
+
if (!names || names.length === 0)
|
|
71
|
+
return;
|
|
72
|
+
const absoluteOnly = (value) => value && isAbsolute(value) ? value : undefined;
|
|
73
|
+
const fromSession = sessionHomeOverride?.trim();
|
|
74
|
+
const realHome = absoluteOnly(fromSession && fromSession !== baseDir ? fromSession : undefined) ||
|
|
75
|
+
absoluteOnly(process.env[injection.dirEnvVar]?.trim()) ||
|
|
76
|
+
(injection.realHomeFallback ? join(homedir(), injection.realHomeFallback) : undefined);
|
|
77
|
+
if (!realHome)
|
|
78
|
+
return;
|
|
79
|
+
const dirs = new Set(injection.linkFromRealHomeDirs ?? []);
|
|
80
|
+
for (const name of names) {
|
|
81
|
+
linkRealHomeEntry(join(realHome, name), join(baseDir, name), dirs.has(name));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function linkRealHomeEntry(target, link, isDir) {
|
|
85
|
+
// lstat, never existsSync: existsSync is false for a DANGLING link, and recovery
|
|
86
|
+
// re-applies on every restart, so the second pass would try to recreate the link and
|
|
87
|
+
// throw EEXIST. lstat answers for real entries, good links and dangling links alike.
|
|
88
|
+
try {
|
|
89
|
+
if (lstatSync(link))
|
|
90
|
+
return; // already linked (idempotent re-apply) or a real dir wrote one
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// ENOENT: nothing is here yet, the only state in which a link gets created
|
|
94
|
+
}
|
|
95
|
+
if (!existsSync(target)) {
|
|
96
|
+
if (!isDir)
|
|
97
|
+
return; // missing FILE target: skip, never plant a dangling file link
|
|
98
|
+
// Missing DIRECTORY target: a dangling directory link is not inert, since the CLI's own
|
|
99
|
+
// recursive mkdir THROUGH it fails ENOENT on every turn (dsh writing under
|
|
100
|
+
// `$DSH_HOME/sessions` on a fresh/relocated home). Create it first, 0700, exactly
|
|
101
|
+
// what dsh itself does on a first turn.
|
|
102
|
+
try {
|
|
103
|
+
mkdirSync(target, { recursive: true, mode: 0o700 });
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return; // e.g. the target's parent refuses writes: no link rather than a dangling one
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
symlinkSync(target, link, platform() === 'win32' ? 'junction' : 'dir');
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// best-effort only: a platform that refuses symlinks keeps the documented
|
|
114
|
+
// side effect for this session rather than failing the whole apply over it
|
|
115
|
+
}
|
|
116
|
+
}
|
|
43
117
|
/**
|
|
44
118
|
* Real, shared Claude config directory Codeman's own host process runs under — honors
|
|
45
119
|
* `CLAUDE_CONFIG_DIR` the same way `claude-credentials.ts`'s `claudeCredentialsPath()`
|
|
@@ -223,7 +297,13 @@ contextLength,
|
|
|
223
297
|
* trust-dialog seed, and only when provided (boot recovery, which has no reason to
|
|
224
298
|
* re-answer a dialog that already fired once, omits it rather than re-deriving it).
|
|
225
299
|
*/
|
|
226
|
-
workingDir
|
|
300
|
+
workingDir,
|
|
301
|
+
/**
|
|
302
|
+
* Reads one env var from the SESSION's own env overrides (single-key on purpose: the
|
|
303
|
+
* map carries credentials). Only the `configDir` kind uses it, to resolve the CLI's real
|
|
304
|
+
* home for `linkFromRealHome` from the session's value before the server's.
|
|
305
|
+
*/
|
|
306
|
+
sessionEnvLookup) {
|
|
227
307
|
const injection = buildCustomModelInjection(entry, endpoint, modelId, contextLength);
|
|
228
308
|
if (injection.kind === 'unsupported')
|
|
229
309
|
return undefined;
|
|
@@ -257,7 +337,7 @@ workingDir) {
|
|
|
257
337
|
};
|
|
258
338
|
}
|
|
259
339
|
const configDir = customModelConfigDir(sessionId);
|
|
260
|
-
const envOverrides = applyConfigDirInjection(configDir, injection);
|
|
340
|
+
const envOverrides = applyConfigDirInjection(configDir, injection, sessionEnvLookup?.(injection.dirEnvVar));
|
|
261
341
|
return { envOverrides, envKeys: Object.keys(envOverrides), configDir, launchModel: injection.launchModel };
|
|
262
342
|
}
|
|
263
343
|
//# sourceMappingURL=custom-model-injection-apply.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-model-injection-apply.js","sourceRoot":"","sources":["../src/custom-model-injection-apply.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-model-injection-apply.js","sourceRoot":"","sources":["../src/custom-model-injection-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,6 +89,12 @@ export interface ConfigDirInjection {
|
|
|
89
89
|
* `customModelInjection.launchModel` template, never hand-built per CLI.
|
|
90
90
|
*/
|
|
91
91
|
launchModel?: string;
|
|
92
|
+
/** Carried from the registry recipe, see `cli-registry/types.ts` `linkFromRealHome`. */
|
|
93
|
+
linkFromRealHome?: string[];
|
|
94
|
+
/** Carried from the registry recipe, see `cli-registry/types.ts` `linkFromRealHomeDirs`. */
|
|
95
|
+
linkFromRealHomeDirs?: string[];
|
|
96
|
+
/** Carried from the registry recipe, see `cli-registry/types.ts` `realHomeFallback`. */
|
|
97
|
+
realHomeFallback?: string;
|
|
92
98
|
}
|
|
93
99
|
export interface UnsupportedInjection {
|
|
94
100
|
kind: 'unsupported';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-model-injection.d.ts","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,0BAA0B,CAAA;KAAE,CAAC;IACzE,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"custom-model-injection.d.ts","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,0BAA0B,CAAA;KAAE,CAAC;IACzE,2FAA2F;IAC3F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAAG,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;AAIlG,yHAAyH;AACzH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EACrC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,MAAM;AACf,uFAAuF;AACvF,aAAa,CAAC,EAAE,MAAM,GACrB,0BAA0B,CA8C5B;AAkED;6FAC6F;AAC7F,eAAO,MAAM,sBAAsB,mBAAmB,CAAC"}
|
|
@@ -69,12 +69,20 @@ contextLength) {
|
|
|
69
69
|
return result;
|
|
70
70
|
}
|
|
71
71
|
case 'configContentEnv': {
|
|
72
|
-
const content = renderConfigContent(cap.template, endpoint, modelId, apiKey);
|
|
72
|
+
const content = renderConfigContent(cap.template, endpoint, modelId, apiKey, contextLength);
|
|
73
73
|
return withLaunchModel({ kind: 'env', envOverrides: { [cap.envVar]: content } }, cap.launchModel, modelId);
|
|
74
74
|
}
|
|
75
75
|
case 'configDir': {
|
|
76
|
-
const { content, extraEnv } = renderConfigFile(cap.template, endpoint, modelId, apiKey);
|
|
77
|
-
return withLaunchModel({
|
|
76
|
+
const { content, extraEnv } = renderConfigFile(cap.template, endpoint, modelId, apiKey, contextLength);
|
|
77
|
+
return withLaunchModel({
|
|
78
|
+
kind: 'configDir',
|
|
79
|
+
dirEnvVar: cap.dirEnvVar,
|
|
80
|
+
files: [{ relPath: cap.fileName, content }],
|
|
81
|
+
extraEnv,
|
|
82
|
+
...(cap.linkFromRealHome ? { linkFromRealHome: cap.linkFromRealHome } : {}),
|
|
83
|
+
...(cap.linkFromRealHomeDirs ? { linkFromRealHomeDirs: cap.linkFromRealHomeDirs } : {}),
|
|
84
|
+
...(cap.realHomeFallback ? { realHomeFallback: cap.realHomeFallback } : {}),
|
|
85
|
+
}, cap.launchModel, modelId);
|
|
78
86
|
}
|
|
79
87
|
case 'unsupported':
|
|
80
88
|
return { kind: 'unsupported' };
|
|
@@ -86,28 +94,96 @@ function withLaunchModel(result, template, modelId) {
|
|
|
86
94
|
return result;
|
|
87
95
|
return { ...result, launchModel: template.split('{modelId}').join(modelId) };
|
|
88
96
|
}
|
|
89
|
-
|
|
97
|
+
/**
|
|
98
|
+
* One quarter of the window is held back for the reply, capped at 8192 tokens (a small local
|
|
99
|
+
* model's window must not lose a disproportionate slice to the reservation). Returns undefined
|
|
100
|
+
* for an unknown or non-finite size: opencode then keeps its own default guess, which is the
|
|
101
|
+
* pre-fix behaviour; never invent a limit here.
|
|
102
|
+
*/
|
|
103
|
+
function opencodeModelLimit(contextLength) {
|
|
104
|
+
if (contextLength === undefined || !Number.isFinite(contextLength))
|
|
105
|
+
return undefined;
|
|
106
|
+
const total = Math.trunc(contextLength);
|
|
107
|
+
if (total <= 0)
|
|
108
|
+
return undefined;
|
|
109
|
+
const output = Math.max(1, Math.min(8192, Math.floor(total / 4)));
|
|
110
|
+
// `limit.context` is the FULL window as far as opencode is concerned: it reserves for
|
|
111
|
+
// the reply itself, so the discovered total is passed through, never a shrunk figure.
|
|
112
|
+
return { context: total, output };
|
|
113
|
+
}
|
|
114
|
+
function renderConfigContent(template, endpoint, modelId, apiKey, contextLength) {
|
|
90
115
|
switch (template) {
|
|
91
|
-
case 'opencode-json':
|
|
116
|
+
case 'opencode-json': {
|
|
117
|
+
// `limit` carries the discovered context window (issue #749): without it opencode assumes
|
|
118
|
+
// a large default window for an unrecognized model id and eventually overflows a much
|
|
119
|
+
// smaller local server. `context` is the FULL window and opencode reserves for the reply
|
|
120
|
+
// inside it itself, so `opencodeModelLimit` passes the real total through and only
|
|
121
|
+
// `output` gets the capped reservation.
|
|
122
|
+
const limit = opencodeModelLimit(contextLength);
|
|
92
123
|
return JSON.stringify({
|
|
93
124
|
$schema: 'https://opencode.ai/config.json',
|
|
94
125
|
provider: {
|
|
95
126
|
custom: {
|
|
96
127
|
options: { baseURL: withV1Suffix(endpoint.baseUrl), apiKey },
|
|
97
|
-
models: { [modelId]: {} },
|
|
128
|
+
models: { [modelId]: limit ? { limit } : {} },
|
|
98
129
|
},
|
|
99
130
|
},
|
|
100
131
|
model: `custom/${modelId}`,
|
|
101
132
|
});
|
|
133
|
+
}
|
|
102
134
|
}
|
|
103
135
|
}
|
|
104
|
-
|
|
136
|
+
/** The DEDICATED env var carrying a custom endpoint's API key for config-file recipes that
|
|
137
|
+
* reference keys by name (codex's `env_key`, deepseek's `apiKeyEnv`). Never a CLI-native
|
|
138
|
+
* name: dsh's own `llm-deepseek`/`web-search-deepseek` rows read `DEEPSEEK_API_KEY` too,
|
|
139
|
+
* so an in-session `/model` switch back to `deepseek-official` (or a profile with web
|
|
140
|
+
* search on) would otherwise send the custom endpoint's key to api.deepseek.com. Both
|
|
141
|
+
* entries list it in `privilegedEnvKeys` (stock.ts) like each other's redirect vars.
|
|
142
|
+
*/
|
|
143
|
+
const CUSTOM_MODEL_API_KEY_ENV_VAR = 'CODEMAN_CUSTOM_MODEL_API_KEY';
|
|
105
144
|
/** The `[model.<name>]` block name grok's config.toml uses for the injected model — also
|
|
106
145
|
* what `-m <name>` in the standalone script's ONE_SHOT argv must reference to select it. */
|
|
107
146
|
export const GROK_CUSTOM_MODEL_NAME = 'codeman-custom';
|
|
108
|
-
function renderConfigFile(template, endpoint, modelId, apiKey) {
|
|
147
|
+
function renderConfigFile(template, endpoint, modelId, apiKey, contextLength) {
|
|
109
148
|
const baseUrl = withV1Suffix(endpoint.baseUrl);
|
|
110
149
|
switch (template) {
|
|
150
|
+
case 'deepseek-patch-json': {
|
|
151
|
+
const route = { provider: 'codeman-custom', model: modelId };
|
|
152
|
+
return {
|
|
153
|
+
content: JSON.stringify([
|
|
154
|
+
{
|
|
155
|
+
id: 'llm-pi-ai',
|
|
156
|
+
name: '@deepseek-ai/dsh-llm-pi-ai',
|
|
157
|
+
config: {
|
|
158
|
+
providers: {
|
|
159
|
+
'codeman-custom': {
|
|
160
|
+
// By NAME only (never the literal key, see CUSTOM_MODEL_API_KEY_ENV_VAR).
|
|
161
|
+
apiKeyEnv: CUSTOM_MODEL_API_KEY_ENV_VAR,
|
|
162
|
+
api: 'openai-completions',
|
|
163
|
+
baseURL: baseUrl,
|
|
164
|
+
models: [
|
|
165
|
+
{
|
|
166
|
+
id: modelId,
|
|
167
|
+
name: modelId,
|
|
168
|
+
...(contextLength !== undefined && Number.isFinite(contextLength) && contextLength > 0
|
|
169
|
+
? {
|
|
170
|
+
contextWindow: Math.trunc(contextLength),
|
|
171
|
+
// A quarter of the window keeps the reply inside the prompt's share; 8192 caps it on a large window.
|
|
172
|
+
maxTokens: Math.max(1, Math.min(8192, Math.floor(contextLength / 4))),
|
|
173
|
+
}
|
|
174
|
+
: {}),
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
{ id: 'dsh-tui', name: '@deepseek-harness-tui/dsh-tui', config: route },
|
|
182
|
+
{ id: 'agent-default-model', name: '@deepseek-ai/dsh-agent-default-model', config: route },
|
|
183
|
+
], null, 2),
|
|
184
|
+
extraEnv: { [CUSTOM_MODEL_API_KEY_ENV_VAR]: apiKey },
|
|
185
|
+
};
|
|
186
|
+
}
|
|
111
187
|
case 'codex-toml': {
|
|
112
188
|
// Verified against real codex (>= Feb 2026): `model` is a top-level STRING, never
|
|
113
189
|
// a `[model].default` table — codex rejects that with "invalid type: map, expected
|
|
@@ -126,15 +202,21 @@ function renderConfigFile(template, endpoint, modelId, apiKey) {
|
|
|
126
202
|
const content = [
|
|
127
203
|
`model = ${quoted(modelId)}`,
|
|
128
204
|
`model_provider = "custom"`,
|
|
205
|
+
...(contextLength !== undefined && Number.isFinite(contextLength) && contextLength > 0
|
|
206
|
+
? [
|
|
207
|
+
`model_context_window = ${Math.trunc(contextLength)}`,
|
|
208
|
+
`model_auto_compact_token_limit = ${Math.max(1, Math.floor(contextLength * 0.75))}`,
|
|
209
|
+
]
|
|
210
|
+
: []),
|
|
129
211
|
'',
|
|
130
212
|
'[model_providers.custom]',
|
|
131
213
|
`name = "Custom Endpoint"`,
|
|
132
214
|
`base_url = ${quoted(baseUrl)}`,
|
|
133
|
-
`env_key = ${quoted(
|
|
215
|
+
`env_key = ${quoted(CUSTOM_MODEL_API_KEY_ENV_VAR)}`,
|
|
134
216
|
`wire_api = "responses"`,
|
|
135
217
|
'',
|
|
136
218
|
].join('\n');
|
|
137
|
-
return { content, extraEnv: { [
|
|
219
|
+
return { content, extraEnv: { [CUSTOM_MODEL_API_KEY_ENV_VAR]: apiKey } };
|
|
138
220
|
}
|
|
139
221
|
case 'pi-models-json':
|
|
140
222
|
// Verified against pi's OWN bundled docs (models.md): `models` is an ARRAY of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-model-injection.js","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;
|
|
1
|
+
{"version":3,"file":"custom-model-injection.js","sourceRoot":"","sources":["../src/custom-model-injection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAqEH,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,yHAAyH;AACzH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC;AAC3D,CAAC;AAED,iIAAiI;AACjI,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAqC,EACrC,QAA6B,EAC7B,OAAe;AACf,uFAAuF;AACvF,aAAsB;IAEtB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,oBAAoB,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,eAAe,CAAC;IAE1D,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,YAAY,GAA2B;gBAC3C,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO;gBACxF,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM;aACxB,CAAC;YACF,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,SAAS;gBAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;YACvE,IAAI,GAAG,CAAC,gBAAgB,IAAI,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1F,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,MAAM,GAAiB,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACpG,IAAI,GAAG,CAAC,YAAY;gBAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;YAC7E,IAAI,GAAG,CAAC,eAAe;gBAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAC9F,IAAI,GAAG,CAAC,mBAAmB;gBAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;YAC/E,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YAC5F,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7G,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;YACvG,OAAO,eAAe,CACpB;gBACE,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;gBAC3C,QAAQ;gBACR,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,EACD,GAAG,CAAC,WAAW,EACf,OAAO,CACR,CAAC;QACJ,CAAC;QAED,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,SAAS,eAAe,CACtB,MAAS,EACT,QAA4B,EAC5B,OAAe;IAEf,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC7B,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,aAAiC;IAC3D,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,sFAAsF;IACtF,sFAAsF;IACtF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAAyB,EACzB,QAA6B,EAC7B,OAAe,EACf,MAAc,EACd,aAAsB;IAEtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,0FAA0F;YAC1F,sFAAsF;YACtF,yFAAyF;YACzF,mFAAmF;YACnF,wCAAwC;YACxC,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,iCAAiC;gBAC1C,QAAQ,EAAE;oBACR,MAAM,EAAE;wBACN,OAAO,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE;wBAC5D,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;qBAC9C;iBACF;gBACD,KAAK,EAAE,UAAU,OAAO,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,4BAA4B,GAAG,8BAA8B,CAAC;AAEpE;6FAC6F;AAC7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAEvD,SAAS,gBAAgB,CACvB,QAAkG,EAClG,QAA6B,EAC7B,OAAe,EACf,MAAc,EACd,aAAsB;IAEtB,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE;wBACE,EAAE,EAAE,WAAW;wBACf,IAAI,EAAE,4BAA4B;wBAClC,MAAM,EAAE;4BACN,SAAS,EAAE;gCACT,gBAAgB,EAAE;oCAChB,0EAA0E;oCAC1E,SAAS,EAAE,4BAA4B;oCACvC,GAAG,EAAE,oBAAoB;oCACzB,OAAO,EAAE,OAAO;oCAChB,MAAM,EAAE;wCACN;4CACE,EAAE,EAAE,OAAO;4CACX,IAAI,EAAE,OAAO;4CACb,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC;gDACpF,CAAC,CAAC;oDACE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;oDACxC,qGAAqG;oDACrG,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;iDACtE;gDACH,CAAC,CAAC,EAAE,CAAC;yCACR;qCACF;iCACF;6BACF;yBACF;qBACF;oBACD,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,KAAK,EAAE;oBACvE,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,sCAAsC,EAAE,MAAM,EAAE,KAAK,EAAE;iBAC3F,EACD,IAAI,EACJ,CAAC,CACF;gBACD,QAAQ,EAAE,EAAE,CAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE;aACrD,CAAC;QACJ,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,kFAAkF;YAClF,mFAAmF;YACnF,qFAAqF;YACrF,mFAAmF;YACnF,oFAAoF;YACpF,gFAAgF;YAChF,gFAAgF;YAChF,gFAAgF;YAChF,gFAAgF;YAChF,0EAA0E;YAC1E,mFAAmF;YACnF,iFAAiF;YACjF,0DAA0D;YAC1D,sEAAsE;YACtE,MAAM,OAAO,GAAG;gBACd,WAAW,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC5B,2BAA2B;gBAC3B,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC;oBACpF,CAAC,CAAC;wBACE,0BAA0B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;wBACrD,oCAAoC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,EAAE;qBACpF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,EAAE;gBACF,0BAA0B;gBAC1B,0BAA0B;gBAC1B,cAAc,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC/B,aAAa,MAAM,CAAC,4BAA4B,CAAC,EAAE;gBACnD,wBAAwB;gBACxB,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,4BAA4B,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QAC3E,CAAC;QACD,KAAK,gBAAgB;YACnB,8EAA8E;YAC9E,kFAAkF;YAClF,oFAAoF;YACpF,+EAA+E;YAC/E,iFAAiF;YACjF,oFAAoF;YACpF,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;oBACE,SAAS,EAAE;wBACT,MAAM,EAAE;4BACN,OAAO;4BACP,MAAM;4BACN,GAAG,EAAE,oBAAoB;4BACzB,UAAU,EAAE,IAAI;4BAChB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;yBAC1B;qBACF;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF,CAAC;QACJ,KAAK,gBAAgB;YACnB,2EAA2E;YAC3E,gFAAgF;YAChF,6EAA6E;YAC7E,6EAA6E;YAC7E,8EAA8E;YAC9E,+EAA+E;YAC/E,OAAO;gBACL,OAAO,EAAE,uCAAuC,MAAM,CAAC,OAAO,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,iFAAiF,MAAM,CAAC,OAAO,CAAC,IAAI;aACnM,CAAC;QACJ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,0EAA0E;YAC1E,gFAAgF;YAChF,gFAAgF;YAChF,8EAA8E;YAC9E,6EAA6E;YAC7E,iFAAiF;YACjF,8EAA8E;YAC9E,MAAM,OAAO,GAAG;gBACd,UAAU,sBAAsB,GAAG;gBACnC,WAAW,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC5B,cAAc,MAAM,CAAC,OAAO,CAAC,EAAE;gBAC/B,0BAA0B;gBAC1B,yBAAyB;gBACzB,kCAAkC;gBAClC,EAAE;aACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
|