gestalt-mobile 0.32.1 → 0.33.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-ClFAZNxC.js +38 -0
- package/dist/client/assets/index-Jem9eobi.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/server/server/features/agent-activity/activity-dto.js +4 -1
- package/dist/server/server/features/agent-activity/model.js +25 -2
- package/dist/server/server/features/autopilot/application/service.js +32 -13
- package/dist/server/server/features/autopilot/domain/supervised-lifecycle.js +20 -1
- package/dist/server/server/features/org-plan-checkpoint/application/validate.js +8 -0
- package/dist/server/server/platform/codex/activity-facts.js +23 -0
- package/dist/server/shared/contracts/org-plan-checkpoint.js +77 -10
- package/gestalt-supervision-capabilities.json +1 -0
- package/package.json +1 -1
- package/dist/client/assets/index-CcWoGWyP.css +0 -1
- package/dist/client/assets/index-CxAG4Fmv.js +0 -37
|
@@ -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}.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-ClFAZNxC.js"></script>
|
|
20
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Jem9eobi.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<div id="app"></div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Designed by Denis Roio <jaromil@dyne.org>
|
|
4
4
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
5
|
*/
|
|
6
|
-
/** Public roster projection:
|
|
6
|
+
/** Public roster projection: expose bounded context use, never raw host metrics or identifiers. */
|
|
7
7
|
export function toAgentActivityDto(snapshot) {
|
|
8
8
|
return {
|
|
9
9
|
sessionId: snapshot.sessionId,
|
|
@@ -19,6 +19,9 @@ export function toAgentActivityDto(snapshot) {
|
|
|
19
19
|
? { continuationGeneration: child.continuationGeneration }
|
|
20
20
|
: {}),
|
|
21
21
|
...(child.outcome ? { outcome: child.outcome } : {}),
|
|
22
|
+
...(child.contextUsedPercent !== undefined
|
|
23
|
+
? { contextUsedPercent: child.contextUsedPercent }
|
|
24
|
+
: {}),
|
|
22
25
|
ownedProcesses: (child.ownedProcesses ?? []).slice(0, 64).map((process) => ({
|
|
23
26
|
state: process.state,
|
|
24
27
|
ownership: process.ownership,
|
|
@@ -40,6 +40,12 @@ export function projectAgentActivity(current, fact) {
|
|
|
40
40
|
const child = current.subagents.find((candidate) => candidate.threadId === fact.threadId);
|
|
41
41
|
if (!child)
|
|
42
42
|
return current;
|
|
43
|
+
if (fact.kind === 'contextUsage' && validPercent(fact.contextUsedPercent)) {
|
|
44
|
+
const subagents = Object.freeze(current.subagents.map((candidate) => candidate.id === child.id
|
|
45
|
+
? Object.freeze({ ...candidate, contextUsedPercent: fact.contextUsedPercent })
|
|
46
|
+
: candidate));
|
|
47
|
+
return Object.freeze({ ...current, subagents });
|
|
48
|
+
}
|
|
43
49
|
const childFact = { ...fact };
|
|
44
50
|
delete childFact.threadId;
|
|
45
51
|
return projectAgentActivity(current, {
|
|
@@ -53,7 +59,9 @@ export function projectAgentActivity(current, fact) {
|
|
|
53
59
|
const root = {
|
|
54
60
|
...current.root,
|
|
55
61
|
observedAt,
|
|
56
|
-
lastActivityAt:
|
|
62
|
+
lastActivityAt: fact.kind === 'contextUsage'
|
|
63
|
+
? current.root.lastActivityAt
|
|
64
|
+
: later(current.root.lastActivityAt, fact.occurredAt),
|
|
57
65
|
};
|
|
58
66
|
const children = new Map(current.subagents.map((child) => [child.id, child]));
|
|
59
67
|
if (fact.kind === 'turnStarted')
|
|
@@ -75,6 +83,8 @@ export function projectAgentActivity(current, fact) {
|
|
|
75
83
|
Object.assign(root, { state: 'disconnected', reason: 'processExited' });
|
|
76
84
|
if (fact.kind === 'threadStatus')
|
|
77
85
|
applyStatus(root, fact.status);
|
|
86
|
+
if (fact.kind === 'contextUsage' && validPercent(fact.contextUsedPercent))
|
|
87
|
+
root.contextUsedPercent = fact.contextUsedPercent;
|
|
78
88
|
if (fact.kind === 'collaboration') {
|
|
79
89
|
// Older servers may omit experimental child metadata. That is a capability
|
|
80
90
|
// downgrade, not evidence that the root process disappeared.
|
|
@@ -117,6 +127,11 @@ export function projectAgentActivity(current, fact) {
|
|
|
117
127
|
? { canonicalTaskName: 'final_review' }
|
|
118
128
|
: {}),
|
|
119
129
|
...(outcome ? { outcome } : {}),
|
|
130
|
+
...(validPercent(fact.contextUsedPercent)
|
|
131
|
+
? { contextUsedPercent: fact.contextUsedPercent }
|
|
132
|
+
: validPercent(before?.contextUsedPercent)
|
|
133
|
+
? { contextUsedPercent: before.contextUsedPercent }
|
|
134
|
+
: {}),
|
|
120
135
|
...(fact.childOwnedProcesses
|
|
121
136
|
? { ownedProcesses: Object.freeze([...fact.childOwnedProcesses]) }
|
|
122
137
|
: before?.ownedProcesses
|
|
@@ -224,6 +239,9 @@ function aggregate(children) {
|
|
|
224
239
|
function validTimestamp(value) {
|
|
225
240
|
return !Number.isNaN(Date.parse(value));
|
|
226
241
|
}
|
|
242
|
+
function validPercent(value) {
|
|
243
|
+
return typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= 100;
|
|
244
|
+
}
|
|
227
245
|
function later(left, right) {
|
|
228
246
|
return Date.parse(right) > Date.parse(left) ? right : left;
|
|
229
247
|
}
|
|
@@ -235,12 +253,17 @@ function semantic(snapshot) {
|
|
|
235
253
|
sessionId: snapshot.sessionId,
|
|
236
254
|
rootThreadId: snapshot.rootThreadId,
|
|
237
255
|
confidence: snapshot.confidence,
|
|
238
|
-
root: {
|
|
256
|
+
root: {
|
|
257
|
+
state: snapshot.root.state,
|
|
258
|
+
reason: snapshot.root.reason,
|
|
259
|
+
contextUsedPercent: snapshot.root.contextUsedPercent,
|
|
260
|
+
},
|
|
239
261
|
subagents: snapshot.subagents.map((child) => ({
|
|
240
262
|
id: child.id,
|
|
241
263
|
threadId: child.threadId,
|
|
242
264
|
nickname: child.nickname,
|
|
243
265
|
role: child.role,
|
|
266
|
+
contextUsedPercent: child.contextUsedPercent,
|
|
244
267
|
model: child.model,
|
|
245
268
|
taskPath: child.taskPath,
|
|
246
269
|
canonicalTaskName: child.canonicalTaskName,
|
|
@@ -462,16 +462,20 @@ export class AutopilotCoordinator {
|
|
|
462
462
|
validStructuredBlock(state.blocking);
|
|
463
463
|
if (checkpointBoundary && state?.checkpoints) {
|
|
464
464
|
const occurredAt = this.deps.now();
|
|
465
|
+
const pendingKind = state.checkpoints.pendingKind ??
|
|
466
|
+
(state.checkpoints.terminalReviewAccepted ? 'terminalReviewAccepted' : 'l1Accepted');
|
|
465
467
|
this.persist({
|
|
466
468
|
...state,
|
|
467
|
-
checkpoints: { ...state.checkpoints, pendingTurnId: null },
|
|
469
|
+
checkpoints: { ...state.checkpoints, pendingTurnId: null, pendingKind: null },
|
|
468
470
|
updatedAt: occurredAt,
|
|
469
471
|
}, undefined, [
|
|
470
472
|
{
|
|
471
473
|
sessionId,
|
|
472
|
-
type:
|
|
473
|
-
? 'org-plan.
|
|
474
|
-
: '
|
|
474
|
+
type: pendingKind === 'l2Completed'
|
|
475
|
+
? 'org-plan.step-reported'
|
|
476
|
+
: pendingKind === 'terminalReviewAccepted'
|
|
477
|
+
? 'org-plan.terminal-review-reported'
|
|
478
|
+
: 'org-plan.milestone-reported',
|
|
475
479
|
payload: { turnId: state.checkpoints.pendingTurnId },
|
|
476
480
|
occurredAt,
|
|
477
481
|
},
|
|
@@ -503,32 +507,47 @@ export class AutopilotCoordinator {
|
|
|
503
507
|
const previous = prior.checkpoints;
|
|
504
508
|
if (previous && previous.planIdentity !== retained.identity)
|
|
505
509
|
return false;
|
|
506
|
-
const
|
|
510
|
+
const reportedL1Ids = previous?.reportedL1Ids ?? [];
|
|
511
|
+
const reportedL2Ids = previous?.reportedL2Ids ?? [];
|
|
507
512
|
const key = createHash('sha256').update(JSON.stringify(checkpoint)).digest('hex');
|
|
508
513
|
const acceptedKeys = previous?.acceptedKeys ?? [];
|
|
509
514
|
if (acceptedKeys.includes(key))
|
|
510
515
|
return true;
|
|
511
|
-
|
|
516
|
+
const l2Key = checkpoint.kind === 'l2Completed' ? JSON.stringify([checkpoint.l1Id, checkpoint.l2Id]) : null;
|
|
517
|
+
if (l2Key && reportedL2Ids.includes(l2Key))
|
|
518
|
+
return false;
|
|
519
|
+
if (checkpoint.kind === 'l1Accepted' && reportedL1Ids.includes(checkpoint.l1Id))
|
|
512
520
|
return false;
|
|
513
521
|
if (checkpoint.kind === 'terminalReviewAccepted' && previous?.terminalReviewAccepted)
|
|
514
522
|
return false;
|
|
515
523
|
const checkpoints = {
|
|
516
524
|
protocolVersion: 1,
|
|
517
525
|
planIdentity: retained.identity,
|
|
518
|
-
|
|
526
|
+
reportedL2Ids: l2Key ? [...reportedL2Ids, l2Key] : reportedL2Ids,
|
|
527
|
+
reportedL1Ids: checkpoint.kind === 'l1Accepted' ? [...reportedL1Ids, checkpoint.l1Id] : reportedL1Ids,
|
|
519
528
|
acceptedKeys: [...acceptedKeys, key],
|
|
520
529
|
pendingTurnId: turnId,
|
|
530
|
+
pendingKind: checkpoint.kind,
|
|
521
531
|
terminalReviewAccepted: checkpoint.kind === 'terminalReviewAccepted' || previous?.terminalReviewAccepted === true,
|
|
522
532
|
};
|
|
523
533
|
this.persist({ ...prior, checkpoints, updatedAt: occurredAt }, undefined, [
|
|
524
534
|
{
|
|
525
535
|
sessionId,
|
|
526
|
-
type: checkpoint.kind === '
|
|
527
|
-
? 'org-plan.
|
|
528
|
-
:
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
536
|
+
type: checkpoint.kind === 'l2Completed'
|
|
537
|
+
? 'org-plan.step-checkpointed'
|
|
538
|
+
: checkpoint.kind === 'l1Accepted'
|
|
539
|
+
? 'org-plan.milestone-checkpointed'
|
|
540
|
+
: 'org-plan.terminal-review-checkpointed',
|
|
541
|
+
payload: checkpoint.kind === 'l2Completed'
|
|
542
|
+
? {
|
|
543
|
+
l1Id: checkpoint.l1Id,
|
|
544
|
+
l2Id: checkpoint.l2Id,
|
|
545
|
+
position: checkpoint.position,
|
|
546
|
+
turnId,
|
|
547
|
+
}
|
|
548
|
+
: checkpoint.kind === 'l1Accepted'
|
|
549
|
+
? { l1Id: checkpoint.l1Id, position: checkpoint.position, turnId }
|
|
550
|
+
: { turnId },
|
|
532
551
|
occurredAt,
|
|
533
552
|
},
|
|
534
553
|
]);
|
|
@@ -152,6 +152,13 @@ function parseCheckpoints(value) {
|
|
|
152
152
|
const planIdentity = boundedText(value.planIdentity);
|
|
153
153
|
if (value.protocolVersion !== 1 || !planIdentity)
|
|
154
154
|
return undefined;
|
|
155
|
+
const rawReportedL2Ids = value.reportedL2Ids ?? [];
|
|
156
|
+
if (!Array.isArray(rawReportedL2Ids) || rawReportedL2Ids.length > 512)
|
|
157
|
+
return undefined;
|
|
158
|
+
const reportedL2Ids = rawReportedL2Ids.map((id) => boundedText(id)).filter(Boolean);
|
|
159
|
+
if (reportedL2Ids.length !== rawReportedL2Ids.length ||
|
|
160
|
+
new Set(reportedL2Ids).size !== reportedL2Ids.length)
|
|
161
|
+
return undefined;
|
|
155
162
|
if (!Array.isArray(value.reportedL1Ids) || value.reportedL1Ids.length > 128)
|
|
156
163
|
return undefined;
|
|
157
164
|
const reportedL1Ids = value.reportedL1Ids
|
|
@@ -160,7 +167,7 @@ function parseCheckpoints(value) {
|
|
|
160
167
|
if (reportedL1Ids.length !== value.reportedL1Ids.length ||
|
|
161
168
|
new Set(reportedL1Ids).size !== reportedL1Ids.length)
|
|
162
169
|
return undefined;
|
|
163
|
-
if (!Array.isArray(value.acceptedKeys) || value.acceptedKeys.length >
|
|
170
|
+
if (!Array.isArray(value.acceptedKeys) || value.acceptedKeys.length > 768)
|
|
164
171
|
return undefined;
|
|
165
172
|
const acceptedKeys = value.acceptedKeys
|
|
166
173
|
.map((key) => boundedText(key))
|
|
@@ -173,12 +180,24 @@ function parseCheckpoints(value) {
|
|
|
173
180
|
return undefined;
|
|
174
181
|
if (typeof value.terminalReviewAccepted !== 'boolean')
|
|
175
182
|
return undefined;
|
|
183
|
+
const pendingKind = value.pendingKind === undefined
|
|
184
|
+
? pendingTurnId
|
|
185
|
+
? value.terminalReviewAccepted
|
|
186
|
+
? 'terminalReviewAccepted'
|
|
187
|
+
: 'l1Accepted'
|
|
188
|
+
: null
|
|
189
|
+
: value.pendingKind;
|
|
190
|
+
if (pendingKind !== null &&
|
|
191
|
+
!['l2Completed', 'l1Accepted', 'terminalReviewAccepted'].includes(String(pendingKind)))
|
|
192
|
+
return undefined;
|
|
176
193
|
return {
|
|
177
194
|
protocolVersion: 1,
|
|
178
195
|
planIdentity,
|
|
196
|
+
reportedL2Ids,
|
|
179
197
|
reportedL1Ids,
|
|
180
198
|
acceptedKeys,
|
|
181
199
|
pendingTurnId,
|
|
200
|
+
pendingKind: pendingKind,
|
|
182
201
|
terminalReviewAccepted: value.terminalReviewAccepted,
|
|
183
202
|
};
|
|
184
203
|
}
|
|
@@ -13,6 +13,14 @@ export function validOrgPlanCheckpoint(input) {
|
|
|
13
13
|
if (!l1)
|
|
14
14
|
return false;
|
|
15
15
|
const position = `L${plan.steps.indexOf(l1) + 1}`;
|
|
16
|
+
if (checkpoint.kind === 'l2Completed') {
|
|
17
|
+
const l2 = l1.children.find((step) => step.id === checkpoint.l2Id);
|
|
18
|
+
if (!l2)
|
|
19
|
+
return false;
|
|
20
|
+
return (checkpoint.position === `${position}.${l1.children.indexOf(l2) + 1}` &&
|
|
21
|
+
l2.state === 'DONE' &&
|
|
22
|
+
l1.reviewStatus === 'UNREVIEWED');
|
|
23
|
+
}
|
|
16
24
|
return (checkpoint.position === position &&
|
|
17
25
|
l1.state === 'DONE' &&
|
|
18
26
|
l1.reviewStatus === 'REVIEWED' &&
|
|
@@ -68,6 +68,29 @@ export function decodeAgentActivityFacts(sessionId, occurredAt, input) {
|
|
|
68
68
|
},
|
|
69
69
|
]
|
|
70
70
|
: [];
|
|
71
|
+
if (input.method === 'thread/tokenUsage/updated') {
|
|
72
|
+
const usage = record(params.tokenUsage);
|
|
73
|
+
const last = record(usage?.last);
|
|
74
|
+
const totalTokens = last?.totalTokens;
|
|
75
|
+
const modelContextWindow = usage?.modelContextWindow;
|
|
76
|
+
if (!id(params.threadId) ||
|
|
77
|
+
typeof totalTokens !== 'number' ||
|
|
78
|
+
!Number.isFinite(totalTokens) ||
|
|
79
|
+
totalTokens < 0 ||
|
|
80
|
+
typeof modelContextWindow !== 'number' ||
|
|
81
|
+
!Number.isFinite(modelContextWindow) ||
|
|
82
|
+
modelContextWindow <= 0)
|
|
83
|
+
return [];
|
|
84
|
+
return [
|
|
85
|
+
{
|
|
86
|
+
sessionId,
|
|
87
|
+
occurredAt,
|
|
88
|
+
kind: 'contextUsage',
|
|
89
|
+
threadId: id(params.threadId),
|
|
90
|
+
contextUsedPercent: Math.min(100, Math.max(0, Math.round((totalTokens / modelContextWindow) * 100))),
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
}
|
|
71
94
|
if (input.method === 'item/started' || input.method === 'item/completed') {
|
|
72
95
|
const item = record(params.item);
|
|
73
96
|
if (item?.type !== 'collabAgentToolCall' && item?.type !== 'collabToolCall')
|
|
@@ -10,17 +10,19 @@ const record = (value) => typeof value === 'object' && value !== null && !Array.
|
|
|
10
10
|
export const gestaltOrgPlanCheckpointDynamicTool = {
|
|
11
11
|
type: 'function',
|
|
12
12
|
name: GESTALT_ORG_PLAN_CHECKPOINT_TOOL_NAME,
|
|
13
|
-
description: 'Record a validated supervised Org Plan report boundary. This is not review authority and must only be called by the active root after the Org Plan helper has recorded the matching
|
|
13
|
+
description: 'Record a validated supervised Org Plan report boundary. This is not review authority and must only be called by the active root after the Org Plan helper has recorded the matching state.',
|
|
14
14
|
inputSchema: {
|
|
15
15
|
type: 'object',
|
|
16
16
|
additionalProperties: false,
|
|
17
|
-
required: ['version', 'kind', 'planIdentity'
|
|
17
|
+
required: ['version', 'kind', 'planIdentity'],
|
|
18
18
|
properties: {
|
|
19
19
|
version: { const: 1 },
|
|
20
|
-
kind: { type: 'string', enum: ['l1Accepted', 'terminalReviewAccepted'] },
|
|
20
|
+
kind: { type: 'string', enum: ['l2Completed', 'l1Accepted', 'terminalReviewAccepted'] },
|
|
21
21
|
planIdentity: { type: 'string', minLength: 1, maxLength: 128 },
|
|
22
22
|
l1Id: { type: 'string', minLength: 1, maxLength: 128 },
|
|
23
|
-
|
|
23
|
+
l2Id: { type: 'string', minLength: 1, maxLength: 128 },
|
|
24
|
+
position: { type: 'string', pattern: '^L[1-9][0-9]*(\\.[1-9][0-9]*)?$', maxLength: 32 },
|
|
25
|
+
status: { const: 'DONE' },
|
|
24
26
|
verdict: { const: 'ACCEPT' },
|
|
25
27
|
commit: {
|
|
26
28
|
oneOf: [
|
|
@@ -43,24 +45,86 @@ export const gestaltOrgPlanCheckpointDynamicTool = {
|
|
|
43
45
|
],
|
|
44
46
|
},
|
|
45
47
|
findings: { type: 'string', minLength: 1, maxLength: 600 },
|
|
48
|
+
changes: { type: 'string', minLength: 1, maxLength: 600 },
|
|
49
|
+
files: { type: 'string', minLength: 1, maxLength: 600 },
|
|
46
50
|
tests: { type: 'string', minLength: 1, maxLength: 600 },
|
|
47
51
|
},
|
|
48
52
|
oneOf: [
|
|
49
|
-
{
|
|
53
|
+
{
|
|
54
|
+
properties: { kind: { const: 'l2Completed' } },
|
|
55
|
+
required: ['l1Id', 'l2Id', 'position', 'status', 'changes', 'files', 'tests'],
|
|
56
|
+
not: {
|
|
57
|
+
anyOf: [{ required: ['verdict'] }, { required: ['commit'] }, { required: ['findings'] }],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
properties: { kind: { const: 'l1Accepted' } },
|
|
62
|
+
required: ['l1Id', 'position', 'verdict', 'commit'],
|
|
63
|
+
not: {
|
|
64
|
+
anyOf: [
|
|
65
|
+
{ required: ['l2Id'] },
|
|
66
|
+
{ required: ['status'] },
|
|
67
|
+
{ required: ['changes'] },
|
|
68
|
+
{ required: ['files'] },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
50
72
|
{
|
|
51
73
|
properties: { kind: { const: 'terminalReviewAccepted' } },
|
|
74
|
+
required: ['verdict'],
|
|
52
75
|
not: {
|
|
53
|
-
anyOf: [
|
|
76
|
+
anyOf: [
|
|
77
|
+
{ required: ['l1Id'] },
|
|
78
|
+
{ required: ['l2Id'] },
|
|
79
|
+
{ required: ['position'] },
|
|
80
|
+
{ required: ['status'] },
|
|
81
|
+
{ required: ['commit'] },
|
|
82
|
+
{ required: ['changes'] },
|
|
83
|
+
{ required: ['files'] },
|
|
84
|
+
],
|
|
54
85
|
},
|
|
55
86
|
},
|
|
56
87
|
],
|
|
57
88
|
},
|
|
58
89
|
};
|
|
59
90
|
export function parseOrgPlanCheckpoint(value) {
|
|
60
|
-
if (!record(value) ||
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
value.
|
|
91
|
+
if (!record(value) || value.version !== 1 || !bounded(value.planIdentity, 128))
|
|
92
|
+
return null;
|
|
93
|
+
if (value.kind === 'l2Completed') {
|
|
94
|
+
if (!bounded(value.l1Id, 128) ||
|
|
95
|
+
!bounded(value.l2Id, 128) ||
|
|
96
|
+
!isL2Position(value.position) ||
|
|
97
|
+
value.status !== 'DONE' ||
|
|
98
|
+
!bounded(value.changes, 600) ||
|
|
99
|
+
!bounded(value.files, 600) ||
|
|
100
|
+
!bounded(value.tests, 600) ||
|
|
101
|
+
Object.keys(value).some((key) => ![
|
|
102
|
+
'version',
|
|
103
|
+
'kind',
|
|
104
|
+
'planIdentity',
|
|
105
|
+
'l1Id',
|
|
106
|
+
'l2Id',
|
|
107
|
+
'position',
|
|
108
|
+
'status',
|
|
109
|
+
'changes',
|
|
110
|
+
'files',
|
|
111
|
+
'tests',
|
|
112
|
+
].includes(key)))
|
|
113
|
+
return null;
|
|
114
|
+
return {
|
|
115
|
+
version: 1,
|
|
116
|
+
kind: 'l2Completed',
|
|
117
|
+
planIdentity: value.planIdentity,
|
|
118
|
+
l1Id: value.l1Id,
|
|
119
|
+
l2Id: value.l2Id,
|
|
120
|
+
position: value.position,
|
|
121
|
+
status: 'DONE',
|
|
122
|
+
changes: value.changes,
|
|
123
|
+
files: value.files,
|
|
124
|
+
tests: value.tests,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (value.verdict !== 'ACCEPT')
|
|
64
128
|
return null;
|
|
65
129
|
if (value.findings !== undefined && !bounded(value.findings, 600))
|
|
66
130
|
return null;
|
|
@@ -118,6 +182,9 @@ export function toOrgPlanCheckpointToolResponse() {
|
|
|
118
182
|
function isPosition(value) {
|
|
119
183
|
return typeof value === 'string' && /^L[1-9][0-9]*$/.test(value);
|
|
120
184
|
}
|
|
185
|
+
function isL2Position(value) {
|
|
186
|
+
return typeof value === 'string' && /^L[1-9][0-9]*\.[1-9][0-9]*$/.test(value);
|
|
187
|
+
}
|
|
121
188
|
function parseCommit(value) {
|
|
122
189
|
if (value.kind === 'notRequired' && Object.keys(value).length === 1)
|
|
123
190
|
return { kind: 'notRequired' };
|