@astralyn/pi 1.4.6 → 1.4.7
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/CHANGELOG.md +22 -0
- package/dist/bundle/chunks/{chunk-KDO6L76C.js → chunk-FODCTZXW.js} +4 -4
- package/dist/bundle/chunks/{chunk-EYKC6ESU.js → chunk-FYKNSJG6.js} +1 -1
- package/dist/bundle/chunks/{chunk-AXFWZIHH.js → chunk-MG5XDTXV.js} +1 -1
- package/dist/bundle/chunks/{chunk-ALHAFUHP.js → chunk-PU2IWWXV.js} +1 -1
- package/dist/bundle/chunks/{chunk-5M3YJ54Z.js → chunk-RO2VH6UZ.js} +1 -1
- package/dist/bundle/chunks/{chunk-RBTJBQWX.js → chunk-YJTSOLP2.js} +73 -74
- package/dist/bundle/chunks/{cli-FH77R7JR.js → cli-MEL7SGJD.js} +1 -1
- package/dist/bundle/chunks/{execute-5ZQUS52M.js → execute-4CWRNHPO.js} +1 -1
- package/dist/bundle/chunks/{runtime-R5CMHJ5P.js → runtime-R3X67XMR.js} +1 -1
- package/dist/bundle/chunks/{virtual-modules-KCQU7LOC.js → virtual-modules-PKEOKGYI.js} +1 -1
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/core/agent-session.d.ts +0 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +0 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/package-manager.d.ts +7 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +72 -1
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/resource-loader.d.ts +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +23 -7
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-schema.d.ts +7 -0
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +6 -0
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/skills.d.ts +10 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +23 -0
- package/dist/core/skills.js.map +1 -1
- package/dist/core/tasks/delivery.d.ts +11 -4
- package/dist/core/tasks/delivery.d.ts.map +1 -1
- package/dist/core/tasks/delivery.js +9 -9
- package/dist/core/tasks/delivery.js.map +1 -1
- package/dist/core/tasks/execution.d.ts +10 -3
- package/dist/core/tasks/execution.d.ts.map +1 -1
- package/dist/core/tasks/execution.js +72 -52
- package/dist/core/tasks/execution.js.map +1 -1
- package/dist/core/tasks/format.d.ts +0 -2
- package/dist/core/tasks/format.d.ts.map +1 -1
- package/dist/core/tasks/format.js +1 -16
- package/dist/core/tasks/format.js.map +1 -1
- package/dist/core/tasks/limits.d.ts +12 -1
- package/dist/core/tasks/limits.d.ts.map +1 -1
- package/dist/core/tasks/limits.js +20 -1
- package/dist/core/tasks/limits.js.map +1 -1
- package/dist/core/tasks/output.d.ts +6 -12
- package/dist/core/tasks/output.d.ts.map +1 -1
- package/dist/core/tasks/output.js +35 -32
- package/dist/core/tasks/output.js.map +1 -1
- package/dist/core/tasks/record.d.ts +45 -0
- package/dist/core/tasks/record.d.ts.map +1 -0
- package/dist/core/tasks/record.js +80 -0
- package/dist/core/tasks/record.js.map +1 -0
- package/dist/core/tasks/runtime.d.ts +14 -14
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +111 -93
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/session.d.ts +0 -1
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +7 -8
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/store.d.ts +18 -25
- package/dist/core/tasks/store.d.ts.map +1 -1
- package/dist/core/tasks/store.js +42 -40
- package/dist/core/tasks/store.js.map +1 -1
- package/dist/core/tasks/types.d.ts +96 -17
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +8 -7
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +18 -26
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +31 -29
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/usage-totals.d.ts +3 -0
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +15 -0
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/agent/progress.d.ts.map +1 -1
- package/dist/extensions/agent/progress.js +1 -11
- package/dist/extensions/agent/progress.js.map +1 -1
- package/dist/extensions/agent/tool.d.ts.map +1 -1
- package/dist/extensions/agent/tool.js +9 -5
- package/dist/extensions/agent/tool.js.map +1 -1
- package/dist/extensions/agent/worker.d.ts.map +1 -1
- package/dist/extensions/agent/worker.js +3 -5
- package/dist/extensions/agent/worker.js.map +1 -1
- package/dist/extensions/btw/agent.d.ts +1 -1
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +3 -20
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/cached-compaction/index.d.ts.map +1 -1
- package/dist/extensions/cached-compaction/index.js +3 -22
- package/dist/extensions/cached-compaction/index.js.map +1 -1
- package/dist/extensions/cached-compaction/render.d.ts +1 -0
- package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
- package/dist/extensions/cached-compaction/render.js +42 -14
- package/dist/extensions/cached-compaction/render.js.map +1 -1
- package/dist/extensions/deepwiki/client.d.ts.map +1 -1
- package/dist/extensions/deepwiki/client.js +6 -78
- package/dist/extensions/deepwiki/client.js.map +1 -1
- package/dist/extensions/deepwiki/transport.d.ts +3 -0
- package/dist/extensions/deepwiki/transport.d.ts.map +1 -0
- package/dist/extensions/deepwiki/transport.js +96 -0
- package/dist/extensions/deepwiki/transport.js.map +1 -0
- package/dist/extensions/provider/ui/builtin-data.d.ts +3 -3
- package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
- package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
- package/dist/extensions/provider/ui/compat.d.ts +3 -3
- package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
- package/dist/extensions/provider/ui/compat.js.map +1 -1
- package/dist/extensions/provider/ui/controls.d.ts +2 -2
- package/dist/extensions/provider/ui/controls.d.ts.map +1 -1
- package/dist/extensions/provider/ui/controls.js.map +1 -1
- package/dist/extensions/provider/ui/dialogs.d.ts +3 -3
- package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dialogs.js.map +1 -1
- package/dist/extensions/provider/ui/dictionary.d.ts +2 -2
- package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
- package/dist/extensions/provider/ui/dictionary.js.map +1 -1
- package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
- package/dist/extensions/provider/ui/editor.js +1 -3
- package/dist/extensions/provider/ui/editor.js.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.d.ts +2 -2
- package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
- package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
- package/dist/extensions/provider/ui/model-fields.d.ts +2 -2
- package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-fields.js.map +1 -1
- package/dist/extensions/provider/ui/model-options.d.ts +6 -6
- package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
- package/dist/extensions/provider/ui/model-options.js.map +1 -1
- package/dist/extensions/provider/ui/pane.d.ts +21 -12
- package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
- package/dist/extensions/provider/ui/pane.js.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.d.ts +3 -3
- package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
- package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.d.ts +2 -2
- package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
- package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
- package/dist/extensions/run-summary/format.js +1 -1
- package/dist/extensions/run-summary/format.js.map +1 -1
- package/dist/extensions/statusline/usage.d.ts.map +1 -1
- package/dist/extensions/statusline/usage.js +2 -6
- package/dist/extensions/statusline/usage.js.map +1 -1
- package/dist/extensions/tasks/tool/actions.d.ts +1 -1
- package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/actions.js +49 -106
- package/dist/extensions/tasks/tool/actions.js.map +1 -1
- package/dist/extensions/tasks/tool/constants.d.ts +1 -6
- package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/constants.js +1 -6
- package/dist/extensions/tasks/tool/constants.js.map +1 -1
- package/dist/extensions/tasks/tool/schema.d.ts +0 -3
- package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/schema.js +4 -13
- package/dist/extensions/tasks/tool/schema.js.map +1 -1
- package/dist/extensions/tasks/tool.d.ts.map +1 -1
- package/dist/extensions/tasks/tool.js +2 -2
- package/dist/extensions/tasks/tool.js.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.js +31 -33
- package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
- package/dist/extensions/tasks/ui/layout.d.ts +7 -7
- package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/layout.js +17 -19
- package/dist/extensions/tasks/ui/layout.js.map +1 -1
- package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/list.js +2 -3
- package/dist/extensions/tasks/ui/list.js.map +1 -1
- package/dist/extensions/tasks/ui/manager.d.ts +16 -7
- package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/manager.js +163 -131
- package/dist/extensions/tasks/ui/manager.js.map +1 -1
- package/dist/extensions/tasks/ui/model.d.ts +25 -0
- package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/model.js +4 -0
- package/dist/extensions/tasks/ui/model.js.map +1 -1
- package/dist/extensions/tasks/ui/render.d.ts +1 -1
- package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/render.js +11 -7
- package/dist/extensions/tasks/ui/render.js.map +1 -1
- package/dist/extensions/tasks/ui/status.d.ts +15 -0
- package/dist/extensions/tasks/ui/status.d.ts.map +1 -0
- package/dist/extensions/tasks/ui/status.js +16 -0
- package/dist/extensions/tasks/ui/status.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts +14 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +258 -7
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/status-marker.d.ts +2 -1
- package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-marker.js +0 -1
- package/dist/modes/interactive/components/status-marker.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +7 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/duration.d.ts +3 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +17 -0
- package/dist/utils/duration.js.map +1 -0
- package/dist/utils/number.d.ts +3 -0
- package/dist/utils/number.d.ts.map +1 -0
- package/dist/utils/number.js +5 -0
- package/dist/utils/number.js.map +1 -0
- package/docs/bundled/extensions/agent.md +3 -3
- package/docs/bundled/extensions/cached-compaction.md +13 -4
- package/docs/bundled/extensions/deepwiki.md +3 -1
- package/docs/extensions.md +5 -5
- package/docs/packages.md +5 -3
- package/docs/sdk.md +1 -1
- package/docs/session-format.md +1 -1
- package/docs/settings.md +11 -0
- package/docs/skills.md +23 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/schemas/settings.schema.json +36 -0
- package/dist/extensions/deepwiki/http.d.ts +0 -13
- package/dist/extensions/deepwiki/http.d.ts.map +0 -1
- package/dist/extensions/deepwiki/http.js +0 -88
- package/dist/extensions/deepwiki/http.js.map +0 -1
- package/dist/extensions/tasks/ui/task-view.d.ts +0 -8
- package/dist/extensions/tasks/ui/task-view.d.ts.map +0 -1
- package/dist/extensions/tasks/ui/task-view.js +0 -13
- package/dist/extensions/tasks/ui/task-view.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/dictionary.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2DAA2D,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EAEf,WAAW,GACX,MAAM,gBAAgB,CAAC;AAExB,SAAS,YAAY,CAAC,MAAmB;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IACpC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7E,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/G,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAGD,MAAM,gBAAgB,GAA6B,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnG,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAWvC,MAAM,OAAO,QAAQ;IAUpB,YAAY,IAAgB,EAAE,KAAkB,EAAE,OAAe;QARzD,UAAK,GAAG,CAAC,CAAC;QACV,SAAI,GAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAElC,YAAO,GAAG,KAAK,CAAC;QAMvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,CAAC,KAAK,GAAG,YAAY,OAAO,EAAE,CAAC;IACpC,CAAC;IAEO,IAAI;QACX,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC1E,CAAC,CAAE,KAAiC;YACpC,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAEO,OAAO;QACd,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAa;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,KAAK,GAAa;YACvB,cAAc,CAAC,KAAK,EAAE,iEAAiE,EAAE,KAAK,CAAC;SAC/F,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,+EAA+E;QAC/E,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC;YACvC,KAAK,CAAC,IAAI,CACT,kBAAkB,CAAC,KAAK,EAAE;gBACzB,QAAQ,EAAE,GAAG;gBACb,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC;gBAC5B,MAAM;gBACN,WAAW,EAAE,IAAI,CAAC,OAAO;gBACzB,KAAK;aACL,CAAC,CACF,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CACT,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YAClE,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,KAAK;SACL,CAAC,CACF,CAAC;QACF,IAAI,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,KAAK,CAAC;IACd,CAAC;IAED,YAAY;QACX,wEAAwE;QACxE,oEAAoE;QACpE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACvE,CAAC;IAEO,UAAU,CAAC,KAAa;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACb,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAClF,KAAK,UAAU,CAAC,CAAC,CAAC;gBACjB,OAAO;oBACN,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,eAAe,EAAE,KAAK,CAAC;oBACxD,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAC3C,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE;wBAC5B,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,KAAK;wBAChC,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,KAAK;qBACL,CAAC,CACF;iBACD,CAAC;YACH,CAAC;YACD,KAAK,WAAW;gBACf,OAAO;oBACN,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;oBAC1D,kBAAkB,CAAC,KAAK,EAAE;wBACzB,QAAQ,EAAE,IAAI,CAAC,GAAG;wBAClB,MAAM,EAAE,IAAI;wBACZ,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,OAAO,EAAE,IAAI,CAAC,MAAM;wBACpB,KAAK;qBACL,CAAC;iBACF,CAAC;YACH,KAAK,UAAU;gBACd,OAAO;oBACN,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC;oBACrD,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAChD,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;wBAC9B,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,KAAK;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,KAAK;qBACL,CAAC,CACF;iBACD,CAAC;YACH,KAAK,SAAS;gBACb,OAAO;oBACN,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC;oBAClD,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC1C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;wBAC9B,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,KAAK;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,KAAK;qBACL,CAAC,CACF;iBACD,CAAC;YACH,KAAK,UAAU;gBACd,OAAO;oBACN,cAAc,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,gBAAgB,EAAE,KAAK,CAAC;oBACzD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC3D,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;wBAC9B,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC,KAAK;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO;wBACzB,KAAK;qBACL,CAAC,CACF;iBACD,CAAC;YACH;gBACC,OAAO,EAAE,CAAC;QACZ,CAAC;IACF,CAAC;IAED,WAAW,CAAC,IAAY;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACf,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC;oBAAE,OAAO;gBACrF,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;YACR,KAAK,UAAU;gBACd,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;oBACrB,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAE,CAAC;oBACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,OAAO;YACR,KAAK,UAAU;gBACd,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;oBACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;oBACrB,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;gBACH,OAAO;YACR,KAAK,SAAS;gBACb,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;oBACrB,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBAC3E,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,CAAC,CAAC,CAAC;gBACH,OAAO;YACR,KAAK,UAAU;gBACd,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;oBACxC,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,UAAU,CACd,IAAI,CAAC,GAAG,EACR,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,CACjF,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,OAAO;YACR,KAAK,MAAM;gBACV,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACtB,OAAO;QACT,CAAC;IACF,CAAC;IAEO,UAAU,CACjB,IAAY,EACZ,IAA0C,EAC1C,KAAa,EACb,MAA+B;QAE/B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEO,UAAU,CAAC,IAAY;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,0BAA0B,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO;QACR,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,+CAA+C;gBAC/C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;oBAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;wBACjB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;wBACvB,IAAI,CAAC,GAAG,EAAE,CAAC;4BACV,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC;4BACtC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC5B,CAAC;wBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;4BACrC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,mBAAmB,CAAC;4BACxC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;wBAC5B,CAAC;wBACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;wBACvB,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;wBAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrB,CAAC;oBACD,QAAQ,EAAE,GAAG,EAAE;wBACd,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wBAC7B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;wBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrB,CAAC;iBACD,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;YACR,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7B,OAAO;YACR,CAAC;YACD,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,CAAC,0CAA0C;YACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,KAAgC,CAAC;gBAChD,IACC,MAAM,CAAC,IAAI,KAAK,kBAAkB;oBAClC,MAAM,CAAC,IAAI,KAAK,iBAAiB;oBACjC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAChC,CAAC;oBACF,IAAI,CAAC,IAAI,GAAG;wBACX,IAAI,EAAE,UAAU;wBAChB,GAAG;wBACH,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACxE,CAAC;oBACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO;gBACR,CAAC;gBACD,OAAO,CAAC,qCAAqC;YAC9C,CAAC;YACD,MAAM,IAAI,GAAwB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAClF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;gBAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;gBACpD,QAAQ,EAAE,GAAG,EAAE;oBACd,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,CAAC;aACD,CAAC,CAAC;YACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,GAAW,EAAE,IAAmB;QACzD,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC;oBAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;oBACpD,QAAQ,EAAE,GAAG,EAAE;wBACd,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wBAC7B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;wBACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrB,CAAC;iBACD,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;YACR,CAAC;YACD,KAAK,SAAS;gBACb,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;YACR,KAAK,MAAM;gBACV,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC3B,OAAO;YACR,KAAK,MAAM;gBACV,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;QACT,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,GAAW,EAAE,IAAyB,EAAE,GAAW;QACvE,IAAI,KAAK,GAAoB,GAAG,CAAC;QACjC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,oBAAoB,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;YACR,CAAC;YACD,KAAK,GAAG,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,KAAc;QAC7C,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU,CAAC,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACxG,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC;IACvE,CAAC;IAED,KAAK;QACJ,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACf,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjG,KAAK,MAAM;gBACV,OAAO;oBACN,OAAO,CAAC,oBAAoB,EAAE,YAAY,CAAC;oBAC3C,OAAO,CAAC,0BAA0B,EAAE,QAAQ,CAAC;oBAC7C,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;iBACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd;gBACC,OAAO;oBACN,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;oBACxB,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC;oBACvC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC;iBACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACF,CAAC;CACD","sourcesContent":["/** Open chat-template dictionaries, with typed value-entry states. */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { THINKING_VARIABLES, validateChatTemplateKwarg } from \"../compat-fields.ts\";\nimport { truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport {\n\trenderInfoLine,\n\trenderKeyValueLine,\n\trenderPlainLine,\n\ttype ScrollWindowInfo,\n\tValueEditor,\n} from \"./value-row.ts\";\n\nfunction compatObject(handle: ModelHandle): Record<string, unknown> {\n\tconst compat = handle.read().compat;\n\treturn typeof compat === \"object\" && compat !== null && !Array.isArray(compat)\n\t\t? (compat as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction scalarText(value: unknown): string {\n\tif (value === null) return \"null\";\n\tif (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\treturn JSON.stringify(value) ?? String(value);\n}\n\ntype DictValueKind = \"string\" | \"number\" | \"boolean\" | \"null\" | \"$var\";\nconst DICT_VALUE_KINDS: readonly DictValueKind[] = [\"string\", \"number\", \"boolean\", \"null\", \"$var\"];\nconst VAR_OPTIONS = THINKING_VARIABLES;\n\ntype DictMode =\n\t| { type: \"list\" }\n\t| { type: \"keyEdit\"; editor: ValueEditor }\n\t| { type: \"kindPick\"; key: string; index: number }\n\t| { type: \"valueEdit\"; key: string; kind: \"string\" | \"number\"; editor: ValueEditor }\n\t| { type: \"boolPick\"; key: string; index: number }\n\t| { type: \"varPick\"; key: string; index: number }\n\t| { type: \"omitPick\"; key: string; $var: (typeof VAR_OPTIONS)[number]; index: number };\n\nexport class DictPane implements EditorPane {\n\treadonly crumb: string;\n\tprivate index = 0;\n\tprivate mode: DictMode = { type: \"list\" };\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: EditorHost;\n\tprivate readonly model: ModelHandle;\n\tprivate readonly dictKey: string;\n\tconstructor(host: EditorHost, model: ModelHandle, dictKey: string) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t\tthis.dictKey = dictKey;\n\n\t\tthis.crumb = `compat · ${dictKey}`;\n\t}\n\n\tprivate dict(): Record<string, unknown> {\n\t\tconst value = compatObject(this.model)[this.dictKey];\n\t\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t\t? (value as Record<string, unknown>)\n\t\t\t: {};\n\t}\n\n\tprivate entries(): [string, unknown][] {\n\t\treturn Object.entries(this.dict());\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst lines: string[] = [\n\t\t\trenderInfoLine(theme, `free-form keys; values: string · number · boolean · null · $var`, width),\n\t\t];\n\t\tif (this.mode.type !== \"list\") {\n\t\t\tlines.push(...this.renderMode(width));\n\t\t\tif (this.error) lines.push(renderInfoLine(theme, this.error, width));\n\t\t\treturn lines;\n\t\t}\n\t\tconst entries = this.entries();\n\t\t// All entries render; the editor's fixed window scrolls around scrollWindow().\n\t\tfor (const [rowIndex, [key, value]] of entries.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: key,\n\t\t\t\t\tvalueText: scalarText(value),\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\trenderPlainLine(theme, \"+ Add Entry\", {\n\t\t\t\tactive: this.index === entries.length && this.mode.type === \"list\",\n\t\t\t\tpaneFocused: this.focused,\n\t\t\t\twidth,\n\t\t\t}),\n\t\t);\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The format header pins above; errors pin below. Entry flows are short\n\t\t// enough to fit, so only the list mode reports a meaningful cursor.\n\t\tif (this.mode.type !== \"list\") return { top: 1, bottom: this.error ? 1 : 0 };\n\t\treturn { top: 1, bottom: this.error ? 1 : 0, cursor: 1 + this.index };\n\t}\n\n\tprivate renderMode(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst mode = this.mode;\n\t\tswitch (mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\t\treturn [renderInfoLine(theme, \"new key:\", width), mode.editor.renderLine(width)];\n\t\t\tcase \"kindPick\": {\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · value kind`, width),\n\t\t\t\t\t...DICT_VALUE_KINDS.map((kind, kindIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, kind, {\n\t\t\t\t\t\t\tactive: kindIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase \"valueEdit\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · ${mode.kind}`, width),\n\t\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\t\tkeyLabel: mode.key,\n\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\tediting: mode.editor,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t];\n\t\t\tcase \"boolPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · boolean`, width),\n\t\t\t\t\t...[\"true\", \"false\"].map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tcase \"varPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · $var`, width),\n\t\t\t\t\t...VAR_OPTIONS.map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tcase \"omitPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · omitWhenOff`, width),\n\t\t\t\t\t...[\"default\", \"true\", \"false\"].map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst mode = this.mode;\n\t\tswitch (mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\tcase \"valueEdit\":\n\t\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\t\tmode.editor.handleInput(data);\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"kindPick\":\n\t\t\t\tthis.handlePick(data, mode, DICT_VALUE_KINDS.length, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tconst kind = DICT_VALUE_KINDS[index]!;\n\t\t\t\t\tthis.startValueForKind(key, kind);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"boolPick\":\n\t\t\t\tthis.handlePick(data, mode, 2, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.writeEntry(key, index === 0);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"varPick\":\n\t\t\t\tthis.handlePick(data, mode, VAR_OPTIONS.length, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tthis.mode = { type: \"omitPick\", key, $var: VAR_OPTIONS[index]!, index: 0 };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"omitPick\":\n\t\t\t\tthis.handlePick(data, mode, 3, (index) => {\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.writeEntry(\n\t\t\t\t\t\tmode.key,\n\t\t\t\t\t\tindex === 0 ? { $var: mode.$var } : { $var: mode.$var, omitWhenOff: index === 1 },\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"list\":\n\t\t\t\tthis.handleList(data);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate handlePick(\n\t\tdata: string,\n\t\tmode: Extract<DictMode, { index: number }>,\n\t\tcount: number,\n\t\tchoose: (index: number) => void,\n\t): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst index = mode.index;\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tmode.index = index === 0 ? count - 1 : index - 1;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tmode.index = (index + 1) % count;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.mode = { type: \"list\" };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) choose(index);\n\t}\n\n\tprivate handleList(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst rowCount = this.entries().length + 1;\n\t\tconst next = moveSelection(kb, data, this.index, rowCount);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.provider.removeEntry\")) {\n\t\t\tconst entry = this.entries()[this.index];\n\t\t\tif (!entry) return;\n\t\t\tthis.model.setField([\"compat\", this.dictKey, entry[0]], DELETE);\n\t\t\tthis.index = Math.max(0, Math.min(this.index, this.entries().length - 1));\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\") || kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst entry = this.entries()[this.index];\n\t\t\tif (!entry) {\n\t\t\t\t// + Add Entry: key first, then the value flow.\n\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\tonCommit: (raw) => {\n\t\t\t\t\t\tconst key = raw.trim();\n\t\t\t\t\t\tif (!key) {\n\t\t\t\t\t\t\tthis.error = \"Key must be non-empty.\";\n\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Object.hasOwn(this.dict(), key)) {\n\t\t\t\t\t\t\tthis.error = `\"${key}\" already exists.`;\n\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.mode = { type: \"kindPick\", key, index: 0 };\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\teditor.focused = this.focused;\n\t\t\t\tthis.mode = { type: \"keyEdit\", editor };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [key, value] = entry;\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tthis.writeEntry(key, !value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value === null) return; // null entries: remove + re-add to change\n\t\t\tif (typeof value === \"object\") {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tif (\n\t\t\t\t\trecord.$var === \"thinking.enabled\" ||\n\t\t\t\t\trecord.$var === \"thinking.effort\" ||\n\t\t\t\t\trecord.$var === \"thinking.budget\"\n\t\t\t\t) {\n\t\t\t\t\tthis.mode = {\n\t\t\t\t\t\ttype: \"omitPick\",\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\t$var: record.$var,\n\t\t\t\t\t\tindex: record.omitWhenOff === undefined ? 0 : record.omitWhenOff ? 1 : 2,\n\t\t\t\t\t};\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn; // unexpected object: remove + re-add\n\t\t\t}\n\t\t\tconst kind: \"string\" | \"number\" = typeof value === \"number\" ? \"number\" : \"string\";\n\t\t\tconst editor = new ValueEditor({\n\t\t\t\tonCommit: (raw) => this.commitScalar(key, kind, raw),\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t},\n\t\t\t});\n\t\t\teditor.beginTweak(String(value));\n\t\t\teditor.focused = this.focused;\n\t\t\tthis.mode = { type: \"valueEdit\", key, kind, editor };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate startValueForKind(key: string, kind: DictValueKind): void {\n\t\tswitch (kind) {\n\t\t\tcase \"string\":\n\t\t\tcase \"number\": {\n\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\tonCommit: (raw) => this.commitScalar(key, kind, raw),\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\teditor.focused = this.focused;\n\t\t\t\tthis.mode = { type: \"valueEdit\", key, kind, editor };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"boolean\":\n\t\t\t\tthis.mode = { type: \"boolPick\", key, index: 0 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"null\":\n\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\tthis.writeEntry(key, null);\n\t\t\t\treturn;\n\t\t\tcase \"$var\":\n\t\t\t\tthis.mode = { type: \"varPick\", key, index: 0 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate commitScalar(key: string, kind: \"string\" | \"number\", raw: string): void {\n\t\tlet value: string | number = raw;\n\t\tif (kind === \"number\") {\n\t\t\tconst parsed = Number(raw.trim());\n\t\t\tif (!Number.isFinite(parsed)) {\n\t\t\t\tthis.error = `${key} must be a number.`;\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvalue = parsed;\n\t\t}\n\t\tconst invalid = validateChatTemplateKwarg(value);\n\t\tif (invalid) {\n\t\t\tthis.error = invalid;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.error = undefined;\n\t\tthis.mode = { type: \"list\" };\n\t\tthis.writeEntry(key, value);\n\t}\n\n\tprivate writeEntry(key: string, value: unknown): void {\n\t\tconst invalid = validateChatTemplateKwarg(value);\n\t\tif (invalid) {\n\t\t\tthis.error = invalid;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.model.setField([\"compat\", this.dictKey, key], value);\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.mode.type === \"keyEdit\" || this.mode.type === \"valueEdit\") this.mode.editor.focused = focused;\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.mode.type === \"keyEdit\" || this.mode.type === \"valueEdit\";\n\t}\n\n\thints(): string {\n\t\tswitch (this.mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\tcase \"valueEdit\":\n\t\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\t\tcase \"list\":\n\t\t\t\treturn [\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"edit / add\"),\n\t\t\t\t\tkeyHint(\"app.provider.removeEntry\", \"remove\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t\t\t].join(\" \");\n\t\t\tdefault:\n\t\t\t\treturn [\n\t\t\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"choose\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"cancel\"),\n\t\t\t\t].join(\" \");\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/dictionary.ts"],"names":[],"mappings":"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","sourcesContent":["/** Open chat-template dictionaries, with typed value-entry states. */\n\nimport \"../keybindings.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport { THINKING_VARIABLES, validateChatTemplateKwarg } from \"../compat-fields.ts\";\nimport { truncate } from \"../constants.ts\";\nimport { DELETE } from \"../store.ts\";\nimport { moveSelection } from \"./controls.ts\";\nimport type { EditorPane, ModelHandle, PaneHost } from \"./pane.ts\";\nimport {\n\trenderInfoLine,\n\trenderKeyValueLine,\n\trenderPlainLine,\n\ttype ScrollWindowInfo,\n\tValueEditor,\n} from \"./value-row.ts\";\n\nfunction compatObject(handle: ModelHandle): Record<string, unknown> {\n\tconst compat = handle.read().compat;\n\treturn typeof compat === \"object\" && compat !== null && !Array.isArray(compat)\n\t\t? (compat as Record<string, unknown>)\n\t\t: {};\n}\n\nfunction scalarText(value: unknown): string {\n\tif (value === null) return \"null\";\n\tif (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n\treturn JSON.stringify(value) ?? String(value);\n}\n\ntype DictValueKind = \"string\" | \"number\" | \"boolean\" | \"null\" | \"$var\";\nconst DICT_VALUE_KINDS: readonly DictValueKind[] = [\"string\", \"number\", \"boolean\", \"null\", \"$var\"];\nconst VAR_OPTIONS = THINKING_VARIABLES;\n\ntype DictMode =\n\t| { type: \"list\" }\n\t| { type: \"keyEdit\"; editor: ValueEditor }\n\t| { type: \"kindPick\"; key: string; index: number }\n\t| { type: \"valueEdit\"; key: string; kind: \"string\" | \"number\"; editor: ValueEditor }\n\t| { type: \"boolPick\"; key: string; index: number }\n\t| { type: \"varPick\"; key: string; index: number }\n\t| { type: \"omitPick\"; key: string; $var: (typeof VAR_OPTIONS)[number]; index: number };\n\nexport class DictPane implements EditorPane {\n\treadonly crumb: string;\n\tprivate index = 0;\n\tprivate mode: DictMode = { type: \"list\" };\n\tprivate error: string | undefined;\n\tprivate focused = false;\n\n\tprivate readonly host: PaneHost;\n\tprivate readonly model: ModelHandle;\n\tprivate readonly dictKey: string;\n\tconstructor(host: PaneHost, model: ModelHandle, dictKey: string) {\n\t\tthis.host = host;\n\t\tthis.model = model;\n\t\tthis.dictKey = dictKey;\n\n\t\tthis.crumb = `compat · ${dictKey}`;\n\t}\n\n\tprivate dict(): Record<string, unknown> {\n\t\tconst value = compatObject(this.model)[this.dictKey];\n\t\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t\t? (value as Record<string, unknown>)\n\t\t\t: {};\n\t}\n\n\tprivate entries(): [string, unknown][] {\n\t\treturn Object.entries(this.dict());\n\t}\n\n\trender(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst lines: string[] = [\n\t\t\trenderInfoLine(theme, `free-form keys; values: string · number · boolean · null · $var`, width),\n\t\t];\n\t\tif (this.mode.type !== \"list\") {\n\t\t\tlines.push(...this.renderMode(width));\n\t\t\tif (this.error) lines.push(renderInfoLine(theme, this.error, width));\n\t\t\treturn lines;\n\t\t}\n\t\tconst entries = this.entries();\n\t\t// All entries render; the editor's fixed window scrolls around scrollWindow().\n\t\tfor (const [rowIndex, [key, value]] of entries.entries()) {\n\t\t\tconst active = rowIndex === this.index;\n\t\t\tlines.push(\n\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\tkeyLabel: key,\n\t\t\t\t\tvalueText: scalarText(value),\n\t\t\t\t\tactive,\n\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\twidth,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\trenderPlainLine(theme, \"+ Add Entry\", {\n\t\t\t\tactive: this.index === entries.length && this.mode.type === \"list\",\n\t\t\t\tpaneFocused: this.focused,\n\t\t\t\twidth,\n\t\t\t}),\n\t\t);\n\t\tif (this.error) lines.push(theme.fg(\"error\", truncate(this.error, Math.max(10, width - 2))));\n\t\treturn lines;\n\t}\n\n\tscrollWindow(): ScrollWindowInfo {\n\t\t// The format header pins above; errors pin below. Entry flows are short\n\t\t// enough to fit, so only the list mode reports a meaningful cursor.\n\t\tif (this.mode.type !== \"list\") return { top: 1, bottom: this.error ? 1 : 0 };\n\t\treturn { top: 1, bottom: this.error ? 1 : 0, cursor: 1 + this.index };\n\t}\n\n\tprivate renderMode(width: number): string[] {\n\t\tconst theme = this.host.theme;\n\t\tconst mode = this.mode;\n\t\tswitch (mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\t\treturn [renderInfoLine(theme, \"new key:\", width), mode.editor.renderLine(width)];\n\t\t\tcase \"kindPick\": {\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · value kind`, width),\n\t\t\t\t\t...DICT_VALUE_KINDS.map((kind, kindIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, kind, {\n\t\t\t\t\t\t\tactive: kindIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\t}\n\t\t\tcase \"valueEdit\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · ${mode.kind}`, width),\n\t\t\t\t\trenderKeyValueLine(theme, {\n\t\t\t\t\t\tkeyLabel: mode.key,\n\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\tediting: mode.editor,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t}),\n\t\t\t\t];\n\t\t\tcase \"boolPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · boolean`, width),\n\t\t\t\t\t...[\"true\", \"false\"].map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tcase \"varPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · $var`, width),\n\t\t\t\t\t...VAR_OPTIONS.map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tcase \"omitPick\":\n\t\t\t\treturn [\n\t\t\t\t\trenderInfoLine(theme, `${mode.key} · omitWhenOff`, width),\n\t\t\t\t\t...[\"default\", \"true\", \"false\"].map((option, optionIndex) =>\n\t\t\t\t\t\trenderPlainLine(theme, option, {\n\t\t\t\t\t\t\tactive: optionIndex === mode.index,\n\t\t\t\t\t\t\tpaneFocused: this.focused,\n\t\t\t\t\t\t\twidth,\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t];\n\t\t\tdefault:\n\t\t\t\treturn [];\n\t\t}\n\t}\n\n\thandleInput(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst mode = this.mode;\n\t\tswitch (mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\tcase \"valueEdit\":\n\t\t\t\tif (kb.matches(data, \"tui.select.up\") || kb.matches(data, \"tui.select.down\")) return;\n\t\t\t\tmode.editor.handleInput(data);\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"kindPick\":\n\t\t\t\tthis.handlePick(data, mode, DICT_VALUE_KINDS.length, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tconst kind = DICT_VALUE_KINDS[index]!;\n\t\t\t\t\tthis.startValueForKind(key, kind);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"boolPick\":\n\t\t\t\tthis.handlePick(data, mode, 2, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.writeEntry(key, index === 0);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"varPick\":\n\t\t\t\tthis.handlePick(data, mode, VAR_OPTIONS.length, (index) => {\n\t\t\t\t\tconst key = mode.key;\n\t\t\t\t\tthis.mode = { type: \"omitPick\", key, $var: VAR_OPTIONS[index]!, index: 0 };\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"omitPick\":\n\t\t\t\tthis.handlePick(data, mode, 3, (index) => {\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.writeEntry(\n\t\t\t\t\t\tmode.key,\n\t\t\t\t\t\tindex === 0 ? { $var: mode.$var } : { $var: mode.$var, omitWhenOff: index === 1 },\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"list\":\n\t\t\t\tthis.handleList(data);\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate handlePick(\n\t\tdata: string,\n\t\tmode: Extract<DictMode, { index: number }>,\n\t\tcount: number,\n\t\tchoose: (index: number) => void,\n\t): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst index = mode.index;\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tmode.index = index === 0 ? count - 1 : index - 1;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tmode.index = (index + 1) % count;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.mode = { type: \"list\" };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) choose(index);\n\t}\n\n\tprivate handleList(data: string): void {\n\t\tconst kb = this.host.keybindings;\n\t\tconst rowCount = this.entries().length + 1;\n\t\tconst next = moveSelection(kb, data, this.index, rowCount);\n\t\tif (next !== undefined) {\n\t\t\tthis.index = next;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) {\n\t\t\tthis.host.popPane();\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.provider.removeEntry\")) {\n\t\t\tconst entry = this.entries()[this.index];\n\t\t\tif (!entry) return;\n\t\t\tthis.model.setField([\"compat\", this.dictKey, entry[0]], DELETE);\n\t\t\tthis.index = Math.max(0, Math.min(this.index, this.entries().length - 1));\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\") || kb.matches(data, \"app.list.toggle\")) {\n\t\t\tconst entry = this.entries()[this.index];\n\t\t\tif (!entry) {\n\t\t\t\t// + Add Entry: key first, then the value flow.\n\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\tonCommit: (raw) => {\n\t\t\t\t\t\tconst key = raw.trim();\n\t\t\t\t\t\tif (!key) {\n\t\t\t\t\t\t\tthis.error = \"Key must be non-empty.\";\n\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Object.hasOwn(this.dict(), key)) {\n\t\t\t\t\t\t\tthis.error = `\"${key}\" already exists.`;\n\t\t\t\t\t\t\treturn this.host.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.mode = { type: \"kindPick\", key, index: 0 };\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\teditor.focused = this.focused;\n\t\t\t\tthis.mode = { type: \"keyEdit\", editor };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst [key, value] = entry;\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tthis.writeEntry(key, !value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value === null) return; // null entries: remove + re-add to change\n\t\t\tif (typeof value === \"object\") {\n\t\t\t\tconst record = value as Record<string, unknown>;\n\t\t\t\tif (\n\t\t\t\t\trecord.$var === \"thinking.enabled\" ||\n\t\t\t\t\trecord.$var === \"thinking.effort\" ||\n\t\t\t\t\trecord.$var === \"thinking.budget\"\n\t\t\t\t) {\n\t\t\t\t\tthis.mode = {\n\t\t\t\t\t\ttype: \"omitPick\",\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\t$var: record.$var,\n\t\t\t\t\t\tindex: record.omitWhenOff === undefined ? 0 : record.omitWhenOff ? 1 : 2,\n\t\t\t\t\t};\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn; // unexpected object: remove + re-add\n\t\t\t}\n\t\t\tconst kind: \"string\" | \"number\" = typeof value === \"number\" ? \"number\" : \"string\";\n\t\t\tconst editor = new ValueEditor({\n\t\t\t\tonCommit: (raw) => this.commitScalar(key, kind, raw),\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\tthis.host.refresh();\n\t\t\t\t},\n\t\t\t});\n\t\t\teditor.beginTweak(String(value));\n\t\t\teditor.focused = this.focused;\n\t\t\tthis.mode = { type: \"valueEdit\", key, kind, editor };\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate startValueForKind(key: string, kind: DictValueKind): void {\n\t\tswitch (kind) {\n\t\t\tcase \"string\":\n\t\t\tcase \"number\": {\n\t\t\t\tconst editor = new ValueEditor({\n\t\t\t\t\tonCommit: (raw) => this.commitScalar(key, kind, raw),\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\t\t\tthis.error = undefined;\n\t\t\t\t\t\tthis.host.refresh();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\teditor.focused = this.focused;\n\t\t\t\tthis.mode = { type: \"valueEdit\", key, kind, editor };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"boolean\":\n\t\t\t\tthis.mode = { type: \"boolPick\", key, index: 0 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"null\":\n\t\t\t\tthis.mode = { type: \"list\" };\n\t\t\t\tthis.writeEntry(key, null);\n\t\t\t\treturn;\n\t\t\tcase \"$var\":\n\t\t\t\tthis.mode = { type: \"varPick\", key, index: 0 };\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate commitScalar(key: string, kind: \"string\" | \"number\", raw: string): void {\n\t\tlet value: string | number = raw;\n\t\tif (kind === \"number\") {\n\t\t\tconst parsed = Number(raw.trim());\n\t\t\tif (!Number.isFinite(parsed)) {\n\t\t\t\tthis.error = `${key} must be a number.`;\n\t\t\t\tthis.host.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvalue = parsed;\n\t\t}\n\t\tconst invalid = validateChatTemplateKwarg(value);\n\t\tif (invalid) {\n\t\t\tthis.error = invalid;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.error = undefined;\n\t\tthis.mode = { type: \"list\" };\n\t\tthis.writeEntry(key, value);\n\t}\n\n\tprivate writeEntry(key: string, value: unknown): void {\n\t\tconst invalid = validateChatTemplateKwarg(value);\n\t\tif (invalid) {\n\t\t\tthis.error = invalid;\n\t\t\tthis.host.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.model.setField([\"compat\", this.dictKey, key], value);\n\t}\n\n\tsetFocused(focused: boolean): void {\n\t\tthis.focused = focused;\n\t\tif (this.mode.type === \"keyEdit\" || this.mode.type === \"valueEdit\") this.mode.editor.focused = focused;\n\t}\n\n\tisEditing(): boolean {\n\t\treturn this.mode.type === \"keyEdit\" || this.mode.type === \"valueEdit\";\n\t}\n\n\thints(): string {\n\t\tswitch (this.mode.type) {\n\t\t\tcase \"keyEdit\":\n\t\t\tcase \"valueEdit\":\n\t\t\t\treturn [keyHint(\"tui.input.submit\", \"save\"), keyHint(\"tui.select.cancel\", \"cancel\")].join(\" \");\n\t\t\tcase \"list\":\n\t\t\t\treturn [\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"edit / add\"),\n\t\t\t\t\tkeyHint(\"app.provider.removeEntry\", \"remove\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t\t\t].join(\" \");\n\t\t\tdefault:\n\t\t\t\treturn [\n\t\t\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\t\t\tkeyHint(\"tui.select.confirm\", \"choose\"),\n\t\t\t\t\tkeyHint(\"tui.select.cancel\", \"cancel\"),\n\t\t\t\t].join(\" \");\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/editor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -237,7 +237,7 @@ export class ProviderEditorScreen {
|
|
|
237
237
|
this.refresh();
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
|
-
if (this.
|
|
240
|
+
if (this.options.currentModel?.provider === this.options.providerId) {
|
|
241
241
|
this.host.notify("The current model's provider cannot be deleted; switch models with /model first.", "error");
|
|
242
242
|
return;
|
|
243
243
|
}
|
|
@@ -404,7 +404,6 @@ export class ProviderEditorScreen {
|
|
|
404
404
|
const store = this.options.store;
|
|
405
405
|
const providerId = this.options.providerId;
|
|
406
406
|
return {
|
|
407
|
-
tui: this.tui,
|
|
408
407
|
theme: this.theme,
|
|
409
408
|
keybindings: this.keybindings,
|
|
410
409
|
store,
|
|
@@ -423,7 +422,6 @@ export class ProviderEditorScreen {
|
|
|
423
422
|
commitModelDraft: () => this.commitModelDraft(),
|
|
424
423
|
discardModelDraft: () => this.discardModelDraft(),
|
|
425
424
|
isCurrentModel: (modelId) => this.options.currentModel?.provider === providerId && this.options.currentModel.id === modelId,
|
|
426
|
-
isCurrentProvider: () => this.options.currentModel?.provider === providerId,
|
|
427
425
|
setFetchStatus: (status) => {
|
|
428
426
|
this.fetchStatus = status;
|
|
429
427
|
this.refresh();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Two-pane provider editor.\n *\n * Left column groups connection, models, and management actions. The right\n * column hosts the selected item's field pane and sub-pane stack. Both columns\n * scroll inside a fixed-height frame; below the wide-layout threshold, only\n * the focused column is shown. Typing on a value row overwrites, Enter tweaks\n * or enters, ←/→ switch panes, and Esc cancels/pops/backs out.\n */\n\nimport \"../keybindings.ts\";\nimport { type Component, type Focusable, type TUI, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport type { ModelRegistry } from \"../../../core/model-registry.ts\";\nimport type { ModelRuntime } from \"../../../core/model-runtime.ts\";\nimport { DynamicBorder } from \"../../../modes/interactive/components/dynamic-border.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport { isBuiltinProviderId } from \"../catalog.ts\";\nimport { effectiveModelSettings, hasProviderSettings } from \"../configuration.ts\";\nimport { fetchProviderModels, importProviderModels } from \"../connection.ts\";\nimport { type DraftModelHandle, ProviderEdits } from \"../editing.ts\";\nimport type { RefreshCoordinator } from \"../refresh.ts\";\nimport type { ModelsJsonStore } from \"../store.ts\";\nimport { ConfirmPane, InfoPane } from \"./dialogs.ts\";\nimport { FetchModelsPane } from \"./fetch-models.ts\";\nimport { ModelFieldsPane } from \"./model-fields.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport { ApiAuthPane } from \"./provider-fields.ts\";\nimport { CURSOR, truncateMiddle, windowLines } from \"./value-row.ts\";\n\nexport interface ProviderEditorOptions {\n\tstore: ModelsJsonStore;\n\trefresher: RefreshCoordinator;\n\tproviderId: string;\n\t/** Session model at /provider open time; protects it and its provider from delete/rename. */\n\tcurrentModel?: { provider: string; id: string };\n\tregistry: Pick<ModelRegistry, \"getProviderAuthStatus\">;\n\truntime: Pick<ModelRuntime, \"getAuth\" | \"getProviderAuthStatus\">;\n\tnotify: (message: string, type: \"info\" | \"warning\" | \"error\") => void;\n}\n\nexport type ProviderEditorResult = \"back\" | \"deleted\";\n\ntype LeftItem =\n\t| { kind: \"apiAuth\" }\n\t| { kind: \"fetch\" }\n\t| { kind: \"section\"; label: \"SETUP\" | \"MODELS\" | \"MANAGE\" }\n\t| { kind: \"model\"; modelId: string }\n\t| { kind: \"draft\" }\n\t| { kind: \"addModel\" }\n\t| { kind: \"deleteProvider\" };\n\nconst LEFT_WIDTH_MIN = 16;\nconst LEFT_WIDTH_MAX = 40;\n/** Fixed editor body height: both columns scroll inside it rather than resizing the frame. */\nconst BODY_ROWS = 14;\nconst DOUBLE_PANE_MIN_WIDTH = 72;\nconst MIN_WIDTH = 32;\n\nfunction padTo(line: string, width: number): string {\n\tconst missing = width - visibleWidth(line);\n\treturn missing > 0 ? line + \" \".repeat(missing) : line;\n}\n\n/** Stable identity across left-list rebuilds (a rename keeps the selection on the model). */\nfunction leftItemKey(item: LeftItem | undefined): string {\n\tif (!item) return \"\";\n\tswitch (item.kind) {\n\t\tcase \"model\":\n\t\t\treturn `model:${item.modelId}`;\n\t\tcase \"section\":\n\t\t\treturn `section:${item.label}`;\n\t\tdefault:\n\t\t\treturn item.kind;\n\t}\n}\n\nexport class ProviderEditorScreen implements Component, Focusable {\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly done: (result: ProviderEditorResult) => void;\n\tprivate readonly options: ProviderEditorOptions;\n\tprivate readonly host: EditorHost;\n\n\tprivate leftItems: LeftItem[] = [];\n\tprivate leftIndex = 0;\n\tprivate focusPane: \"left\" | \"right\" = \"left\";\n\tprivate stack: EditorPane[] = [];\n\tprivate draft: DraftModelHandle | undefined;\n\tprivate readonly edits: ProviderEdits;\n\tprivate fetchStatus: string | undefined;\n\tprivate disposed = false;\n\tprivate _focused = false;\n\tprivate cache: { width: number; lines: string[] } | undefined;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: ProviderEditorResult) => void,\n\t\toptions: ProviderEditorOptions,\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.keybindings = keybindings;\n\t\tthis.done = done;\n\t\tthis.options = options;\n\t\tthis.edits = new ProviderEdits(options.store, options.providerId, options.refresher, () => this.refresh());\n\t\tthis.host = this.createHost();\n\t\tthis.rebuildLeftItems();\n\t\tthis.leftIndex = this.selectableIndex(0);\n\t\tthis.resetRightStack();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Component / Focusable\n\t// ------------------------------------------------------------------\n\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.topPane()?.setFocused(value && this.focusPane === \"right\");\n\t}\n\n\tinvalidate(): void {\n\t\tthis.cache = undefined;\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const pane of this.stack) pane.dispose?.();\n\t\tthis.stack = [];\n\t\t// An unsubmitted draft never reaches disk; leaving the editor drops it.\n\t\tif (!hasProviderSettings(this.options.store.getProvider(this.options.providerId))) {\n\t\t\tthis.options.store.discardProviderDraft(this.options.providerId);\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tif (this.cache && this.cache.width === width) return this.cache.lines;\n\t\tconst lines = this.renderFrame(width);\n\t\tthis.cache = { width, lines };\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.focusPane === \"right\") {\n\t\t\tconst pane = this.topPane();\n\t\t\tif (pane && !pane.isEditing?.() && this.keybindings.matches(data, \"app.provider.switchPaneLeft\")) {\n\t\t\t\tpane.setFocused(false);\n\t\t\t\tthis.focusPane = \"left\";\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpane?.handleInput(data);\n\t\t\treturn;\n\t\t}\n\t\tconst kb = this.keybindings;\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.moveLeft(-1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.moveLeft(1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.provider.switchPaneRight\")) {\n\t\t\tthis.activateLeftItem(\"inspect\");\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.activateLeftItem(\"activate\");\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) this.done(\"back\");\n\t}\n\n\t/** Rebuild from the store view after a save merged external changes. */\n\tsyncFromStore(): void {\n\t\tif (this.disposed || this.edits.renaming) return;\n\t\tconst selected = this.leftItems[this.leftIndex];\n\t\tconst selectedKey = leftItemKey(selected);\n\t\tthis.rebuildLeftItems();\n\t\tconst nextIndex = this.leftItems.findIndex((item) => leftItemKey(item) === selectedKey);\n\t\tthis.leftIndex =\n\t\t\tnextIndex >= 0\n\t\t\t\t? nextIndex\n\t\t\t\t: this.selectableIndex(Math.min(this.leftIndex, Math.max(0, this.leftItems.length - 1)));\n\t\t// If the selected model vanished externally, rebuild the right column.\n\t\tif (nextIndex < 0 && selected?.kind === \"model\") {\n\t\t\tthis.resetRightStack();\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Left column\n\t// ------------------------------------------------------------------\n\n\tprivate rebuildLeftItems(): void {\n\t\tconst items: LeftItem[] = [\n\t\t\t{ kind: \"section\", label: \"SETUP\" },\n\t\t\t{ kind: \"apiAuth\" },\n\t\t\t{ kind: \"fetch\" },\n\t\t\t{ kind: \"section\", label: \"MODELS\" },\n\t\t];\n\t\tfor (const model of this.options.store.getModels(this.options.providerId)) {\n\t\t\titems.push({ kind: \"model\", modelId: model.id });\n\t\t}\n\t\tif (this.draft) items.push({ kind: \"draft\" });\n\t\titems.push({ kind: \"section\", label: \"MANAGE\" }, { kind: \"addModel\" }, { kind: \"deleteProvider\" });\n\t\tthis.leftItems = items;\n\t}\n\n\tprivate selectableIndex(start: number): number {\n\t\tconst index = this.leftItems.findIndex((item, i) => i >= start && item.kind !== \"section\");\n\t\treturn index >= 0 ? index : this.leftItems.findIndex((item) => item.kind !== \"section\");\n\t}\n\n\tprivate moveLeft(delta: number): void {\n\t\tconst selectable = this.leftItems\n\t\t\t.map((item, index) => ({ item, index }))\n\t\t\t.filter((entry) => entry.item.kind !== \"section\");\n\t\tif (selectable.length === 0) return;\n\t\tconst position = selectable.findIndex((entry) => entry.index === this.leftIndex);\n\t\tconst next = selectable[(position + delta + selectable.length) % selectable.length]!;\n\t\tif (next.index === this.leftIndex) return;\n\t\tthis.leftIndex = next.index;\n\t\t// Moving the left selection replaces the right column (cancels fetch/edit state).\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t}\n\n\t/**\n\t * Enter activates the row; → only focuses its pane. Action rows therefore\n\t * never fire from a focus move, matching their InfoPane's \"Press Enter\".\n\t */\n\tprivate activateLeftItem(via: \"activate\" | \"inspect\"): void {\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tif (!item) return;\n\t\tswitch (item.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\tcase \"model\":\n\t\t\tcase \"draft\":\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"fetch\":\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tif (via === \"activate\") {\n\t\t\t\t\tconst pane = this.topPane();\n\t\t\t\t\tif (pane instanceof FetchModelsPane) pane.start();\n\t\t\t\t}\n\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"addModel\": {\n\t\t\t\tif (via === \"inspect\") {\n\t\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.draft) {\n\t\t\t\t\tthis.draft = this.edits.draft();\n\t\t\t\t\tthis.rebuildLeftItems();\n\t\t\t\t}\n\t\t\t\tconst draftIndex = this.leftItems.findIndex((entry) => entry.kind === \"draft\");\n\t\t\t\tif (draftIndex >= 0) this.leftIndex = draftIndex;\n\t\t\t\tthis.resetRightStack();\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tconst pane = this.topPane();\n\t\t\t\tpane?.setFocused(this._focused);\n\t\t\t\tif (pane instanceof ModelFieldsPane && !this.draft.read().id) pane.startEditingId();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"deleteProvider\": {\n\t\t\t\tif (via === \"inspect\") {\n\t\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.host.isCurrentProvider()) {\n\t\t\t\t\tthis.host.notify(\n\t\t\t\t\t\t\"The current model's provider cannot be deleted; switch models with /model first.\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst builtin = isBuiltinProviderId(this.options.providerId);\n\t\t\t\tthis.host.confirm(\n\t\t\t\t\t`Delete provider \"${this.options.providerId}\" from models.json?` +\n\t\t\t\t\t\t(builtin ? \" The built-in catalog remains and its models may reappear.\" : \"\") +\n\t\t\t\t\t\t\" Stored credentials in auth.json are kept.\",\n\t\t\t\t\t\"Delete provider\",\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.edits.removeProvider();\n\t\t\t\t\t\tthis.done(\"deleted\");\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate renderLeft(width: number): string[] {\n\t\tconst theme = this.theme;\n\t\tconst focused = this.focusPane === \"left\";\n\t\tconst rows: string[] = [];\n\t\tconst renderRow = (index: number): string => {\n\t\t\tconst item = this.leftItems[index]!;\n\t\t\tif (item.kind === \"section\") {\n\t\t\t\treturn theme.fg(\"dim\", item.label);\n\t\t\t}\n\t\t\treturn this.renderLeftItem(item, index === this.leftIndex, focused, width);\n\t\t};\n\t\tif (this.leftItems.length <= BODY_ROWS) {\n\t\t\tfor (let index = 0; index < this.leftItems.length; index++) rows.push(renderRow(index));\n\t\t} else {\n\t\t\t// One row carries the (n/N) position indicator, like the /model selector.\n\t\t\tconst slots = BODY_ROWS - 1;\n\t\t\tconst start = Math.max(0, Math.min(this.leftIndex - Math.floor(slots / 2), this.leftItems.length - slots));\n\t\t\tfor (let index = start; index < start + slots; index++) rows.push(renderRow(index));\n\t\t\tconst selectable: LeftItem[] = this.leftItems.filter((item) => item.kind !== \"section\");\n\t\t\tconst position = selectable.indexOf(this.leftItems[this.leftIndex]!);\n\t\t\trows.push(theme.fg(\"dim\", ` (${position + 1}/${selectable.length})`));\n\t\t}\n\t\twhile (rows.length < BODY_ROWS) rows.push(\"\");\n\t\treturn rows;\n\t}\n\n\tprivate leftItemContent(item: LeftItem): { text: string; note?: string; dim: boolean } {\n\t\tconst store = this.options.store;\n\t\tlet text: string;\n\t\tlet note: string | undefined;\n\t\tswitch (item.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\ttext = \"API Auth\";\n\t\t\t\tbreak;\n\t\t\tcase \"fetch\":\n\t\t\t\ttext = \"Fetch Models\";\n\t\t\t\tnote = this.fetchStatus;\n\t\t\t\tbreak;\n\t\t\tcase \"model\": {\n\t\t\t\tconst model = store.getModel(this.options.providerId, item.modelId);\n\t\t\t\ttext = model ? modelDisplayName(model) : item.modelId;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"draft\": {\n\t\t\t\ttext = this.draft?.read().name ?? this.draft?.read().id ?? \"New Model\";\n\t\t\t\tnote = \"· draft\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"addModel\":\n\t\t\t\ttext = \"+ Add model\";\n\t\t\t\tbreak;\n\t\t\tcase \"deleteProvider\":\n\t\t\t\ttext = \"Delete provider\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttext = \"\";\n\t\t}\n\t\tconst dim = item.kind === \"draft\" && !this.draft?.read().name && !this.draft?.read().id;\n\t\treturn { text, note, dim };\n\t}\n\n\tprivate renderLeftItem(item: LeftItem, active: boolean, focused: boolean, width: number): string {\n\t\tconst theme = this.theme;\n\t\t// Single-accent focus rule: the marker and accent exist only in the\n\t\t// focused column; an unfocused column keeps its content plain.\n\t\tconst lit = active && focused;\n\t\tconst marker = lit ? theme.fg(\"accent\", `${CURSOR} `) : \" \";\n\t\tconst style = (text: string, dim = false) => theme.fg(lit ? \"accent\" : dim ? \"dim\" : \"text\", text);\n\t\tconst { text: label, note, dim } = this.leftItemContent(item);\n\t\tlet text = label;\n\t\t// Long model names keep head and tail (the distinctive parts) instead of a hard cut.\n\t\tif (item.kind === \"model\" || item.kind === \"draft\") {\n\t\t\tconst budget = Math.max(8, width - 2 - (note ? visibleWidth(note) + 1 : 0));\n\t\t\ttext = truncateMiddle(text, budget);\n\t\t}\n\t\tconst noteText = note ? theme.fg(\"dim\", ` ${note}`) : \"\";\n\t\treturn truncateToWidth(marker + style(text, dim) + noteText, width);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Right column (pane stack)\n\t// ------------------------------------------------------------------\n\n\tprivate topPane(): EditorPane | undefined {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\n\tprivate pushPane(pane: EditorPane): void {\n\t\tthis.topPane()?.setFocused(false);\n\t\tthis.focusPane = \"right\";\n\t\tthis.stack.push(pane);\n\t\tpane.setFocused(this._focused && this.focusPane === \"right\");\n\t\tthis.refresh();\n\t}\n\n\tprivate popPane(): void {\n\t\tif (this.stack.length <= 1) {\n\t\t\t// Esc on the base pane moves focus back to the left column.\n\t\t\tthis.topPane()?.setFocused(false);\n\t\t\tthis.focusPane = \"left\";\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst pane = this.stack.pop();\n\t\tpane?.setFocused(false);\n\t\tpane?.dispose?.();\n\t\tthis.topPane()?.setFocused(this._focused && this.focusPane === \"right\");\n\t\tthis.refresh();\n\t}\n\n\tprivate resetRightStack(): void {\n\t\tfor (const pane of this.stack) pane.dispose?.();\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tthis.stack = [this.createBasePane(item)];\n\t\tthis.topPane()?.setFocused(this._focused && this.focusPane === \"right\");\n\t}\n\n\tprivate createBasePane(item: LeftItem | undefined): EditorPane {\n\t\tswitch (item?.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\treturn new ApiAuthPane(this.host, this.options.registry);\n\t\t\tcase \"fetch\":\n\t\t\t\treturn new FetchModelsPane(this.host);\n\t\t\tcase \"model\":\n\t\t\t\treturn new ModelFieldsPane(this.host, this.persistedHandle(item.modelId));\n\t\t\tcase \"draft\":\n\t\t\t\treturn new ModelFieldsPane(this.host, this.draft!);\n\t\t\tcase \"addModel\":\n\t\t\t\treturn new InfoPane(\n\t\t\t\t\tthis.host,\n\t\t\t\t\t[\n\t\t\t\t\t\t\"Press Enter to create a model.\",\n\t\t\t\t\t\t\"A draft is kept in memory until its id is set; Esc on the draft discards it.\",\n\t\t\t\t\t],\n\t\t\t\t\t() => this.activateLeftItem(\"activate\"),\n\t\t\t\t);\n\t\t\tcase \"deleteProvider\":\n\t\t\t\treturn new InfoPane(this.host, [\"Press Enter to delete this provider from models.json.\"], () =>\n\t\t\t\t\tthis.activateLeftItem(\"activate\"),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn new InfoPane(this.host, []);\n\t\t}\n\t}\n\n\tprivate persistedHandle(modelId: string): ModelHandle {\n\t\treturn this.edits.model(modelId, (oldId, newId) => {\n\t\t\tconst selected = this.leftItems[this.leftIndex];\n\t\t\tif (selected?.kind === \"model\" && selected.modelId === oldId) selected.modelId = newId;\n\t\t\tthis.syncFromStore();\n\t\t});\n\t}\n\n\t// ------------------------------------------------------------------\n\t// EditorHost implementation\n\t// ------------------------------------------------------------------\n\n\tprivate createHost(): EditorHost {\n\t\tconst store = this.options.store;\n\t\tconst providerId = this.options.providerId;\n\t\treturn {\n\t\t\ttui: this.tui,\n\t\t\ttheme: this.theme,\n\t\t\tkeybindings: this.keybindings,\n\t\t\tstore,\n\t\t\tedits: this.edits,\n\t\t\tproviderId,\n\t\t\tpushPane: (pane) => this.pushPane(pane),\n\t\t\tpopPane: () => this.popPane(),\n\t\t\trefresh: () => this.refresh(),\n\t\t\tnotify: (message, type) => this.options.notify(message, type),\n\t\t\teffectiveApi: (model) => {\n\t\t\t\treturn effectiveModelSettings(providerId, store.getProvider(providerId), model).api;\n\t\t\t},\n\t\t\teffectiveBaseUrl: (model) => {\n\t\t\t\treturn effectiveModelSettings(providerId, store.getProvider(providerId), model).baseUrl;\n\t\t\t},\n\t\t\tcommitModelDraft: () => this.commitModelDraft(),\n\t\t\tdiscardModelDraft: () => this.discardModelDraft(),\n\t\t\tisCurrentModel: (modelId) =>\n\t\t\t\tthis.options.currentModel?.provider === providerId && this.options.currentModel.id === modelId,\n\t\t\tisCurrentProvider: () => this.options.currentModel?.provider === providerId,\n\t\t\tsetFetchStatus: (status) => {\n\t\t\t\tthis.fetchStatus = status;\n\t\t\t\tthis.refresh();\n\t\t\t},\n\t\t\trunFetch: (signal) => fetchProviderModels(this.options, signal),\n\t\t\timportModels: async (models, signal) => {\n\t\t\t\tconst error = await importProviderModels({ ...this.options, edits: this.edits }, models, signal);\n\t\t\t\tif (!this.disposed) this.syncFromStore();\n\t\t\t\treturn error;\n\t\t\t},\n\t\t\tconfirm: (message, actionLabel, action) =>\n\t\t\t\tthis.pushPane(new ConfirmPane(this.host, message, actionLabel, action)),\n\t\t\tonModelRemoved: () => {\n\t\t\t\tthis.rebuildLeftItems();\n\t\t\t\t// Land on the next row where the model was; walk back over section labels.\n\t\t\t\tthis.leftIndex = Math.min(this.leftIndex, this.leftItems.length - 1);\n\t\t\t\twhile (this.leftIndex > 0 && this.leftItems[this.leftIndex]?.kind === \"section\") this.leftIndex--;\n\t\t\t\tif (this.leftItems[this.leftIndex]?.kind === \"section\") this.leftIndex = this.selectableIndex(0);\n\t\t\t\tthis.focusPane = \"left\";\n\t\t\t\tthis.resetRightStack();\n\t\t\t\tthis.refresh();\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Drop the in-memory draft: the selection returns to + Add Model with focus on the left. */\n\tprivate discardModelDraft(): void {\n\t\tif (!this.draft) return;\n\t\tthis.draft = undefined;\n\t\tthis.rebuildLeftItems();\n\t\tconst addIndex = this.leftItems.findIndex((item) => item.kind === \"addModel\");\n\t\tthis.leftIndex = addIndex >= 0 ? addIndex : this.selectableIndex(0);\n\t\tthis.focusPane = \"left\";\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t}\n\n\tprivate commitModelDraft(): string | undefined {\n\t\tconst draft = this.draft;\n\t\tif (!draft) return \"No model draft.\";\n\t\tconst error = this.edits.commitDraft(draft);\n\t\tif (error) return error;\n\t\tconst id = draft.read().id!.trim();\n\t\tthis.draft = undefined;\n\t\tthis.rebuildLeftItems();\n\t\tconst index = this.leftItems.findIndex((item) => item.kind === \"model\" && item.modelId === id);\n\t\tif (index >= 0) this.leftIndex = index;\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t\treturn undefined;\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Frame rendering\n\t// ------------------------------------------------------------------\n\n\tprivate refresh(): void {\n\t\tthis.invalidate();\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate renderFrame(width: number): string[] {\n\t\tconst theme = this.theme;\n\t\tconst border = new DynamicBorder((text) => theme.fg(\"border\", text)).render(width)[0]!;\n\t\tif (width < MIN_WIDTH) {\n\t\t\treturn [\n\t\t\t\tborder,\n\t\t\t\ttruncateToWidth(theme.fg(\"warning\", ` /provider needs at least ${MIN_WIDTH} columns`), width),\n\t\t\t\tborder,\n\t\t\t];\n\t\t}\n\t\tconst title = this.renderTitle(width);\n\t\tlet body: string[];\n\t\tif (width < DOUBLE_PANE_MIN_WIDTH) {\n\t\t\tbody = this.focusPane === \"left\" ? this.renderLeft(width) : this.renderRight(width);\n\t\t} else {\n\t\t\tconst leftWidth = this.computeLeftWidth(width);\n\t\t\tconst rightWidth = width - leftWidth - 3;\n\t\t\tconst separator = theme.fg(\"border\", \" │ \");\n\t\t\tconst leftLines = this.renderLeft(leftWidth);\n\t\t\tconst rightLines = this.renderRight(rightWidth);\n\t\t\tbody = [];\n\t\t\tfor (let row = 0; row < BODY_ROWS; row++) {\n\t\t\t\tconst left = padTo(truncateToWidth(leftLines[row] ?? \"\", leftWidth), leftWidth);\n\t\t\t\tconst right = truncateToWidth(rightLines[row] ?? \"\", rightWidth);\n\t\t\t\tbody.push(left + separator + right);\n\t\t\t}\n\t\t}\n\n\t\tconst footerLines = this.renderFooter(width);\n\t\treturn [border, title, border, ...body, border, ...footerLines, border];\n\t}\n\n\tprivate renderRight(width: number): string[] {\n\t\tconst pane = this.topPane();\n\t\tconst paneLines = pane ? windowLines(this.theme, pane.render(width), BODY_ROWS - 1, pane.scrollWindow?.()) : [];\n\t\treturn [this.renderPaneTitle(width), ...paneLines];\n\t}\n\n\tprivate renderPaneTitle(width: number): string {\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tlet base = \"\";\n\t\tswitch (item?.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\tbase = \"Connection\";\n\t\t\t\tbreak;\n\t\t\tcase \"fetch\":\n\t\t\t\tbase = \"Discover models\";\n\t\t\t\tbreak;\n\t\t\tcase \"model\": {\n\t\t\t\tconst model = this.options.store.getModel(this.options.providerId, item.modelId);\n\t\t\t\tbase = model ? modelDisplayName(model) : item.modelId;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"draft\":\n\t\t\t\tbase = \"New model\";\n\t\t\t\tbreak;\n\t\t\tcase \"addModel\":\n\t\t\t\tbase = \"Add model\";\n\t\t\t\tbreak;\n\t\t\tcase \"deleteProvider\":\n\t\t\t\tbase = \"Delete provider\";\n\t\t\t\tbreak;\n\t\t}\n\t\tconst crumb = this.stack.length > 1 ? this.topPane()?.crumb : undefined;\n\t\tconst title = crumb ? [base, crumb].filter(Boolean).join(\" / \") : base;\n\t\treturn truncateToWidth(this.theme.fg(\"text\", this.theme.bold(title)), width);\n\t}\n\n\t/** Content-driven left width: fits the longest visible label, clamped to 16–40 and 45% of the terminal. */\n\tprivate computeLeftWidth(width: number): number {\n\t\tlet longest = 12;\n\t\tfor (const item of this.leftItems) {\n\t\t\tif (item.kind === \"section\") continue;\n\t\t\tconst { text, note } = this.leftItemContent(item);\n\t\t\tconst label = text + (note ? ` ${note}` : \"\");\n\t\t\tlongest = Math.max(longest, visibleWidth(label));\n\t\t}\n\t\tconst fit = Math.max(LEFT_WIDTH_MIN, Math.min(LEFT_WIDTH_MAX, longest + 2));\n\t\treturn Math.min(fit, Math.max(LEFT_WIDTH_MIN, Math.floor(width * 0.45)));\n\t}\n\n\tprivate renderTitle(width: number): string {\n\t\tconst theme = this.theme;\n\t\tconst title = theme.fg(\"accent\", theme.bold(` Providers / ${this.options.providerId}`));\n\t\tconst status =\n\t\t\tthis.options.store.pendingCount === 0 ? \"\" : this.options.store.saveFailed ? \"Save failed\" : \"Saving…\";\n\t\tif (!status) return truncateToWidth(title, width);\n\t\tconst styledStatus = theme.fg(this.options.store.saveFailed ? \"error\" : \"dim\", status);\n\t\tconst statusWidth = visibleWidth(status);\n\t\tif (statusWidth + 1 >= width) return truncateToWidth(styledStatus, width);\n\t\tconst left = truncateToWidth(title, width - statusWidth - 1);\n\t\treturn padTo(left, width - statusWidth) + styledStatus;\n\t}\n\n\tprivate renderFooter(width: number): string[] {\n\t\tif (this.focusPane === \"right\") {\n\t\t\tconst paneHints = this.topPane()?.hints() ?? \"\";\n\t\t\tif (width < DOUBLE_PANE_MIN_WIDTH) {\n\t\t\t\t// Esc already returns to navigation here; only add the arrow hint when it fits whole.\n\t\t\t\tconst arrowHint = keyHint(\"app.provider.switchPaneLeft\", \"nav\");\n\t\t\t\tconst combined = [paneHints, arrowHint].filter(Boolean).join(\" \");\n\t\t\t\treturn [truncateToWidth(visibleWidth(combined) <= width ? combined : paneHints, width)];\n\t\t\t}\n\t\t\t// The editor owns the way-back hint so every wide-layout pane footer is consistent.\n\t\t\tconst hints = [paneHints, keyHint(\"app.provider.switchPaneLeft\", \"focus left\")].filter(Boolean).join(\" \");\n\t\t\treturn [truncateToWidth(hints, width)];\n\t\t}\n\t\tconst hints = [\n\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\tkeyHint(\"tui.select.confirm\", this.leftActivateLabel()),\n\t\t\tkeyHint(\"app.provider.switchPaneRight\", \"focus right\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t\treturn [truncateToWidth(hints, width)];\n\t}\n\n\t/** What Enter does to the selected left-column row, so the footer never lies about action rows. */\n\tprivate leftActivateLabel(): string {\n\t\tswitch (this.leftItems[this.leftIndex]?.kind) {\n\t\t\tcase \"fetch\":\n\t\t\t\treturn \"fetch\";\n\t\t\tcase \"addModel\":\n\t\t\t\treturn \"create\";\n\t\t\tcase \"deleteProvider\":\n\t\t\t\treturn \"delete\";\n\t\t\tdefault:\n\t\t\t\treturn \"open\";\n\t\t}\n\t}\n}\n\nfunction modelDisplayName(model: ModelsJsonModel): string {\n\treturn model.name ?? model.id;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/editor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Two-pane provider editor.\n *\n * Left column groups connection, models, and management actions. The right\n * column hosts the selected item's field pane and sub-pane stack. Both columns\n * scroll inside a fixed-height frame; below the wide-layout threshold, only\n * the focused column is shown. Typing on a value row overwrites, Enter tweaks\n * or enters, ←/→ switch panes, and Esc cancels/pops/backs out.\n */\n\nimport \"../keybindings.ts\";\nimport { type Component, type Focusable, type TUI, truncateToWidth, visibleWidth } from \"@earendil-works/pi-tui\";\nimport type { KeybindingsManager } from \"../../../core/keybindings.ts\";\nimport type { ModelsJsonModel } from \"../../../core/model-config.ts\";\nimport type { ModelRegistry } from \"../../../core/model-registry.ts\";\nimport type { ModelRuntime } from \"../../../core/model-runtime.ts\";\nimport { DynamicBorder } from \"../../../modes/interactive/components/dynamic-border.ts\";\nimport { keyHint, rawKeyHint } from \"../../../modes/interactive/components/keybinding-hints.ts\";\nimport type { Theme } from \"../../../modes/interactive/theme/theme.ts\";\nimport { isBuiltinProviderId } from \"../catalog.ts\";\nimport { effectiveModelSettings, hasProviderSettings } from \"../configuration.ts\";\nimport { fetchProviderModels, importProviderModels } from \"../connection.ts\";\nimport { type DraftModelHandle, ProviderEdits } from \"../editing.ts\";\nimport type { RefreshCoordinator } from \"../refresh.ts\";\nimport type { ModelsJsonStore } from \"../store.ts\";\nimport { ConfirmPane, InfoPane } from \"./dialogs.ts\";\nimport { FetchModelsPane } from \"./fetch-models.ts\";\nimport { ModelFieldsPane } from \"./model-fields.ts\";\nimport type { EditorHost, EditorPane, ModelHandle } from \"./pane.ts\";\nimport { ApiAuthPane } from \"./provider-fields.ts\";\nimport { CURSOR, truncateMiddle, windowLines } from \"./value-row.ts\";\n\nexport interface ProviderEditorOptions {\n\tstore: ModelsJsonStore;\n\trefresher: RefreshCoordinator;\n\tproviderId: string;\n\t/** Session model at /provider open time; protects it and its provider from delete/rename. */\n\tcurrentModel?: { provider: string; id: string };\n\tregistry: Pick<ModelRegistry, \"getProviderAuthStatus\">;\n\truntime: Pick<ModelRuntime, \"getAuth\" | \"getProviderAuthStatus\">;\n\tnotify: (message: string, type: \"info\" | \"warning\" | \"error\") => void;\n}\n\nexport type ProviderEditorResult = \"back\" | \"deleted\";\n\ntype LeftItem =\n\t| { kind: \"apiAuth\" }\n\t| { kind: \"fetch\" }\n\t| { kind: \"section\"; label: \"SETUP\" | \"MODELS\" | \"MANAGE\" }\n\t| { kind: \"model\"; modelId: string }\n\t| { kind: \"draft\" }\n\t| { kind: \"addModel\" }\n\t| { kind: \"deleteProvider\" };\n\nconst LEFT_WIDTH_MIN = 16;\nconst LEFT_WIDTH_MAX = 40;\n/** Fixed editor body height: both columns scroll inside it rather than resizing the frame. */\nconst BODY_ROWS = 14;\nconst DOUBLE_PANE_MIN_WIDTH = 72;\nconst MIN_WIDTH = 32;\n\nfunction padTo(line: string, width: number): string {\n\tconst missing = width - visibleWidth(line);\n\treturn missing > 0 ? line + \" \".repeat(missing) : line;\n}\n\n/** Stable identity across left-list rebuilds (a rename keeps the selection on the model). */\nfunction leftItemKey(item: LeftItem | undefined): string {\n\tif (!item) return \"\";\n\tswitch (item.kind) {\n\t\tcase \"model\":\n\t\t\treturn `model:${item.modelId}`;\n\t\tcase \"section\":\n\t\t\treturn `section:${item.label}`;\n\t\tdefault:\n\t\t\treturn item.kind;\n\t}\n}\n\nexport class ProviderEditorScreen implements Component, Focusable {\n\tprivate readonly tui: TUI;\n\tprivate readonly theme: Theme;\n\tprivate readonly keybindings: KeybindingsManager;\n\tprivate readonly done: (result: ProviderEditorResult) => void;\n\tprivate readonly options: ProviderEditorOptions;\n\tprivate readonly host: EditorHost;\n\n\tprivate leftItems: LeftItem[] = [];\n\tprivate leftIndex = 0;\n\tprivate focusPane: \"left\" | \"right\" = \"left\";\n\tprivate stack: EditorPane[] = [];\n\tprivate draft: DraftModelHandle | undefined;\n\tprivate readonly edits: ProviderEdits;\n\tprivate fetchStatus: string | undefined;\n\tprivate disposed = false;\n\tprivate _focused = false;\n\tprivate cache: { width: number; lines: string[] } | undefined;\n\n\tconstructor(\n\t\ttui: TUI,\n\t\ttheme: Theme,\n\t\tkeybindings: KeybindingsManager,\n\t\tdone: (result: ProviderEditorResult) => void,\n\t\toptions: ProviderEditorOptions,\n\t) {\n\t\tthis.tui = tui;\n\t\tthis.theme = theme;\n\t\tthis.keybindings = keybindings;\n\t\tthis.done = done;\n\t\tthis.options = options;\n\t\tthis.edits = new ProviderEdits(options.store, options.providerId, options.refresher, () => this.refresh());\n\t\tthis.host = this.createHost();\n\t\tthis.rebuildLeftItems();\n\t\tthis.leftIndex = this.selectableIndex(0);\n\t\tthis.resetRightStack();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Component / Focusable\n\t// ------------------------------------------------------------------\n\n\tget focused(): boolean {\n\t\treturn this._focused;\n\t}\n\n\tset focused(value: boolean) {\n\t\tthis._focused = value;\n\t\tthis.topPane()?.setFocused(value && this.focusPane === \"right\");\n\t}\n\n\tinvalidate(): void {\n\t\tthis.cache = undefined;\n\t}\n\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const pane of this.stack) pane.dispose?.();\n\t\tthis.stack = [];\n\t\t// An unsubmitted draft never reaches disk; leaving the editor drops it.\n\t\tif (!hasProviderSettings(this.options.store.getProvider(this.options.providerId))) {\n\t\t\tthis.options.store.discardProviderDraft(this.options.providerId);\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\tif (this.cache && this.cache.width === width) return this.cache.lines;\n\t\tconst lines = this.renderFrame(width);\n\t\tthis.cache = { width, lines };\n\t\treturn lines;\n\t}\n\n\thandleInput(data: string): void {\n\t\tif (this.focusPane === \"right\") {\n\t\t\tconst pane = this.topPane();\n\t\t\tif (pane && !pane.isEditing?.() && this.keybindings.matches(data, \"app.provider.switchPaneLeft\")) {\n\t\t\t\tpane.setFocused(false);\n\t\t\t\tthis.focusPane = \"left\";\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpane?.handleInput(data);\n\t\t\treturn;\n\t\t}\n\t\tconst kb = this.keybindings;\n\t\tif (kb.matches(data, \"tui.select.up\")) {\n\t\t\tthis.moveLeft(-1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.down\")) {\n\t\t\tthis.moveLeft(1);\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"app.provider.switchPaneRight\")) {\n\t\t\tthis.activateLeftItem(\"inspect\");\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.confirm\")) {\n\t\t\tthis.activateLeftItem(\"activate\");\n\t\t\treturn;\n\t\t}\n\t\tif (kb.matches(data, \"tui.select.cancel\")) this.done(\"back\");\n\t}\n\n\t/** Rebuild from the store view after a save merged external changes. */\n\tsyncFromStore(): void {\n\t\tif (this.disposed || this.edits.renaming) return;\n\t\tconst selected = this.leftItems[this.leftIndex];\n\t\tconst selectedKey = leftItemKey(selected);\n\t\tthis.rebuildLeftItems();\n\t\tconst nextIndex = this.leftItems.findIndex((item) => leftItemKey(item) === selectedKey);\n\t\tthis.leftIndex =\n\t\t\tnextIndex >= 0\n\t\t\t\t? nextIndex\n\t\t\t\t: this.selectableIndex(Math.min(this.leftIndex, Math.max(0, this.leftItems.length - 1)));\n\t\t// If the selected model vanished externally, rebuild the right column.\n\t\tif (nextIndex < 0 && selected?.kind === \"model\") {\n\t\t\tthis.resetRightStack();\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Left column\n\t// ------------------------------------------------------------------\n\n\tprivate rebuildLeftItems(): void {\n\t\tconst items: LeftItem[] = [\n\t\t\t{ kind: \"section\", label: \"SETUP\" },\n\t\t\t{ kind: \"apiAuth\" },\n\t\t\t{ kind: \"fetch\" },\n\t\t\t{ kind: \"section\", label: \"MODELS\" },\n\t\t];\n\t\tfor (const model of this.options.store.getModels(this.options.providerId)) {\n\t\t\titems.push({ kind: \"model\", modelId: model.id });\n\t\t}\n\t\tif (this.draft) items.push({ kind: \"draft\" });\n\t\titems.push({ kind: \"section\", label: \"MANAGE\" }, { kind: \"addModel\" }, { kind: \"deleteProvider\" });\n\t\tthis.leftItems = items;\n\t}\n\n\tprivate selectableIndex(start: number): number {\n\t\tconst index = this.leftItems.findIndex((item, i) => i >= start && item.kind !== \"section\");\n\t\treturn index >= 0 ? index : this.leftItems.findIndex((item) => item.kind !== \"section\");\n\t}\n\n\tprivate moveLeft(delta: number): void {\n\t\tconst selectable = this.leftItems\n\t\t\t.map((item, index) => ({ item, index }))\n\t\t\t.filter((entry) => entry.item.kind !== \"section\");\n\t\tif (selectable.length === 0) return;\n\t\tconst position = selectable.findIndex((entry) => entry.index === this.leftIndex);\n\t\tconst next = selectable[(position + delta + selectable.length) % selectable.length]!;\n\t\tif (next.index === this.leftIndex) return;\n\t\tthis.leftIndex = next.index;\n\t\t// Moving the left selection replaces the right column (cancels fetch/edit state).\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t}\n\n\t/**\n\t * Enter activates the row; → only focuses its pane. Action rows therefore\n\t * never fire from a focus move, matching their InfoPane's \"Press Enter\".\n\t */\n\tprivate activateLeftItem(via: \"activate\" | \"inspect\"): void {\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tif (!item) return;\n\t\tswitch (item.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\tcase \"model\":\n\t\t\tcase \"draft\":\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"fetch\":\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tif (via === \"activate\") {\n\t\t\t\t\tconst pane = this.topPane();\n\t\t\t\t\tif (pane instanceof FetchModelsPane) pane.start();\n\t\t\t\t}\n\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\tcase \"addModel\": {\n\t\t\t\tif (via === \"inspect\") {\n\t\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.draft) {\n\t\t\t\t\tthis.draft = this.edits.draft();\n\t\t\t\t\tthis.rebuildLeftItems();\n\t\t\t\t}\n\t\t\t\tconst draftIndex = this.leftItems.findIndex((entry) => entry.kind === \"draft\");\n\t\t\t\tif (draftIndex >= 0) this.leftIndex = draftIndex;\n\t\t\t\tthis.resetRightStack();\n\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\tconst pane = this.topPane();\n\t\t\t\tpane?.setFocused(this._focused);\n\t\t\t\tif (pane instanceof ModelFieldsPane && !this.draft.read().id) pane.startEditingId();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"deleteProvider\": {\n\t\t\t\tif (via === \"inspect\") {\n\t\t\t\t\tthis.focusPane = \"right\";\n\t\t\t\t\tthis.topPane()?.setFocused(this._focused);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.options.currentModel?.provider === this.options.providerId) {\n\t\t\t\t\tthis.host.notify(\n\t\t\t\t\t\t\"The current model's provider cannot be deleted; switch models with /model first.\",\n\t\t\t\t\t\t\"error\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst builtin = isBuiltinProviderId(this.options.providerId);\n\t\t\t\tthis.host.confirm(\n\t\t\t\t\t`Delete provider \"${this.options.providerId}\" from models.json?` +\n\t\t\t\t\t\t(builtin ? \" The built-in catalog remains and its models may reappear.\" : \"\") +\n\t\t\t\t\t\t\" Stored credentials in auth.json are kept.\",\n\t\t\t\t\t\"Delete provider\",\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.edits.removeProvider();\n\t\t\t\t\t\tthis.done(\"deleted\");\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate renderLeft(width: number): string[] {\n\t\tconst theme = this.theme;\n\t\tconst focused = this.focusPane === \"left\";\n\t\tconst rows: string[] = [];\n\t\tconst renderRow = (index: number): string => {\n\t\t\tconst item = this.leftItems[index]!;\n\t\t\tif (item.kind === \"section\") {\n\t\t\t\treturn theme.fg(\"dim\", item.label);\n\t\t\t}\n\t\t\treturn this.renderLeftItem(item, index === this.leftIndex, focused, width);\n\t\t};\n\t\tif (this.leftItems.length <= BODY_ROWS) {\n\t\t\tfor (let index = 0; index < this.leftItems.length; index++) rows.push(renderRow(index));\n\t\t} else {\n\t\t\t// One row carries the (n/N) position indicator, like the /model selector.\n\t\t\tconst slots = BODY_ROWS - 1;\n\t\t\tconst start = Math.max(0, Math.min(this.leftIndex - Math.floor(slots / 2), this.leftItems.length - slots));\n\t\t\tfor (let index = start; index < start + slots; index++) rows.push(renderRow(index));\n\t\t\tconst selectable: LeftItem[] = this.leftItems.filter((item) => item.kind !== \"section\");\n\t\t\tconst position = selectable.indexOf(this.leftItems[this.leftIndex]!);\n\t\t\trows.push(theme.fg(\"dim\", ` (${position + 1}/${selectable.length})`));\n\t\t}\n\t\twhile (rows.length < BODY_ROWS) rows.push(\"\");\n\t\treturn rows;\n\t}\n\n\tprivate leftItemContent(item: LeftItem): { text: string; note?: string; dim: boolean } {\n\t\tconst store = this.options.store;\n\t\tlet text: string;\n\t\tlet note: string | undefined;\n\t\tswitch (item.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\ttext = \"API Auth\";\n\t\t\t\tbreak;\n\t\t\tcase \"fetch\":\n\t\t\t\ttext = \"Fetch Models\";\n\t\t\t\tnote = this.fetchStatus;\n\t\t\t\tbreak;\n\t\t\tcase \"model\": {\n\t\t\t\tconst model = store.getModel(this.options.providerId, item.modelId);\n\t\t\t\ttext = model ? modelDisplayName(model) : item.modelId;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"draft\": {\n\t\t\t\ttext = this.draft?.read().name ?? this.draft?.read().id ?? \"New Model\";\n\t\t\t\tnote = \"· draft\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"addModel\":\n\t\t\t\ttext = \"+ Add model\";\n\t\t\t\tbreak;\n\t\t\tcase \"deleteProvider\":\n\t\t\t\ttext = \"Delete provider\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttext = \"\";\n\t\t}\n\t\tconst dim = item.kind === \"draft\" && !this.draft?.read().name && !this.draft?.read().id;\n\t\treturn { text, note, dim };\n\t}\n\n\tprivate renderLeftItem(item: LeftItem, active: boolean, focused: boolean, width: number): string {\n\t\tconst theme = this.theme;\n\t\t// Single-accent focus rule: the marker and accent exist only in the\n\t\t// focused column; an unfocused column keeps its content plain.\n\t\tconst lit = active && focused;\n\t\tconst marker = lit ? theme.fg(\"accent\", `${CURSOR} `) : \" \";\n\t\tconst style = (text: string, dim = false) => theme.fg(lit ? \"accent\" : dim ? \"dim\" : \"text\", text);\n\t\tconst { text: label, note, dim } = this.leftItemContent(item);\n\t\tlet text = label;\n\t\t// Long model names keep head and tail (the distinctive parts) instead of a hard cut.\n\t\tif (item.kind === \"model\" || item.kind === \"draft\") {\n\t\t\tconst budget = Math.max(8, width - 2 - (note ? visibleWidth(note) + 1 : 0));\n\t\t\ttext = truncateMiddle(text, budget);\n\t\t}\n\t\tconst noteText = note ? theme.fg(\"dim\", ` ${note}`) : \"\";\n\t\treturn truncateToWidth(marker + style(text, dim) + noteText, width);\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Right column (pane stack)\n\t// ------------------------------------------------------------------\n\n\tprivate topPane(): EditorPane | undefined {\n\t\treturn this.stack[this.stack.length - 1];\n\t}\n\n\tprivate pushPane(pane: EditorPane): void {\n\t\tthis.topPane()?.setFocused(false);\n\t\tthis.focusPane = \"right\";\n\t\tthis.stack.push(pane);\n\t\tpane.setFocused(this._focused && this.focusPane === \"right\");\n\t\tthis.refresh();\n\t}\n\n\tprivate popPane(): void {\n\t\tif (this.stack.length <= 1) {\n\t\t\t// Esc on the base pane moves focus back to the left column.\n\t\t\tthis.topPane()?.setFocused(false);\n\t\t\tthis.focusPane = \"left\";\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst pane = this.stack.pop();\n\t\tpane?.setFocused(false);\n\t\tpane?.dispose?.();\n\t\tthis.topPane()?.setFocused(this._focused && this.focusPane === \"right\");\n\t\tthis.refresh();\n\t}\n\n\tprivate resetRightStack(): void {\n\t\tfor (const pane of this.stack) pane.dispose?.();\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tthis.stack = [this.createBasePane(item)];\n\t\tthis.topPane()?.setFocused(this._focused && this.focusPane === \"right\");\n\t}\n\n\tprivate createBasePane(item: LeftItem | undefined): EditorPane {\n\t\tswitch (item?.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\treturn new ApiAuthPane(this.host, this.options.registry);\n\t\t\tcase \"fetch\":\n\t\t\t\treturn new FetchModelsPane(this.host);\n\t\t\tcase \"model\":\n\t\t\t\treturn new ModelFieldsPane(this.host, this.persistedHandle(item.modelId));\n\t\t\tcase \"draft\":\n\t\t\t\treturn new ModelFieldsPane(this.host, this.draft!);\n\t\t\tcase \"addModel\":\n\t\t\t\treturn new InfoPane(\n\t\t\t\t\tthis.host,\n\t\t\t\t\t[\n\t\t\t\t\t\t\"Press Enter to create a model.\",\n\t\t\t\t\t\t\"A draft is kept in memory until its id is set; Esc on the draft discards it.\",\n\t\t\t\t\t],\n\t\t\t\t\t() => this.activateLeftItem(\"activate\"),\n\t\t\t\t);\n\t\t\tcase \"deleteProvider\":\n\t\t\t\treturn new InfoPane(this.host, [\"Press Enter to delete this provider from models.json.\"], () =>\n\t\t\t\t\tthis.activateLeftItem(\"activate\"),\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn new InfoPane(this.host, []);\n\t\t}\n\t}\n\n\tprivate persistedHandle(modelId: string): ModelHandle {\n\t\treturn this.edits.model(modelId, (oldId, newId) => {\n\t\t\tconst selected = this.leftItems[this.leftIndex];\n\t\t\tif (selected?.kind === \"model\" && selected.modelId === oldId) selected.modelId = newId;\n\t\t\tthis.syncFromStore();\n\t\t});\n\t}\n\n\t// ------------------------------------------------------------------\n\t// EditorHost implementation\n\t// ------------------------------------------------------------------\n\n\tprivate createHost(): EditorHost {\n\t\tconst store = this.options.store;\n\t\tconst providerId = this.options.providerId;\n\t\treturn {\n\t\t\ttheme: this.theme,\n\t\t\tkeybindings: this.keybindings,\n\t\t\tstore,\n\t\t\tedits: this.edits,\n\t\t\tproviderId,\n\t\t\tpushPane: (pane) => this.pushPane(pane),\n\t\t\tpopPane: () => this.popPane(),\n\t\t\trefresh: () => this.refresh(),\n\t\t\tnotify: (message, type) => this.options.notify(message, type),\n\t\t\teffectiveApi: (model) => {\n\t\t\t\treturn effectiveModelSettings(providerId, store.getProvider(providerId), model).api;\n\t\t\t},\n\t\t\teffectiveBaseUrl: (model) => {\n\t\t\t\treturn effectiveModelSettings(providerId, store.getProvider(providerId), model).baseUrl;\n\t\t\t},\n\t\t\tcommitModelDraft: () => this.commitModelDraft(),\n\t\t\tdiscardModelDraft: () => this.discardModelDraft(),\n\t\t\tisCurrentModel: (modelId) =>\n\t\t\t\tthis.options.currentModel?.provider === providerId && this.options.currentModel.id === modelId,\n\t\t\tsetFetchStatus: (status) => {\n\t\t\t\tthis.fetchStatus = status;\n\t\t\t\tthis.refresh();\n\t\t\t},\n\t\t\trunFetch: (signal) => fetchProviderModels(this.options, signal),\n\t\t\timportModels: async (models, signal) => {\n\t\t\t\tconst error = await importProviderModels({ ...this.options, edits: this.edits }, models, signal);\n\t\t\t\tif (!this.disposed) this.syncFromStore();\n\t\t\t\treturn error;\n\t\t\t},\n\t\t\tconfirm: (message, actionLabel, action) =>\n\t\t\t\tthis.pushPane(new ConfirmPane(this.host, message, actionLabel, action)),\n\t\t\tonModelRemoved: () => {\n\t\t\t\tthis.rebuildLeftItems();\n\t\t\t\t// Land on the next row where the model was; walk back over section labels.\n\t\t\t\tthis.leftIndex = Math.min(this.leftIndex, this.leftItems.length - 1);\n\t\t\t\twhile (this.leftIndex > 0 && this.leftItems[this.leftIndex]?.kind === \"section\") this.leftIndex--;\n\t\t\t\tif (this.leftItems[this.leftIndex]?.kind === \"section\") this.leftIndex = this.selectableIndex(0);\n\t\t\t\tthis.focusPane = \"left\";\n\t\t\t\tthis.resetRightStack();\n\t\t\t\tthis.refresh();\n\t\t\t},\n\t\t};\n\t}\n\n\t/** Drop the in-memory draft: the selection returns to + Add Model with focus on the left. */\n\tprivate discardModelDraft(): void {\n\t\tif (!this.draft) return;\n\t\tthis.draft = undefined;\n\t\tthis.rebuildLeftItems();\n\t\tconst addIndex = this.leftItems.findIndex((item) => item.kind === \"addModel\");\n\t\tthis.leftIndex = addIndex >= 0 ? addIndex : this.selectableIndex(0);\n\t\tthis.focusPane = \"left\";\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t}\n\n\tprivate commitModelDraft(): string | undefined {\n\t\tconst draft = this.draft;\n\t\tif (!draft) return \"No model draft.\";\n\t\tconst error = this.edits.commitDraft(draft);\n\t\tif (error) return error;\n\t\tconst id = draft.read().id!.trim();\n\t\tthis.draft = undefined;\n\t\tthis.rebuildLeftItems();\n\t\tconst index = this.leftItems.findIndex((item) => item.kind === \"model\" && item.modelId === id);\n\t\tif (index >= 0) this.leftIndex = index;\n\t\tthis.resetRightStack();\n\t\tthis.refresh();\n\t\treturn undefined;\n\t}\n\n\t// ------------------------------------------------------------------\n\t// Frame rendering\n\t// ------------------------------------------------------------------\n\n\tprivate refresh(): void {\n\t\tthis.invalidate();\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate renderFrame(width: number): string[] {\n\t\tconst theme = this.theme;\n\t\tconst border = new DynamicBorder((text) => theme.fg(\"border\", text)).render(width)[0]!;\n\t\tif (width < MIN_WIDTH) {\n\t\t\treturn [\n\t\t\t\tborder,\n\t\t\t\ttruncateToWidth(theme.fg(\"warning\", ` /provider needs at least ${MIN_WIDTH} columns`), width),\n\t\t\t\tborder,\n\t\t\t];\n\t\t}\n\t\tconst title = this.renderTitle(width);\n\t\tlet body: string[];\n\t\tif (width < DOUBLE_PANE_MIN_WIDTH) {\n\t\t\tbody = this.focusPane === \"left\" ? this.renderLeft(width) : this.renderRight(width);\n\t\t} else {\n\t\t\tconst leftWidth = this.computeLeftWidth(width);\n\t\t\tconst rightWidth = width - leftWidth - 3;\n\t\t\tconst separator = theme.fg(\"border\", \" │ \");\n\t\t\tconst leftLines = this.renderLeft(leftWidth);\n\t\t\tconst rightLines = this.renderRight(rightWidth);\n\t\t\tbody = [];\n\t\t\tfor (let row = 0; row < BODY_ROWS; row++) {\n\t\t\t\tconst left = padTo(truncateToWidth(leftLines[row] ?? \"\", leftWidth), leftWidth);\n\t\t\t\tconst right = truncateToWidth(rightLines[row] ?? \"\", rightWidth);\n\t\t\t\tbody.push(left + separator + right);\n\t\t\t}\n\t\t}\n\n\t\tconst footerLines = this.renderFooter(width);\n\t\treturn [border, title, border, ...body, border, ...footerLines, border];\n\t}\n\n\tprivate renderRight(width: number): string[] {\n\t\tconst pane = this.topPane();\n\t\tconst paneLines = pane ? windowLines(this.theme, pane.render(width), BODY_ROWS - 1, pane.scrollWindow?.()) : [];\n\t\treturn [this.renderPaneTitle(width), ...paneLines];\n\t}\n\n\tprivate renderPaneTitle(width: number): string {\n\t\tconst item = this.leftItems[this.leftIndex];\n\t\tlet base = \"\";\n\t\tswitch (item?.kind) {\n\t\t\tcase \"apiAuth\":\n\t\t\t\tbase = \"Connection\";\n\t\t\t\tbreak;\n\t\t\tcase \"fetch\":\n\t\t\t\tbase = \"Discover models\";\n\t\t\t\tbreak;\n\t\t\tcase \"model\": {\n\t\t\t\tconst model = this.options.store.getModel(this.options.providerId, item.modelId);\n\t\t\t\tbase = model ? modelDisplayName(model) : item.modelId;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"draft\":\n\t\t\t\tbase = \"New model\";\n\t\t\t\tbreak;\n\t\t\tcase \"addModel\":\n\t\t\t\tbase = \"Add model\";\n\t\t\t\tbreak;\n\t\t\tcase \"deleteProvider\":\n\t\t\t\tbase = \"Delete provider\";\n\t\t\t\tbreak;\n\t\t}\n\t\tconst crumb = this.stack.length > 1 ? this.topPane()?.crumb : undefined;\n\t\tconst title = crumb ? [base, crumb].filter(Boolean).join(\" / \") : base;\n\t\treturn truncateToWidth(this.theme.fg(\"text\", this.theme.bold(title)), width);\n\t}\n\n\t/** Content-driven left width: fits the longest visible label, clamped to 16–40 and 45% of the terminal. */\n\tprivate computeLeftWidth(width: number): number {\n\t\tlet longest = 12;\n\t\tfor (const item of this.leftItems) {\n\t\t\tif (item.kind === \"section\") continue;\n\t\t\tconst { text, note } = this.leftItemContent(item);\n\t\t\tconst label = text + (note ? ` ${note}` : \"\");\n\t\t\tlongest = Math.max(longest, visibleWidth(label));\n\t\t}\n\t\tconst fit = Math.max(LEFT_WIDTH_MIN, Math.min(LEFT_WIDTH_MAX, longest + 2));\n\t\treturn Math.min(fit, Math.max(LEFT_WIDTH_MIN, Math.floor(width * 0.45)));\n\t}\n\n\tprivate renderTitle(width: number): string {\n\t\tconst theme = this.theme;\n\t\tconst title = theme.fg(\"accent\", theme.bold(` Providers / ${this.options.providerId}`));\n\t\tconst status =\n\t\t\tthis.options.store.pendingCount === 0 ? \"\" : this.options.store.saveFailed ? \"Save failed\" : \"Saving…\";\n\t\tif (!status) return truncateToWidth(title, width);\n\t\tconst styledStatus = theme.fg(this.options.store.saveFailed ? \"error\" : \"dim\", status);\n\t\tconst statusWidth = visibleWidth(status);\n\t\tif (statusWidth + 1 >= width) return truncateToWidth(styledStatus, width);\n\t\tconst left = truncateToWidth(title, width - statusWidth - 1);\n\t\treturn padTo(left, width - statusWidth) + styledStatus;\n\t}\n\n\tprivate renderFooter(width: number): string[] {\n\t\tif (this.focusPane === \"right\") {\n\t\t\tconst paneHints = this.topPane()?.hints() ?? \"\";\n\t\t\tif (width < DOUBLE_PANE_MIN_WIDTH) {\n\t\t\t\t// Esc already returns to navigation here; only add the arrow hint when it fits whole.\n\t\t\t\tconst arrowHint = keyHint(\"app.provider.switchPaneLeft\", \"nav\");\n\t\t\t\tconst combined = [paneHints, arrowHint].filter(Boolean).join(\" \");\n\t\t\t\treturn [truncateToWidth(visibleWidth(combined) <= width ? combined : paneHints, width)];\n\t\t\t}\n\t\t\t// The editor owns the way-back hint so every wide-layout pane footer is consistent.\n\t\t\tconst hints = [paneHints, keyHint(\"app.provider.switchPaneLeft\", \"focus left\")].filter(Boolean).join(\" \");\n\t\t\treturn [truncateToWidth(hints, width)];\n\t\t}\n\t\tconst hints = [\n\t\t\trawKeyHint(\"↑↓\", \"move\"),\n\t\t\tkeyHint(\"tui.select.confirm\", this.leftActivateLabel()),\n\t\t\tkeyHint(\"app.provider.switchPaneRight\", \"focus right\"),\n\t\t\tkeyHint(\"tui.select.cancel\", \"back\"),\n\t\t].join(\" \");\n\t\treturn [truncateToWidth(hints, width)];\n\t}\n\n\t/** What Enter does to the selected left-column row, so the footer never lies about action rows. */\n\tprivate leftActivateLabel(): string {\n\t\tswitch (this.leftItems[this.leftIndex]?.kind) {\n\t\t\tcase \"fetch\":\n\t\t\t\treturn \"fetch\";\n\t\t\tcase \"addModel\":\n\t\t\t\treturn \"create\";\n\t\t\tcase \"deleteProvider\":\n\t\t\t\treturn \"delete\";\n\t\t\tdefault:\n\t\t\t\treturn \"open\";\n\t\t}\n\t}\n}\n\nfunction modelDisplayName(model: ModelsJsonModel): string {\n\treturn model.name ?? model.id;\n}\n"]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* refreshes the provider immediately.
|
|
7
7
|
*/
|
|
8
8
|
import "../keybindings.ts";
|
|
9
|
-
import type {
|
|
9
|
+
import type { EditorPane, FetchModelsHost } from "./pane.ts";
|
|
10
10
|
import { type ScrollWindowInfo } from "./value-row.ts";
|
|
11
11
|
export declare class FetchModelsPane implements EditorPane {
|
|
12
12
|
private state;
|
|
@@ -17,7 +17,7 @@ export declare class FetchModelsPane implements EditorPane {
|
|
|
17
17
|
private focused;
|
|
18
18
|
private disposed;
|
|
19
19
|
private readonly host;
|
|
20
|
-
constructor(host:
|
|
20
|
+
constructor(host: FetchModelsHost);
|
|
21
21
|
/** Enter pressed on the left-column row (or on the idle pane): start the request. */
|
|
22
22
|
start(): void;
|
|
23
23
|
private existingIds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-models.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/fetch-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"fetch-models.d.ts","sourceRoot":"","sources":["../../../../src/extensions/provider/ui/fetch-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,mBAAmB,CAAC;AAK3B,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAmC,KAAK,gBAAgB,EAA+B,MAAM,gBAAgB,CAAC;AAkCrH,qBAAa,eAAgB,YAAW,UAAU;IACjD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;gBAC3B,IAAI,EAAE,eAAe;IASjC,qFAAqF;IACrF,KAAK,IAAI,IAAI;IA6Cb,OAAO,CAAC,WAAW;IAInB,uFAAuF;IACvF,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,IAAI;IAWZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6E/B,YAAY,IAAI,gBAAgB;IAShC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAsC/B,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,aAAa;IA+CrB,OAAO,CAAC,WAAW;IAOnB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKlC,SAAS,IAAI,OAAO;IAIpB,OAAO,IAAI,IAAI;IAKf,KAAK,IAAI,MAAM;CAoBf"}
|