@bytespell/shella 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +49 -37
- package/dist/bin/cli.js.map +1 -1
- package/dist/index.js +49 -37
- package/dist/index.js.map +1 -1
- package/dist/public/assets/{_baseUniq-rFeuIcJP.js → _baseUniq-f4tIwaKc.js} +1 -1
- package/{public/assets/arc-Ciq1-gt2.js → dist/public/assets/arc-D1iSSrpp.js} +1 -1
- package/{public/assets/architectureDiagram-VXUJARFQ-DQOTLTYJ.js → dist/public/assets/architectureDiagram-VXUJARFQ-CHdfmBcb.js} +1 -1
- package/{public/assets/blockDiagram-VD42YOAC-DrkXLslH.js → dist/public/assets/blockDiagram-VD42YOAC-CDILmMuo.js} +1 -1
- package/dist/public/assets/{c4Diagram-YG6GDRKO-CGep4UQM.js → c4Diagram-YG6GDRKO-Dydypk5A.js} +1 -1
- package/dist/public/assets/channel-D1aQ_UAD.js +1 -0
- package/dist/public/assets/{chunk-4BX2VUAB-DXU1pWcl.js → chunk-4BX2VUAB-pytRVvgb.js} +1 -1
- package/dist/public/assets/{chunk-55IACEB6-Bx-cpVYk.js → chunk-55IACEB6-mTx67dww.js} +1 -1
- package/{public/assets/chunk-B4BG7PRW-DN5-a04I.js → dist/public/assets/chunk-B4BG7PRW-DIs9ZsPT.js} +1 -1
- package/{public/assets/chunk-DI55MBZ5-CO01g9LM.js → dist/public/assets/chunk-DI55MBZ5-CwCAlT8Y.js} +1 -1
- package/dist/public/assets/{chunk-FMBD7UC4-B2M8wU-E.js → chunk-FMBD7UC4-fw4fjyOD.js} +1 -1
- package/dist/public/assets/{chunk-QN33PNHL-ZWjnlJD9.js → chunk-QN33PNHL-ekuWea8u.js} +1 -1
- package/dist/public/assets/{chunk-QZHKN3VN-CB-E8xvs.js → chunk-QZHKN3VN-BSGUw7ld.js} +1 -1
- package/dist/public/assets/{chunk-TZMSLE5B-C7K7-xdt.js → chunk-TZMSLE5B-50g1JKhR.js} +1 -1
- package/dist/public/assets/classDiagram-2ON5EDUG-BMkQAOMr.js +1 -0
- package/dist/public/assets/classDiagram-v2-WZHVMYZB-BMkQAOMr.js +1 -0
- package/dist/public/assets/clone-Bx37Q1vf.js +1 -0
- package/dist/public/assets/{code-block-IT6T5CEO-oEJfzIXW.js → code-block-IT6T5CEO-EDiF0GqI.js} +1 -1
- package/dist/public/assets/{cose-bilkent-S5V4N54A-Byu8718_.js → cose-bilkent-S5V4N54A-CvgE8W2M.js} +1 -1
- package/dist/public/assets/{dagre-6UL2VRFP-C2C-oI3k.js → dagre-6UL2VRFP-DvyJ7HR7.js} +1 -1
- package/dist/public/assets/{diagram-PSM6KHXK-Bc_wpePT.js → diagram-PSM6KHXK-Cc83AcOz.js} +1 -1
- package/dist/public/assets/{diagram-QEK2KX5R-R_dh2lcc.js → diagram-QEK2KX5R-CU46ARD8.js} +1 -1
- package/dist/public/assets/{diagram-S2PKOQOG-CtO72gsq.js → diagram-S2PKOQOG-efhSiP_M.js} +1 -1
- package/{public/assets/erDiagram-Q2GNP2WA-NyJ20Tcw.js → dist/public/assets/erDiagram-Q2GNP2WA-B58mIFpU.js} +1 -1
- package/{public/assets/flowDiagram-NV44I4VS-Cd0USqQr.js → dist/public/assets/flowDiagram-NV44I4VS-1v9cp2YJ.js} +1 -1
- package/dist/public/assets/{ganttDiagram-JELNMOA3-CAanRDED.js → ganttDiagram-JELNMOA3-BcTkV6Gr.js} +1 -1
- package/dist/public/assets/{gitGraphDiagram-NY62KEGX-Cfsu6ghS.js → gitGraphDiagram-NY62KEGX-93GAGqcU.js} +1 -1
- package/dist/public/assets/{graph-QKFq9c4B.js → graph-6Tw3vSP1.js} +1 -1
- package/dist/public/assets/{index-CnzhCX95.js → index-DCoOU4Bo.js} +136 -136
- package/dist/public/assets/index-DX0UZrUM.css +1 -0
- package/dist/public/assets/index-N3b5RkIr.js +23 -0
- package/dist/public/assets/{infoDiagram-WHAUD3N6-Dj8jXmxi.js → infoDiagram-WHAUD3N6-C63G3GM1.js} +1 -1
- package/dist/public/assets/{journeyDiagram-XKPGCS4Q-CPgbzNru.js → journeyDiagram-XKPGCS4Q-COsqyKDn.js} +1 -1
- package/{public/assets/kanban-definition-3W4ZIXB7-WJ4DpsDz.js → dist/public/assets/kanban-definition-3W4ZIXB7-D8vQWdGC.js} +1 -1
- package/dist/public/assets/{layout-CYzA-TWJ.js → layout-DRyEo8lq.js} +1 -1
- package/dist/public/assets/{linear--TKGjpXE.js → linear-z45OTqjs.js} +1 -1
- package/dist/public/assets/{mermaid.core-Cf8Vm-zi.js → mermaid.core-BNfYzVuV.js} +5 -5
- package/dist/public/assets/{min-TcvkLLDD.js → min-CmiDBzIz.js} +1 -1
- package/dist/public/assets/{mindmap-definition-VGOIOE7T-Cn1Dyi7A.js → mindmap-definition-VGOIOE7T-DYRthb2s.js} +1 -1
- package/dist/public/assets/{pieDiagram-ADFJNKIX-D62bbfWm.js → pieDiagram-ADFJNKIX-Si1xn4yd.js} +1 -1
- package/{public/assets/quadrantDiagram-AYHSOK5B-8_KQ7LcH.js → dist/public/assets/quadrantDiagram-AYHSOK5B-BNniOxQC.js} +1 -1
- package/dist/public/assets/{requirementDiagram-UZGBJVZJ-Cux_-KLZ.js → requirementDiagram-UZGBJVZJ-BhnRM_zJ.js} +1 -1
- package/{public/assets/sankeyDiagram-TZEHDZUN-SGGXtbp5.js → dist/public/assets/sankeyDiagram-TZEHDZUN-DUUi1FUF.js} +1 -1
- package/{public/assets/sequenceDiagram-WL72ISMW-BmSoaDsd.js → dist/public/assets/sequenceDiagram-WL72ISMW-ntc5_wIp.js} +1 -1
- package/{public/assets/stateDiagram-FKZM4ZOC-laPJWPGD.js → dist/public/assets/stateDiagram-FKZM4ZOC-BFkPTNKj.js} +1 -1
- package/dist/public/assets/stateDiagram-v2-4FDKWEC3-D4GG1k4J.js +1 -0
- package/{public/assets/timeline-definition-IT6M3QCI-DnEEd3PS.js → dist/public/assets/timeline-definition-IT6M3QCI-B3ytx-Fa.js} +1 -1
- package/dist/public/assets/{treemap-KMMF4GRG-CEr_nAYt.js → treemap-KMMF4GRG-BO2CInCE.js} +1 -1
- package/{public/assets/xychartDiagram-PRI3JC2R-BA6uWNes.js → dist/public/assets/xychartDiagram-PRI3JC2R-CZhdEbYY.js} +1 -1
- package/dist/public/index.html +2 -2
- package/package.json +1 -1
- package/public/assets/{_baseUniq-rFeuIcJP.js → _baseUniq-f4tIwaKc.js} +1 -1
- package/{dist/public/assets/arc-Ciq1-gt2.js → public/assets/arc-D1iSSrpp.js} +1 -1
- package/{dist/public/assets/architectureDiagram-VXUJARFQ-DQOTLTYJ.js → public/assets/architectureDiagram-VXUJARFQ-CHdfmBcb.js} +1 -1
- package/{dist/public/assets/blockDiagram-VD42YOAC-DrkXLslH.js → public/assets/blockDiagram-VD42YOAC-CDILmMuo.js} +1 -1
- package/public/assets/{c4Diagram-YG6GDRKO-CGep4UQM.js → c4Diagram-YG6GDRKO-Dydypk5A.js} +1 -1
- package/public/assets/channel-D1aQ_UAD.js +1 -0
- package/public/assets/{chunk-4BX2VUAB-DXU1pWcl.js → chunk-4BX2VUAB-pytRVvgb.js} +1 -1
- package/public/assets/{chunk-55IACEB6-Bx-cpVYk.js → chunk-55IACEB6-mTx67dww.js} +1 -1
- package/{dist/public/assets/chunk-B4BG7PRW-DN5-a04I.js → public/assets/chunk-B4BG7PRW-DIs9ZsPT.js} +1 -1
- package/{dist/public/assets/chunk-DI55MBZ5-CO01g9LM.js → public/assets/chunk-DI55MBZ5-CwCAlT8Y.js} +1 -1
- package/public/assets/{chunk-FMBD7UC4-B2M8wU-E.js → chunk-FMBD7UC4-fw4fjyOD.js} +1 -1
- package/public/assets/{chunk-QN33PNHL-ZWjnlJD9.js → chunk-QN33PNHL-ekuWea8u.js} +1 -1
- package/public/assets/{chunk-QZHKN3VN-CB-E8xvs.js → chunk-QZHKN3VN-BSGUw7ld.js} +1 -1
- package/public/assets/{chunk-TZMSLE5B-C7K7-xdt.js → chunk-TZMSLE5B-50g1JKhR.js} +1 -1
- package/public/assets/classDiagram-2ON5EDUG-BMkQAOMr.js +1 -0
- package/public/assets/classDiagram-v2-WZHVMYZB-BMkQAOMr.js +1 -0
- package/public/assets/clone-Bx37Q1vf.js +1 -0
- package/public/assets/{code-block-IT6T5CEO-oEJfzIXW.js → code-block-IT6T5CEO-EDiF0GqI.js} +1 -1
- package/public/assets/{cose-bilkent-S5V4N54A-Byu8718_.js → cose-bilkent-S5V4N54A-CvgE8W2M.js} +1 -1
- package/public/assets/{dagre-6UL2VRFP-C2C-oI3k.js → dagre-6UL2VRFP-DvyJ7HR7.js} +1 -1
- package/public/assets/{diagram-PSM6KHXK-Bc_wpePT.js → diagram-PSM6KHXK-Cc83AcOz.js} +1 -1
- package/public/assets/{diagram-QEK2KX5R-R_dh2lcc.js → diagram-QEK2KX5R-CU46ARD8.js} +1 -1
- package/public/assets/{diagram-S2PKOQOG-CtO72gsq.js → diagram-S2PKOQOG-efhSiP_M.js} +1 -1
- package/{dist/public/assets/erDiagram-Q2GNP2WA-NyJ20Tcw.js → public/assets/erDiagram-Q2GNP2WA-B58mIFpU.js} +1 -1
- package/{dist/public/assets/flowDiagram-NV44I4VS-Cd0USqQr.js → public/assets/flowDiagram-NV44I4VS-1v9cp2YJ.js} +1 -1
- package/public/assets/{ganttDiagram-JELNMOA3-CAanRDED.js → ganttDiagram-JELNMOA3-BcTkV6Gr.js} +1 -1
- package/public/assets/{gitGraphDiagram-NY62KEGX-Cfsu6ghS.js → gitGraphDiagram-NY62KEGX-93GAGqcU.js} +1 -1
- package/public/assets/{graph-QKFq9c4B.js → graph-6Tw3vSP1.js} +1 -1
- package/public/assets/{index-CnzhCX95.js → index-DCoOU4Bo.js} +136 -136
- package/public/assets/index-DX0UZrUM.css +1 -0
- package/public/assets/index-N3b5RkIr.js +23 -0
- package/public/assets/{infoDiagram-WHAUD3N6-Dj8jXmxi.js → infoDiagram-WHAUD3N6-C63G3GM1.js} +1 -1
- package/public/assets/{journeyDiagram-XKPGCS4Q-CPgbzNru.js → journeyDiagram-XKPGCS4Q-COsqyKDn.js} +1 -1
- package/{dist/public/assets/kanban-definition-3W4ZIXB7-WJ4DpsDz.js → public/assets/kanban-definition-3W4ZIXB7-D8vQWdGC.js} +1 -1
- package/public/assets/{layout-CYzA-TWJ.js → layout-DRyEo8lq.js} +1 -1
- package/public/assets/{linear--TKGjpXE.js → linear-z45OTqjs.js} +1 -1
- package/public/assets/{mermaid.core-Cf8Vm-zi.js → mermaid.core-BNfYzVuV.js} +5 -5
- package/public/assets/{min-TcvkLLDD.js → min-CmiDBzIz.js} +1 -1
- package/public/assets/{mindmap-definition-VGOIOE7T-Cn1Dyi7A.js → mindmap-definition-VGOIOE7T-DYRthb2s.js} +1 -1
- package/public/assets/{pieDiagram-ADFJNKIX-D62bbfWm.js → pieDiagram-ADFJNKIX-Si1xn4yd.js} +1 -1
- package/{dist/public/assets/quadrantDiagram-AYHSOK5B-8_KQ7LcH.js → public/assets/quadrantDiagram-AYHSOK5B-BNniOxQC.js} +1 -1
- package/public/assets/{requirementDiagram-UZGBJVZJ-Cux_-KLZ.js → requirementDiagram-UZGBJVZJ-BhnRM_zJ.js} +1 -1
- package/{dist/public/assets/sankeyDiagram-TZEHDZUN-SGGXtbp5.js → public/assets/sankeyDiagram-TZEHDZUN-DUUi1FUF.js} +1 -1
- package/{dist/public/assets/sequenceDiagram-WL72ISMW-BmSoaDsd.js → public/assets/sequenceDiagram-WL72ISMW-ntc5_wIp.js} +1 -1
- package/{dist/public/assets/stateDiagram-FKZM4ZOC-laPJWPGD.js → public/assets/stateDiagram-FKZM4ZOC-BFkPTNKj.js} +1 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-D4GG1k4J.js +1 -0
- package/{dist/public/assets/timeline-definition-IT6M3QCI-DnEEd3PS.js → public/assets/timeline-definition-IT6M3QCI-B3ytx-Fa.js} +1 -1
- package/public/assets/{treemap-KMMF4GRG-CEr_nAYt.js → treemap-KMMF4GRG-BO2CInCE.js} +1 -1
- package/{dist/public/assets/xychartDiagram-PRI3JC2R-BA6uWNes.js → public/assets/xychartDiagram-PRI3JC2R-CZhdEbYY.js} +1 -1
- package/public/index.html +2 -2
- package/dist/public/assets/channel-EWtlBi79.js +0 -1
- package/dist/public/assets/classDiagram-2ON5EDUG-Bhl8gu7O.js +0 -1
- package/dist/public/assets/classDiagram-v2-WZHVMYZB-Bhl8gu7O.js +0 -1
- package/dist/public/assets/clone-DGIXUqRz.js +0 -1
- package/dist/public/assets/index-BVgUdnkK.js +0 -23
- package/dist/public/assets/index-DAuITrPV.css +0 -1
- package/dist/public/assets/stateDiagram-v2-4FDKWEC3-uyrwe5Bi.js +0 -1
- package/public/assets/channel-EWtlBi79.js +0 -1
- package/public/assets/classDiagram-2ON5EDUG-Bhl8gu7O.js +0 -1
- package/public/assets/classDiagram-v2-WZHVMYZB-Bhl8gu7O.js +0 -1
- package/public/assets/clone-DGIXUqRz.js +0 -1
- package/public/assets/index-BVgUdnkK.js +0 -23
- package/public/assets/index-DAuITrPV.css +0 -1
- package/public/assets/stateDiagram-v2-4FDKWEC3-uyrwe5Bi.js +0 -1
package/dist/index.js
CHANGED
|
@@ -105,6 +105,8 @@ var panes = sqliteTable("panes", {
|
|
|
105
105
|
eventStream: text("event_stream", { mode: "json" }).$type(),
|
|
106
106
|
/** Renderer ID (e.g., 'builtin:terminal', 'project:custom-viewer'). Null = use default. */
|
|
107
107
|
rendererId: text("renderer_id"),
|
|
108
|
+
/** Pane state - initialized from initOptions, can be updated by renderers. */
|
|
109
|
+
state: text("state", { mode: "json" }).$type(),
|
|
108
110
|
createdAt: integer("created_at", { mode: "timestamp_ms" }).notNull().default(sql`(unixepoch() * 1000)`)
|
|
109
111
|
});
|
|
110
112
|
var uiState = sqliteTable("ui_state", {
|
|
@@ -159,6 +161,7 @@ sqlite.exec(`
|
|
|
159
161
|
content TEXT,
|
|
160
162
|
event_stream TEXT,
|
|
161
163
|
renderer_id TEXT,
|
|
164
|
+
state TEXT,
|
|
162
165
|
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
163
166
|
);
|
|
164
167
|
|
|
@@ -201,6 +204,16 @@ try {
|
|
|
201
204
|
}
|
|
202
205
|
} catch (e) {
|
|
203
206
|
}
|
|
207
|
+
try {
|
|
208
|
+
const tableInfo = sqlite.prepare(`PRAGMA table_info(panes)`).all();
|
|
209
|
+
const hasStateColumn = tableInfo.some((col) => col.name === "state");
|
|
210
|
+
if (!hasStateColumn) {
|
|
211
|
+
console.log("[db] Adding state column to panes...");
|
|
212
|
+
sqlite.exec(`ALTER TABLE panes ADD COLUMN state TEXT`);
|
|
213
|
+
console.log("[db] state column migration complete");
|
|
214
|
+
}
|
|
215
|
+
} catch (e) {
|
|
216
|
+
}
|
|
204
217
|
|
|
205
218
|
// src/lib/configDiscovery.ts
|
|
206
219
|
import { execSync } from "child_process";
|
|
@@ -671,18 +684,9 @@ async function listFilesFuzzy(workingDir, query, limit) {
|
|
|
671
684
|
|
|
672
685
|
// src/amuxBridge.ts
|
|
673
686
|
import { muxManager as muxManager2 } from "@bytespell/amux/streams/manager";
|
|
674
|
-
import { isAcpEvent } from "@bytespell/amux/types";
|
|
675
687
|
function getStreamStorageDir(streamId) {
|
|
676
688
|
return path5.join(getDataDir(), "streams", streamId);
|
|
677
689
|
}
|
|
678
|
-
function generateTitleFromMessage(message) {
|
|
679
|
-
const cleaned = message.replace(/@[\w./~-]+/g, "").replace(/\s+/g, " ").trim();
|
|
680
|
-
const firstLine = cleaned.split("\n")[0] || cleaned;
|
|
681
|
-
if (firstLine.length <= 50) return firstLine;
|
|
682
|
-
const truncated = firstLine.slice(0, 50);
|
|
683
|
-
const lastSpace = truncated.lastIndexOf(" ");
|
|
684
|
-
return lastSpace > 20 ? truncated.slice(0, lastSpace) + "..." : truncated + "...";
|
|
685
|
-
}
|
|
686
690
|
function createAmuxBridge() {
|
|
687
691
|
const bridge = {
|
|
688
692
|
async getStreams(ids) {
|
|
@@ -713,15 +717,15 @@ function createAmuxBridge() {
|
|
|
713
717
|
const id = params.id ?? randomUUID2();
|
|
714
718
|
const now = /* @__PURE__ */ new Date();
|
|
715
719
|
const config = db.select().from(streamConfigs).where(eq2(streamConfigs.id, configId)).get();
|
|
716
|
-
const
|
|
717
|
-
const
|
|
720
|
+
const driver = config ? muxManager2.getDriver(config.driverType) : null;
|
|
721
|
+
const streamType = driver?.streamType ?? config?.driverType ?? "acp";
|
|
718
722
|
db.insert(streams).values({
|
|
719
723
|
id,
|
|
720
724
|
directory: params.directory,
|
|
721
725
|
streamConfigId: configId,
|
|
722
726
|
streamType,
|
|
723
727
|
driverState: null,
|
|
724
|
-
title:
|
|
728
|
+
title: null,
|
|
725
729
|
model: null,
|
|
726
730
|
mode: null,
|
|
727
731
|
createdAt: now
|
|
@@ -740,7 +744,14 @@ function createAmuxBridge() {
|
|
|
740
744
|
db.delete(streams).where(eq2(streams.id, id)).run();
|
|
741
745
|
},
|
|
742
746
|
async getStreamConfigs() {
|
|
743
|
-
|
|
747
|
+
const configs = db.select().from(streamConfigs).all();
|
|
748
|
+
return configs.map((config) => {
|
|
749
|
+
const driver = muxManager2.getDriver(config.driverType);
|
|
750
|
+
return {
|
|
751
|
+
...config,
|
|
752
|
+
streamType: driver?.streamType ?? config.driverType
|
|
753
|
+
};
|
|
754
|
+
});
|
|
744
755
|
},
|
|
745
756
|
async startStream(streamId) {
|
|
746
757
|
const dbStream = db.select().from(streams).where(eq2(streams.id, streamId)).get();
|
|
@@ -748,13 +759,7 @@ function createAmuxBridge() {
|
|
|
748
759
|
const dbConfig = db.select().from(streamConfigs).where(eq2(streamConfigs.id, dbStream.streamConfigId)).get();
|
|
749
760
|
if (!dbConfig) throw new Error(`Stream config ${dbStream.streamConfigId} not found`);
|
|
750
761
|
const storageDir = getStreamStorageDir(streamId);
|
|
751
|
-
const emit = (
|
|
752
|
-
if (isAcpEvent(event) && event.sessionUpdate === "session_info_update") {
|
|
753
|
-
const title = event.title;
|
|
754
|
-
if (title !== void 0) {
|
|
755
|
-
db.update(streams).set({ title }).where(eq2(streams.id, streamId)).run();
|
|
756
|
-
}
|
|
757
|
-
}
|
|
762
|
+
const emit = (_event) => {
|
|
758
763
|
};
|
|
759
764
|
const handle = await muxManager2.startStream({
|
|
760
765
|
streamId,
|
|
@@ -794,14 +799,6 @@ function createAmuxBridge() {
|
|
|
794
799
|
await muxManager2.stopForStream(streamId);
|
|
795
800
|
},
|
|
796
801
|
async input(streamId, message) {
|
|
797
|
-
const stream = db.select().from(streams).where(eq2(streams.id, streamId)).get();
|
|
798
|
-
if (!stream) throw new Error(`Stream ${streamId} not found`);
|
|
799
|
-
if (!stream.title) {
|
|
800
|
-
const title = generateTitleFromMessage(message);
|
|
801
|
-
if (title) {
|
|
802
|
-
db.update(streams).set({ title }).where(eq2(streams.id, streamId)).run();
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
802
|
await muxManager2.input(streamId, message);
|
|
806
803
|
},
|
|
807
804
|
async cancel(streamId) {
|
|
@@ -974,12 +971,11 @@ var amux;
|
|
|
974
971
|
function setAmuxBridge(bridge) {
|
|
975
972
|
amux = bridge;
|
|
976
973
|
}
|
|
977
|
-
function
|
|
978
|
-
const
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
return `Window ${existingCount + 1}`;
|
|
974
|
+
function getNextWindowNumber() {
|
|
975
|
+
const row = db.select().from(uiState).where(eq3(uiState.key, "window_counter")).get();
|
|
976
|
+
const next = (row ? parseInt(row.value, 10) : 0) + 1;
|
|
977
|
+
db.insert(uiState).values({ key: "window_counter", value: String(next) }).onConflictDoUpdate({ target: uiState.key, set: { value: String(next) } }).run();
|
|
978
|
+
return next;
|
|
983
979
|
}
|
|
984
980
|
var windowsRouter = router({
|
|
985
981
|
/**
|
|
@@ -1053,11 +1049,10 @@ var windowsRouter = router({
|
|
|
1053
1049
|
}
|
|
1054
1050
|
const windowId = input.id ?? randomUUID3();
|
|
1055
1051
|
const paneId = randomUUID3();
|
|
1056
|
-
const existingCount = db.select().from(windows).all().length;
|
|
1057
1052
|
const layout = createLeaf(paneId);
|
|
1058
1053
|
db.insert(windows).values({
|
|
1059
1054
|
id: windowId,
|
|
1060
|
-
title: input.title ||
|
|
1055
|
+
title: input.title || String(getNextWindowNumber()),
|
|
1061
1056
|
hasCustomTitle: !!input.title,
|
|
1062
1057
|
layout,
|
|
1063
1058
|
activePaneId: paneId
|
|
@@ -1324,6 +1319,8 @@ var layoutRouter = router({
|
|
|
1324
1319
|
streamConfigId: z2.string(),
|
|
1325
1320
|
directory: z2.string().optional(),
|
|
1326
1321
|
rendererId: z2.string().optional(),
|
|
1322
|
+
/** All initOptions from the form - stored as pane state */
|
|
1323
|
+
initOptions: z2.record(z2.string()).optional(),
|
|
1327
1324
|
// Legacy alias
|
|
1328
1325
|
agentConfigId: z2.string().optional()
|
|
1329
1326
|
})).mutation(async ({ input }) => {
|
|
@@ -1343,7 +1340,8 @@ var layoutRouter = router({
|
|
|
1343
1340
|
const eventStream = { type: stream.streamType, streamId: stream.id };
|
|
1344
1341
|
db.update(panes).set({
|
|
1345
1342
|
eventStream,
|
|
1346
|
-
rendererId: input.rendererId ?? null
|
|
1343
|
+
rendererId: input.rendererId ?? null,
|
|
1344
|
+
state: input.initOptions ?? null
|
|
1347
1345
|
}).where(eq4(panes.id, input.paneId)).run();
|
|
1348
1346
|
await amux2.startStream(stream.id);
|
|
1349
1347
|
return {
|
|
@@ -1370,6 +1368,20 @@ var layoutRouter = router({
|
|
|
1370
1368
|
createdAt: stream.createdAt.toISOString()
|
|
1371
1369
|
}
|
|
1372
1370
|
};
|
|
1371
|
+
}),
|
|
1372
|
+
/**
|
|
1373
|
+
* Update pane state. Renderers can call this to update state during the pane lifecycle.
|
|
1374
|
+
*/
|
|
1375
|
+
updatePaneState: publicProcedure.input(z2.object({
|
|
1376
|
+
paneId: z2.string(),
|
|
1377
|
+
state: z2.record(z2.string())
|
|
1378
|
+
})).mutation(async ({ input }) => {
|
|
1379
|
+
const pane = db.select().from(panes).where(eq4(panes.id, input.paneId)).get();
|
|
1380
|
+
if (!pane) {
|
|
1381
|
+
throw new Error(`Pane ${input.paneId} not found`);
|
|
1382
|
+
}
|
|
1383
|
+
db.update(panes).set({ state: input.state }).where(eq4(panes.id, input.paneId)).run();
|
|
1384
|
+
return { ok: true };
|
|
1373
1385
|
})
|
|
1374
1386
|
});
|
|
1375
1387
|
|