@openspecui/web 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{BufferResource-ruI1lJIJ.js → BufferResource-DdnZHNU-.js} +1 -1
- package/dist/assets/{CanvasRenderer-CN4Y26ZH.js → CanvasRenderer-W0-8maEY.js} +1 -1
- package/{dist-ssg/client/assets/Filter-BTjr3eok.js → dist/assets/Filter-BCHzFO9X.js} +1 -1
- package/{dist-ssg/client/assets/RenderTargetSystem-CZa2ln2y.js → dist/assets/RenderTargetSystem-QYja7U1C.js} +1 -1
- package/dist/assets/{WebGLRenderer-BJQTLaSb.js → WebGLRenderer-CN6ngwpu.js} +1 -1
- package/{dist-ssg/client/assets/WebGPURenderer-BcNgCRe5.js → dist/assets/WebGPURenderer-CSfhxPBR.js} +1 -1
- package/{dist-ssg/client/assets/browserAll-ChJbTPze.js → dist/assets/browserAll-CChvoSPa.js} +1 -1
- package/dist/assets/{index-BX2oqbsU.js → index-8kjDfgtP.js} +1 -1
- package/dist/assets/index-BBa-UOW9.css +1 -0
- package/{dist-ssg/client/assets/index-7wPrcnqL.js → dist/assets/index-BPuO-i8p.js} +1 -1
- package/dist/assets/{index-ikUsdiVm.js → index-BTVg5Nau.js} +1 -1
- package/dist/assets/{index--L_QdP-6.js → index-BcA9ozYL.js} +184 -184
- package/{dist-ssg/client/assets/index-DVpS5GHp.js → dist/assets/index-CWB6CIXv.js} +1 -1
- package/dist/assets/{index-Y62s8n_r.js → index-Ca41ecb5.js} +1 -1
- package/dist/assets/{index-BbhkBFut.js → index-CoF0ewHZ.js} +1 -1
- package/{dist-ssg/client/assets/index-ySiN9oO6.js → dist/assets/index-D2pLblyv.js} +1 -1
- package/{dist-ssg/client/assets/index-Cenc0P-m.js → dist/assets/index-DS0kz2NM.js} +1 -1
- package/dist/assets/{index-CwjzVtxK.js → index-DSkiV8t7.js} +1 -1
- package/{dist-ssg/client/assets/index-Dw9lVmn9.js → dist/assets/index-DWh8uDpX.js} +1 -1
- package/dist/assets/{index-w-3qupYf.js → index-DXb6uuwe.js} +1 -1
- package/dist/assets/{index-CNeO03Fc.js → index-Do3bWt1y.js} +1 -1
- package/{dist-ssg/client/assets/index-C7mTgvb9.js → dist/assets/index-a4zt_8am.js} +1 -1
- package/dist/assets/{index-DrCDnKl4.js → index-fWg8Cn9O.js} +1 -1
- package/dist/assets/{index-DwoTlpGw.js → index-hysFimNk.js} +1 -1
- package/dist/assets/{webworkerAll-Bd8axVrm.js → webworkerAll-T10QBdIL.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-ssg/client/.vite/ssr-manifest.json +197 -191
- package/dist-ssg/client/assets/{BufferResource-ruI1lJIJ.js → BufferResource-DdnZHNU-.js} +1 -1
- package/dist-ssg/client/assets/{CanvasRenderer-CN4Y26ZH.js → CanvasRenderer-W0-8maEY.js} +1 -1
- package/{dist/assets/Filter-BTjr3eok.js → dist-ssg/client/assets/Filter-BCHzFO9X.js} +1 -1
- package/{dist/assets/RenderTargetSystem-CZa2ln2y.js → dist-ssg/client/assets/RenderTargetSystem-QYja7U1C.js} +1 -1
- package/dist-ssg/client/assets/{WebGLRenderer-BJQTLaSb.js → WebGLRenderer-CN6ngwpu.js} +1 -1
- package/{dist/assets/WebGPURenderer-BcNgCRe5.js → dist-ssg/client/assets/WebGPURenderer-CSfhxPBR.js} +1 -1
- package/{dist/assets/browserAll-ChJbTPze.js → dist-ssg/client/assets/browserAll-CChvoSPa.js} +1 -1
- package/dist-ssg/client/assets/{index-BX2oqbsU.js → index-8kjDfgtP.js} +1 -1
- package/dist-ssg/client/assets/index-BBa-UOW9.css +1 -0
- package/{dist/assets/index-7wPrcnqL.js → dist-ssg/client/assets/index-BPuO-i8p.js} +1 -1
- package/dist-ssg/client/assets/{index-ikUsdiVm.js → index-BTVg5Nau.js} +1 -1
- package/dist-ssg/client/assets/{index--L_QdP-6.js → index-BcA9ozYL.js} +184 -184
- package/{dist/assets/index-DVpS5GHp.js → dist-ssg/client/assets/index-CWB6CIXv.js} +1 -1
- package/dist-ssg/client/assets/{index-Y62s8n_r.js → index-Ca41ecb5.js} +1 -1
- package/dist-ssg/client/assets/{index-BbhkBFut.js → index-CoF0ewHZ.js} +1 -1
- package/{dist/assets/index-ySiN9oO6.js → dist-ssg/client/assets/index-D2pLblyv.js} +1 -1
- package/{dist/assets/index-Cenc0P-m.js → dist-ssg/client/assets/index-DS0kz2NM.js} +1 -1
- package/dist-ssg/client/assets/{index-CwjzVtxK.js → index-DSkiV8t7.js} +1 -1
- package/{dist/assets/index-Dw9lVmn9.js → dist-ssg/client/assets/index-DWh8uDpX.js} +1 -1
- package/dist-ssg/client/assets/{index-w-3qupYf.js → index-DXb6uuwe.js} +1 -1
- package/dist-ssg/client/assets/{index-CNeO03Fc.js → index-Do3bWt1y.js} +1 -1
- package/{dist/assets/index-C7mTgvb9.js → dist-ssg/client/assets/index-a4zt_8am.js} +1 -1
- package/dist-ssg/client/assets/{index-DrCDnKl4.js → index-fWg8Cn9O.js} +1 -1
- package/dist-ssg/client/assets/{index-DwoTlpGw.js → index-hysFimNk.js} +1 -1
- package/dist-ssg/client/assets/{webworkerAll-Bd8axVrm.js → webworkerAll-T10QBdIL.js} +1 -1
- package/dist-ssg/client/index.html +2 -2
- package/dist-ssg/server/entry-server.js +176 -33
- package/package.json +4 -4
- package/dist/assets/index-BfjQi4qu.css +0 -1
- package/dist-ssg/client/assets/index-BfjQi4qu.css +0 -1
|
@@ -36129,7 +36129,7 @@ const DEFAULT_MAIN_TABS = [
|
|
|
36129
36129
|
"/settings"
|
|
36130
36130
|
];
|
|
36131
36131
|
const DEFAULT_BOTTOM_TABS = isStaticMode() ? [] : ["/terminal"];
|
|
36132
|
-
const POP_ROUTES = ["/search"];
|
|
36132
|
+
const POP_ROUTES = ["/search", "/opsx-new"];
|
|
36133
36133
|
const KV_KEY$1 = "nav-layout";
|
|
36134
36134
|
const LS_KEY = "nav-layout";
|
|
36135
36135
|
const PERSIST_DEBOUNCE = 300;
|
|
@@ -106798,9 +106798,19 @@ function ChangeList() {
|
|
|
106798
106798
|
);
|
|
106799
106799
|
}),
|
|
106800
106800
|
statuses?.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground p-4 text-center", children: [
|
|
106801
|
-
"No active changes.
|
|
106802
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
106803
|
-
|
|
106801
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "No active changes." }),
|
|
106802
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
106803
|
+
"button",
|
|
106804
|
+
{
|
|
106805
|
+
type: "button",
|
|
106806
|
+
onClick: () => navController.activatePop("/opsx-new"),
|
|
106807
|
+
className: "text-primary mt-2 inline-flex items-center gap-1 hover:underline",
|
|
106808
|
+
children: [
|
|
106809
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Sparkles, { className: "h-3.5 w-3.5" }),
|
|
106810
|
+
"/opsx:new"
|
|
106811
|
+
]
|
|
106812
|
+
}
|
|
106813
|
+
)
|
|
106804
106814
|
] })
|
|
106805
106815
|
] })
|
|
106806
106816
|
] });
|
|
@@ -106817,7 +106827,7 @@ function ArtifactHeader({ artifact }) {
|
|
|
106817
106827
|
const status = statusConfig[artifact.status];
|
|
106818
106828
|
const StatusIcon = status.icon;
|
|
106819
106829
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
106820
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-border flex flex-wrap items-center justify-between gap-3 rounded-md border
|
|
106830
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-border bg-card flex flex-wrap items-center justify-between gap-3 rounded-md border px-4 py-3", children: [
|
|
106821
106831
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
106822
106832
|
/* @__PURE__ */ jsxRuntimeExports.jsx(FileText, { className: "text-muted-foreground h-4 w-4" }),
|
|
106823
106833
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium", children: artifact.id }),
|
|
@@ -106838,7 +106848,10 @@ function ArtifactHeader({ artifact }) {
|
|
|
106838
106848
|
] });
|
|
106839
106849
|
}
|
|
106840
106850
|
function SingleFileContent({ changeId, artifact }) {
|
|
106841
|
-
const { data: content2, isLoading } = useOpsxArtifactOutputSubscription(
|
|
106851
|
+
const { data: content2, isLoading } = useOpsxArtifactOutputSubscription(
|
|
106852
|
+
changeId,
|
|
106853
|
+
artifact.outputPath
|
|
106854
|
+
);
|
|
106842
106855
|
if (isLoading) {
|
|
106843
106856
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Loading output..." });
|
|
106844
106857
|
}
|
|
@@ -106847,19 +106860,22 @@ function SingleFileContent({ changeId, artifact }) {
|
|
|
106847
106860
|
}
|
|
106848
106861
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center rounded-md border border-dashed p-6 text-sm", children: [
|
|
106849
106862
|
"Not yet generated. Use ",
|
|
106850
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Continue" }),
|
|
106863
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "mx-2", children: "Continue" }),
|
|
106851
106864
|
" to generate this artifact."
|
|
106852
106865
|
] });
|
|
106853
106866
|
}
|
|
106854
106867
|
function GlobContent({ changeId, artifact }) {
|
|
106855
|
-
const { data: files, isLoading } = useOpsxGlobArtifactFilesSubscription(
|
|
106868
|
+
const { data: files, isLoading } = useOpsxGlobArtifactFilesSubscription(
|
|
106869
|
+
changeId,
|
|
106870
|
+
artifact.outputPath
|
|
106871
|
+
);
|
|
106856
106872
|
if (isLoading) {
|
|
106857
106873
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-[400px] items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "text-muted-foreground h-6 w-6 animate-spin" }) });
|
|
106858
106874
|
}
|
|
106859
106875
|
if (!files?.length) {
|
|
106860
106876
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground flex h-full items-center justify-center rounded-md border border-dashed p-6 text-sm", children: [
|
|
106861
106877
|
"Not yet generated. Use ",
|
|
106862
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Continue" }),
|
|
106878
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "mx-2", children: "Continue" }),
|
|
106863
106879
|
" to generate this artifact."
|
|
106864
106880
|
] });
|
|
106865
106881
|
}
|
|
@@ -109891,6 +109907,59 @@ ZodTuple.create = (schemas, params) => {
|
|
|
109891
109907
|
...processCreateParams(params)
|
|
109892
109908
|
});
|
|
109893
109909
|
};
|
|
109910
|
+
class ZodRecord extends ZodType {
|
|
109911
|
+
get keySchema() {
|
|
109912
|
+
return this._def.keyType;
|
|
109913
|
+
}
|
|
109914
|
+
get valueSchema() {
|
|
109915
|
+
return this._def.valueType;
|
|
109916
|
+
}
|
|
109917
|
+
_parse(input) {
|
|
109918
|
+
const { status, ctx } = this._processInputParams(input);
|
|
109919
|
+
if (ctx.parsedType !== ZodParsedType.object) {
|
|
109920
|
+
addIssueToContext(ctx, {
|
|
109921
|
+
code: ZodIssueCode.invalid_type,
|
|
109922
|
+
expected: ZodParsedType.object,
|
|
109923
|
+
received: ctx.parsedType
|
|
109924
|
+
});
|
|
109925
|
+
return INVALID;
|
|
109926
|
+
}
|
|
109927
|
+
const pairs2 = [];
|
|
109928
|
+
const keyType = this._def.keyType;
|
|
109929
|
+
const valueType = this._def.valueType;
|
|
109930
|
+
for (const key2 in ctx.data) {
|
|
109931
|
+
pairs2.push({
|
|
109932
|
+
key: keyType._parse(new ParseInputLazyPath(ctx, key2, ctx.path, key2)),
|
|
109933
|
+
value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key2], ctx.path, key2)),
|
|
109934
|
+
alwaysSet: key2 in ctx.data
|
|
109935
|
+
});
|
|
109936
|
+
}
|
|
109937
|
+
if (ctx.common.async) {
|
|
109938
|
+
return ParseStatus.mergeObjectAsync(status, pairs2);
|
|
109939
|
+
} else {
|
|
109940
|
+
return ParseStatus.mergeObjectSync(status, pairs2);
|
|
109941
|
+
}
|
|
109942
|
+
}
|
|
109943
|
+
get element() {
|
|
109944
|
+
return this._def.valueType;
|
|
109945
|
+
}
|
|
109946
|
+
static create(first, second, third) {
|
|
109947
|
+
if (second instanceof ZodType) {
|
|
109948
|
+
return new ZodRecord({
|
|
109949
|
+
keyType: first,
|
|
109950
|
+
valueType: second,
|
|
109951
|
+
typeName: ZodFirstPartyTypeKind.ZodRecord,
|
|
109952
|
+
...processCreateParams(third)
|
|
109953
|
+
});
|
|
109954
|
+
}
|
|
109955
|
+
return new ZodRecord({
|
|
109956
|
+
keyType: ZodString.create(),
|
|
109957
|
+
valueType: first,
|
|
109958
|
+
typeName: ZodFirstPartyTypeKind.ZodRecord,
|
|
109959
|
+
...processCreateParams(second)
|
|
109960
|
+
});
|
|
109961
|
+
}
|
|
109962
|
+
}
|
|
109894
109963
|
class ZodMap extends ZodType {
|
|
109895
109964
|
get keySchema() {
|
|
109896
109965
|
return this._def.keyType;
|
|
@@ -110635,10 +110704,11 @@ const booleanType = ZodBoolean.create;
|
|
|
110635
110704
|
ZodNever.create;
|
|
110636
110705
|
const arrayType = ZodArray.create;
|
|
110637
110706
|
const objectType = ZodObject.create;
|
|
110638
|
-
ZodUnion.create;
|
|
110707
|
+
const unionType = ZodUnion.create;
|
|
110639
110708
|
const discriminatedUnionType = ZodDiscriminatedUnion.create;
|
|
110640
110709
|
ZodIntersection.create;
|
|
110641
110710
|
ZodTuple.create;
|
|
110711
|
+
const recordType = ZodRecord.create;
|
|
110642
110712
|
const literalType = ZodLiteral.create;
|
|
110643
110713
|
const enumType = ZodEnum.create;
|
|
110644
110714
|
ZodPromise.create;
|
|
@@ -110646,6 +110716,7 @@ ZodOptional.create;
|
|
|
110646
110716
|
ZodNullable.create;
|
|
110647
110717
|
const PositiveInt = numberType().int().positive();
|
|
110648
110718
|
const PtyPlatformSchema = enumType(["windows", "macos", "common"]);
|
|
110719
|
+
const CloseCallbackUrlSchema = unionType([stringType(), recordType(stringType())]);
|
|
110649
110720
|
const PtySessionInfoSchema = objectType({
|
|
110650
110721
|
id: stringType().min(1),
|
|
110651
110722
|
title: stringType(),
|
|
@@ -110653,7 +110724,9 @@ const PtySessionInfoSchema = objectType({
|
|
|
110653
110724
|
args: arrayType(stringType()),
|
|
110654
110725
|
platform: PtyPlatformSchema,
|
|
110655
110726
|
isExited: booleanType(),
|
|
110656
|
-
exitCode: numberType().int().nullable()
|
|
110727
|
+
exitCode: numberType().int().nullable(),
|
|
110728
|
+
closeTip: stringType().optional(),
|
|
110729
|
+
closeCallbackUrl: CloseCallbackUrlSchema.optional()
|
|
110657
110730
|
});
|
|
110658
110731
|
const PtyCreateMessageSchema = objectType({
|
|
110659
110732
|
type: literalType("create"),
|
|
@@ -110661,7 +110734,9 @@ const PtyCreateMessageSchema = objectType({
|
|
|
110661
110734
|
cols: PositiveInt.optional(),
|
|
110662
110735
|
rows: PositiveInt.optional(),
|
|
110663
110736
|
command: stringType().min(1).optional(),
|
|
110664
|
-
args: arrayType(stringType()).optional()
|
|
110737
|
+
args: arrayType(stringType()).optional(),
|
|
110738
|
+
closeTip: stringType().optional(),
|
|
110739
|
+
closeCallbackUrl: CloseCallbackUrlSchema.optional()
|
|
110665
110740
|
});
|
|
110666
110741
|
const PtyInputMessageSchema = objectType({
|
|
110667
110742
|
type: literalType("input"),
|
|
@@ -148138,6 +148213,8 @@ class TerminalController {
|
|
|
148138
148213
|
command: opts?.command,
|
|
148139
148214
|
args: opts?.args,
|
|
148140
148215
|
isDedicated: opts?.isDedicated ?? false,
|
|
148216
|
+
closeTip: opts?.closeTip,
|
|
148217
|
+
closeCallbackUrl: opts?.closeCallbackUrl,
|
|
148141
148218
|
restored: false,
|
|
148142
148219
|
serverSessionId: null,
|
|
148143
148220
|
platform: DEFAULT_PTY_PLATFORM
|
|
@@ -148160,13 +148237,17 @@ class TerminalController {
|
|
|
148160
148237
|
cols: instance.terminal.cols || 80,
|
|
148161
148238
|
rows: instance.terminal.rows || 24,
|
|
148162
148239
|
command: opts?.command,
|
|
148163
|
-
args: opts?.args
|
|
148240
|
+
args: opts?.args,
|
|
148241
|
+
closeTip: opts?.closeTip,
|
|
148242
|
+
closeCallbackUrl: opts?.closeCallbackUrl
|
|
148164
148243
|
});
|
|
148165
148244
|
} else {
|
|
148166
148245
|
this.pendingCreates.push({
|
|
148167
148246
|
requestId: id2,
|
|
148168
148247
|
command: opts?.command,
|
|
148169
148248
|
args: opts?.args,
|
|
148249
|
+
closeTip: opts?.closeTip,
|
|
148250
|
+
closeCallbackUrl: opts?.closeCallbackUrl,
|
|
148170
148251
|
cols: instance.terminal.cols || 80,
|
|
148171
148252
|
rows: instance.terminal.rows || 24
|
|
148172
148253
|
});
|
|
@@ -148235,6 +148316,8 @@ class TerminalController {
|
|
|
148235
148316
|
exitCode: null,
|
|
148236
148317
|
command: opts.command,
|
|
148237
148318
|
args: opts.args,
|
|
148319
|
+
closeTip: opts.closeTip,
|
|
148320
|
+
closeCallbackUrl: opts.closeCallbackUrl,
|
|
148238
148321
|
mountedContainer: null,
|
|
148239
148322
|
resizeObserver: null,
|
|
148240
148323
|
hasOpened: false,
|
|
@@ -148244,9 +148327,10 @@ class TerminalController {
|
|
|
148244
148327
|
platform: opts.platform
|
|
148245
148328
|
};
|
|
148246
148329
|
}
|
|
148247
|
-
closeSession(id2) {
|
|
148330
|
+
closeSession(id2, opts) {
|
|
148248
148331
|
const instance = this.instances.get(id2);
|
|
148249
148332
|
if (!instance) return;
|
|
148333
|
+
const shouldTriggerCloseCallback = opts?.triggerCloseCallback !== false;
|
|
148250
148334
|
if (instance.mountedContainer) {
|
|
148251
148335
|
this.unmount(id2);
|
|
148252
148336
|
}
|
|
@@ -148265,12 +148349,15 @@ class TerminalController {
|
|
|
148265
148349
|
}
|
|
148266
148350
|
}
|
|
148267
148351
|
instance.terminal.dispose();
|
|
148352
|
+
if (shouldTriggerCloseCallback) {
|
|
148353
|
+
this.runCloseCallback(instance);
|
|
148354
|
+
}
|
|
148268
148355
|
this.instances.delete(id2);
|
|
148269
148356
|
this.notify();
|
|
148270
148357
|
}
|
|
148271
148358
|
closeAll() {
|
|
148272
148359
|
for (const id2 of [...this.instances.keys()]) {
|
|
148273
|
-
this.closeSession(id2);
|
|
148360
|
+
this.closeSession(id2, { triggerCloseCallback: false });
|
|
148274
148361
|
}
|
|
148275
148362
|
}
|
|
148276
148363
|
// --- DOM mount/unmount ---
|
|
@@ -148468,10 +148555,11 @@ class TerminalController {
|
|
|
148468
148555
|
if (!instance) return;
|
|
148469
148556
|
instance.isExited = true;
|
|
148470
148557
|
instance.exitCode = msg.exitCode;
|
|
148471
|
-
if (instance.isDedicated) {
|
|
148558
|
+
if (instance.closeTip || instance.isDedicated) {
|
|
148559
|
+
const tip = instance.closeTip ?? "Press any key to close (equivalent to close action).";
|
|
148472
148560
|
instance.terminal.write(
|
|
148473
148561
|
`\r
|
|
148474
|
-
\x1B[90m[Process exited with code ${msg.exitCode}.
|
|
148562
|
+
\x1B[90m[Process exited with code ${msg.exitCode}. ${tip}]\x1B[0m`
|
|
148475
148563
|
);
|
|
148476
148564
|
}
|
|
148477
148565
|
this.notify();
|
|
@@ -148547,6 +148635,8 @@ class TerminalController {
|
|
|
148547
148635
|
outputActive: inst.lastOutputTime > 0 && Date.now() - inst.lastOutputTime < OUTPUT_IDLE_THRESHOLD,
|
|
148548
148636
|
command: inst.command,
|
|
148549
148637
|
args: inst.args,
|
|
148638
|
+
closeTip: inst.closeTip,
|
|
148639
|
+
closeCallbackUrl: inst.closeCallbackUrl,
|
|
148550
148640
|
platform: inst.platform
|
|
148551
148641
|
});
|
|
148552
148642
|
}
|
|
@@ -148588,7 +148678,9 @@ class TerminalController {
|
|
|
148588
148678
|
cols: pending.cols,
|
|
148589
148679
|
rows: pending.rows,
|
|
148590
148680
|
command: pending.command,
|
|
148591
|
-
args: pending.args
|
|
148681
|
+
args: pending.args,
|
|
148682
|
+
closeTip: pending.closeTip,
|
|
148683
|
+
closeCallbackUrl: pending.closeCallbackUrl
|
|
148592
148684
|
});
|
|
148593
148685
|
}
|
|
148594
148686
|
this.pendingCreates = [];
|
|
@@ -148671,6 +148763,8 @@ class TerminalController {
|
|
|
148671
148763
|
command: serverSession.command,
|
|
148672
148764
|
args: serverSession.args,
|
|
148673
148765
|
isDedicated: false,
|
|
148766
|
+
closeTip: serverSession.closeTip,
|
|
148767
|
+
closeCallbackUrl: serverSession.closeCallbackUrl,
|
|
148674
148768
|
restored: true,
|
|
148675
148769
|
serverSessionId: serverSession.id,
|
|
148676
148770
|
platform: serverSession.platform ?? DEFAULT_PTY_PLATFORM
|
|
@@ -148693,6 +148787,8 @@ class TerminalController {
|
|
|
148693
148787
|
} else if (!instance.serverSessionId) {
|
|
148694
148788
|
instance.serverSessionId = serverSession.id;
|
|
148695
148789
|
}
|
|
148790
|
+
instance.closeTip = serverSession.closeTip;
|
|
148791
|
+
instance.closeCallbackUrl = serverSession.closeCallbackUrl;
|
|
148696
148792
|
instance.platform = serverSession.platform ?? DEFAULT_PTY_PLATFORM;
|
|
148697
148793
|
instance.inputPanelAddon.setPlatform(instance.platform);
|
|
148698
148794
|
this.serverToLocalSessionId.set(serverSession.id, instance.id);
|
|
@@ -148716,12 +148812,45 @@ class TerminalController {
|
|
|
148716
148812
|
get discoveredSessions() {
|
|
148717
148813
|
return this.hasDiscoveredSessions;
|
|
148718
148814
|
}
|
|
148815
|
+
runCloseCallback(instance) {
|
|
148816
|
+
if (!instance.isExited) return;
|
|
148817
|
+
const callbackUrl = resolveCloseCallbackUrl(instance.closeCallbackUrl, instance.exitCode);
|
|
148818
|
+
if (!callbackUrl) return;
|
|
148819
|
+
navigateCloseCallback(callbackUrl);
|
|
148820
|
+
}
|
|
148719
148821
|
wsSend(msg) {
|
|
148720
148822
|
if (this.ws?.readyState === WebSocket.OPEN) {
|
|
148721
148823
|
this.ws.send(JSON.stringify(msg));
|
|
148722
148824
|
}
|
|
148723
148825
|
}
|
|
148724
148826
|
}
|
|
148827
|
+
function resolveCloseCallbackUrl(raw2, exitCode) {
|
|
148828
|
+
if (!raw2) return null;
|
|
148829
|
+
if (typeof raw2 === "string") {
|
|
148830
|
+
const trimmed = raw2.trim();
|
|
148831
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
148832
|
+
}
|
|
148833
|
+
const exact = raw2[exitCode == null ? "null" : String(exitCode)];
|
|
148834
|
+
if (typeof exact === "string" && exact.trim().length > 0) return exact.trim();
|
|
148835
|
+
const fallback = raw2["*"];
|
|
148836
|
+
if (typeof fallback === "string" && fallback.trim().length > 0) return fallback.trim();
|
|
148837
|
+
return null;
|
|
148838
|
+
}
|
|
148839
|
+
function navigateCloseCallback(rawUrl) {
|
|
148840
|
+
let parsed;
|
|
148841
|
+
try {
|
|
148842
|
+
parsed = new URL(rawUrl, window.location.origin);
|
|
148843
|
+
} catch {
|
|
148844
|
+
return;
|
|
148845
|
+
}
|
|
148846
|
+
if (parsed.origin === window.location.origin) {
|
|
148847
|
+
const href = `${parsed.pathname}${parsed.search}${parsed.hash}`;
|
|
148848
|
+
const targetArea = navController.getAreaForPath(parsed.pathname);
|
|
148849
|
+
navController.push(targetArea, href, null);
|
|
148850
|
+
return;
|
|
148851
|
+
}
|
|
148852
|
+
window.open(parsed.toString(), "_blank", "noopener,noreferrer");
|
|
148853
|
+
}
|
|
148725
148854
|
const terminalController = new TerminalController();
|
|
148726
148855
|
const TerminalContext = reactExports.createContext(null);
|
|
148727
148856
|
function useTerminalContext() {
|
|
@@ -150198,7 +150327,6 @@ function Config() {
|
|
|
150198
150327
|
}
|
|
150199
150328
|
function Dashboard() {
|
|
150200
150329
|
const { data: statuses, isLoading, error } = useOpsxStatusListSubscription();
|
|
150201
|
-
const { createDedicatedSession } = useTerminalContext();
|
|
150202
150330
|
const summary = reactExports.useMemo(() => {
|
|
150203
150331
|
const totalChanges = statuses?.length ?? 0;
|
|
150204
150332
|
const totalArtifacts = statuses?.reduce((count2, status) => count2 + status.artifacts.length, 0) ?? 0;
|
|
@@ -150209,15 +150337,8 @@ function Dashboard() {
|
|
|
150209
150337
|
return { totalChanges, totalArtifacts, doneArtifacts };
|
|
150210
150338
|
}, [statuses]);
|
|
150211
150339
|
const runNewChange = reactExports.useCallback(() => {
|
|
150212
|
-
|
|
150213
|
-
|
|
150214
|
-
const schema2 = window.prompt("Schema (optional):");
|
|
150215
|
-
const args = ["new", "change", name2.trim()];
|
|
150216
|
-
if (schema2) {
|
|
150217
|
-
args.push("--schema", schema2.trim());
|
|
150218
|
-
}
|
|
150219
|
-
createDedicatedSession("openspec", args);
|
|
150220
|
-
}, [createDedicatedSession]);
|
|
150340
|
+
navController.activatePop("/opsx-new");
|
|
150341
|
+
}, []);
|
|
150221
150342
|
if (isLoading && !statuses) {
|
|
150222
150343
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "route-loading animate-pulse", children: "Loading dashboard..." });
|
|
150223
150344
|
}
|
|
@@ -150250,13 +150371,35 @@ function Dashboard() {
|
|
|
150250
150371
|
] }),
|
|
150251
150372
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-3", children: [
|
|
150252
150373
|
/* @__PURE__ */ jsxRuntimeExports.jsx(StatCard, { label: "Active Changes", value: summary.totalChanges }),
|
|
150253
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
150254
|
-
|
|
150374
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
150375
|
+
StatCard,
|
|
150376
|
+
{
|
|
150377
|
+
label: "Artifacts Complete",
|
|
150378
|
+
value: `${summary.doneArtifacts}/${summary.totalArtifacts}`
|
|
150379
|
+
}
|
|
150380
|
+
),
|
|
150381
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
150382
|
+
StatCard,
|
|
150383
|
+
{
|
|
150384
|
+
label: "Completion",
|
|
150385
|
+
value: summary.totalArtifacts > 0 ? `${Math.round(summary.doneArtifacts / summary.totalArtifacts * 100)}%` : "0%"
|
|
150386
|
+
}
|
|
150387
|
+
)
|
|
150255
150388
|
] }),
|
|
150256
150389
|
!hasChanges && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-border text-muted-foreground rounded-md border border-dashed p-6 text-center text-sm", children: [
|
|
150257
|
-
"No active changes yet.
|
|
150258
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
150259
|
-
|
|
150390
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "No active changes yet." }),
|
|
150391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
150392
|
+
"button",
|
|
150393
|
+
{
|
|
150394
|
+
type: "button",
|
|
150395
|
+
onClick: runNewChange,
|
|
150396
|
+
className: "text-primary mt-2 inline-flex items-center gap-1 hover:underline",
|
|
150397
|
+
children: [
|
|
150398
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Sparkles, { className: "h-3.5 w-3.5" }),
|
|
150399
|
+
"/opsx:new"
|
|
150400
|
+
]
|
|
150401
|
+
}
|
|
150402
|
+
)
|
|
150260
150403
|
] }),
|
|
150261
150404
|
hasChanges && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-border divide-border divide-y rounded-lg border", children: statuses?.map((status) => {
|
|
150262
150405
|
const done = status.artifacts.filter((a2) => a2.status === "done").length;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openspecui/web",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"openspecui-ssg": "./dist-ssg/ssg-cli.mjs"
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"vitest": "^4.0.18",
|
|
62
62
|
"yaml": "^2.8.0",
|
|
63
63
|
"yargs": "^18.0.0",
|
|
64
|
-
"@openspecui/
|
|
65
|
-
"
|
|
66
|
-
"
|
|
64
|
+
"@openspecui/server": "1.2.0",
|
|
65
|
+
"xterm-input-panel": "1.0.0",
|
|
66
|
+
"@openspecui/search": "1.1.0"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"dev": "vite --host=0.0.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:var(--font-serif);--font-mono:var(--font-mono);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-cyan-300:oklch(86.5% .127 207.078);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-700:oklch(50% .134 242.749);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-700:oklch(51.4% .222 16.935);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-900:oklch(21% .006 285.885);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--shadow-2xs:var(--shadow-2xs);--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:var(--shadow-md);--shadow-lg:var(--shadow-lg);--shadow-xl:var(--shadow-xl);--shadow-2xl:var(--shadow-2xl);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--shadow:var(--shadow);--color-primary:var(--primary);--color-muted-foreground:var(--muted-foreground);--font-nav:var(--font-nav)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);corner-shape:bevel}html,body{overscroll-behavior-y:none}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-mono)}.font-nav{font-family:var(--font-nav)}button{cursor:pointer}.markdown-content{color:var(--foreground);line-height:1.7}.markdown-content h1{margin-top:1.5rem;margin-bottom:.75rem;font-size:1.5rem;font-weight:700}.markdown-content h2{margin-top:1.25rem;margin-bottom:.5rem;font-size:1.25rem;font-weight:600}.markdown-content h3{margin-top:1rem;margin-bottom:.5rem;font-size:1.125rem;font-weight:600}.markdown-content h4{margin-top:.85rem;margin-bottom:.4rem;font-size:1rem;font-weight:600}.markdown-content h5{margin-top:.75rem;margin-bottom:.35rem;font-size:.95rem;font-weight:600}.markdown-content h6{text-transform:uppercase;letter-spacing:.02em;color:var(--muted-foreground);margin-top:.6rem;margin-bottom:.3rem;font-size:.9rem;font-weight:600}:where(.markdown-content,.markdown-section)>:first-child:is(h1,h2,h3,h4,h5,h6){margin-top:0}.markdown-content p{margin-bottom:.75rem}.markdown-content ul,.markdown-content ol{margin-bottom:.75rem;padding-left:1.5rem}.markdown-content ul{list-style-type:disc}.markdown-content ol{list-style-type:decimal}.markdown-content li{margin-bottom:.25rem}.markdown-content a{color:var(--primary);text-decoration:underline}.markdown-content a:hover{opacity:.8}.markdown-content blockquote{border-left:3px solid var(--border);color:var(--muted-foreground);margin:1rem 0;padding-left:1rem}.markdown-content hr{border:none;border-top:1px solid var(--border);margin:1.5rem 0}.markdown-content table{border-collapse:collapse;width:100%;margin:1rem 0}.markdown-content th,.markdown-content td{border:1px solid var(--border);text-align:left;padding:.5rem .75rem}.markdown-content th{background:var(--muted);font-weight:600}.markdown-content strong{font-weight:600}}@layer components;@layer utilities{.\@container\/app{container:app/inline-size}.\@container{container-type:inline-size}.\@container-\[size\]{container-type:size}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.-top-0\.25{top:calc(var(--spacing)*-.25)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.top-1\/2{top:50%}.right-4{right:calc(var(--spacing)*4)}.-bottom-0\.25{bottom:calc(var(--spacing)*-.25)}.left-0\.5{left:calc(var(--spacing)*.5)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.z-2{z-index:2}.z-10{z-index:10}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing)*-2)}.m-0{margin:calc(var(--spacing)*0)}.m-auto{margin:auto}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-1\.5{margin-right:calc(var(--spacing)*-1.5)}.mr-1{margin-right:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-1\.5{margin-left:calc(var(--spacing)*-1.5)}.-ml-2\.5{margin-left:calc(var(--spacing)*-2.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-0\.5{height:calc(var(--spacing)*.5)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-30{height:calc(var(--spacing)*30)}.h-\[220px\]{height:220px}.h-\[400px\]{height:400px}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(100cqh-3rem\)\]{max-height:calc(100cqh - 3rem)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-80{min-height:calc(var(--spacing)*80)}.min-h-\[2rem\]{min-height:2rem}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-64{width:calc(var(--spacing)*64)}.w-\[120px\]{width:120px}.w-\[420px\]{width:420px}.w-\[calc\(100\%-0\.5rem\)\]{width:calc(100% - .5rem)}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[80vw\]{max-width:80vw}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[min\(96vw\,1280px\)\]{max-width:min(96vw,1280px)}.max-w-none{max-width:none}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing)*5);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-\[var\(--openspec-dialog-radius\,0\.75rem\)\]{border-radius:var(--openspec-dialog-radius,.75rem)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-border,.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-current{border-color:currentColor}.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive)50%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-green-500{border-color:var(--color-green-500)}.border-green-500\/50{border-color:#00c75880}@supports (color:color-mix(in lab,red,red)){.border-green-500\/50{border-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-primary{border-color:var(--primary)}.border-red-500{border-color:var(--color-red-500)}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab,red,red)){.border-red-500\/40{border-color:color-mix(in oklab,var(--color-red-500)40%,transparent)}}.border-red-500\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab,red,red)){.border-red-500\/60{border-color:color-mix(in oklab,var(--color-red-500)60%,transparent)}}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-transparent{border-color:#0000}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400\/35{background-color:#fcbb0059}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/35{background-color:color-mix(in oklab,var(--color-amber-400)35%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-background,.bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-500\/50{background-color:#00c75880}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/50{background-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/30{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}.bg-muted\/20{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--muted)20%,transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/40{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--muted)40%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500)5%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-terminal{background-color:var(--terminal)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-900{background-color:var(--color-zinc-900)}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-\[1px\]{padding-inline:1px}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-\[env\(safe-area-inset-top\)\]{padding-top:env(safe-area-inset-top)}.pt-\[max\(0\.5rem\,env\(safe-area-inset-top\)\)\]{padding-top:max(.5rem,env(safe-area-inset-top))}.pt-\[max\(0\.75rem\,env\(safe-area-inset-top\)\)\]{padding-top:max(.75rem,env(safe-area-inset-top))}.pr-3{padding-right:calc(var(--spacing)*3)}.pb-\[max\(1rem\,env\(safe-area-inset-bottom\)\)\]{padding-bottom:max(1rem,env(safe-area-inset-bottom))}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-nav{font-family:var(--font-nav)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.03em\]{--tw-tracking:.03em;letter-spacing:.03em}.tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-200{color:var(--color-amber-200)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-cyan-300{color:var(--color-cyan-300)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground{color:var(--foreground)}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-rose-700{color:var(--color-rose-700)}.text-sky-300{color:var(--color-sky-300)}.text-sky-500{color:var(--color-sky-500)}.text-sky-700{color:var(--color-sky-700)}.text-terminal-foreground{color:var(--terminal-foreground)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.accent-primary{accent-color:var(--primary)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:var(--shadow-xl);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.\[zoom\:0\.86\]{zoom:.86}.\[zoom\:0\.92\]{zoom:.92}@media(hover:hover){.group-hover\:bg-muted-foreground\/60:is(:where(.group):hover *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-muted-foreground\/60:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.group-hover\:text-foreground:is(:where(.group):hover *){color:var(--foreground)}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--primary)}.group-hover\:opacity-40:is(:where(.group):hover *){opacity:.4}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\:\[animation-play-state\:paused\]\!:is(:where(.group):hover *){animation-play-state:paused!important}}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.backdrop\:bg-black\/20::backdrop{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.backdrop\:bg-black\/20::backdrop{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}}@media(hover:hover){.hover\:bg-background\/50:hover{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/50:hover{background-color:color-mix(in oklab,var(--background)50%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-muted\/60:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.hover\:bg-muted\/80:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab,var(--muted)80%,transparent)}}.hover\:bg-primary\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:p-4{padding:calc(var(--spacing)*4)}.sm\:pt-3{padding-top:calc(var(--spacing)*3)}.sm\:pt-5{padding-top:calc(var(--spacing)*5)}}@media(min-width:48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}}.\[\&_pre\]\:m-0 pre{margin:calc(var(--spacing)*0)}.\[\&_pre\]\:bg-transparent pre{background-color:#0000}.\[\&_pre\]\:p-4 pre{padding:calc(var(--spacing)*4)}.\[\&\.active\]\:bg-primary.active{background-color:var(--primary)}.\[\&\.active\]\:text-primary.active{color:var(--primary)}.\[\&\.active\]\:text-primary-foreground.active{color:var(--primary-foreground)}button:hover>.\[button\:hover\>\&\]\:opacity-100{opacity:1}}:root{--background:oklch(100% 0 0);--foreground:oklch(0% 0 0);--terminal:oklch(20% 0 0);--terminal-foreground:oklch(100% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(0% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(0% 0 0);--primary:oklch(64.89% .237 26.9728);--primary-foreground:oklch(100% 0 0);--secondary:oklch(96.8% .211 109.769);--secondary-foreground:oklch(0% 0 0);--muted:oklch(95.51% 0 0);--muted-foreground:oklch(32.11% 0 0);--accent:oklch(56.35% .2408 260.818);--accent-foreground:oklch(100% 0 0);--destructive:oklch(0% 0 0);--destructive-foreground:oklch(100% 0 0);--border:oklch(0% 0 0);--input:oklch(0% 0 0);--ring:oklch(64.89% .237 26.9728);--chart-1:oklch(64.89% .237 26.9728);--chart-2:oklch(96.8% .211 109.769);--chart-3:oklch(56.35% .2408 260.818);--chart-4:oklch(73.23% .2492 142.495);--chart-5:oklch(59.31% .2726 328.363);--sidebar:oklch(95.51% 0 0);--sidebar-foreground:oklch(0% 0 0);--sidebar-primary:oklch(64.89% .237 26.9728);--sidebar-primary-foreground:oklch(100% 0 0);--sidebar-accent:oklch(56.35% .2408 260.818);--sidebar-accent-foreground:oklch(100% 0 0);--sidebar-border:oklch(0% 0 0);--sidebar-ring:oklch(64.89% .237 26.9728);--font-sans:"JetBrains Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"JetBrains Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--font-nav:"Share Tech Mono","JetBrains Mono",SFMono-Regular,monospace;--radius:0px;--shadow-x:4px;--shadow-y:4px;--shadow-blur:0px;--shadow-spread:0px;--shadow-opacity:1;--shadow-color:#000;--shadow-2xs:4px 4px 0px 0px #00000080;--shadow-xs:4px 4px 0px 0px #00000080;--shadow-sm:4px 4px 0px 0px #000,4px 1px 2px -1px #000;--shadow:4px 4px 0px 0px #000,4px 1px 2px -1px #000;--shadow-md:4px 4px 0px 0px #000,4px 2px 4px -1px #000;--shadow-lg:4px 4px 0px 0px #000,4px 4px 6px -1px #000;--shadow-xl:4px 4px 0px 0px #000,4px 8px 10px -1px #000;--shadow-2xl:4px 4px 0px 0px #000;--tracking-normal:0em;--spacing:.25rem}.dark{--background:oklch(0% 0 0);--foreground:oklch(100% 0 0);--terminal:oklch(20% 0 0);--terminal-foreground:oklch(100% 0 0);--card:oklch(32.11% 0 0);--card-foreground:oklch(100% 0 0);--popover:oklch(32.11% 0 0);--popover-foreground:oklch(100% 0 0);--primary:oklch(70.44% .1872 23.1858);--primary-foreground:oklch(0% 0 0);--secondary:oklch(96.91% .2005 109.623);--secondary-foreground:oklch(0% 0 0);--muted:oklch(21.78% 0 0);--muted-foreground:oklch(84.52% 0 0);--accent:oklch(67.55% .1765 252.259);--accent-foreground:oklch(0% 0 0);--destructive:oklch(100% 0 0);--destructive-foreground:oklch(0% 0 0);--border:oklch(100% 0 0);--input:oklch(100% 0 0);--ring:oklch(70.44% .1872 23.1858);--chart-1:oklch(70.44% .1872 23.1858);--chart-2:oklch(96.91% .2005 109.623);--chart-3:oklch(67.55% .1765 252.259);--chart-4:oklch(73.95% .2268 142.85);--chart-5:oklch(61.31% .2458 328.071);--sidebar:oklch(0% 0 0);--sidebar-foreground:oklch(100% 0 0);--sidebar-primary:oklch(70.44% .1872 23.1858);--sidebar-primary-foreground:oklch(0% 0 0);--sidebar-accent:oklch(67.55% .1765 252.259);--sidebar-accent-foreground:oklch(0% 0 0);--sidebar-border:oklch(100% 0 0);--sidebar-ring:oklch(70.44% .1872 23.1858);--font-sans:"JetBrains Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:"JetBrains Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--font-nav:"Share Tech Mono","JetBrains Mono",SFMono-Regular,monospace;--radius:0px;--shadow-x:4px;--shadow-y:4px;--shadow-blur:0px;--shadow-spread:0px;--shadow-opacity:1;--shadow-color:#000;--shadow-2xs:4px 4px 0px 0px #00000080;--shadow-xs:4px 4px 0px 0px #00000080;--shadow-sm:4px 4px 0px 0px #000,4px 1px 2px -1px #000;--shadow:4px 4px 0px 0px #000,4px 1px 2px -1px #000;--shadow-md:4px 4px 0px 0px #000,4px 2px 4px -1px #000;--shadow-lg:4px 4px 0px 0px #000,4px 4px 6px -1px #000;--shadow-xl:4px 4px 0px 0px #000,4px 8px 10px -1px #000;--shadow-2xl:4px 4px 0px 0px #000}.view-transition-route{view-transition-name:route;contain:paint;position:relative}.route-loading{view-transition-name:none}@keyframes route-fade-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes route-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(12px)}}::view-transition-old(route){animation:.26s cubic-bezier(.22,.61,.36,1) forwards route-fade-out}::view-transition-new(route){animation:.32s cubic-bezier(.22,.61,.36,1) forwards route-fade-in}@media(prefers-reduced-motion:reduce){::view-transition-old(route){animation:none}::view-transition-new(route){animation:none}}.scrollbar-thin{scrollbar-width:thin}.scrollbar-track-transparent{scrollbar-color:currentColor transparent}@supports (color:color-mix(in lab,red,red)){.scrollbar-track-transparent{scrollbar-color:color-mix(in srgb,currentColor,transparent 70%)transparent}}.scrollbar-none{scrollbar-width:none}.shiki-wrapper{border:1px solid var(--border)}.shiki,.shiki span{color:var(--shiki-light)!important;background-color:var(--shiki-light-bg)!important}.dark .shiki,.dark .shiki span{color:var(--shiki-dark)!important;background-color:var(--shiki-dark-bg)!important}@keyframes terminal-breathing{0%,to{background-color:#9e9e9e}50%{background-color:#00bcd4;background-color:oklch(73% .13 210.82)}}.animate-terminal-breathing{animation:1.5s ease-in-out infinite terminal-breathing}.xterm .xterm-scrollable-element,.xterm .xterm-scrollable-element.xterm-mac{background-color:var(--terminal)!important}.terminal-shimmer{color:#0000;background-image:linear-gradient(90deg,#a1a1aa,#fafafa,#a1a1aa);background-size:200% 100%;-webkit-background-clip:text;animation:1.8s linear infinite terminal-shimmer}@keyframes terminal-shimmer{0%{background-position:-120% 0}to{background-position:120% 0}}.app-layout{flex-direction:column;display:flex}.app-body{flex-direction:column;flex:1;min-height:0;display:flex}.desktop-sidebar,.desktop-status{display:none}.mobile-header,.mobile-tabbar{display:flex}.main-content{flex:1;min-height:0;overflow:auto}.bottom-area{min-width:0;display:block}@container app (min-width:768px){.app-layout{flex-direction:row}.app-body{min-width:0}.desktop-sidebar,.desktop-status{display:flex}.mobile-header,.mobile-tabbar{display:none}.bottom-area{display:block}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes slide-in-from-left{0%{transform:translate(-100%)}to{transform:translate(0)}}.animate-in{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:both}.fade-in{animation-name:fade-in}.slide-in-from-left{animation-name:slide-in-from-left}.duration-200{animation-duration:.2s}@keyframes marquee-scroll{0%{transform:translate(0)}to{transform:translate(calc(-100% - var(--marquee-gap,20px)))}}.animate-marquee{animation:marquee-scroll var(--marquee-duration,10s)linear infinite}.animate-marquee:after{content:attr(data-content);left:calc(100% + var(--marquee-gap,20px));white-space:nowrap;position:absolute;top:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm:not(.allow-transparency) .xterm-viewport{background-color:#000}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.xterm-scrollbar{cursor:default}.xterm .xterm-scrollable-element>.xterm-scrollbar>.xterm-scra{cursor:pointer;background-color:var(--vscode-scrollbarSliderBackground, rgba(100, 100, 100, .4));mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'><path d='M2.5 8.5 L5.5 2.5 L8.5 8.5 Z' fill='black'/></svg>");-webkit-mask-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 11'><path d='M2.5 8.5 L5.5 2.5 L8.5 8.5 Z' fill='black'/></svg>");mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat;mask-position:center center;-webkit-mask-position:center center;mask-size:100% 100%;-webkit-mask-size:100% 100%}.xterm .xterm-scrollable-element>.xterm-scrollbar>.xterm-scra.xterm-arrow-down{transform:rotate(180deg)}.xterm .xterm-scrollable-element>.xterm-visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.xterm-invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.xterm-invisible.xterm-fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.xterm-shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.xterm-shadow.xterm-shadow-top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.xterm-shadow.xterm-shadow-left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.xterm-shadow.xterm-shadow-top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.xterm-shadow.xterm-shadow-top.xterm-shadow-left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}
|