gestalt-mobile 0.33.0 → 0.35.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/dist/client/assets/index-BTJImyK1.js +38 -0
- package/dist/client/assets/index-CPQBJDsg.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/server/server/cli.js +28 -1
- package/dist/server/server/composition.js +18 -7
- package/dist/server/server/features/autopilot/application/policy.js +2 -2
- package/dist/server/server/features/autopilot/application/service.js +87 -4
- package/dist/server/server/features/autopilot/domain/autopilot-session.js +3 -0
- package/dist/server/server/features/autopilot/domain/supervision-protocol.js +54 -3
- package/dist/server/server/features/catalog/get-bootstrap/use-case.js +1 -0
- package/dist/server/server/platform/codex/server-request.js +11 -0
- package/dist/server/shared/contracts/autopilot-wait-lease.js +27 -4
- package/dist/server/shared/contracts/component-version.js +6 -0
- package/package.json +1 -1
- package/dist/client/assets/index-ClFAZNxC.js +0 -38
- package/dist/client/assets/index-Jem9eobi.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.session-path.svelte-t9laac{text-align:center;text-overflow:ellipsis;white-space:nowrap;flex:1 1 0;min-inline-size:0;margin:0;overflow:hidden}.session-model.svelte-t9laac{color:var(--theme-text-muted);font-family:var(--theme-font-code);margin-inline-start:clamp(.75rem,3vw,2rem)}.detach-chat.svelte-t9laac{min-block-size:44px;inline-size:44px;color:inherit;background:0 0;border:0;flex:none;place-items:center;padding:0;display:grid}.detach-chat.svelte-t9laac svg:where(.svelte-t9laac){fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.75px;block-size:1.25rem;inline-size:1.25rem}.maintenance-actions.svelte-t9laac{border-block-start:1px solid var(--theme-border);margin-block-start:.5rem;padding-block-start:.5rem}.component-versions.svelte-t9laac{border-block-start:1px solid var(--theme-border);margin-block-start:.75rem;padding-block-start:.75rem}.component-versions.svelte-t9laac h2:where(.svelte-t9laac){color:var(--theme-text-muted);letter-spacing:.04em;text-transform:uppercase;margin:0 0 .4rem;font-size:.75rem;font-weight:700}.component-versions.svelte-t9laac dl:where(.svelte-t9laac){gap:.25rem;margin:0;display:grid}.component-versions.svelte-t9laac dl:where(.svelte-t9laac)>div:where(.svelte-t9laac){grid-template-columns:minmax(0,1fr) minmax(5rem,auto);align-items:baseline;gap:.75rem;display:grid}.component-versions.svelte-t9laac dt:where(.svelte-t9laac),.component-versions.svelte-t9laac dd:where(.svelte-t9laac){min-inline-size:0;margin:0;font-size:.75rem}.component-versions.svelte-t9laac dt:where(.svelte-t9laac){color:var(--theme-text-muted)}.component-versions.svelte-t9laac dd:where(.svelte-t9laac){font-family:var(--theme-font-code);font-variant-numeric:tabular-nums;text-align:end;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.maintenance-actions.svelte-t9laac button:where(.svelte-t9laac){inline-size:100%}dialog.svelte-t9laac{box-sizing:border-box;inline-size:min(28rem,100vw - 2rem);color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 1rem 2.5rem var(--theme-shadow);padding:1.25rem}dialog.svelte-t9laac::backdrop{background:color-mix(in srgb, var(--theme-page) 58%, transparent)}dialog.svelte-t9laac h2:where(.svelte-t9laac){margin-block:0 .5rem}dialog.svelte-t9laac p:where(.svelte-t9laac){color:var(--theme-text-muted);margin-block:0 1.25rem}.dialog-actions.svelte-t9laac{justify-content:flex-end;gap:.75rem;display:flex}.dialog-actions.svelte-t9laac button:where(.svelte-t9laac):last-child{font-weight:700}@media (width<=34rem){.session-path.svelte-t9laac{font-size:max(.625rem,12px)}.session-model.svelte-t9laac{display:none}}.chat-activity.svelte-thyolt,.live-activity.svelte-thyolt{--activity-gap:.4rem;--activity-type-color:var(--theme-text-muted)}.chat-activity.svelte-thyolt>summary:where(.svelte-thyolt){color:var(--activity-type-color);cursor:pointer;font-size:.875em}.live-activity.svelte-thyolt{margin-block-start:.5rem}.live-activity.svelte-thyolt>strong:where(.svelte-thyolt){color:var(--activity-type-color);font-size:.875em}.activity-list.svelte-thyolt{gap:var(--activity-gap);margin-block:.25rem 0;margin-inline:0;padding:0;list-style:none;display:grid}.command-counts.svelte-thyolt{gap:var(--activity-gap);margin-block:.25rem 0;display:grid}.command-counts.svelte-thyolt div:where(.svelte-thyolt){justify-content:space-between;align-items:baseline;gap:1rem;max-inline-size:20rem;display:flex}.command-counts.svelte-thyolt dt:where(.svelte-thyolt),.command-counts.svelte-thyolt dd:where(.svelte-thyolt){margin:0}.command-counts.svelte-thyolt dd:where(.svelte-thyolt){min-inline-size:2ch;font-family:var(--theme-font-code);font-variant-numeric:tabular-nums;text-align:end}.command-counts.svelte-thyolt [data-command-outcome=successful]:where(.svelte-thyolt) dd:where(.svelte-thyolt){color:var(--theme-success)}.command-counts.svelte-thyolt [data-command-outcome=failed]:where(.svelte-thyolt) dd:where(.svelte-thyolt){color:var(--theme-error)}.activity-row.svelte-thyolt{flex-wrap:wrap;align-items:baseline;gap:.25rem .5rem;display:flex}.activity-row[data-activity-status=failed].svelte-thyolt{border-inline-start:.25rem solid var(--theme-error);padding-inline-start:.375rem}.activity-row[data-activity-status=completed].svelte-thyolt{border-inline-start:.25rem solid var(--theme-success);padding-inline-start:.375rem}.activity-row[data-activity-status].svelte-thyolt:not([data-activity-status=completed]):not([data-activity-status=failed]){border-inline-start:.25rem solid var(--theme-info);padding-inline-start:.375rem}.activity-type.svelte-thyolt{color:var(--activity-type-color);font-size:.75em;line-height:1.2}.activity-content.svelte-thyolt{overflow-wrap:anywhere;white-space:pre-wrap;min-inline-size:0}.app-control.svelte-6ey372{box-sizing:border-box;min-block-size:44px;min-inline-size:44px;color:var(--theme-text);font:inherit;text-align:center;background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);cursor:pointer;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance);justify-content:center;align-items:center;padding:.45rem .75rem;display:inline-flex}.app-control.svelte-6ey372:hover:not(:disabled,[aria-disabled=true]){background:var(--theme-control-hover)}.app-control.svelte-6ey372:active:not(:disabled,[aria-disabled=true]){color:var(--theme-control-pressed-contrast);background:var(--theme-control-pressed)}.app-control.svelte-6ey372:focus-visible{outline:3px solid var(--theme-accent);outline-offset:2px}.app-control.svelte-6ey372:disabled,.app-control[aria-disabled=true].svelte-6ey372{color:var(--theme-control-disabled);cursor:not-allowed;opacity:.65}.compact.svelte-6ey372{padding:.25rem .4rem;font-size:.8rem}.full.svelte-6ey372{inline-size:100%}.primary.svelte-6ey372{color:var(--theme-accent-contrast);background:var(--theme-accent);border-color:var(--theme-accent);box-shadow:inset 0 .15rem 0 var(--theme-accent-contrast);font-weight:700}.accentPressed[aria-pressed=true].svelte-6ey372{color:var(--theme-accent-contrast);background:var(--theme-accent);border-color:var(--theme-accent);font-weight:700}@media (prefers-reduced-motion:reduce){.app-control.svelte-6ey372{transition:none!important;animation:none!important}}.agent-activity.svelte-d9jh4j{overflow-wrap:anywhere;max-inline-size:100%}.chips.svelte-d9jh4j{flex-wrap:wrap;align-items:center;gap:.4rem;min-inline-size:0;display:flex}.chip.svelte-d9jh4j,.freshness.svelte-d9jh4j{border:1px solid var(--theme-border);overflow-wrap:anywhere;border-radius:999px;padding:.35rem .55rem;font-size:.85rem}.children.svelte-d9jh4j>summary:where(.svelte-d9jh4j){cursor:pointer;align-items:center;min-block-size:2.75rem;display:inline-flex}.children.svelte-d9jh4j ul:where(.svelte-d9jh4j){max-inline-size:min(38rem,100%);margin:.45rem 0 0;padding-inline-start:1.25rem}.children.svelte-d9jh4j small:where(.svelte-d9jh4j){color:var(--theme-text-muted)}.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j){inline-size:100%;position:relative}.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j) ul:where(.svelte-d9jh4j){z-index:10;box-sizing:border-box;overscroll-behavior:contain;background:var(--theme-surface);border:1px solid var(--theme-border);max-block-size:min(20rem,50vh);inline-size:min(22rem,100vw - max(2.5rem,48px));box-shadow:0 .35rem 1rem color-mix(in srgb, var(--theme-text) 18%, transparent);border-radius:.5rem;gap:.35rem;margin:0;padding:.45rem;list-style:none;display:grid;position:absolute;inset-block-end:calc(100% + .35rem);inset-inline-end:0;overflow-y:auto}.compact.align-start.svelte-d9jh4j .agents:where(.svelte-d9jh4j) ul:where(.svelte-d9jh4j){inset-inline:0 auto}.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j) li:where(.svelte-d9jh4j){border-block-end:1px solid var(--theme-border);gap:.1rem;min-inline-size:0;padding:.3rem;display:grid}.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j) time:where(.svelte-d9jh4j),.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j) .agent-metadata:where(.svelte-d9jh4j),.compact.svelte-d9jh4j .agents:where(.svelte-d9jh4j) .unavailable:where(.svelte-d9jh4j){color:var(--theme-text-muted);font-size:.78rem}[data-state=blocked].svelte-d9jh4j,[data-state=awaitingHuman].svelte-d9jh4j,[data-state=disconnected].svelte-d9jh4j{font-weight:700;text-decoration:underline}.visually-hidden.svelte-d9jh4j{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.svelte-d9jh4j{transition:none!important;animation:none!important}}main.svelte-iw6wrs{box-sizing:border-box;max-inline-size:100vw;padding:1rem}h1.svelte-iw6wrs{overflow-wrap:anywhere}.autopilot-control.svelte-1qf1ppf{min-inline-size:0;max-inline-size:100%;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance)}.control-row.svelte-1qf1ppf{flex-wrap:wrap;align-items:center;gap:.45rem;display:flex}.compact.svelte-1qf1ppf{inline-size:100%}.status.svelte-1qf1ppf{border:1px solid var(--theme-border);overflow-wrap:anywhere;border-radius:999px;padding:.35rem .55rem}.status[data-state=attentionRequired].svelte-1qf1ppf,.status[data-state=unavailable].svelte-1qf1ppf{font-weight:700;text-decoration:underline}p.svelte-1qf1ppf{color:var(--theme-text-muted);overflow-wrap:anywhere;margin:.25rem 0 0}.visually-hidden.svelte-1qf1ppf{clip-path:inset(50%);white-space:nowrap;border:0;block-size:1px;inline-size:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.svelte-1qf1ppf{transition:none!important;animation:none!important}}.attention.svelte-1hnxk0w{border:2px solid var(--theme-error);overflow-wrap:anywhere;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance);border-inline-start-width:.5rem;border-radius:.5rem;padding:.75rem}h3.svelte-1hnxk0w{margin:0}dl.svelte-1hnxk0w{gap:.35rem;display:grid}dl.svelte-1hnxk0w div:where(.svelte-1hnxk0w){gap:.15rem;display:grid}dt.svelte-1hnxk0w{font-weight:700}dd.svelte-1hnxk0w{margin:0}.actions.svelte-1hnxk0w{flex-wrap:wrap;gap:.5rem;display:flex}button.svelte-1hnxk0w{min-block-size:44px;font:inherit;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance);padding:.45rem .75rem}textarea.svelte-1hnxk0w{box-sizing:border-box;min-block-size:5rem;inline-size:100%;font:inherit;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance)}.guidance-help.svelte-1hnxk0w{color:var(--theme-text-muted);margin:.25rem 0}button.svelte-1hnxk0w:focus-visible{outline:3px solid var(--theme-accent);outline-offset:2px}.safety-stop.svelte-yp6bgs{border:2px solid var(--theme-error);overflow-wrap:anywhere;scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance);border-inline-start-width:.5rem;border-radius:.5rem;padding:.75rem}h3.svelte-yp6bgs,p.svelte-yp6bgs{margin:0 0 .5rem}.actions.svelte-yp6bgs{flex-wrap:wrap;gap:.5rem;display:flex}button.svelte-yp6bgs{min-block-size:44px;font:inherit;padding:.45rem .75rem}button.svelte-yp6bgs:focus-visible{outline:3px solid var(--theme-accent);outline-offset:2px}@media (prefers-reduced-motion:reduce){.svelte-yp6bgs{transition:none!important;animation:none!important}}form.svelte-1264sfg>[role=status]:where(.svelte-1264sfg){text-align:start;margin-block:1rem .35rem}.writer-hint.svelte-1264sfg{color:var(--theme-text-muted);margin:.35rem 0}.writer-feedback.svelte-1264sfg{border-inline-start:.25rem solid var(--theme-danger,#b42318);background:var(--theme-control-hover);flex-wrap:wrap;align-items:center;gap:.5rem;margin-block:.5rem;padding:.5rem;display:flex}.writer-feedback.svelte-1264sfg p:where(.svelte-1264sfg){flex:16rem;margin:0}.command-menu.svelte-1264sfg{background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:.375rem;gap:.125rem;max-inline-size:min(100%,32rem);margin:0 0 .35rem;padding:.25rem;list-style:none;display:grid}.command-menu.svelte-1264sfg button:where(.svelte-1264sfg){inline-size:100%;color:var(--theme-text);text-align:start;background:0 0;border:0;border-radius:.25rem;align-items:baseline;gap:.5rem;padding:.25rem .375rem;display:flex}.command-menu.svelte-1264sfg .command-selected:where(.svelte-1264sfg) button:where(.svelte-1264sfg),.command-menu.svelte-1264sfg button:where(.svelte-1264sfg):hover{background:var(--theme-control-hover)}.command-menu.svelte-1264sfg small:where(.svelte-1264sfg){color:var(--theme-text-muted);font-size:.8em}.command-menu.svelte-1264sfg button:where(.svelte-1264sfg):focus-visible{outline:2px solid var(--theme-focus);outline-offset:1px}.prompt-row.svelte-1264sfg{align-items:end;gap:.5rem;display:flex}textarea.svelte-1264sfg{resize:vertical;flex:auto;min-block-size:2.75rem}.prompt-row.svelte-1264sfg>button:where(.svelte-1264sfg),.prompt-action.svelte-1264sfg>button:where(.svelte-1264sfg){flex:none;place-items:center;min-block-size:3rem;inline-size:3rem;padding:0;display:grid}.prompt-row.svelte-1264sfg svg:where(.svelte-1264sfg){fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;block-size:1.35rem;inline-size:1.35rem}.prompt-action.svelte-1264sfg{flex:none;position:relative}.prompt-action.svelte-1264sfg>button:where(.svelte-1264sfg){color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);cursor:pointer;border-radius:.375rem}.prompt-action.svelte-1264sfg>button:where(.svelte-1264sfg):hover{background:var(--theme-control-hover)}.prompt-action.svelte-1264sfg>button:where(.svelte-1264sfg):focus-visible{outline:2px solid var(--theme-focus);outline-offset:2px}.action-panel.svelte-1264sfg{z-index:2;background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:.375rem;gap:.125rem;min-inline-size:max-content;padding:.25rem;display:grid;position:absolute;inset-block-end:calc(100% + .35rem);inset-inline-end:0;box-shadow:0 .35rem 1rem #0000002e}.action-panel.svelte-1264sfg button:where(.svelte-1264sfg){inline-size:100%;color:var(--theme-text);text-align:start;white-space:nowrap;background:0 0;border:0;border-radius:.25rem;padding:.5rem .65rem}.action-panel.svelte-1264sfg button:where(.svelte-1264sfg):hover{background:var(--theme-control-hover)}.block-cursor.svelte-1264sfg{vertical-align:-.1em;background:var(--theme-accent);block-size:1em;inline-size:.55ch;animation:1s steps(2,start) infinite svelte-1264sfg-blink;display:inline-block}@media (prefers-reduced-motion:reduce){.block-cursor.svelte-1264sfg{animation:none}}@keyframes svelte-1264sfg-blink{50%{opacity:0}}.work-details.svelte-11ye6aj{min-inline-size:0;margin-block:.35rem}summary.svelte-11ye6aj{cursor:pointer;color:var(--theme-text-muted);overflow-wrap:anywhere;font-size:.875rem}summary.svelte-11ye6aj:focus-visible{outline:2px solid var(--theme-focus);outline-offset:2px}.work-details-content.svelte-11ye6aj{background:var(--theme-surface-subtle);border:1px solid var(--theme-border);border-radius:var(--theme-radius);gap:.5rem;margin-block-start:.5rem;padding:.5rem .625rem;display:grid}.command-counts.svelte-11ye6aj{flex-wrap:wrap;gap:.5rem 1rem;margin:0;display:flex}.command-counts.svelte-11ye6aj div:where(.svelte-11ye6aj){gap:.35rem;display:flex}dt.svelte-11ye6aj,dd.svelte-11ye6aj{margin:0}dd.svelte-11ye6aj,.file-counts.svelte-11ye6aj{font-family:var(--theme-font-code);font-variant-numeric:tabular-nums}.activity-list.svelte-11ye6aj,.file-list.svelte-11ye6aj{gap:.35rem;margin:.25rem 0 0;padding:0;list-style:none;display:grid}.activity-list.svelte-11ye6aj li:where(.svelte-11ye6aj){flex-wrap:wrap;gap:.25rem .5rem;min-inline-size:0;display:flex}.activity-list.svelte-11ye6aj small:where(.svelte-11ye6aj),time.svelte-11ye6aj,.file-list.svelte-11ye6aj>li:where(.svelte-11ye6aj)>span:where(.svelte-11ye6aj):last-child{color:var(--theme-text-muted)}.activity-list.svelte-11ye6aj li[data-status=failed]:where(.svelte-11ye6aj) small:where(.svelte-11ye6aj){color:var(--theme-error)}.activity-list.svelte-11ye6aj li:where(.svelte-11ye6aj) span:where(.svelte-11ye6aj),code.svelte-11ye6aj{overflow-wrap:anywhere;min-inline-size:0}.file-list.svelte-11ye6aj li:where(.svelte-11ye6aj){grid-template-columns:minmax(0,1fr) auto auto;align-items:baseline;gap:.35rem .65rem;display:grid}.file-counts.svelte-11ye6aj{white-space:nowrap;gap:.3rem;display:inline-flex}.file-counts.svelte-11ye6aj span:where(.svelte-11ye6aj):first-child{color:var(--theme-success)}.file-counts.svelte-11ye6aj span:where(.svelte-11ye6aj):last-child{color:var(--theme-error)}time.svelte-11ye6aj,.file-list.svelte-11ye6aj>li:where(.svelte-11ye6aj)>span:where(.svelte-11ye6aj):last-child{white-space:nowrap;font-size:.8rem}@media (width<=32rem){.file-list.svelte-11ye6aj li:where(.svelte-11ye6aj){grid-template-columns:minmax(0,1fr) auto}.file-list.svelte-11ye6aj time:where(.svelte-11ye6aj),.file-list.svelte-11ye6aj>li:where(.svelte-11ye6aj)>span:where(.svelte-11ye6aj):last-child{grid-column:2}}.quiz-form.svelte-77f3gb{gap:1rem;display:grid}fieldset.svelte-77f3gb{border:0;min-inline-size:0;margin:0;padding:0}.questions.svelte-77f3gb{gap:1rem;display:grid}legend.svelte-77f3gb{gap:.25rem;max-inline-size:100%;display:grid}.choices.svelte-77f3gb{gap:.5rem;margin-block-start:.5rem;display:grid}.choice.svelte-77f3gb{position:relative}.choice.svelte-77f3gb>input:where(.svelte-77f3gb){opacity:0;cursor:pointer;block-size:100%;inline-size:100%;margin:0;position:absolute;inset:0}.choice.svelte-77f3gb>label:where(.svelte-77f3gb){background:var(--theme-surface);border:2px solid var(--theme-border);border-radius:.5rem;gap:.125rem;min-block-size:44px;padding:.75rem;display:grid}.choice.svelte-77f3gb>input:where(.svelte-77f3gb):checked+label:where(.svelte-77f3gb){border-width:3px;border-color:var(--theme-accent);background:var(--theme-surface-subtle)}.choice.svelte-77f3gb>input:where(.svelte-77f3gb):focus-visible+label:where(.svelte-77f3gb){outline:3px solid var(--theme-focus);outline-offset:2px}label.svelte-77f3gb span:where(.svelte-77f3gb),legend.svelte-77f3gb span:where(.svelte-77f3gb){color:var(--theme-text-muted)}.custom.svelte-77f3gb{margin-block-start:.25rem}.custom.svelte-77f3gb input:where(.svelte-77f3gb){box-sizing:border-box;min-block-size:44px;inline-size:100%;font:inherit;margin-block-start:.375rem}article.svelte-ajsqcq{background:var(--theme-surface-subtle);border-inline-start:.25rem solid var(--theme-info);border-radius:.375rem;margin-block:.75rem;padding:.75rem}.submitted-answers.svelte-ajsqcq{border-block-start:1px solid var(--theme-border);gap:.5rem;margin-block-start:.75rem;padding-block-start:.75rem;display:grid}.submitted-answers.svelte-ajsqcq p:where(.svelte-ajsqcq),.submitted-answers.svelte-ajsqcq ol:where(.svelte-ajsqcq){margin:0}.submitted-answers.svelte-ajsqcq ol:where(.svelte-ajsqcq){gap:.625rem;padding-inline-start:1.25rem;display:grid}.submitted-answers.svelte-ajsqcq li:where(.svelte-ajsqcq),.submitted-question.svelte-ajsqcq,.submitted-answer.svelte-ajsqcq{overflow-wrap:anywhere}.submitted-question.svelte-ajsqcq,.submitted-answer.svelte-ajsqcq{display:block}.submitted-answer.svelte-ajsqcq{white-space:pre-wrap;margin-block-start:.125rem}.submitted-note.svelte-ajsqcq{color:var(--theme-text-muted);font-size:.85rem}.interaction-kind.svelte-ajsqcq,.interaction-submitting.svelte-ajsqcq,.interaction-result.svelte-ajsqcq,.interaction-failed.svelte-ajsqcq{margin-block:0 .5rem}.interaction-result.svelte-ajsqcq{font-weight:600}.command-approval-command.svelte-ajsqcq{white-space:pre-wrap;max-inline-size:100%;font-family:var(--theme-font-code);background:var(--theme-code);border:1px solid var(--theme-border);border-radius:.375rem;margin-block:.5rem .75rem;padding:.625rem;overflow-x:auto}.command-approval-missing.svelte-ajsqcq{margin-block:.5rem .75rem}.file-change-approval-targets.svelte-ajsqcq{overflow-wrap:anywhere;margin-block:.5rem .75rem;padding-inline-start:1.5rem}.file-change-approval-missing.svelte-ajsqcq{margin-block:.5rem .75rem}.approval-actions.svelte-ajsqcq{flex-wrap:wrap;gap:clamp(.5rem,2vw,1rem);display:flex}.autopilot-audit.svelte-1im954t{border-inline-start:.25rem solid var(--theme-border);overflow-wrap:anywhere;padding-inline-start:.5rem}.audit-incomplete.svelte-1im954t{border-inline-start:.35rem solid var(--theme-border);color:var(--theme-text-muted);margin-block:.5rem;padding-inline-start:.65rem}.autopilot-audit.svelte-1im954t time:where(.svelte-1im954t){color:var(--theme-text-muted);margin-inline-start:.5rem}.autopilot-audit.svelte-1im954t summary:where(.svelte-1im954t){scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance)}ol.svelte-1im954t{inline-size:100%;margin:0;padding:0;list-style:none}li.svelte-1im954t{box-sizing:border-box;white-space:pre-wrap;overflow-wrap:anywhere;inline-size:100%;margin-block-end:0}li.svelte-1im954t+li:where(.svelte-1im954t){margin-block-start:1rem}.prompt-turn.svelte-1im954t{background:var(--theme-surface-subtle);border-inline-start:.25rem solid var(--theme-accent);border-radius:.375rem;padding:.5rem .625rem}.answer-turn.svelte-1im954t{border-inline-start:.25rem solid var(--theme-border);padding-inline-start:.625rem}.commentary-turn.svelte-1im954t,.orphan-activity-turn.svelte-1im954t,.progress-turn.svelte-1im954t,.commentary-content.svelte-1im954t{background:var(--theme-surface-subtle);border-inline-start:.25rem solid var(--theme-info);border-radius:.375rem;padding:.5rem .625rem}.live-commentary.svelte-1im954t,.progress-turn.svelte-1im954t{background:0 0}.entry-heading.svelte-1im954t{align-items:baseline;gap:.75rem;display:flex}time.svelte-1im954t{color:var(--theme-text-muted);white-space:nowrap;margin-inline-start:auto;font-size:.875em}.commentary-toggle.svelte-1im954t{min-block-size:1.5rem;color:var(--theme-text-muted);background:0 0;border:0;padding:0 .125rem;font-size:.875em}.answer-history.svelte-1im954t{flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;margin-block:.2rem .35rem;display:flex}.file-changes.svelte-1im954t{background:var(--theme-surface-subtle);border-inline-start:.25rem solid var(--theme-success);border-radius:.375rem;margin-block:.5rem;padding:.5rem .625rem}.file-changes.svelte-1im954t>summary:where(.svelte-1im954t){color:var(--theme-text-muted);cursor:pointer;font-size:.875em}.file-changes.svelte-1im954t>summary:where(.svelte-1im954t):focus-visible{outline:2px solid var(--theme-focus);outline-offset:2px}.file-changes.svelte-1im954t ul:where(.svelte-1im954t){gap:.15rem;margin:.25rem 0 0;padding-inline-start:1.25rem;display:grid}.file-changes.svelte-1im954t li:where(.svelte-1im954t){grid-template-columns:minmax(0,1fr) auto auto;align-items:baseline;gap:.4rem .75rem;display:grid}.file-path.svelte-1im954t{overflow-wrap:anywhere;min-width:0}.file-counts.svelte-1im954t{font-variant-numeric:tabular-nums;white-space:nowrap;gap:.35rem;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:inline-flex}.additions.svelte-1im954t{color:var(--theme-success)}.deletions.svelte-1im954t{color:var(--theme-error)}.file-changes.svelte-1im954t time:where(.svelte-1im954t),.touch-unknown.svelte-1im954t{color:var(--theme-text-muted);font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.8em}@media (width<=32rem){.file-changes.svelte-1im954t li:where(.svelte-1im954t){grid-template-columns:minmax(0,1fr) auto}.file-changes.svelte-1im954t time:where(.svelte-1im954t),.touch-unknown.svelte-1im954t{grid-column:2}}.commentary-content.svelte-1im954t{margin-block:.25rem .5rem}.entry-content.svelte-1im954t{margin-block:.125rem 0;margin-inline:0}:is(h1.svelte-1im954t,h2.svelte-1im954t,h3.svelte-1im954t,h4.svelte-1im954t,h5.svelte-1im954t,h6.svelte-1im954t){text-wrap:balance;margin-block:.85em .3em;line-height:1.25}.svelte-1im954t:is(h1:where(.svelte-1im954t),h2:where(.svelte-1im954t),h3:where(.svelte-1im954t)):first-child{margin-block-start:.25em}h1.svelte-1im954t{font-size:1.5em}h2.svelte-1im954t{font-size:1.3em}h3.svelte-1im954t{font-size:1.15em}:is(h4.svelte-1im954t,h5.svelte-1im954t,h6.svelte-1im954t){font-size:1em}pre.svelte-1im954t,code.svelte-1im954t{font-family:var(--theme-font-code)}pre.svelte-1im954t{white-space:pre;background:var(--theme-code);border:1px solid var(--theme-border);border-radius:var(--theme-radius);margin:0;padding:.625rem;padding-inline-end:3rem;overflow-x:auto}.code-block.svelte-1im954t{margin-block:.75rem;position:relative}.code-copy.svelte-1im954t{z-index:1;min-block-size:2rem;inline-size:2rem;color:var(--theme-text-muted);background:var(--theme-surface-subtle);border:1px solid var(--theme-border);border-radius:.375rem;place-items:center;padding:0;display:grid;position:absolute;inset-block-start:.375rem;inset-inline-end:.375rem}.code-copy.svelte-1im954t:hover{color:var(--theme-text);background:var(--theme-control-hover)}.code-copy.svelte-1im954t:focus-visible{color:var(--theme-text);outline:2px solid var(--theme-focus);outline-offset:2px}.code-copy.svelte-1im954t svg:where(.svelte-1im954t){fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;block-size:1rem;inline-size:1rem}.svelte-1im954t:not(pre)>code:where(.svelte-1im954t){background:var(--theme-code);border-radius:.2rem;padding-inline:.2em}a.svelte-1im954t{color:var(--theme-info)}.table-scroll.svelte-1im954t{margin-block:.75rem;overflow-x:auto}table.svelte-1im954t{border-collapse:collapse;white-space:normal;width:max-content;min-width:100%}th.svelte-1im954t,td.svelte-1im954t{text-align:left;vertical-align:top;border:1px solid var(--theme-border);padding:.25rem .5rem}th.svelte-1im954t{background:var(--theme-surface-subtle);font-weight:600}@media (pointer:coarse){pre.svelte-1im954t{padding-inline-end:3.75rem}.code-copy.svelte-1im954t{min-block-size:2.75rem;inline-size:2.75rem}}.notification-history.svelte-1izxxv2{box-sizing:border-box;min-block-size:100dvh;inline-size:min(48rem,100%);padding:max(1rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(5rem, calc(1rem + env(safe-area-inset-bottom))) max(1rem, env(safe-area-inset-left));color:var(--theme-text);margin:auto}header.svelte-1izxxv2{align-items:flex-start;gap:1rem;margin-block-end:1.5rem;display:flex}header.svelte-1izxxv2 button:where(.svelte-1izxxv2){flex:none;min-block-size:44px}h1.svelte-1izxxv2,p.svelte-1izxxv2{margin:0}h1.svelte-1izxxv2{font-family:var(--theme-font-display)}header.svelte-1izxxv2 p:where(.svelte-1izxxv2),time.svelte-1izxxv2,small.svelte-1izxxv2{color:var(--theme-text-muted)}ol.svelte-1izxxv2{background:var(--theme-surface);border-block:1px solid var(--theme-border);margin:0;padding:0;list-style:none}li.svelte-1izxxv2{border-block-end:1px solid var(--theme-border);gap:.4rem;padding:1rem .75rem;display:grid}li.svelte-1izxxv2:last-child{border-block-end:0}.notification-meta.svelte-1izxxv2{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem 1rem;display:flex}.notification-meta.svelte-1izxxv2 strong:where(.svelte-1izxxv2){color:var(--theme-info);text-transform:capitalize}li[data-kind=error].svelte-1izxxv2 .notification-meta:where(.svelte-1izxxv2) strong:where(.svelte-1izxxv2){color:var(--theme-error)}li[data-kind=success].svelte-1izxxv2 .notification-meta:where(.svelte-1izxxv2) strong:where(.svelte-1izxxv2){color:var(--theme-success)}li[data-kind=warning].svelte-1izxxv2 .notification-meta:where(.svelte-1izxxv2) strong:where(.svelte-1izxxv2){color:var(--theme-warning)}time.svelte-1izxxv2{font-variant-numeric:tabular-nums}.empty.svelte-1izxxv2{color:var(--theme-text-muted);text-align:center;border-block:1px solid var(--theme-border);padding:2rem 1rem}@media (forced-colors:active){ol.svelte-1izxxv2,li.svelte-1izxxv2,.empty.svelte-1izxxv2{border-color:canvastext}}.toast-viewport.svelte-1a0rutm{z-index:10;pointer-events:none;gap:.5rem;max-block-size:calc(100dvh - 7rem);inline-size:min(24rem,100vw - 1.5rem);display:grid;position:fixed;inset-block-start:calc(1rem + env(safe-area-inset-top));inset-inline-end:max(.75rem, env(safe-area-inset-right));overflow-y:auto}.toast.svelte-1a0rutm{box-sizing:border-box;min-inline-size:0;color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-info);box-shadow:0 .4rem 1.2rem var(--theme-shadow);pointer-events:auto;border-inline-start-width:.35rem;border-radius:.55rem;grid-template-columns:auto minmax(0,1fr) 44px;align-items:start;gap:.6rem;padding:.65rem;display:grid}.toast.error.svelte-1a0rutm{color:var(--theme-error);border-color:var(--theme-error);border-inline-start-style:double}.toast.success.svelte-1a0rutm{color:var(--theme-success);border-color:var(--theme-success);border-inline-start-style:solid}.toast.warning.svelte-1a0rutm{color:var(--theme-warning);border-color:var(--theme-warning)}.toast-symbol.svelte-1a0rutm{box-sizing:border-box;border:2px solid;border-radius:50%;place-items:center;block-size:1.6rem;inline-size:1.6rem;font-weight:800;line-height:1;display:grid}.toast-copy.svelte-1a0rutm{overflow-wrap:anywhere;gap:.15rem;min-inline-size:0;padding-block:.1rem;display:grid}.toast-copy.svelte-1a0rutm strong:where(.svelte-1a0rutm){text-transform:capitalize}.toast-copy.svelte-1a0rutm small:where(.svelte-1a0rutm){opacity:.72}button.svelte-1a0rutm{min-block-size:44px;inline-size:44px;color:var(--theme-text);font:inherit;background:0 0;border:0;border-radius:.35rem;place-items:center;padding:0;font-size:1.5rem;display:grid}button.svelte-1a0rutm:hover{background:var(--theme-control-hover)}@media (width<=30rem){.toast-viewport.svelte-1a0rutm{max-block-size:none;inline-size:100%;margin-block:0 .75rem;position:static}.toast.svelte-1a0rutm{grid-template-columns:minmax(0,1fr) 44px;gap:.25rem;max-block-size:5rem;padding:.35rem;overflow-y:auto}.toast-symbol.svelte-1a0rutm{display:none}.toast-copy.svelte-1a0rutm strong:where(.svelte-1a0rutm){clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;block-size:1px;inline-size:1px;padding:0;position:absolute;overflow:hidden}}@media (forced-colors:active){.toast.svelte-1a0rutm,.toast-symbol.svelte-1a0rutm{border-color:canvastext}}.evidence-page.svelte-1j55xyh{box-sizing:border-box;min-block-size:100dvh;inline-size:100%;padding:1rem 1rem 7rem}h1.svelte-1j55xyh{margin-block:0 .5rem}.evidence-composer.svelte-1j55xyh{position:fixed;inset-block-end:2.75rem;inset-inline:1rem}.evidence-prompt.svelte-1j55xyh{box-sizing:border-box;inline-size:100%;margin-block-start:.35rem;display:block}.evidence-nav.svelte-1j55xyh{padding:.5rem 1rem calc(.5rem + env(safe-area-inset-bottom));background:var(--theme-surface);border-block-start:1px solid var(--theme-border);grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;display:grid;position:fixed;inset-block-end:0;inset-inline:0}.evidence-nav.svelte-1j55xyh button:where(.svelte-1j55xyh){text-overflow:ellipsis;min-block-size:44px;min-inline-size:0;overflow:hidden}@media (width<=24rem){.evidence-page.svelte-1j55xyh{padding:.5rem .5rem 7rem}.evidence-composer.svelte-1j55xyh{inset-inline:.5rem}}.filesystem-tree.svelte-6z3q4v{box-sizing:border-box;overscroll-behavior:contain;scrollbar-gutter:stable;border:1px solid var(--theme-border);border-radius:.6rem;max-block-size:min(22rem,48vh);inline-size:100%;max-inline-size:100%;padding:.35rem;display:grid;overflow:clip auto}.tree-row.svelte-6z3q4v{min-inline-size:0;align-items:stretch;padding-inline-start:min(calc(var(--tree-level) * .75rem), 4.5rem);display:flex}.disclosure.svelte-6z3q4v,.disclosure-spacer.svelte-6z3q4v{flex:0 0 44px;min-block-size:44px;inline-size:44px}.disclosure.svelte-6z3q4v{color:inherit;font:inherit;background:0 0;border:0;border-radius:.35rem;place-items:center;padding:0;font-size:1.25rem;font-weight:700;display:grid}.disclosure.svelte-6z3q4v:hover{background:var(--theme-control-hover)}.tree-item.svelte-6z3q4v{min-block-size:44px;min-inline-size:0;color:inherit;font:inherit;text-align:start;background:0 0;border:1px solid #0000;border-radius:.35rem;flex:auto;align-items:center;gap:.5rem;padding:.3rem .5rem;display:flex;overflow:hidden}.tree-item.svelte-6z3q4v:hover{background:var(--theme-control-hover)}.tree-item.selected.svelte-6z3q4v{color:var(--theme-control-pressed-contrast);background:var(--theme-control-pressed);border-color:var(--theme-accent);font-weight:650}.tree-item[aria-disabled=true].svelte-6z3q4v{opacity:.58}.tree-item.repository.svelte-6z3q4v{border-inline-start-width:3px}.selection-mark.svelte-6z3q4v{text-align:center;flex:0 0 1rem;inline-size:1rem}.node-copy.svelte-6z3q4v{flex:auto;min-inline-size:0;display:grid}.node-name.svelte-6z3q4v,.node-path.svelte-6z3q4v{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;overflow:hidden}.node-path.svelte-6z3q4v{opacity:.72;font-size:.75em;font-weight:400}.repository-badge.svelte-6z3q4v{border:1px solid;border-radius:999px;flex:none;padding:.1rem .35rem;font-size:.72em;font-weight:700;line-height:1.2}@media (width<=24rem){.filesystem-tree.svelte-6z3q4v{padding:.2rem}.tree-row.svelte-6z3q4v{padding-inline-start:min(calc(var(--tree-level) * .25rem), 1.5rem)}.tree-item.svelte-6z3q4v{gap:.35rem;padding-inline:.35rem}.repository-badge.svelte-6z3q4v{display:none}}@media (forced-colors:active){.tree-item.selected.svelte-6z3q4v,.tree-item.repository.svelte-6z3q4v,.repository-badge.svelte-6z3q4v{border-color:canvastext}}.evidence-shell.svelte-1d6w4ti{box-sizing:border-box;inline-size:min(100%,48rem);min-inline-size:0;margin-inline:auto;padding:1rem}.eyebrow.svelte-1d6w4ti{letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:.8rem;font-weight:750}h1.svelte-1d6w4ti{margin-block:.25rem .5rem;font-size:clamp(1.35rem,6vw,2rem);line-height:1.15}.instructions.svelte-1d6w4ti{max-inline-size:42rem;margin-block:0 1rem}@media (width<=24rem){.evidence-shell.svelte-1d6w4ti{padding:.5rem}}.git-view.svelte-pudr3t{gap:1.5rem;inline-size:100%;min-inline-size:0;display:grid}.git-tree.svelte-pudr3t,.repository-details.svelte-pudr3t{min-inline-size:0}.section-heading.svelte-pudr3t h3:where(.svelte-pudr3t),.repository-details.svelte-pudr3t h3:where(.svelte-pudr3t){margin-block:0 .35rem}.section-heading.svelte-pudr3t p:where(.svelte-pudr3t){color:var(--theme-text-muted);margin-block:0 .75rem}.clone-form.svelte-pudr3t{gap:.35rem;min-inline-size:0;display:grid}.clone-controls.svelte-pudr3t{grid-template-columns:minmax(10rem,.45fr) minmax(0,1fr) auto;align-items:end;gap:.5rem;display:grid}.clone-field.svelte-pudr3t{gap:.35rem;min-inline-size:0;display:grid}.field-label.svelte-pudr3t{font-weight:600}.clone-destination.svelte-pudr3t output:where(.svelte-pudr3t){overflow-wrap:anywhere;border:1px solid var(--theme-border);border-radius:.35rem;min-block-size:2.75rem;padding:.65rem .75rem}.clone-controls.svelte-pudr3t button:where(.svelte-pudr3t){min-inline-size:5.75rem}.clone-form.svelte-pudr3t p:where(.svelte-pudr3t){color:var(--theme-text-muted);margin:0;font-size:.875rem}.clone-status.svelte-pudr3t{font-weight:600;color:var(--theme-info)!important}.git-overview.svelte-pudr3t{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:1rem;display:grid}.git-status.svelte-pudr3t p:where(.svelte-pudr3t){margin-block:.5rem}.git-actions.svelte-pudr3t{gap:.5rem;display:grid}.git-actions.svelte-pudr3t button:where(.svelte-pudr3t){min-inline-size:6rem}.commit-history.svelte-pudr3t{margin-block-start:2rem}.commit-history.svelte-pudr3t h3:where(.svelte-pudr3t){margin-block-end:.75rem}.commit-list.svelte-pudr3t{gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.commit-entry.svelte-pudr3t{border-block-end:1px solid var(--theme-border);gap:.35rem;min-inline-size:0;padding:.8rem 0;display:grid}.commit-subject.svelte-pudr3t,.commit-meta.svelte-pudr3t{gap:.65rem;min-inline-size:0;display:flex}.commit-subject.svelte-pudr3t{overflow-wrap:anywhere;align-items:baseline;font-weight:600}.commit-subject.svelte-pudr3t code:where(.svelte-pudr3t){color:var(--theme-text-muted);flex:none;font-size:.875em}.commit-meta.svelte-pudr3t{color:var(--theme-text-muted);flex-wrap:wrap;justify-content:space-between;font-size:.875rem}.commit-meta.svelte-pudr3t time:where(.svelte-pudr3t){overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%}@media (width<=28rem){.clone-controls.svelte-pudr3t{grid-template-columns:1fr}.clone-controls.svelte-pudr3t button:where(.svelte-pudr3t){inline-size:100%}}.plan-progress.svelte-hmxg46{gap:.5rem;min-inline-size:0;display:grid}.progress-heading.svelte-hmxg46{color:var(--theme-text-muted);font-variant-numeric:tabular-nums;justify-content:flex-end;font-size:.875rem;display:flex}progress.svelte-hmxg46{block-size:.5rem;inline-size:100%;accent-color:var(--theme-accent)}.step-markers.svelte-hmxg46{flex-wrap:wrap;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}.step-markers.svelte-hmxg46 li:where(.svelte-hmxg46){border:1px solid var(--theme-border);border-radius:var(--theme-radius);min-inline-size:0;color:var(--theme-text-muted);background:var(--theme-surface);align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1.2;display:inline-flex}.step-markers.svelte-hmxg46 li[data-state=DONE]:where(.svelte-hmxg46){color:var(--theme-control-pressed-contrast);background:var(--theme-control-pressed);border-color:var(--theme-control-pressed)}.step-markers.svelte-hmxg46 li[data-state=WIP]:where(.svelte-hmxg46){color:var(--theme-text);border-color:var(--theme-accent);font-weight:700}.step-markers.svelte-hmxg46 li[aria-current=step]:where(.svelte-hmxg46){outline:2px solid var(--theme-accent);outline-offset:1px}.position.svelte-hmxg46{font-variant-numeric:tabular-nums;font-weight:700}.compact.svelte-hmxg46{gap:.25rem}.compact.svelte-hmxg46 .progress-heading:where(.svelte-hmxg46){font-size:.6875rem}.compact.svelte-hmxg46 progress:where(.svelte-hmxg46){block-size:.375rem}.wip-steps.svelte-hmxg46{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.wip-steps.svelte-hmxg46 li:where(.svelte-hmxg46){grid-template-columns:max-content minmax(0,1fr);align-items:baseline;gap:.125rem .4rem;min-inline-size:0;font-size:.625rem;display:grid}.wip-position.svelte-hmxg46{border:1px solid var(--theme-accent);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;grid-row:1/span 2;align-self:start;padding:.125rem .25rem;font-weight:700;line-height:1.2}.wip-title.svelte-hmxg46{overflow-wrap:anywhere;min-inline-size:0;color:var(--theme-text);font-weight:700}.wip-effort.svelte-hmxg46{color:var(--theme-text-muted)}.plan.svelte-3rmyvg{overflow-wrap:anywhere;min-inline-size:0}header.svelte-3rmyvg{justify-content:space-between;align-items:start;gap:1rem;display:flex}h2.svelte-3rmyvg,p.svelte-3rmyvg{margin-block:.4rem}ol.svelte-3rmyvg{padding-inline-start:1.25rem}details.svelte-3rmyvg{margin-block:.5rem}summary.svelte-3rmyvg{cursor:pointer;gap:.2rem;display:grid}.measurement.svelte-3rmyvg{color:var(--muted,currentColor);font-variant-numeric:tabular-nums}.position.svelte-3rmyvg{color:var(--theme-text-muted,currentColor);font-variant-numeric:tabular-nums}.metadata.svelte-3rmyvg{gap:.25rem;display:grid}.metadata.svelte-3rmyvg div:where(.svelte-3rmyvg){gap:.5rem;display:flex}.metadata.svelte-3rmyvg dd:where(.svelte-3rmyvg){margin:0}.close.svelte-3rmyvg{flex:none;block-size:2.75rem;inline-size:2.75rem;font-size:1.5rem}button.svelte-3rmyvg:focus-visible,summary.svelte-3rmyvg:focus-visible{outline-offset:2px;outline:3px solid}@media (prefers-reduced-motion:reduce){.svelte-3rmyvg{scroll-behavior:auto}}.org-document.svelte-h7gaqo{overflow-wrap:anywhere;gap:.85rem;min-inline-size:0;display:grid}header.svelte-h7gaqo,.section-heading.svelte-h7gaqo{justify-content:space-between;align-items:flex-start;gap:.65rem;display:flex}header.svelte-h7gaqo h2:where(.svelte-h7gaqo),.section-heading.svelte-h7gaqo :is(h3:where(.svelte-h7gaqo),h4:where(.svelte-h7gaqo)),p.svelte-h7gaqo,dl.svelte-h7gaqo,dd.svelte-h7gaqo{margin:0}code.svelte-h7gaqo{font:inherit;color:var(--theme-text-muted)}.close.svelte-h7gaqo{flex:none;min-inline-size:2.5rem;font-size:1.35rem;line-height:1}.metadata.svelte-h7gaqo,.descriptions.svelte-h7gaqo,.properties.svelte-h7gaqo dl:where(.svelte-h7gaqo){gap:.4rem;display:grid}.metadata.svelte-h7gaqo div:where(.svelte-h7gaqo),.descriptions.svelte-h7gaqo div:where(.svelte-h7gaqo),.properties.svelte-h7gaqo dl:where(.svelte-h7gaqo) div:where(.svelte-h7gaqo){grid-template-columns:minmax(6rem,.3fr) minmax(0,1fr);gap:.65rem;display:grid}dt.svelte-h7gaqo{font-weight:700}.sections.svelte-h7gaqo{gap:.65rem;display:grid}.org-section.svelte-h7gaqo{background:color-mix(in srgb, var(--theme-surface) 82%, transparent);border:1px solid var(--theme-border);border-inline-start:.3rem solid var(--theme-accent);border-radius:.65rem;gap:.55rem;margin-inline-start:min(calc(var(--org-depth) * .8rem), 2.4rem);padding:.8rem;display:grid}.section-heading.svelte-h7gaqo{flex-wrap:wrap;justify-content:flex-start}.section-heading.svelte-h7gaqo :is(h3:where(.svelte-h7gaqo),h4:where(.svelte-h7gaqo)){flex:14rem}.state.svelte-h7gaqo,.priority.svelte-h7gaqo{border:1px solid;border-radius:999px;padding:.15rem .45rem;font-size:.8rem;font-weight:700}.state-done.svelte-h7gaqo{color:var(--theme-success)}.state-wip.svelte-h7gaqo{color:var(--theme-accent)}.list-item.svelte-h7gaqo{padding-inline-start:.75rem}.properties.svelte-h7gaqo summary:where(.svelte-h7gaqo){cursor:pointer;font-weight:700}.properties.svelte-h7gaqo dl:where(.svelte-h7gaqo){margin-block-start:.5rem}button.svelte-h7gaqo:focus-visible,summary.svelte-h7gaqo:focus-visible{outline-offset:2px;outline:3px solid}@media (width<=32rem){.metadata.svelte-h7gaqo div:where(.svelte-h7gaqo),.descriptions.svelte-h7gaqo div:where(.svelte-h7gaqo),.properties.svelte-h7gaqo dl:where(.svelte-h7gaqo) div:where(.svelte-h7gaqo){grid-template-columns:1fr;gap:.1rem}.org-section.svelte-h7gaqo{margin-inline-start:min(calc(var(--org-depth) * .35rem), 1rem)}}.plans.svelte-x2ko9l{overflow-wrap:anywhere;min-inline-size:0}h2.svelte-x2ko9l{margin-block:.4rem}.scope.svelte-x2ko9l{margin-block:0 .75rem}ul.svelte-x2ko9l{gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.plans.svelte-x2ko9l button:where(.svelte-x2ko9l){text-align:start;gap:.2rem;min-block-size:2.75rem;inline-size:100%;padding:.75rem;display:grid}button.svelte-x2ko9l:focus-visible{outline-offset:2px;outline:3px solid}code.svelte-x2ko9l{font:inherit}.liveness.svelte-2szxr9{color:var(--theme-text-muted);align-items:center;gap:.35rem;font-size:.875rem;display:inline-flex}.dot.svelte-2szxr9{background:currentColor;border-radius:50%;block-size:.55rem;inline-size:.55rem}.active.svelte-2szxr9 .dot:where(.svelte-2szxr9){color:var(--theme-accent);animation:1.6s ease-out infinite svelte-2szxr9-pulse}time.svelte-2szxr9{color:var(--theme-text-muted)}[data-state=attentionRequired].svelte-2szxr9,[data-state=safetyPaused].svelte-2szxr9,[data-state=disconnected].svelte-2szxr9{font-weight:700;text-decoration:underline}@keyframes svelte-2szxr9-pulse{50%{opacity:.35;transform:scale(.75)}}@media (prefers-reduced-motion:reduce){.active.svelte-2szxr9 .dot:where(.svelte-2szxr9){animation:none}}.session-list.svelte-hxb22h{gap:1rem;inline-size:100%;margin-block:0 1.5rem;padding-inline:0;list-style:none;display:grid}.current-session.svelte-hxb22h{outline:2px solid var(--theme-accent);outline-offset:2px}.managed-session.svelte-hxb22h{box-sizing:border-box;border:1px solid var(--theme-border);border-radius:.5rem;grid-template-columns:minmax(0,min(6rem,32%)) minmax(0,1fr);align-items:start;gap:.75rem;inline-size:100%;padding:.75rem;display:grid}.open-session.svelte-hxb22h{border-color:var(--theme-accent);background:var(--theme-control-hover)}.session-details.svelte-hxb22h{min-inline-size:0}.workspace-path.svelte-hxb22h{overflow-wrap:anywhere}.profile-badge.svelte-hxb22h{background:var(--theme-control-pressed);color:var(--theme-control-pressed-contrast);overflow-wrap:anywhere;border-radius:999px;margin-block-start:.35rem;padding:.15rem .4rem;font-size:.875rem;display:inline-block}.session-verdict.svelte-hxb22h{color:var(--theme-text-muted);margin-block-end:.45rem}.session-verdict.svelte-hxb22h summary:where(.svelte-hxb22h){cursor:pointer;color:var(--theme-text);align-items:center;gap:.35rem;font-weight:700;display:inline-flex}.session-verdict.svelte-hxb22h p:where(.svelte-hxb22h){max-inline-size:65ch;margin:.35rem 0 0}.verdict-dot.svelte-hxb22h{background:currentColor;border-radius:50%;block-size:.55rem;inline-size:.55rem}.verdict-dot.live.svelte-hxb22h{color:var(--theme-accent);animation:1.6s ease-out infinite svelte-hxb22h-status-pulse}@keyframes svelte-hxb22h-status-pulse{50%{opacity:.35;transform:scale(.75)}}.org-plan-metadata.svelte-hxb22h{gap:.125rem;margin-block-start:.35rem;display:grid}.org-plan-title.svelte-hxb22h{font-weight:600}.org-plan-filename.svelte-hxb22h{overflow-wrap:anywhere;color:var(--theme-text-muted)}.session-actions.svelte-hxb22h{flex-direction:column;gap:.5rem;min-inline-size:0;display:flex}.session-actions.svelte-hxb22h>*{inline-size:100%}.session-plan-progress.svelte-hxb22h{min-inline-size:0;margin-block-start:.5rem}.recent-session.svelte-hxb22h{grid-template-columns:minmax(0,1fr) max-content;align-items:start;gap:.75rem;display:grid}.session-base.svelte-hxb22h{gap:.65rem;min-inline-size:0;margin-block:1rem;display:grid}.session-base-heading.svelte-hxb22h h3:where(.svelte-hxb22h),.session-base-heading.svelte-hxb22h p:where(.svelte-hxb22h){margin:0}.session-base-heading.svelte-hxb22h p:where(.svelte-hxb22h){margin-block-start:.25rem}.session-settings.svelte-hxb22h{gap:.5rem;min-inline-size:0;margin-block-end:.75rem;display:grid}.session-setting-labels.svelte-hxb22h,.session-setting-controls.svelte-hxb22h{grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem;min-inline-size:0;display:grid}.session-setting-labels.svelte-hxb22h label:where(.svelte-hxb22h){overflow-wrap:anywhere;min-inline-size:0}.session-setting-controls.svelte-hxb22h select:where(.svelte-hxb22h){text-overflow:ellipsis;inline-size:100%;min-inline-size:0;max-inline-size:100%;overflow:hidden}.session-secondary-actions.svelte-hxb22h,.model-control.svelte-hxb22h{align-items:center;gap:.5rem;min-inline-size:0;display:flex}.session-secondary-actions.svelte-hxb22h{flex-wrap:wrap}.model-control.svelte-hxb22h{margin-inline-start:auto}.skills-profile-error.svelte-hxb22h{color:var(--theme-error);margin:0;font-size:.875rem}@media (width<=28rem){.model-control.svelte-hxb22h{margin-inline-start:0}}@media (prefers-reduced-motion:reduce){.verdict-dot.live.svelte-hxb22h{animation:none}}.skills-view.svelte-dg6sjj{min-inline-size:0;padding:1rem max(1rem, env(safe-area-inset-right)) calc(5rem + env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left))}.intro.svelte-dg6sjj,.save-intent.svelte-dg6sjj,.summary.svelte-dg6sjj{max-inline-size:70ch}.missing-skills.svelte-dg6sjj{border:1px solid var(--theme-warning);border-radius:.5rem;margin-block:1rem;padding:.75rem}.missing-skills.svelte-dg6sjj h3:where(.svelte-dg6sjj),.missing-skills.svelte-dg6sjj p:where(.svelte-dg6sjj){margin-block-start:0}.missing-skills.svelte-dg6sjj ul:where(.svelte-dg6sjj){gap:.65rem;margin-block-end:0;padding:0;list-style:none;display:grid}.missing-skills.svelte-dg6sjj li:where(.svelte-dg6sjj){border-block-start:1px solid var(--theme-border);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.75rem;padding-block-start:.65rem;display:grid}.missing-skills.svelte-dg6sjj li:where(.svelte-dg6sjj)>div:where(.svelte-dg6sjj){gap:.2rem;min-inline-size:0;display:grid}.missing-state.svelte-dg6sjj{color:var(--theme-warning);font-weight:650}.remove-missing.svelte-dg6sjj{inline-size:auto;min-inline-size:6rem}form.svelte-dg6sjj,.field-grid.svelte-dg6sjj{gap:.65rem;display:grid}.field-grid.svelte-dg6sjj{grid-template-columns:minmax(0,1fr)}label.svelte-dg6sjj{font-weight:650}select.svelte-dg6sjj,input.svelte-dg6sjj,button.svelte-dg6sjj{box-sizing:border-box;min-block-size:3rem;inline-size:100%;font:inherit}dialog.svelte-dg6sjj{max-inline-size:min(100% - 2rem,32rem)}.dialog-actions.svelte-dg6sjj{gap:.65rem;display:grid}input.svelte-dg6sjj,select.svelte-dg6sjj{padding-inline:.7rem;font-size:1rem}button.svelte-dg6sjj{padding-inline:1rem}.profile-actions.svelte-dg6sjj{grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem;display:grid}.skills-toolbar.svelte-dg6sjj{flex-wrap:wrap;align-items:center;gap:.65rem;margin-block:1rem;display:flex}.refresh-skills.svelte-dg6sjj{flex:none;min-block-size:2.25rem;inline-size:auto;padding-inline:.65rem}.refresh-skills.svelte-dg6sjj span:where(.svelte-dg6sjj):first-child{font-size:1.2em;line-height:1}.summary.svelte-dg6sjj{overflow-wrap:anywhere;min-inline-size:0;margin:0}.notice.svelte-dg6sjj{border-inline-start:.3rem solid var(--theme-warning);color:var(--theme-warning);padding-inline-start:.7rem}.error.svelte-dg6sjj{border-inline-start:.3rem solid var(--theme-error);color:var(--theme-error);padding-inline-start:.7rem}.skill-list.svelte-dg6sjj{gap:.75rem;padding:0;list-style:none;display:grid}.skill-card.svelte-dg6sjj{border:1px solid var(--theme-border);border-radius:.5rem;min-inline-size:0;padding:.75rem;scroll-margin-block:1rem}.skill-toggle.svelte-dg6sjj{flex-wrap:wrap;align-items:center;gap:.65rem;min-block-size:3rem;display:flex}.skill-toggle.svelte-dg6sjj>span:where(.svelte-dg6sjj){overflow-wrap:anywhere;min-inline-size:0}.skill-toggle.svelte-dg6sjj input:where(.svelte-dg6sjj){flex:none;min-block-size:1.25rem;inline-size:1.25rem}.state.svelte-dg6sjj{margin-inline-start:auto;font-weight:500}.skill-details.svelte-dg6sjj{overflow-wrap:anywhere;padding-inline-start:1.9rem}.skill-details.svelte-dg6sjj>:where(.svelte-dg6sjj):first-child{margin-block-start:.25rem}.skill-details.svelte-dg6sjj>:where(.svelte-dg6sjj):last-child{margin-block-end:0}dl.svelte-dg6sjj{grid-template-columns:minmax(7rem,auto) minmax(0,1fr);gap:.45rem .75rem;display:grid}dt.svelte-dg6sjj{font-weight:650}dd.svelte-dg6sjj{min-inline-size:0;margin:0}dd.svelte-dg6sjj ul:where(.svelte-dg6sjj){margin:0;padding-inline-start:1.25rem}.path.svelte-dg6sjj{overflow-wrap:anywhere}.svelte-dg6sjj:where(button:where(.svelte-dg6sjj),input:where(.svelte-dg6sjj),select:where(.svelte-dg6sjj)):focus-visible{outline:3px solid var(--theme-focus);outline-offset:2px}@media (width>=42rem){.field-grid.svelte-dg6sjj{grid-template-columns:minmax(10rem,1fr) minmax(0,2fr);align-items:center}}@media (width<=30rem){.missing-skills.svelte-dg6sjj li:where(.svelte-dg6sjj){grid-template-columns:1fr}.remove-missing.svelte-dg6sjj{inline-size:100%}dl.svelte-dg6sjj{grid-template-columns:1fr;gap:.2rem}}.devices.svelte-1nygetn{max-inline-size:48rem;color:var(--theme-text);margin:auto;padding:1rem}.devices.svelte-1nygetn header:where(.svelte-1nygetn){align-items:center;gap:1rem;display:flex}.devices.svelte-1nygetn h1:where(.svelte-1nygetn),.devices.svelte-1nygetn h2:where(.svelte-1nygetn){font-family:var(--theme-font-display)}.devices.svelte-1nygetn ul:where(.svelte-1nygetn){padding:0;list-style:none}.devices.svelte-1nygetn li:where(.svelte-1nygetn),section.svelte-1nygetn{background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 .25rem .75rem var(--theme-shadow);margin-block:1rem;padding:1rem}.devices.svelte-1nygetn form:where(.svelte-1nygetn){gap:.65rem;display:grid}.devices.svelte-1nygetn p:where(.svelte-1nygetn){overflow-wrap:anywhere;margin:0}.devices.svelte-1nygetn input:where(.svelte-1nygetn),.devices.svelte-1nygetn textarea:where(.svelte-1nygetn),.devices.svelte-1nygetn button:where(.svelte-1nygetn){min-block-size:44px;font:inherit}.devices.svelte-1nygetn input:where(.svelte-1nygetn),.devices.svelte-1nygetn textarea:where(.svelte-1nygetn){min-inline-size:0;padding:.45rem}.devices.svelte-1nygetn textarea:where(.svelte-1nygetn){box-sizing:border-box;overflow-wrap:anywhere;resize:vertical;inline-size:100%;font-family:var(--theme-font-code)}.devices.svelte-1nygetn .actions:where(.svelte-1nygetn){flex-wrap:wrap;gap:.5rem;display:flex}.devices.svelte-1nygetn .actions:where(.svelte-1nygetn) button:where(.svelte-1nygetn){flex:11rem}.devices.svelte-1nygetn img:where(.svelte-1nygetn){background:var(--theme-canvas);inline-size:12rem;max-inline-size:100%;margin-block:.75rem;padding:.5rem;display:block}.feedback.svelte-1nygetn{color:var(--theme-error);font-weight:700}dialog.svelte-1nygetn{max-inline-size:min(32rem,100% - 2rem);color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 .5rem 1.5rem var(--theme-shadow)}dialog.svelte-1nygetn h2:where(.svelte-1nygetn){font-family:var(--theme-font-display)}dialog.svelte-1nygetn form:where(.svelte-1nygetn){flex-wrap:wrap;gap:.5rem;display:flex}@media (forced-colors:active){.devices.svelte-1nygetn li:where(.svelte-1nygetn),section.svelte-1nygetn,dialog.svelte-1nygetn{border-color:canvastext}}@media (prefers-reduced-motion:reduce){.svelte-1nygetn{transition-duration:.01ms!important;animation-duration:.01ms!important}}dialog.svelte-eu5bnq{box-sizing:border-box;max-block-size:calc(100dvh - 1rem);inline-size:min(52rem,100vw - 1rem);max-inline-size:none;color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 .75rem 2rem var(--theme-shadow);padding:0}dialog.svelte-eu5bnq::backdrop{background:color-mix(in srgb, var(--theme-canvas) 70%, transparent)}.scratchpad-shell.svelte-eu5bnq{box-sizing:border-box;min-block-size:min(42rem,100dvh - 1rem);max-block-size:calc(100dvh - 1rem);padding:max(1rem, env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) max(1rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left));grid-template-rows:auto auto minmax(12rem,1fr) auto;gap:.75rem;display:grid}header.svelte-eu5bnq{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}h2.svelte-eu5bnq,p.svelte-eu5bnq{margin:0}h2.svelte-eu5bnq{font-family:var(--theme-font-display)}header.svelte-eu5bnq p:where(.svelte-eu5bnq){color:var(--theme-text-muted)}label.svelte-eu5bnq{font-weight:700}textarea.svelte-eu5bnq{box-sizing:border-box;resize:none;min-block-size:12rem;inline-size:100%;min-inline-size:0;color:var(--theme-text);background:var(--theme-canvas);border:1px solid var(--theme-border);border-radius:calc(var(--theme-radius) / 2);font:1rem/1.45 var(--theme-font-code);tab-size:2;padding:.75rem}button.svelte-eu5bnq{min-block-size:44px;font:inherit}.close.svelte-eu5bnq{inline-size:44px;color:inherit;background:0 0;border:0;flex:none;padding:0;font-size:2rem;line-height:1}.actions.svelte-eu5bnq{flex-wrap:wrap;gap:.5rem;display:flex}.actions.svelte-eu5bnq button:where(.svelte-eu5bnq){flex:7rem}.danger.svelte-eu5bnq{color:var(--theme-error)}.clear-confirmation.svelte-eu5bnq{border:1px solid var(--theme-error);border-radius:calc(var(--theme-radius) / 2);gap:.5rem;padding:.75rem;display:grid}.feedback.svelte-eu5bnq{color:var(--theme-error);font-weight:700}@media (width<=32rem){dialog.svelte-eu5bnq{border-inline:0;border-radius:0;max-block-size:100dvh;inline-size:100vw}.scratchpad-shell.svelte-eu5bnq{min-block-size:100dvh;max-block-size:100dvh}}@media (forced-colors:active){dialog.svelte-eu5bnq,textarea.svelte-eu5bnq,.clear-confirmation.svelte-eu5bnq{border-color:canvastext}}.file-tree.svelte-am0nvt{gap:.2rem;min-inline-size:0;display:grid;overflow-x:clip}.tree-row.svelte-am0nvt{min-inline-size:0;flex-wrap:wrap;padding-inline-start:min(calc((var(--level) - 1) * .75rem), 4rem);display:flex}button.svelte-am0nvt{overflow-wrap:anywhere;min-block-size:2.75rem;min-inline-size:2.75rem}.treeitem.svelte-am0nvt{text-align:start;overflow-wrap:anywhere;flex:1;min-block-size:2.75rem;min-inline-size:2.75rem}.tree-label.svelte-am0nvt{flex:1}.disclosure.svelte-am0nvt{flex:0 0 2.75rem}.unsupported.svelte-am0nvt{color:var(--theme-text-muted);font-size:.875rem}dialog.svelte-qx7639{box-sizing:border-box;border:1px solid var(--theme-border);max-block-size:100dvh;inline-size:min(100%,52rem);max-inline-size:100%;color:var(--theme-text);background:var(--theme-surface);border-radius:.75rem;padding:0;overflow-x:hidden}dialog.svelte-qx7639::backdrop{background:#0000008c}.file-browser-shell.svelte-qx7639{gap:1rem;max-block-size:calc(100dvh - 1rem);min-inline-size:0;padding:1rem;display:grid;overflow:hidden auto}header.svelte-qx7639{justify-content:space-between;align-items:start;gap:1rem;display:flex}header.svelte-qx7639>div:where(.svelte-qx7639),.picker.svelte-qx7639{min-inline-size:0}h2.svelte-qx7639,p.svelte-qx7639{overflow-wrap:anywhere;margin:0}header.svelte-qx7639 p:where(.svelte-qx7639){color:var(--theme-text-muted);margin-block-start:.35rem}button.svelte-qx7639{min-block-size:2.75rem;min-inline-size:2.75rem}.close.svelte-qx7639{font-size:1.5rem;line-height:1}.browser-actions.svelte-qx7639{flex-wrap:wrap;gap:.5rem;display:flex}.upload-actions.svelte-qx7639{gap:.5rem;display:grid}.upload-actions.svelte-qx7639 p:where(.svelte-qx7639){color:var(--theme-text-muted)}.visually-hidden.svelte-qx7639{clip:rect(0 0 0 0);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.picker.svelte-qx7639{border:1px solid var(--theme-border);border-radius:.5rem;gap:.5rem;padding:.75rem;display:grid}@media (width<=40rem){dialog.svelte-qx7639{border-radius:0;min-block-size:100dvh;inline-size:100%}.file-browser-shell.svelte-qx7639{max-block-size:100dvh}}.chat-view.svelte-1d2e8zz{margin-inline:calc(.25rem - var(--page-inline-padding))}.detached-chat-header.svelte-1d2e8zz{z-index:2;box-sizing:border-box;inline-size:100vw;margin:calc(-1rem - env(safe-area-inset-top)) calc(50% - 50vw) 1.5rem;padding:calc(1rem + env(safe-area-inset-top)) max(1rem, env(safe-area-inset-right)) .75rem max(1rem, env(safe-area-inset-left));background:color-mix(in srgb, var(--theme-page) 88%, transparent);border-block-end:1px solid color-mix(in srgb, var(--theme-border) 72%, transparent);box-shadow:0 .35rem 1rem color-mix(in srgb, var(--theme-shadow) 28%, transparent);-webkit-backdrop-filter:blur(.75rem)saturate(1.2);backdrop-filter:blur(.75rem)saturate(1.2);justify-content:space-between;align-items:center;gap:1rem;display:flex;position:sticky;inset-block-start:0}.detached-chat-context.svelte-1d2e8zz{align-items:baseline;gap:.75rem;min-inline-size:0;display:flex}.detached-chat-context.svelte-1d2e8zz span:where(.svelte-1d2e8zz){font-family:var(--theme-font-display);flex:none;font-weight:700}.detached-chat-context.svelte-1d2e8zz strong:where(.svelte-1d2e8zz){text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;font-size:.875rem;font-weight:500;overflow:hidden}.detached-chat-model.svelte-1d2e8zz{color:var(--theme-text-muted);font-family:var(--theme-font-code);flex:none;font-size:.75rem}main.svelte-1d2e8zz:has(.detached-chat-header:where(.svelte-1d2e8zz)){padding-block-end:max(1rem, env(safe-area-inset-bottom))}main.svelte-1d2e8zz:has(.detached-chat-header:where(.svelte-1d2e8zz)) .chat-tail:where(.svelte-1d2e8zz){scroll-margin-block-end:max(1rem, env(safe-area-inset-bottom))}@media (width<=32rem){.detached-chat-model.svelte-1d2e8zz{display:none}}.chat-tail.svelte-1d2e8zz{block-size:1px;scroll-margin-block-end:var(--bottom-navigation-clearance)}.chat-controls.svelte-1d2e8zz{flex-wrap:nowrap;align-items:flex-start;gap:.35rem;min-inline-size:0;margin-block-start:.625rem;display:flex}.chat-controls.svelte-1d2e8zz>*{flex:1 1 0;min-inline-size:0}.swipe-surface.svelte-1d2e8zz{touch-action:pan-y}.evidence-mode.svelte-1d2e8zz{box-sizing:border-box;inline-size:100%;min-inline-size:0;padding:0}.session-profile-manager-header.svelte-1d2e8zz{box-sizing:border-box;inline-size:100%;min-inline-size:0;padding-inline:max(1rem, env(safe-area-inset-left)) max(1rem, env(safe-area-inset-right));justify-content:space-between;align-items:safe center;gap:1rem;display:flex}.session-profile-manager-header.svelte-1d2e8zz h2:where(.svelte-1d2e8zz){overflow-wrap:anywhere;min-inline-size:0;margin:0}.close-profile-manager.svelte-1d2e8zz{min-block-size:2.5rem;inline-size:2.5rem;color:inherit;background:0 0;border:0;flex:none;padding:0;font-size:2rem;line-height:1}.enrollment.svelte-1c5qcm6{box-sizing:border-box;inline-size:100%;max-inline-size:none;background:var(--theme-page);min-height:100dvh;color:var(--theme-text);place-items:center;margin:0;padding:1rem;display:grid}.card.svelte-1c5qcm6{box-sizing:border-box;background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:calc(var(--theme-radius) * 2);width:min(100%,42rem);box-shadow:0 .5rem 1.5rem var(--theme-shadow);padding:clamp(1.25rem,5vw,3rem)}.brand.svelte-1c5qcm6{color:var(--theme-info);font-family:var(--theme-font-display);letter-spacing:.08em;text-transform:uppercase;font-weight:700}h1.svelte-1c5qcm6{font-family:var(--theme-font-display);margin-block:.25rem 1rem;font-size:clamp(1.8rem,7vw,3rem)}.warning.svelte-1c5qcm6{border-left:.3rem solid var(--theme-warning);background:var(--theme-surface-subtle);padding:1rem}label.svelte-1c5qcm6,input.svelte-1c5qcm6{box-sizing:border-box;width:100%;display:block}label.svelte-1c5qcm6{margin-top:1.5rem;font-weight:700}input.svelte-1c5qcm6,button.svelte-1c5qcm6{min-height:44px;font:inherit}input.svelte-1c5qcm6{margin-top:.4rem;padding:.6rem}button.svelte-1c5qcm6{cursor:pointer;border-radius:.4rem;margin-top:1rem;padding:.55rem 1rem}.authorize.svelte-1c5qcm6{background:var(--theme-accent);width:100%;color:var(--theme-accent-contrast);border-color:var(--theme-accent);font-weight:700}.feedback.svelte-1c5qcm6{color:var(--theme-info);font-weight:700}.error.svelte-1c5qcm6{color:var(--theme-error);font-weight:700}.handoff.svelte-1c5qcm6{border-top:1px solid var(--theme-border);grid-template-columns:minmax(0,1fr);gap:1rem;margin-top:2rem;padding-top:1.5rem;display:grid}.handoff.svelte-1c5qcm6 img:where(.svelte-1c5qcm6){background:var(--theme-canvas);width:12rem;max-width:100%;padding:.5rem}a.svelte-1c5qcm6{color:var(--theme-info);overflow-wrap:anywhere}.copy.svelte-1c5qcm6{display:block}@media (width>=48rem){.handoff.svelte-1c5qcm6{grid-template-columns:12rem minmax(0,1fr);align-items:start}}@media (prefers-reduced-motion:reduce){.svelte-1c5qcm6,.svelte-1c5qcm6:before,.svelte-1c5qcm6:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}.login.svelte-1byekj9{box-sizing:border-box;inline-size:100%;max-inline-size:none;background:var(--theme-page);min-height:100dvh;color:var(--theme-text);place-items:center;margin:0;padding:1rem;display:grid}.card.svelte-1byekj9{box-sizing:border-box;background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:calc(var(--theme-radius) * 2);width:min(100%,32rem);box-shadow:0 .5rem 1.5rem var(--theme-shadow);padding:clamp(1.25rem,5vw,3rem)}.brand.svelte-1byekj9{color:var(--theme-info);font-family:var(--theme-font-display);letter-spacing:.08em;text-transform:uppercase;font-weight:700}h1.svelte-1byekj9{font-family:var(--theme-font-display);margin-block:.25rem 1rem;font-size:clamp(1.8rem,7vw,3rem)}.sign-in.svelte-1byekj9{border-radius:var(--theme-radius);background:var(--theme-accent);width:100%;min-height:44px;color:var(--theme-accent-contrast);border-color:var(--theme-accent);font:inherit;margin-top:1rem;padding:.55rem 1rem;font-weight:700}.error.svelte-1byekj9{color:var(--theme-error);font-weight:700}@media (prefers-reduced-motion:reduce){.svelte-1byekj9,.svelte-1byekj9:before,.svelte-1byekj9:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}.auth-gate.svelte-y74n0s{max-width:32rem;color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 .5rem 1.5rem var(--theme-shadow);margin:12vh auto;padding:2rem}.auth-gate.svelte-y74n0s h1:where(.svelte-y74n0s){font-family:var(--theme-font-display)}button.svelte-y74n0s{margin-right:.75rem}@font-face{font-family:Syne;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/syne-greek-600-normal-BpFII5Ja.woff2)format("woff2"),url(/assets/syne-greek-600-normal-BJs4kvyH.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Syne;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/syne-latin-ext-600-normal-ZnizrDKU.woff2)format("woff2"),url(/assets/syne-latin-ext-600-normal-DEzBMW8B.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Syne;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/syne-latin-600-normal-BiwQbQXw.woff2)format("woff2"),url(/assets/syne-latin-600-normal-dRu9QuIh.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-ext-400-normal-C_uLvvQ5.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-ext-400-normal-Bh0R7Dhr.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-vietnamese-400-normal-ByoDsISC.woff2)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--theme-font-body:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--theme-font-display:"Syne", var(--theme-font-body);--theme-font-code:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--theme-motion-fast:.12s;--theme-radius:.5rem}:root[data-theme=minimal-light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--theme-page:#fff;--theme-canvas:#fff;--theme-surface:#fff;--theme-surface-subtle:#f3f4f6;--theme-text:#171717;--theme-text-muted:#525252;--theme-border:#525252;--theme-focus:#005fcc;--theme-accent:#171717;--theme-accent-contrast:#fff;--theme-control-hover:#e5e7eb;--theme-control-pressed:#262626;--theme-control-pressed-contrast:#fff;--theme-control-disabled:#737373;--theme-success:#166534;--theme-warning:#854d0e;--theme-error:#b91c1c;--theme-info:#1d4ed8;--theme-code:#f3f4f6;--theme-shadow:#17171740}:root[data-theme=minimal-dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--theme-page:#171717;--theme-canvas:#171717;--theme-surface:#262626;--theme-surface-subtle:#404040;--theme-text:#fafafa;--theme-text-muted:#d4d4d4;--theme-border:#a3a3a3;--theme-focus:#93c5fd;--theme-accent:#fafafa;--theme-accent-contrast:#171717;--theme-control-hover:#404040;--theme-control-pressed:#fafafa;--theme-control-pressed-contrast:#171717;--theme-control-disabled:#a3a3a3;--theme-success:#86efac;--theme-warning:#fcd34d;--theme-error:#fca5a5;--theme-info:#93c5fd;--theme-code:#262626;--theme-shadow:#00000080}:root[data-theme=dyne-org]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--theme-page:#f4f0e8;--theme-canvas:#fffdf8;--theme-surface:#fffaf1;--theme-surface-subtle:#eee6d8;--theme-text:#171411;--theme-text-muted:#5f564c;--theme-border:#75695b;--theme-focus:#5e2ca5;--theme-accent:#c7460c;--theme-accent-contrast:#fffdf8;--theme-control-hover:#f4ddcf;--theme-control-pressed:#bd3d0d;--theme-control-pressed-contrast:#fffdf8;--theme-control-disabled:#93887b;--theme-success:#287a50;--theme-warning:#9a5a00;--theme-error:#b42318;--theme-info:#5e2ca5;--theme-code:#f1e9db;--theme-shadow:#17141138}:root{--bottom-navigation-clearance:calc(4rem + env(safe-area-inset-bottom));--sticky-header-clearance:calc(5rem + env(safe-area-inset-top));--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--theme-font-body)}body{min-block-size:100dvh;color:var(--theme-text);background:var(--theme-page);accent-color:var(--theme-accent);margin:0}.visually-hidden{clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important;block-size:1px!important;inline-size:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}main{--page-inline-padding:1rem;box-sizing:border-box;min-block-size:100dvh;max-inline-size:42rem;padding:calc(1rem + env(safe-area-inset-top)) var(--page-inline-padding) calc(var(--bottom-navigation-clearance) + 1rem);margin-inline:auto}@media (width<=24rem){main{--page-inline-padding:.5rem}.bottom-navigation.bottom-navigation button{font-size:max(.453125rem,13px)}}.app-header{z-index:2;box-sizing:border-box;inline-size:100vw;margin:calc(-1rem - env(safe-area-inset-top)) calc(50% - 50vw) 1.5rem;padding:calc(1rem + env(safe-area-inset-top)) calc(var(--page-inline-padding) - .25rem) .75rem;background:var(--theme-page);background:color-mix(in srgb, var(--theme-page) 72%, transparent);-webkit-backdrop-filter:blur(.75rem)saturate(1.2);backdrop-filter:blur(.75rem)saturate(1.2);border-block-end:1px solid color-mix(in srgb, var(--theme-border) 72%, transparent);box-shadow:0 .35rem 1rem color-mix(in srgb, var(--theme-shadow) 28%, transparent);flex-wrap:nowrap;justify-content:space-between;align-items:center;gap:.5rem;display:flex;position:sticky;inset-block-start:0}.app-header [role=status]{overflow-wrap:anywhere;text-align:end;min-inline-size:0;margin:0}.brand{flex:none;align-items:center;gap:.4rem;display:flex}.header-actions{flex:none;align-items:center;gap:.25rem;margin-inline-start:auto;display:flex}.weekly-quota{font-variant-numeric:tabular-nums;white-space:nowrap;font-size:.875rem}.menu-trigger{min-block-size:44px;inline-size:44px;color:inherit;background:0 0;border:0;flex:none;place-items:center;padding:0;display:grid}.menu-lines{gap:.25rem;inline-size:1.25rem;display:grid}.menu-lines span{box-sizing:border-box;background:currentColor;block-size:1px;display:block}.menu-lines span:first-child,.menu-lines span:nth-child(2),.menu-lines span:last-child{block-size:2px}@media (width<=28rem){.app-header [role=status]{flex-basis:100%;margin-inline-start:0}}.brand-icon{block-size:2rem;inline-size:2rem}.brand-logotype{block-size:auto;inline-size:6.25rem}.dark-asset,:root[data-logo-tone=light] .light-asset{display:none}:root[data-logo-tone=light] .dark-asset{display:initial}.configuration-panel{box-sizing:border-box;overscroll-behavior:contain;max-block-size:calc(100dvh - 5.5rem);min-inline-size:min(13rem,100vw - 2rem);max-inline-size:calc(100vw - 2rem);color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);box-shadow:0 .5rem 1.5rem var(--theme-shadow);padding:.75rem;position:fixed;inset:4.5rem 1rem auto auto;overflow-y:auto}.configuration-logo{block-size:auto;inline-size:4.5rem;margin-block-end:.5rem;margin-inline-start:auto;display:block}.appearance-control{align-items:center;gap:.5rem;min-inline-size:0;display:flex}.appearance-control span{font-family:var(--theme-font-display);letter-spacing:-.08em;font-weight:700}.appearance-control select{field-sizing:content;flex:auto;min-block-size:2.25rem;inline-size:auto;min-inline-size:0;max-inline-size:100%;padding-inline:.5rem}.bottom-navigation{z-index:2;padding:.25rem calc(.375rem + env(safe-area-inset-right)) calc(.25rem + env(safe-area-inset-bottom)) calc(.375rem + env(safe-area-inset-left));background:var(--theme-surface);background:color-mix(in srgb, var(--theme-surface) 72%, transparent);-webkit-backdrop-filter:blur(.75rem)saturate(1.2);backdrop-filter:blur(.75rem)saturate(1.2);border-block-start:1px solid var(--theme-border);box-shadow:0 -.35rem 1rem color-mix(in srgb, var(--theme-shadow) 28%, transparent);grid-template-columns:repeat(4,minmax(0,1fr));gap:max(.03125rem,1px);display:grid;position:fixed;inset-block-end:0;inset-inline:0}.bottom-navigation button{text-overflow:clip;white-space:nowrap;min-inline-size:0;max-inline-size:100%;transition:color var(--theme-motion-fast) ease, background-color var(--theme-motion-fast) ease, box-shadow var(--theme-motion-fast) ease;padding-inline:0;font-size:max(.453125rem,18px);overflow:hidden}.bottom-navigation button:hover:not(:disabled){background:var(--theme-control-hover)}.bottom-navigation button:active:not(:disabled){background:var(--theme-control-pressed);color:var(--theme-control-pressed-contrast)}.bottom-navigation button[aria-pressed=true]{color:var(--theme-accent-contrast);background:var(--theme-accent);box-shadow:inset 0 .2rem 0 color-mix(in srgb, var(--theme-accent-contrast) 25%, transparent);font-weight:700}.bottom-navigation button:disabled{color:var(--theme-control-disabled);cursor:not-allowed;opacity:.65}@media (width<=30rem){.brand-logotype{display:none!important}}button{min-block-size:44px;font:inherit;color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);cursor:pointer}button:hover:not(:disabled){background:var(--theme-control-hover)}button:active:not(:disabled){background:var(--theme-control-pressed);color:var(--theme-control-pressed-contrast)}button:disabled{color:var(--theme-control-disabled);cursor:not-allowed}.git-view button{scroll-margin-block:var(--sticky-header-clearance) var(--bottom-navigation-clearance)}input,select,textarea{box-sizing:border-box;min-block-size:44px;inline-size:100%;font:inherit;color:var(--theme-text);background:var(--theme-surface);border:1px solid var(--theme-border);border-radius:var(--theme-radius);font-size:max(1rem,16px)}input::placeholder,textarea::placeholder{color:var(--theme-text-muted)}:focus-visible{outline:3px solid var(--theme-focus);outline-offset:3px}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}@media (forced-colors:active){button,input,select,textarea{border:1px solid canvastext}}
|
package/dist/client/index.html
CHANGED
|
@@ -16,8 +16,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
16
16
|
<link rel="icon" href="/icons/gestalt-mobile-192.png" />
|
|
17
17
|
<link rel="apple-touch-icon" href="/icons/gestalt-mobile-180.png" />
|
|
18
18
|
<title>Gestalt Mobile</title>
|
|
19
|
-
<script type="module" crossorigin src="/assets/index-
|
|
20
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/assets/index-BTJImyK1.js"></script>
|
|
20
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CPQBJDsg.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<div id="app"></div>
|
|
@@ -28,6 +28,30 @@ Options:
|
|
|
28
28
|
--skills list List saved global skill profiles without starting the server
|
|
29
29
|
--help Show this help
|
|
30
30
|
--version Show the installed version`;
|
|
31
|
+
function managedVersion(value) {
|
|
32
|
+
return value && /^[A-Za-z0-9][A-Za-z0-9.+_-]{0,99}$/.test(value) ? value : null;
|
|
33
|
+
}
|
|
34
|
+
export function componentVersions(mobileVersion, codexVersion, environment = process.env) {
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
id: 'gestalt',
|
|
38
|
+
label: 'Gestalt manager',
|
|
39
|
+
version: managedVersion(environment.GESTALT_MANAGER_VERSION),
|
|
40
|
+
},
|
|
41
|
+
{ id: 'gestalt-mobile', label: 'Gestalt Mobile', version: mobileVersion },
|
|
42
|
+
{
|
|
43
|
+
id: 'gestalt-agents',
|
|
44
|
+
label: 'Gestalt Agents',
|
|
45
|
+
version: managedVersion(environment.GESTALT_AGENTS_VERSION),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: 'context-mode',
|
|
49
|
+
label: 'Context Mode',
|
|
50
|
+
version: managedVersion(environment.GESTALT_CONTEXT_MODE_VERSION),
|
|
51
|
+
},
|
|
52
|
+
{ id: 'codex', label: 'Codex CLI', version: codexVersion },
|
|
53
|
+
];
|
|
54
|
+
}
|
|
31
55
|
export async function runStartupDoctor(cwd) {
|
|
32
56
|
if (process.env.GESTALT_STARTUP_DIAGNOSTICS_DONE === '1')
|
|
33
57
|
return { ok: true, report: '' };
|
|
@@ -180,6 +204,8 @@ export async function runCli(dependencies = {}) {
|
|
|
180
204
|
stderr.write(diagnosis.report);
|
|
181
205
|
if (!diagnosis.ok)
|
|
182
206
|
stderr.write('WARNING: Startup diagnostics reported a problem; Gestalt Mobile will continue so it can show recovery controls.\n');
|
|
207
|
+
const installedCodexVersion = await (dependencies.probeCodexVersion ?? probeCodexVersion)();
|
|
208
|
+
const mobileVersion = await packageVersion(moduleUrl);
|
|
183
209
|
const app = await (dependencies.compose ?? composeRelayApp)({
|
|
184
210
|
root: config.root,
|
|
185
211
|
dataDir: config.dataDir,
|
|
@@ -187,7 +213,8 @@ export async function runCli(dependencies = {}) {
|
|
|
187
213
|
passkeyAuthEnabled: config.passkeyAuthEnabled,
|
|
188
214
|
staticDir: packagedClientDir(moduleUrl),
|
|
189
215
|
profiles: new LauncherProfileCatalog(),
|
|
190
|
-
installedCodexVersion
|
|
216
|
+
installedCodexVersion,
|
|
217
|
+
componentVersions: componentVersions(mobileVersion, installedCodexVersion, dependencies.environment),
|
|
191
218
|
startAppServers: true,
|
|
192
219
|
homeDirectory: dependencies.homeDirectory,
|
|
193
220
|
explicitSkillProfile,
|
|
@@ -36,7 +36,7 @@ import { RelaySession, } from './features/sessions/model/relay-session.js';
|
|
|
36
36
|
import { AgentActivityRegistry } from './features/agent-activity/registry.js';
|
|
37
37
|
import { toAgentActivityDto } from './features/agent-activity/activity-dto.js';
|
|
38
38
|
import { decodeAgentActivityFacts } from './platform/codex/activity-facts.js';
|
|
39
|
-
import { isAgentCapacityRecoveryCall, isAutopilotWaitLeaseCall, resolvedServerRequestId, toPendingInteraction, } from './platform/codex/server-request.js';
|
|
39
|
+
import { completedCommandId, isAgentCapacityRecoveryCall, isAutopilotWaitLeaseCall, resolvedServerRequestId, toPendingInteraction, } from './platform/codex/server-request.js';
|
|
40
40
|
import { parseOrgPlanCheckpoint, toOrgPlanCheckpointToolResponse, } from '../shared/contracts/org-plan-checkpoint.js';
|
|
41
41
|
import { validOrgPlanCheckpoint } from './features/org-plan-checkpoint/application/validate.js';
|
|
42
42
|
import { isValidInteractionResponse, isValidQuizInteractionResponse, } from './features/sessions/interaction/response-validator.js';
|
|
@@ -437,6 +437,9 @@ export async function composeRelayApp(options) {
|
|
|
437
437
|
? { ...origin, kind: 'root' }
|
|
438
438
|
: origin;
|
|
439
439
|
const normalized = normalizeCodexNotification(sessionId, 0, occurredAt, notification, currentSession?.workspacePath, currentSession?.activeTurnId, resolvedOrigin);
|
|
440
|
+
const rootCommandId = resolvedOrigin.kind === 'root' ? completedCommandId(notification) : null;
|
|
441
|
+
if (rootCommandId)
|
|
442
|
+
autopilot.rootProcessCompleted(sessionId, rootCommandId);
|
|
440
443
|
if (!normalized) {
|
|
441
444
|
for (const activityFact of activityFacts)
|
|
442
445
|
activity.observe(activityFact);
|
|
@@ -483,12 +486,19 @@ export async function composeRelayApp(options) {
|
|
|
483
486
|
const lease = rawInteraction.payload;
|
|
484
487
|
const rootOwned = origin.kind === 'root' && origin.physicalTurnId === session.activeTurnId;
|
|
485
488
|
const accepted = rootOwned &&
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
489
|
+
(lease.version === 2
|
|
490
|
+
? autopilot.registerProactiveWait(sessionId, {
|
|
491
|
+
id: lease.reportId,
|
|
492
|
+
leaseId: lease.leaseId,
|
|
493
|
+
wakeConditions: lease.wakeConditions,
|
|
494
|
+
maxWaitMs: lease.maxWaitMs,
|
|
495
|
+
})
|
|
496
|
+
: autopilot.reportProbe(sessionId, {
|
|
497
|
+
id: lease.reportId,
|
|
498
|
+
kind: 'wait',
|
|
499
|
+
leaseId: lease.leaseId,
|
|
500
|
+
wakeConditions: lease.wakeConditions,
|
|
501
|
+
}));
|
|
492
502
|
if (!accepted) {
|
|
493
503
|
if (rootOwned)
|
|
494
504
|
autopilot.rejectProbe(sessionId);
|
|
@@ -711,6 +721,7 @@ export async function composeRelayApp(options) {
|
|
|
711
721
|
};
|
|
712
722
|
}),
|
|
713
723
|
},
|
|
724
|
+
versions: options.componentVersions,
|
|
714
725
|
protocolCompatible: protocol.compatible,
|
|
715
726
|
},
|
|
716
727
|
sessionRoutes: {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Designed by Denis Roio <jaromil@dyne.org>
|
|
4
4
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
*/
|
|
6
|
-
export const AUTOPILOT_PROMPT_VERSION = '
|
|
7
|
-
export const AUTOPILOT_CONTINUATION_PROMPT = 'Inspect the active supervised Org Plan. Refer to every L1 as L<a> and each nested L2 as L<a>.<b>, using one-based positions. For a subagent dedicated to that position, use the collaboration-safe task_name l<a> or l<a>_<b> and refer to it by its canonical L label. If the active L1 is still WIP and its executor stopped or is idle after a partial report or L2 checkpoint, call followup_task on that same executor before sending any response. Treat a status question as an interruption: answer briefly, then perform that continuation in the same turn.
|
|
6
|
+
export const AUTOPILOT_PROMPT_VERSION = 'v8';
|
|
7
|
+
export const AUTOPILOT_CONTINUATION_PROMPT = 'Inspect the active supervised Org Plan. Refer to every L1 as L<a> and each nested L2 as L<a>.<b>, using one-based positions. For a subagent dedicated to that position, use the collaboration-safe task_name l<a> or l<a>_<b> and refer to it by its canonical L label. If the active L1 is still WIP and its executor stopped or is idle after a partial report or L2 checkpoint, call followup_task on that same executor before sending any response. Treat a status question as an interruption: answer briefly, then perform that continuation in the same turn. Before sending any blocker response or yielding because progress cannot continue safely, call gestalt_org_plan_attention for the matching decision-table blocker; never rely on blocker prose as the signal. Do not call it for routine progress or a recoverable failure. Before yielding for known long work, call gestalt_autopilot_wait_lease version 2 with relevant observable wake conditions and a bounded maxWaitMs; it is one episode, so reassess before registering another in a later turn. For GitHub PR CI, start an owned gh pr checks --watch process and lease processExited plus processResultAvailable while it runs. When the Autopilot probe is active, register the compatible wait lease, declare genuine attention, or immediately do actionable work; never acknowledge waiting in prose. Do not send a status-only response.';
|
|
8
8
|
export const AUTOPILOT_EXECUTOR_CONTINUATION_PROMPT = 'Continue the same assigned Org L1 from its durable state. A prior turn ending did not complete the objective. Consume any supplied process result, take the next legal L2 action, and report only at the L1 review boundary or through structured attention.';
|
|
9
9
|
/** Builds a physical launch instruction while keeping durable L1 identity canonical. */
|
|
10
10
|
export function autopilotExecutorLaunchPrompt(identity) {
|
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { deriveSessionStatus } from '../../sessions/session-status.js';
|
|
7
7
|
import { createHash } from 'node:crypto';
|
|
8
|
+
import { AUTOPILOT_WAIT_MAX_MS, AUTOPILOT_WAIT_MIN_MS, } from '../../../../shared/contracts/autopilot-wait-lease.js';
|
|
8
9
|
import { autopilotSnapshot, disabledAutopilot, } from '../domain/autopilot-session.js';
|
|
9
10
|
import { classifyExecutorOutcome, decideSupervisedLifecycle, executorIdentity, validStructuredBlock, } from '../domain/supervised-lifecycle.js';
|
|
10
11
|
import { classifyAgentActivity, decideAutopilot, executionComplete, } from './policy.js';
|
|
11
|
-
import { consumeObservableWake, recordAutomaticContinuation, recoverSafetyPause, reportProbe, semanticProgressKey, startSupervisionProtocol, } from '../domain/supervision-protocol.js';
|
|
12
|
+
import { consumeObservableWake, consumeWaitDeadline, recordAutomaticContinuation, recoverSafetyPause, registerProactiveWait as registerProtocolWait, reportProbe, semanticProgressKey, startSupervisionProtocol, } from '../domain/supervision-protocol.js';
|
|
12
13
|
export class AutopilotCoordinator {
|
|
13
14
|
deps;
|
|
14
15
|
timers = new Map();
|
|
15
16
|
completionTimers = new Map();
|
|
16
17
|
executorTimers = new Map();
|
|
18
|
+
waitTimers = new Map();
|
|
17
19
|
publishedSnapshots = new Map();
|
|
18
20
|
planEventKeys = new Map();
|
|
19
21
|
activityEventKeys = new Map();
|
|
@@ -75,6 +77,8 @@ export class AutopilotCoordinator {
|
|
|
75
77
|
});
|
|
76
78
|
if (state.supervision.waitLease && validated.health.wait.wakeCategories.length > 0) {
|
|
77
79
|
this.parkedSubscriptions.set(sessionId, state.supervision.waitLease.id);
|
|
80
|
+
if (state.supervision.waitLease.resumeAt)
|
|
81
|
+
this.armWaitDeadline(sessionId, state.supervision.waitLease.id, state.supervision.waitLease.resumeAt);
|
|
78
82
|
return;
|
|
79
83
|
}
|
|
80
84
|
this.parkedSubscriptions.delete(sessionId);
|
|
@@ -113,6 +117,7 @@ export class AutopilotCoordinator {
|
|
|
113
117
|
}
|
|
114
118
|
dispose(sessionId) {
|
|
115
119
|
this.cancelTimer(sessionId);
|
|
120
|
+
this.cancelWaitTimer(sessionId);
|
|
116
121
|
this.planEventKeys.delete(sessionId);
|
|
117
122
|
this.activityEventKeys.delete(sessionId);
|
|
118
123
|
this.reconciling.delete(sessionId);
|
|
@@ -123,8 +128,9 @@ export class AutopilotCoordinator {
|
|
|
123
128
|
const state = this.deps.store.find(sessionId);
|
|
124
129
|
if (!state?.requestedEnabled)
|
|
125
130
|
return false;
|
|
126
|
-
const
|
|
127
|
-
|
|
131
|
+
const protocol = state.supervision ?? startSupervisionProtocol(this.progressKey(sessionId));
|
|
132
|
+
const nextProtocol = reportProbe(protocol, report);
|
|
133
|
+
if (nextProtocol === protocol)
|
|
128
134
|
return false;
|
|
129
135
|
if (nextProtocol.outcome === 'parked' && nextProtocol.waitLease)
|
|
130
136
|
this.parkedSubscriptions.set(sessionId, nextProtocol.waitLease.id);
|
|
@@ -147,6 +153,38 @@ export class AutopilotCoordinator {
|
|
|
147
153
|
this.cancelTimer(sessionId);
|
|
148
154
|
return true;
|
|
149
155
|
}
|
|
156
|
+
/** Parks one explicitly requested long wait without changing future pulse policy. */
|
|
157
|
+
registerProactiveWait(sessionId, report) {
|
|
158
|
+
const state = this.deps.store.find(sessionId);
|
|
159
|
+
if (!state?.requestedEnabled ||
|
|
160
|
+
!Number.isSafeInteger(report.maxWaitMs) ||
|
|
161
|
+
report.maxWaitMs < AUTOPILOT_WAIT_MIN_MS ||
|
|
162
|
+
report.maxWaitMs > AUTOPILOT_WAIT_MAX_MS)
|
|
163
|
+
return false;
|
|
164
|
+
const now = this.deps.now();
|
|
165
|
+
const resumeAt = new Date(Date.parse(now) + report.maxWaitMs).toISOString();
|
|
166
|
+
const protocol = state.supervision ?? startSupervisionProtocol(this.progressKey(sessionId));
|
|
167
|
+
const nextProtocol = registerProtocolWait(protocol, { ...report, resumeAt });
|
|
168
|
+
if (nextProtocol === protocol)
|
|
169
|
+
return false;
|
|
170
|
+
const cancelled = this.cancelScheduledControl(state, now);
|
|
171
|
+
this.timers.get(sessionId)?.();
|
|
172
|
+
this.timers.delete(sessionId);
|
|
173
|
+
this.completionTimers.get(sessionId)?.();
|
|
174
|
+
this.completionTimers.delete(sessionId);
|
|
175
|
+
this.parkedSubscriptions.set(sessionId, report.leaseId);
|
|
176
|
+
this.persist({
|
|
177
|
+
...state,
|
|
178
|
+
state: 'monitoring',
|
|
179
|
+
generation: state.generation + (cancelled ? 1 : 0),
|
|
180
|
+
nextEvaluationAt: null,
|
|
181
|
+
...(cancelled ? { lastControlId: null } : {}),
|
|
182
|
+
supervision: nextProtocol,
|
|
183
|
+
updatedAt: now,
|
|
184
|
+
}, cancelled);
|
|
185
|
+
this.armWaitDeadline(sessionId, report.leaseId, resumeAt);
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
150
188
|
/** Fails closed only for the currently active bounded probe. */
|
|
151
189
|
rejectProbe(sessionId) {
|
|
152
190
|
const state = this.deps.store.find(sessionId);
|
|
@@ -187,6 +225,7 @@ export class AutopilotCoordinator {
|
|
|
187
225
|
const nextProtocol = consumeObservableWake(state.supervision, wake);
|
|
188
226
|
if (nextProtocol === state.supervision)
|
|
189
227
|
return false;
|
|
228
|
+
this.cancelWaitTimer(sessionId);
|
|
190
229
|
this.parkedSubscriptions.delete(sessionId);
|
|
191
230
|
this.persist({ ...state, supervision: nextProtocol, updatedAt: this.deps.now() });
|
|
192
231
|
this.evaluate(sessionId);
|
|
@@ -203,6 +242,23 @@ export class AutopilotCoordinator {
|
|
|
203
242
|
progressKey: this.progressKey(sessionId),
|
|
204
243
|
});
|
|
205
244
|
}
|
|
245
|
+
/** Bridges a completed root-owned background command into its one active wait episode. */
|
|
246
|
+
rootProcessCompleted(sessionId, processId) {
|
|
247
|
+
const lease = this.deps.store.find(sessionId)?.supervision?.waitLease;
|
|
248
|
+
if (!lease || !processId || processId.length > 256)
|
|
249
|
+
return false;
|
|
250
|
+
const condition = lease.wakeConditions.includes('processResultAvailable')
|
|
251
|
+
? 'processResultAvailable'
|
|
252
|
+
: lease.wakeConditions.includes('processExited')
|
|
253
|
+
? 'processExited'
|
|
254
|
+
: null;
|
|
255
|
+
if (!condition)
|
|
256
|
+
return false;
|
|
257
|
+
const progressKey = createHash('sha256')
|
|
258
|
+
.update(`${this.progressKey(sessionId)}\0root-process\0${processId}`)
|
|
259
|
+
.digest('hex');
|
|
260
|
+
return this.observableWake(sessionId, { leaseId: lease.id, condition, progressKey });
|
|
261
|
+
}
|
|
206
262
|
enable(sessionId) {
|
|
207
263
|
const session = this.deps.session(sessionId);
|
|
208
264
|
if (!session || !session.threadId || !['ready', 'turnActive'].includes(session.state))
|
|
@@ -216,6 +272,8 @@ export class AutopilotCoordinator {
|
|
|
216
272
|
const prior = this.deps.store.find(sessionId) ?? disabledAutopilot(sessionId, now);
|
|
217
273
|
const nextFingerprint = fingerprint(currentPlan.plan);
|
|
218
274
|
const replacing = Boolean(prior.planIdentity && prior.planIdentity !== currentPlan.identity);
|
|
275
|
+
if (replacing)
|
|
276
|
+
this.cancelWaitTimer(sessionId);
|
|
219
277
|
if (prior.requestedEnabled &&
|
|
220
278
|
prior.planIdentity === currentPlan.identity &&
|
|
221
279
|
prior.state !== 'attentionRequired')
|
|
@@ -273,6 +331,7 @@ export class AutopilotCoordinator {
|
|
|
273
331
|
};
|
|
274
332
|
this.persist(next, cancelled);
|
|
275
333
|
this.cancelTimer(sessionId);
|
|
334
|
+
this.cancelWaitTimer(sessionId);
|
|
276
335
|
return this.snapshot(sessionId);
|
|
277
336
|
}
|
|
278
337
|
cancel(sessionId, reason) {
|
|
@@ -293,6 +352,7 @@ export class AutopilotCoordinator {
|
|
|
293
352
|
updatedAt: now,
|
|
294
353
|
}, cancelled);
|
|
295
354
|
this.cancelTimer(sessionId);
|
|
355
|
+
this.cancelWaitTimer(sessionId);
|
|
296
356
|
}
|
|
297
357
|
evaluate(sessionId) {
|
|
298
358
|
const prior = this.deps.store.find(sessionId);
|
|
@@ -607,8 +667,10 @@ export class AutopilotCoordinator {
|
|
|
607
667
|
return this.snapshot(sessionId);
|
|
608
668
|
const replacing = Boolean(prior.planIdentity && prior.planIdentity !== currentPlan.identity);
|
|
609
669
|
const cancelled = replacing ? this.cancelScheduledControl(prior, now) : undefined;
|
|
610
|
-
if (replacing)
|
|
670
|
+
if (replacing) {
|
|
611
671
|
this.cancelTimer(sessionId);
|
|
672
|
+
this.cancelWaitTimer(sessionId);
|
|
673
|
+
}
|
|
612
674
|
const next = {
|
|
613
675
|
...prior,
|
|
614
676
|
state: 'monitoring',
|
|
@@ -894,6 +956,27 @@ export class AutopilotCoordinator {
|
|
|
894
956
|
this.executorTimers.get(sessionId)?.();
|
|
895
957
|
this.executorTimers.delete(sessionId);
|
|
896
958
|
}
|
|
959
|
+
cancelWaitTimer(sessionId) {
|
|
960
|
+
this.waitTimers.get(sessionId)?.();
|
|
961
|
+
this.waitTimers.delete(sessionId);
|
|
962
|
+
}
|
|
963
|
+
armWaitDeadline(sessionId, leaseId, resumeAt) {
|
|
964
|
+
this.cancelWaitTimer(sessionId);
|
|
965
|
+
this.waitTimers.set(sessionId, this.deps.schedule(() => {
|
|
966
|
+
this.waitTimers.delete(sessionId);
|
|
967
|
+
const state = this.deps.store.find(sessionId);
|
|
968
|
+
if (!state?.requestedEnabled || !state.supervision)
|
|
969
|
+
return;
|
|
970
|
+
const protocol = consumeWaitDeadline(state.supervision, leaseId, this.deps.now());
|
|
971
|
+
if (protocol === state.supervision) {
|
|
972
|
+
this.armWaitDeadline(sessionId, leaseId, resumeAt);
|
|
973
|
+
return;
|
|
974
|
+
}
|
|
975
|
+
this.parkedSubscriptions.delete(sessionId);
|
|
976
|
+
this.persist({ ...state, supervision: protocol, updatedAt: this.deps.now() });
|
|
977
|
+
this.evaluate(sessionId);
|
|
978
|
+
}, Math.max(0, Date.parse(resumeAt) - Date.parse(this.deps.now()))));
|
|
979
|
+
}
|
|
897
980
|
async enforceSupervisedLifecycle(sessionId, event) {
|
|
898
981
|
const controller = this.deps.executorController;
|
|
899
982
|
const retained = this.deps.plan(sessionId);
|
|
@@ -95,6 +95,9 @@ export function autopilotSnapshot(state, retryLimit, facts = {
|
|
|
95
95
|
wait: {
|
|
96
96
|
present: Boolean(state.supervision?.waitLease),
|
|
97
97
|
wakeCategories: [...waitCategories].slice(0, 9),
|
|
98
|
+
...(state.supervision?.waitLease?.resumeAt
|
|
99
|
+
? { resumeAt: state.supervision.waitLease.resumeAt }
|
|
100
|
+
: {}),
|
|
98
101
|
},
|
|
99
102
|
observedAt: facts.observedAt,
|
|
100
103
|
lastTransitionAt: state.updatedAt,
|
|
@@ -85,6 +85,29 @@ export function recordAutomaticContinuation(state, progressKey) {
|
|
|
85
85
|
return { ...state, unchangedContinuations, outcome: 'probeRequired', probeKey: progressKey };
|
|
86
86
|
return { ...state, unchangedContinuations };
|
|
87
87
|
}
|
|
88
|
+
/** Registers one explicit long-wait episode without changing future pulse policy. */
|
|
89
|
+
export function registerProactiveWait(state, report) {
|
|
90
|
+
if (state.lastReportId === report.id ||
|
|
91
|
+
state.outcome === 'parked' ||
|
|
92
|
+
state.outcome === 'attentionRequired' ||
|
|
93
|
+
state.outcome === 'safetyPaused' ||
|
|
94
|
+
!Number.isFinite(Date.parse(report.resumeAt)))
|
|
95
|
+
return state;
|
|
96
|
+
const wakeConditions = uniqueSupportedWakeConditions(report.wakeConditions);
|
|
97
|
+
if (!report.leaseId || wakeConditions.length === 0)
|
|
98
|
+
return state;
|
|
99
|
+
return {
|
|
100
|
+
...state,
|
|
101
|
+
outcome: 'parked',
|
|
102
|
+
lastReportId: report.id,
|
|
103
|
+
waitLease: {
|
|
104
|
+
id: report.leaseId,
|
|
105
|
+
probeKey: state.progressKey,
|
|
106
|
+
wakeConditions,
|
|
107
|
+
resumeAt: report.resumeAt,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
88
111
|
/** Accepts only structured, bounded probe reports. Unsupported waits fail closed. */
|
|
89
112
|
export function reportProbe(state, report) {
|
|
90
113
|
if (state.lastReportId === report.id)
|
|
@@ -117,6 +140,11 @@ export function consumeObservableWake(state, wake) {
|
|
|
117
140
|
!lease.wakeConditions.includes(wake.condition) ||
|
|
118
141
|
wake.progressKey === lease.probeKey)
|
|
119
142
|
return state;
|
|
143
|
+
if (lease.resumeAt)
|
|
144
|
+
return {
|
|
145
|
+
...startSupervisionProtocol(wake.progressKey),
|
|
146
|
+
lastReportId: state.lastReportId,
|
|
147
|
+
};
|
|
120
148
|
return {
|
|
121
149
|
...state,
|
|
122
150
|
outcome: 'retrying',
|
|
@@ -127,6 +155,20 @@ export function consumeObservableWake(state, wake) {
|
|
|
127
155
|
retryKey: wake.progressKey,
|
|
128
156
|
};
|
|
129
157
|
}
|
|
158
|
+
/** A proactive deadline consumes only its matching episode and restores normal policy. */
|
|
159
|
+
export function consumeWaitDeadline(state, leaseId, observedAt) {
|
|
160
|
+
const lease = state.waitLease;
|
|
161
|
+
if (state.outcome !== 'parked' ||
|
|
162
|
+
!lease?.resumeAt ||
|
|
163
|
+
lease.id !== leaseId ||
|
|
164
|
+
!Number.isFinite(Date.parse(observedAt)) ||
|
|
165
|
+
Date.parse(observedAt) < Date.parse(lease.resumeAt))
|
|
166
|
+
return state;
|
|
167
|
+
return {
|
|
168
|
+
...startSupervisionProtocol(state.progressKey),
|
|
169
|
+
lastReportId: state.lastReportId,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
130
172
|
/** Manual recovery is the only transition out of durable safety pause. */
|
|
131
173
|
export function recoverSafetyPause(state, progressKey) {
|
|
132
174
|
return state.outcome === 'safetyPaused' ? startSupervisionProtocol(progressKey) : state;
|
|
@@ -197,7 +239,16 @@ function parseWaitLease(value) {
|
|
|
197
239
|
!Array.isArray(candidate.wakeConditions))
|
|
198
240
|
return undefined;
|
|
199
241
|
const wakeConditions = uniqueSupportedWakeConditions(candidate.wakeConditions);
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
242
|
+
if (wakeConditions.length !== candidate.wakeConditions.length)
|
|
243
|
+
return undefined;
|
|
244
|
+
const resumeAt = candidate.resumeAt;
|
|
245
|
+
if (resumeAt !== undefined &&
|
|
246
|
+
(typeof resumeAt !== 'string' || !Number.isFinite(Date.parse(resumeAt))))
|
|
247
|
+
return undefined;
|
|
248
|
+
return {
|
|
249
|
+
id: candidate.id,
|
|
250
|
+
probeKey: candidate.probeKey,
|
|
251
|
+
wakeConditions,
|
|
252
|
+
...(typeof resumeAt === 'string' ? { resumeAt } : {}),
|
|
253
|
+
};
|
|
203
254
|
}
|
|
@@ -53,6 +53,17 @@ export function resolvedServerRequestId(input) {
|
|
|
53
53
|
return null;
|
|
54
54
|
return String(requestId);
|
|
55
55
|
}
|
|
56
|
+
/** Returns only the bounded identity of a completed command item. Ownership is checked by caller. */
|
|
57
|
+
export function completedCommandId(input) {
|
|
58
|
+
if (input.method !== 'item/completed' || !isRecord(input.params))
|
|
59
|
+
return null;
|
|
60
|
+
const item = input.params.item;
|
|
61
|
+
if (!isRecord(item) || item.type !== 'commandExecution')
|
|
62
|
+
return null;
|
|
63
|
+
return typeof item.id === 'string' && item.id.length > 0 && item.id.length <= 256
|
|
64
|
+
? item.id
|
|
65
|
+
: null;
|
|
66
|
+
}
|
|
56
67
|
export function isAutopilotWaitLeaseCall(input) {
|
|
57
68
|
return (Number.isSafeInteger(input.id) &&
|
|
58
69
|
input.method === 'item/tool/call' &&
|