@covro/covro 0.7.0-beta.1 → 0.7.1-dev.1
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/README.md +10 -10
- package/README.zh-CN.md +10 -10
- package/dist/cli/background.js +10 -7
- package/dist/cli/background.js.map +2 -2
- package/dist/cli/daemon.js +3 -1
- package/dist/cli/daemon.js.map +2 -2
- package/dist/cli/launch-environment.js +5 -2
- package/dist/cli/launch-environment.js.map +2 -2
- package/dist/cli/launchd.js +14 -8
- package/dist/cli/launchd.js.map +2 -2
- package/dist/cli/runtime-launch.js +108 -0
- package/dist/cli/runtime-launch.js.map +7 -0
- package/dist/cli/runtime.js +12 -0
- package/dist/cli/runtime.js.map +7 -0
- package/dist/cli/service.js +7 -4
- package/dist/cli/service.js.map +2 -2
- package/dist/codex/account-usage.js +132 -0
- package/dist/codex/account-usage.js.map +7 -0
- package/dist/codex/adapter.js +45 -4
- package/dist/codex/adapter.js.map +2 -2
- package/dist/codex/mapping.js +3 -2
- package/dist/codex/mapping.js.map +2 -2
- package/dist/server/http.js +8 -0
- package/dist/server/http.js.map +2 -2
- package/dist/server/service.js +71 -1
- package/dist/server/service.js.map +2 -2
- package/dist/server/workspaces.js +6 -0
- package/dist/server/workspaces.js.map +2 -2
- package/dist/shared/account-usage.js +1 -0
- package/dist/shared/account-usage.js.map +7 -0
- package/dist/shared/skills.js +25 -0
- package/dist/shared/skills.js.map +7 -0
- package/dist/shared/thread-summary.js +4 -0
- package/dist/shared/thread-summary.js.map +2 -2
- package/dist/shared/updates.js.map +2 -2
- package/dist/shared/validation.js +18 -1
- package/dist/shared/validation.js.map +2 -2
- package/dist/update-worker.cjs +1111 -754
- package/dist/updates/manager.js +89 -8
- package/dist/updates/manager.js.map +2 -2
- package/dist/updates/registry.js +7 -6
- package/dist/updates/registry.js.map +2 -2
- package/dist/updates/runtime.js +183 -0
- package/dist/updates/runtime.js.map +7 -0
- package/dist/updates/transaction.js +8 -4
- package/dist/updates/transaction.js.map +2 -2
- package/dist/updates/worker.js +177 -112
- package/dist/updates/worker.js.map +3 -3
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-DPrSyxx5.js → abnfDiagram-WEYOIA3C-Ct5ChZBc.js} +1 -1
- package/dist/web/assets/{arc-4B8zsDlv.js → arc-BXRV0CVi.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DzDNYcvm.js → architecture-WOLXFQ4H-CPBgJhsO.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-CJ9tt7RD.js → architectureDiagram-ZHVYKT53-CLEC3Xoj.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-C9ljbm6J.js → blockDiagram-RJAE7QA3-BmLPHgTS.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-Sd9QMUQp.js → c4Diagram-XDPPPE54-CR-FGGI9.js} +1 -1
- package/dist/web/assets/channel-B8Z0MEpl.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-DsUWsTrf.js → chunk-2E7WHVMD-CAKelRoz.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-Bh91FySB.js → chunk-4EMNKR2T-CzHhqgrM.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-BRxH4G9N.js → chunk-55XCU76K-BXdn9HRo.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-DbTYm4kS.js → chunk-7S6XSTFO-iQXMs5VF.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-D1NiDG4T.js → chunk-AQDTSKZB-BTLhVc8_.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-C0LQPoI8.js → chunk-DSNLSHJZ-MjR5Eo7J.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-DRrIOJjB.js → chunk-HAGFOTED-Bma7AjUx.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-Bok-UYL9.js → chunk-HNE4Q36P-B-TPWEoT.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-D1zmT8gY.js → chunk-NQOKRVIF-BnVBL0oP.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-BDwjuCRk.js → chunk-UHW7PFBP-BrCzpTQe.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-DAHWoS2u.js → chunk-VQ5W62QI-SVCda4i-.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-ggfsBWta.js → chunk-WQQL4CDK-CFa1_xXP.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-DBRGTT6L.js → chunk-XXDRQBXY-BrTjiUzN.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-BCM-hzbV.js → chunk-YZO67HFG-BqM0aDwN.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-MnMFUU_S.js → chunk-ZAUX2LTX-BAhm5jhj.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-ClT-_dGN.js → chunk-ZCHMQSOR-Cip7n8Sg.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-CPV9IWEk.js → classDiagram-v2-4MYWR3UA-D7N6Uj0X.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-DqgOWzoX.js → cose-bilkent-JH36ORCC-By_XO8JA.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-Dkit62ND.js → cynefin-EF2NZ3EQ-D4tmIqN2.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-DSiF7XN6.js → cynefinDiagram-WF24UDRP-BiBX9g64.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-DPMP_fYv.js → dagre-NK4GIZVX-BGoSiF2R.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-CyMSNHt0.js → diagram-CBK3MWTC-CcFPBcEd.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-tQ2bMi8B.js → diagram-I5XIIV2D-DehB2F5t.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-BGZKonG-.js → diagram-ODIL2UCW-V8fUY3mq.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-ChscR483.js → diagram-PFBEJUXE-BHHEFVnW.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-frBsA7DX.js → diagram-RJA3I4VV-D2exArjj.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-B8qZBREp.js → diagram-TYUNFSNR-BdtGXIpi.js} +1 -1
- package/dist/web/assets/{dist-7U4_LxsV.js → dist-DaQz3nkD.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-CfnjkhXT.js → ebnfDiagram-V4P3TTPT-Cggzc5yD.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-D6KBNmbF.js → elk-QONTBCTQ-DDC0zLrS.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-Sx8YaD42.js → erDiagram-KYQIGQAA-DfypQFgb.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-DgI4Zm6z.js → eventmodeling-K75KTNOO-D8qBsuC_.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-GpPr3WFa.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-FN9ghlFf.js → ganttDiagram-R7GPNTJY-CENwnE1B.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-B6RMx5nS.js → gitGraph-VSP46ZUC-BVF17ADV.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-BUfDV32d.js → gitGraphDiagram-PDYL7XHY-C1qi9iCy.js} +1 -1
- package/dist/web/assets/index-2ms-LtOu.css +1 -0
- package/dist/web/assets/index-C-VE9GLc.js +158 -0
- package/dist/web/assets/{info-OHQRW6UA-i9U_Vjx9.js → info-OHQRW6UA-LgFb_2F-.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-BcIiBHfp.js → infoDiagram-MVDRKAX5-17P2DCcG.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-CBq8uWqz.js → ishikawaDiagram-HPEHV2GE-YI3XteWz.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-BoH8zvhM.js → journeyDiagram-BOSHW7O7-DqIEkafR.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-DqWoSu__.js → kanban-definition-FNSA4HC5-CMQ9DCXo.js} +1 -1
- package/dist/web/assets/{line-mJzmbB6p.js → line-BzaaPKlk.js} +1 -1
- package/dist/web/assets/{linear-BwkmaM-M.js → linear-8o2E18fD.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DwFqVvpp.js → mermaid-parser.core-kGccWBJU.js} +3 -3
- package/dist/web/assets/{mermaid.core-DcF8gYr_.js → mermaid.core-BSQidwq_.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-D4XGBbWO.js → mindmap-definition-6OY57UG3-D-FFEmUv.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-Da_cMCDo.js → packet-JDAUHWVQ-DJhUFf1j.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-CVgVmFmC.js → pegDiagram-ECIUJNBX-CmIOvdbf.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-7pec9CJT.js → pie-XZMESJXO-CSrWK9rU.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-97N9EH_E.js → pieDiagram-GNMPY74T-tvVSdXH-.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-FJDGQ0ZC.js → quadrantDiagram-D57K4MC3-CGK1kRkp.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-DsWXE4id.js → radar-ABXABTNO-MDz1NYHf.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-Cs3NR5Rp.js → railroad-I3PHUGI6-CiLd87KR.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-fn-KtM-H.js → railroad-abnf-LNEFI6M7-RY_WYJN6.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-BuexEj3O.js → railroad-ebnf-DWYD2UWJ-B4ZEET0K.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-C59VHWhm.js → railroad-peg-JR7BVNR7-9DbLhbQQ.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-Dwpn4kqo.js → railroadDiagram-Y72NRBL7-onpNqRG_.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-BE9cDXG8.js → requirementDiagram-EQYSW5RA-Bk6XTcPp.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-BiPoxRoH.js → sankeyDiagram-SY24JHO5-K4434mnD.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-OHewZwiU.js → sequenceDiagram-BLEHNHQU-DQiu1tXe.js} +1 -1
- package/dist/web/assets/{src-CAqT2rVv.js → src-PYZv1Xmx.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-BHul6PGu.js → stateDiagram-v2-A6IESKWZ-BVNOf4hf.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-BBjoKZII.js → swimlanes-B3ENRKFQ-Sr8zlNgH.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-Cxqy1i01.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-D7reGFUV.js → timeline-definition-JXYKGLGB-D3UD0on6.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-BC4PBy2z.js → treeView-D4JQ5SDB-DMkXgni_.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-C-L3y3B0.js → treemap-SAJKECNS-BFVUPZHm.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-DqReWsLT.js → usecaseDiagram-WPOLBNNX-BY0Ux9fE.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-RB21WgMG.js → vennDiagram-Q3Y3IDCW-DTSz-zyI.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-CAGdvTyZ.js → wardley-7MLQ67FV-DEoiPn37.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-DXN5Mh5B.js → wardleyDiagram-IVAIDKWA-CJWnMB5u.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-Y2Tpnzwb.js → xychartDiagram-4URNHDU4-X8rgPB9G.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/notification-worker.js +33 -0
- package/package.json +4 -4
- package/dist/web/assets/channel-DKYuZv8c.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-AdTZW4EM.js +0 -1
- package/dist/web/assets/index-BayHb2le.js +0 -156
- package/dist/web/assets/index-qYBdGqKM.css +0 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-Cp-6Y0VO.js +0 -8
|
@@ -61,6 +61,12 @@ class WorkspaceRegistry {
|
|
|
61
61
|
throw this.unavailable(error);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
|
+
draft(operationId) {
|
|
65
|
+
const scope = this.allocate(operationId);
|
|
66
|
+
const row = this.allocations().find((entry) => entry.operationId === operationId);
|
|
67
|
+
if (row?.threadId) throw this.unavailable();
|
|
68
|
+
return scope;
|
|
69
|
+
}
|
|
64
70
|
allocate(operationId) {
|
|
65
71
|
const existing = this.database.select().from(sessionWorkspaces).where(eq(sessionWorkspaces.operationId, operationId)).get();
|
|
66
72
|
if (existing) return this.inspect(existing);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/server/workspaces.ts"],
|
|
4
|
-
"sourcesContent": ["import { accessSync, constants, mkdirSync, realpathSync, statSync } from 'node:fs';\nimport { basename, dirname, join } from 'node:path';\nimport { eq } from 'drizzle-orm';\nimport { AppError } from '../shared/errors.js';\nimport type { AppDatabase } from './db/index.js';\nimport { operations, sessionWorkspaces } from './db/schema.js';\nimport { containsPath, ProjectRegistry } from './projects.js';\n\ntype Allocation = typeof sessionWorkspaces.$inferSelect;\nexport interface WorkspaceOwnership {\n projectId: string | null;\n cwd: string;\n rootPath: string;\n canonicalRoot: string;\n workspaceKey: string;\n}\n\n/** A project association and a server-owned session directory are separate identities. */\nexport class WorkspaceRegistry {\n constructor(\n private readonly database: AppDatabase,\n private readonly projects: ProjectRegistry,\n private readonly root?: string,\n ) {}\n\n private unavailable(cause?: unknown): AppError {\n return new AppError(\n 'WORKSPACE_UNAVAILABLE',\n cause instanceof Error ? `\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u53EF\u7528\uFF1A${cause.message}` : '\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u53EF\u7528',\n 409,\n );\n }\n\n defaultsDirectory(): string {\n if (!this.root) throw this.unavailable();\n try {\n mkdirSync(this.root, { recursive: true, mode: 0o700 });\n const root = realpathSync(this.root);\n accessSync(root, constants.R_OK | constants.W_OK | constants.X_OK);\n return root;\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n allocations(): Allocation[] {\n return this.database.select().from(sessionWorkspaces).all();\n }\n\n /** A dedicated directory lets us identify a creation whose RPC receipt was lost. */\n recoverCreation(threadId: string, cwd: string): string | undefined {\n const canonical = realpathSync(cwd);\n const row = this.allocations().find((entry) => entry.canonicalRoot === canonical);\n if (!row || (row.threadId !== null && row.threadId !== threadId)) return;\n const operation = this.database\n .select()\n .from(operations)\n .where(eq(operations.clientOperationId, row.operationId))\n .get();\n if (\n operation?.state !== 'unknown' ||\n !['thread.create', 'thread.fork'].includes(operation.kind)\n )\n return;\n this.bind(row.operationId, threadId, cwd);\n return row.operationId;\n }\n\n private inspect(row: Allocation): WorkspaceOwnership {\n try {\n if (\n realpathSync(row.rootPath) !== row.canonicalRoot ||\n !statSync(row.canonicalRoot).isDirectory()\n )\n throw new Error('\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u771F\u5B9E\u8DEF\u5F84\u5DF2\u6539\u53D8');\n accessSync(row.canonicalRoot, constants.R_OK | constants.X_OK);\n return {\n projectId: null,\n cwd: row.canonicalRoot,\n rootPath: row.rootPath,\n canonicalRoot: row.canonicalRoot,\n workspaceKey: row.canonicalRoot,\n };\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n allocate(operationId: string): WorkspaceOwnership {\n const existing = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.operationId, operationId))\n .get();\n if (existing) return this.inspect(existing);\n const root = this.defaultsDirectory();\n const rootPath = join(root, operationId);\n try {\n // Never reuse an unrecorded directory, including one left by a crashed mkdir.\n mkdirSync(rootPath, { mode: 0o700 });\n const row = {\n operationId,\n threadId: null,\n rootPath,\n canonicalRoot: realpathSync(rootPath),\n createdAt: Date.now(),\n };\n this.database.insert(sessionWorkspaces).values(row).run();\n return this.inspect(row);\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n bind(operationId: string, threadId: string, cwd: string): void {\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.operationId, operationId))\n .get();\n if (!row || (row.threadId !== null && row.threadId !== threadId)) throw this.unavailable();\n const scope = this.inspect(row);\n if (realpathSync(cwd) !== scope.cwd) throw this.unavailable();\n this.database\n .update(sessionWorkspaces)\n .set({ threadId })\n .where(eq(sessionWorkspaces.operationId, operationId))\n .run();\n }\n\n assertOwnership(projectId: string | null, cwd: string, threadId: string): WorkspaceOwnership {\n if (projectId !== null) {\n const ownership = this.projects.assertOwnership(projectId, cwd);\n this.assertOutsideManaged(ownership.cwd);\n return {\n ...ownership,\n projectId,\n rootPath: ownership.project.rootPath,\n canonicalRoot: ownership.project.canonicalRoot,\n };\n }\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.threadId, threadId))\n .get();\n if (!row) throw new AppError('PROJECT_OWNERSHIP', '\u4F1A\u8BDD\u6CA1\u6709\u5DF2\u5206\u914D\u7684\u5DE5\u4F5C\u76EE\u5F55', 403);\n const scope = this.inspect(row);\n if (realpathSync(cwd) !== scope.cwd)\n throw new AppError('PROJECT_OWNERSHIP', '\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0E\u5DF2\u4FDD\u5B58\u7684\u5173\u8054\u4E0D\u4E00\u81F4', 403);\n return scope;\n }\n\n assertProjectDirectory(cwd: string): void {\n let canonical: string;\n try {\n canonical = realpathSync(cwd);\n } catch {\n try {\n // Clone destinations may not exist yet; their parent must already exist.\n canonical = join(realpathSync(dirname(cwd)), basename(cwd));\n } catch {\n return;\n }\n }\n this.assertOutsideManaged(canonical);\n }\n\n private assertOutsideManaged(cwd: string): void {\n let root = this.root;\n try {\n if (root) root = realpathSync(root);\n } catch {\n /* A missing root has no files to adopt. */\n }\n if (\n (root && containsPath(root, cwd)) ||\n this.allocations().some((row) => containsPath(row.canonicalRoot, cwd))\n )\n throw new AppError('PROJECT_OWNERSHIP', '\u5E94\u7528\u7BA1\u7406\u7684\u4F1A\u8BDD\u76EE\u5F55\u4E0D\u80FD\u5F52\u5165\u9879\u76EE', 403);\n }\n\n findOwner(cwd: string, threadId: string): WorkspaceOwnership {\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.threadId, threadId))\n .get();\n if (row) return this.assertOwnership(null, cwd, threadId);\n this.assertOutsideManaged(realpathSync(cwd));\n const ownership = this.projects.findOwner(cwd);\n return this.assertOwnership(ownership.project.id, cwd, threadId);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { accessSync, constants, mkdirSync, realpathSync, statSync } from 'node:fs';\nimport { basename, dirname, join } from 'node:path';\nimport { eq } from 'drizzle-orm';\nimport { AppError } from '../shared/errors.js';\nimport type { AppDatabase } from './db/index.js';\nimport { operations, sessionWorkspaces } from './db/schema.js';\nimport { containsPath, ProjectRegistry } from './projects.js';\n\ntype Allocation = typeof sessionWorkspaces.$inferSelect;\nexport interface WorkspaceOwnership {\n projectId: string | null;\n cwd: string;\n rootPath: string;\n canonicalRoot: string;\n workspaceKey: string;\n}\n\n/** A project association and a server-owned session directory are separate identities. */\nexport class WorkspaceRegistry {\n constructor(\n private readonly database: AppDatabase,\n private readonly projects: ProjectRegistry,\n private readonly root?: string,\n ) {}\n\n private unavailable(cause?: unknown): AppError {\n return new AppError(\n 'WORKSPACE_UNAVAILABLE',\n cause instanceof Error ? `\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u53EF\u7528\uFF1A${cause.message}` : '\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u53EF\u7528',\n 409,\n );\n }\n\n defaultsDirectory(): string {\n if (!this.root) throw this.unavailable();\n try {\n mkdirSync(this.root, { recursive: true, mode: 0o700 });\n const root = realpathSync(this.root);\n accessSync(root, constants.R_OK | constants.W_OK | constants.X_OK);\n return root;\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n allocations(): Allocation[] {\n return this.database.select().from(sessionWorkspaces).all();\n }\n\n /** A dedicated directory lets us identify a creation whose RPC receipt was lost. */\n recoverCreation(threadId: string, cwd: string): string | undefined {\n const canonical = realpathSync(cwd);\n const row = this.allocations().find((entry) => entry.canonicalRoot === canonical);\n if (!row || (row.threadId !== null && row.threadId !== threadId)) return;\n const operation = this.database\n .select()\n .from(operations)\n .where(eq(operations.clientOperationId, row.operationId))\n .get();\n if (\n operation?.state !== 'unknown' ||\n !['thread.create', 'thread.fork'].includes(operation.kind)\n )\n return;\n this.bind(row.operationId, threadId, cwd);\n return row.operationId;\n }\n\n private inspect(row: Allocation): WorkspaceOwnership {\n try {\n if (\n realpathSync(row.rootPath) !== row.canonicalRoot ||\n !statSync(row.canonicalRoot).isDirectory()\n )\n throw new Error('\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u771F\u5B9E\u8DEF\u5F84\u5DF2\u6539\u53D8');\n accessSync(row.canonicalRoot, constants.R_OK | constants.X_OK);\n return {\n projectId: null,\n cwd: row.canonicalRoot,\n rootPath: row.rootPath,\n canonicalRoot: row.canonicalRoot,\n workspaceKey: row.canonicalRoot,\n };\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n draft(operationId: string): WorkspaceOwnership {\n const scope = this.allocate(operationId);\n const row = this.allocations().find((entry) => entry.operationId === operationId);\n if (row?.threadId) throw this.unavailable();\n return scope;\n }\n\n allocate(operationId: string): WorkspaceOwnership {\n const existing = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.operationId, operationId))\n .get();\n if (existing) return this.inspect(existing);\n const root = this.defaultsDirectory();\n const rootPath = join(root, operationId);\n try {\n // Never reuse an unrecorded directory, including one left by a crashed mkdir.\n mkdirSync(rootPath, { mode: 0o700 });\n const row = {\n operationId,\n threadId: null,\n rootPath,\n canonicalRoot: realpathSync(rootPath),\n createdAt: Date.now(),\n };\n this.database.insert(sessionWorkspaces).values(row).run();\n return this.inspect(row);\n } catch (error) {\n throw this.unavailable(error);\n }\n }\n\n bind(operationId: string, threadId: string, cwd: string): void {\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.operationId, operationId))\n .get();\n if (!row || (row.threadId !== null && row.threadId !== threadId)) throw this.unavailable();\n const scope = this.inspect(row);\n if (realpathSync(cwd) !== scope.cwd) throw this.unavailable();\n this.database\n .update(sessionWorkspaces)\n .set({ threadId })\n .where(eq(sessionWorkspaces.operationId, operationId))\n .run();\n }\n\n assertOwnership(projectId: string | null, cwd: string, threadId: string): WorkspaceOwnership {\n if (projectId !== null) {\n const ownership = this.projects.assertOwnership(projectId, cwd);\n this.assertOutsideManaged(ownership.cwd);\n return {\n ...ownership,\n projectId,\n rootPath: ownership.project.rootPath,\n canonicalRoot: ownership.project.canonicalRoot,\n };\n }\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.threadId, threadId))\n .get();\n if (!row) throw new AppError('PROJECT_OWNERSHIP', '\u4F1A\u8BDD\u6CA1\u6709\u5DF2\u5206\u914D\u7684\u5DE5\u4F5C\u76EE\u5F55', 403);\n const scope = this.inspect(row);\n if (realpathSync(cwd) !== scope.cwd)\n throw new AppError('PROJECT_OWNERSHIP', '\u4F1A\u8BDD\u5DE5\u4F5C\u76EE\u5F55\u4E0E\u5DF2\u4FDD\u5B58\u7684\u5173\u8054\u4E0D\u4E00\u81F4', 403);\n return scope;\n }\n\n assertProjectDirectory(cwd: string): void {\n let canonical: string;\n try {\n canonical = realpathSync(cwd);\n } catch {\n try {\n // Clone destinations may not exist yet; their parent must already exist.\n canonical = join(realpathSync(dirname(cwd)), basename(cwd));\n } catch {\n return;\n }\n }\n this.assertOutsideManaged(canonical);\n }\n\n private assertOutsideManaged(cwd: string): void {\n let root = this.root;\n try {\n if (root) root = realpathSync(root);\n } catch {\n /* A missing root has no files to adopt. */\n }\n if (\n (root && containsPath(root, cwd)) ||\n this.allocations().some((row) => containsPath(row.canonicalRoot, cwd))\n )\n throw new AppError('PROJECT_OWNERSHIP', '\u5E94\u7528\u7BA1\u7406\u7684\u4F1A\u8BDD\u76EE\u5F55\u4E0D\u80FD\u5F52\u5165\u9879\u76EE', 403);\n }\n\n findOwner(cwd: string, threadId: string): WorkspaceOwnership {\n const row = this.database\n .select()\n .from(sessionWorkspaces)\n .where(eq(sessionWorkspaces.threadId, threadId))\n .get();\n if (row) return this.assertOwnership(null, cwd, threadId);\n this.assertOutsideManaged(realpathSync(cwd));\n const ownership = this.projects.findOwner(cwd);\n return this.assertOwnership(ownership.project.id, cwd, threadId);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=account-usage.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function filterSkills(skills, search) {
|
|
2
|
+
const query = search.trim().toLocaleLowerCase();
|
|
3
|
+
return skills.filter(
|
|
4
|
+
(skill) => [skill.name, skill.description, skill.path, skill.scope, skill.pluginId ?? ""].some(
|
|
5
|
+
(value) => value.toLocaleLowerCase().includes(query)
|
|
6
|
+
)
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
function hasSkillToken(text, name) {
|
|
10
|
+
const token = `$${name}`;
|
|
11
|
+
let from = 0;
|
|
12
|
+
for (; ; ) {
|
|
13
|
+
const start = text.indexOf(token, from);
|
|
14
|
+
if (start < 0) return false;
|
|
15
|
+
const end = start + token.length;
|
|
16
|
+
if ((start === 0 || /[\s([{]/u.test(text[start - 1])) && (end === text.length || /[\s.,!?;:)\]}]/u.test(text[end])))
|
|
17
|
+
return true;
|
|
18
|
+
from = start + 1;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
filterSkills,
|
|
23
|
+
hasSkillToken
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shared/skills.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SkillsListEntry } from '../codex/generated/v2/SkillsListEntry.js';\nexport type SkillCatalog = SkillsListEntry;\nexport type SkillMetadata = SkillCatalog['skills'][number];\nexport interface SkillQuery {\n projectId: string | null;\n threadId?: string;\n draftId?: string;\n forceReload?: boolean;\n}\nexport interface SkillReference {\n name: string;\n path: string;\n cwd: string;\n}\nexport function filterSkills(skills: SkillMetadata[], search: string) {\n const query = search.trim().toLocaleLowerCase();\n return skills.filter((skill) =>\n [skill.name, skill.description, skill.path, skill.scope, skill.pluginId ?? ''].some((value) =>\n value.toLocaleLowerCase().includes(query),\n ),\n );\n}\n\nexport function hasSkillToken(text: string, name: string) {\n const token = `$${name}`;\n let from = 0;\n for (;;) {\n const start = text.indexOf(token, from);\n if (start < 0) return false;\n const end = start + token.length;\n if (\n (start === 0 || /[\\s([{]/u.test(text[start - 1]!)) &&\n (end === text.length || /[\\s.,!?;:)\\]}]/u.test(text[end]!))\n )\n return true;\n from = start + 1;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAcO,SAAS,aAAa,QAAyB,QAAgB;AACpE,QAAM,QAAQ,OAAO,KAAK,EAAE,kBAAkB;AAC9C,SAAO,OAAO;AAAA,IAAO,CAAC,UACpB,CAAC,MAAM,MAAM,MAAM,aAAa,MAAM,MAAM,MAAM,OAAO,MAAM,YAAY,EAAE,EAAE;AAAA,MAAK,CAAC,UACnF,MAAM,kBAAkB,EAAE,SAAS,KAAK;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,SAAS,cAAc,MAAc,MAAc;AACxD,QAAM,QAAQ,IAAI,IAAI;AACtB,MAAI,OAAO;AACX,aAAS;AACP,UAAM,QAAQ,KAAK,QAAQ,OAAO,IAAI;AACtC,QAAI,QAAQ,EAAG,QAAO;AACtB,UAAM,MAAM,QAAQ,MAAM;AAC1B,SACG,UAAU,KAAK,WAAW,KAAK,KAAK,QAAQ,CAAC,CAAE,OAC/C,QAAQ,KAAK,UAAU,kBAAkB,KAAK,KAAK,GAAG,CAAE;AAEzD,aAAO;AACT,WAAO,QAAQ;AAAA,EACjB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pendingAttention } from "./thread-attention.js";
|
|
1
2
|
function toThreadSummary(thread) {
|
|
2
3
|
const lastTurn = thread.turns.at(-1);
|
|
3
4
|
return {
|
|
@@ -15,6 +16,9 @@ function toThreadSummary(thread) {
|
|
|
15
16
|
pendingActionCount: thread.actions.filter(
|
|
16
17
|
(action) => action.status === "pending" || action.status === "responding"
|
|
17
18
|
).length,
|
|
19
|
+
pendingQuestionCount: pendingAttention(thread).filter(
|
|
20
|
+
(request) => request.target.kind === "question"
|
|
21
|
+
).length,
|
|
18
22
|
...lastTurn === void 0 ? {} : { lastTurnId: lastTurn.id, lastTurnStatus: lastTurn.status }
|
|
19
23
|
};
|
|
20
24
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shared/thread-summary.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ThreadSummary, ThreadView } from './types.js';\n\n/** Overview messages deliberately omit conversation content and control payloads. */\nexport function toThreadSummary(thread: ThreadView): ThreadSummary {\n const lastTurn = thread.turns.at(-1);\n return {\n id: thread.id,\n ...(thread.archived === undefined ? {} : { archived: thread.archived }),\n ...(thread.forkedFromId === undefined ? {} : { forkedFromId: thread.forkedFromId }),\n projectId: thread.projectId,\n source: thread.source,\n originator: thread.originator ?? null,\n title: thread.title,\n status: thread.status,\n managed: thread.managed,\n ...(thread.historyVisible === undefined ? {} : { historyVisible: thread.historyVisible }),\n ...(thread.updatedAt === undefined ? {} : { updatedAt: thread.updatedAt }),\n pendingActionCount: thread.actions.filter(\n (action) => action.status === 'pending' || action.status === 'responding',\n ).length,\n ...(lastTurn === undefined ? {} : { lastTurnId: lastTurn.id, lastTurnStatus: lastTurn.status }),\n };\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { ThreadSummary, ThreadView } from './types.js';\nimport { pendingAttention } from './thread-attention.js';\n\n/** Overview messages deliberately omit conversation content and control payloads. */\nexport function toThreadSummary(thread: ThreadView): ThreadSummary {\n const lastTurn = thread.turns.at(-1);\n return {\n id: thread.id,\n ...(thread.archived === undefined ? {} : { archived: thread.archived }),\n ...(thread.forkedFromId === undefined ? {} : { forkedFromId: thread.forkedFromId }),\n projectId: thread.projectId,\n source: thread.source,\n originator: thread.originator ?? null,\n title: thread.title,\n status: thread.status,\n managed: thread.managed,\n ...(thread.historyVisible === undefined ? {} : { historyVisible: thread.historyVisible }),\n ...(thread.updatedAt === undefined ? {} : { updatedAt: thread.updatedAt }),\n pendingActionCount: thread.actions.filter(\n (action) => action.status === 'pending' || action.status === 'responding',\n ).length,\n pendingQuestionCount: pendingAttention(thread).filter(\n (request) => request.target.kind === 'question',\n ).length,\n ...(lastTurn === undefined ? {} : { lastTurnId: lastTurn.id, lastTurnStatus: lastTurn.status }),\n };\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,wBAAwB;AAG1B,SAAS,gBAAgB,QAAmC;AACjE,QAAM,WAAW,OAAO,MAAM,GAAG,EAAE;AACnC,SAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,GAAI,OAAO,aAAa,SAAY,CAAC,IAAI,EAAE,UAAU,OAAO,SAAS;AAAA,IACrE,GAAI,OAAO,iBAAiB,SAAY,CAAC,IAAI,EAAE,cAAc,OAAO,aAAa;AAAA,IACjF,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO,cAAc;AAAA,IACjC,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,IAChB,GAAI,OAAO,mBAAmB,SAAY,CAAC,IAAI,EAAE,gBAAgB,OAAO,eAAe;AAAA,IACvF,GAAI,OAAO,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,OAAO,UAAU;AAAA,IACxE,oBAAoB,OAAO,QAAQ;AAAA,MACjC,CAAC,WAAW,OAAO,WAAW,aAAa,OAAO,WAAW;AAAA,IAC/D,EAAE;AAAA,IACF,sBAAsB,iBAAiB,MAAM,EAAE;AAAA,MAC7C,CAAC,YAAY,QAAQ,OAAO,SAAS;AAAA,IACvC,EAAE;AAAA,IACF,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,YAAY,SAAS,IAAI,gBAAgB,SAAS,OAAO;AAAA,EAC/F;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shared/updates.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n CodexCompatibility,\n CodexCompatibilityManifest,\n CodexUpdateConfirmation,\n} from './codex-compatibility.js';\nexport const releaseChannels = ['stable', 'beta', 'dev'] as const;\nexport type ReleaseChannel = (typeof releaseChannels)[number];\nexport interface UpdateSettings {\n channel: ReleaseChannel;\n automatic: boolean;\n}\nexport type UpdatePhase =\n 'installing' | 'waiting' | 'stopping' | 'verifying' | 'succeeded' | 'rolledBack' | 'failed';\nexport interface UpdateRun {\n id: string;\n from: string;\n target: string;\n /** Subscribed channel after activation, independent of the candidate's source. */\n channel: ReleaseChannel;\n /** Optional for update records created by older versions. */\n sourceChannel?: ReleaseChannel;\n commit?: string;\n phase: UpdatePhase;\n message: string;\n startedAt: number;\n updatedAt: number;\n committed?: boolean;\n codex?: { version: string; manifest: CodexCompatibilityManifest; confirmedUnverified: boolean };\n}\nexport interface UpdateStatus {\n version: string;\n commit?: string;\n source: 'npm';\n codex: CodexCompatibility;\n settings: UpdateSettings;\n available?: {\n version: string;\n requestedChannel: ReleaseChannel;\n /** Actual npm source of the selected version. */\n channel: ReleaseChannel;\n commit?: string;\n downgrade: boolean;\n codex: CodexCompatibility;\n };\n checkedAt?: number;\n checkError?: string;\n supported: boolean;\n unsupportedReason?: string;\n run?: UpdateRun;\n}\nexport const updateActive = (run?: UpdateRun) =>\n Boolean(run && ['installing', 'waiting', 'stopping', 'verifying'].includes(run.phase));\nexport interface UpdateController {\n status(): Promise<UpdateStatus>;\n check(channel?: ReleaseChannel): Promise<UpdateStatus>;\n configure(settings: UpdateSettings): Promise<UpdateStatus>;\n start(input: {\n clientOperationId: string;\n channel?: ReleaseChannel;\n allowDowngrade?: boolean;\n codexConfirmation?: CodexUpdateConfirmation;\n }): Promise<UpdateStatus>;\n close(): void;\n}\n"],
|
|
5
|
-
"mappings": "AAKO,MAAM,kBAAkB,CAAC,UAAU,QAAQ,KAAK;
|
|
4
|
+
"sourcesContent": ["import type {\n CodexCompatibility,\n CodexCompatibilityManifest,\n CodexUpdateConfirmation,\n} from './codex-compatibility.js';\nexport const releaseChannels = ['stable', 'beta', 'dev'] as const;\nexport type ReleaseChannel = (typeof releaseChannels)[number];\nexport interface UpdateSettings {\n channel: ReleaseChannel;\n automatic: boolean;\n}\nexport type UpdatePhase =\n 'installing' | 'waiting' | 'stopping' | 'verifying' | 'succeeded' | 'rolledBack' | 'failed';\nexport interface RuntimeIdentity {\n node: string;\n nodeVersion: string;\n root: string;\n entry: string;\n npm?: string;\n npmVersion?: string;\n globalRoot?: string;\n}\nexport interface UpdateRun {\n id: string;\n from: string;\n target: string;\n /** Subscribed channel after activation, independent of the candidate's source. */\n channel: ReleaseChannel;\n /** Optional for update records created by older versions. */\n sourceChannel?: ReleaseChannel;\n commit?: string;\n phase: UpdatePhase;\n message: string;\n startedAt: number;\n updatedAt: number;\n committed?: boolean;\n runtime?: { from: RuntimeIdentity; target: RuntimeIdentity; actual?: RuntimeIdentity };\n codex?: { version: string; manifest: CodexCompatibilityManifest; confirmedUnverified: boolean };\n}\nexport interface UpdateStatus {\n version: string;\n commit?: string;\n source: 'npm';\n codex: CodexCompatibility;\n settings: UpdateSettings;\n available?: {\n version: string;\n requestedChannel: ReleaseChannel;\n /** Actual npm source of the selected version. */\n channel: ReleaseChannel;\n commit?: string;\n downgrade: boolean;\n codex: CodexCompatibility;\n };\n checkedAt?: number;\n checkError?: string;\n supported: boolean;\n unsupportedReason?: string;\n run?: UpdateRun;\n runtime?: {\n current: RuntimeIdentity;\n target?: RuntimeIdentity;\n migration: boolean;\n error?: string;\n };\n}\nexport const updateActive = (run?: UpdateRun) =>\n Boolean(run && ['installing', 'waiting', 'stopping', 'verifying'].includes(run.phase));\nexport interface UpdateController {\n status(): Promise<UpdateStatus>;\n check(channel?: ReleaseChannel): Promise<UpdateStatus>;\n configure(settings: UpdateSettings): Promise<UpdateStatus>;\n start(input: {\n clientOperationId: string;\n channel?: ReleaseChannel;\n allowDowngrade?: boolean;\n codexConfirmation?: CodexUpdateConfirmation;\n }): Promise<UpdateStatus>;\n close(): void;\n}\n"],
|
|
5
|
+
"mappings": "AAKO,MAAM,kBAAkB,CAAC,UAAU,QAAQ,KAAK;AA6DhD,MAAM,eAAe,CAAC,QAC3B,QAAQ,OAAO,CAAC,cAAc,WAAW,YAAY,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -65,6 +65,13 @@ const resumeThreadSchema = createThreadSchema.extend({
|
|
|
65
65
|
confirmExternalStopped: z.boolean().optional()
|
|
66
66
|
});
|
|
67
67
|
const taskFields = {
|
|
68
|
+
skills: z.array(
|
|
69
|
+
z.object({
|
|
70
|
+
name: z.string().min(1).max(256),
|
|
71
|
+
path: z.string().min(1).max(4096),
|
|
72
|
+
cwd: z.string().min(1).max(4096)
|
|
73
|
+
}).strict()
|
|
74
|
+
).max(32).optional(),
|
|
68
75
|
text: z.string().max(1e5),
|
|
69
76
|
images: z.array(z.string().refine((value) => imageDataBytes(value) !== void 0, "Invalid image")).max(MAX_IMAGES).refine(
|
|
70
77
|
(images) => images.reduce((sum, image) => sum + (imageDataBytes(image) ?? Infinity), 0) <= MAX_IMAGE_BYTES,
|
|
@@ -76,7 +83,7 @@ const startTurnSchema = createThreadSchema.extend({
|
|
|
76
83
|
...taskFields,
|
|
77
84
|
taskKind: z.literal("init").optional()
|
|
78
85
|
}).refine(hasContent, "Text or an image is required").refine(
|
|
79
|
-
(input) => input.taskKind !== "init" || !input.images?.length,
|
|
86
|
+
(input) => input.taskKind !== "init" || !input.images?.length && !input.skills?.length,
|
|
80
87
|
"Project initialization cannot include images"
|
|
81
88
|
);
|
|
82
89
|
const steerSchema = operationSchema.extend({
|
|
@@ -139,6 +146,15 @@ const socketMessageSchema = z.discriminatedUnion("type", [
|
|
|
139
146
|
]);
|
|
140
147
|
const archiveThreadSchema = operationSchema.extend({ archived: z.boolean() });
|
|
141
148
|
const archivedQuerySchema = z.enum(["true", "false"]).optional().transform((value) => value === "true");
|
|
149
|
+
const skillsQuerySchema = z.object({
|
|
150
|
+
projectId: idSchema.nullable(),
|
|
151
|
+
threadId: idSchema.optional(),
|
|
152
|
+
draftId: z.string().uuid().optional(),
|
|
153
|
+
forceReload: z.boolean().optional()
|
|
154
|
+
}).strict().refine(
|
|
155
|
+
(value) => value.projectId !== null || value.threadId || value.draftId,
|
|
156
|
+
"A session or draft is required"
|
|
157
|
+
);
|
|
142
158
|
export {
|
|
143
159
|
approveDenialSchema,
|
|
144
160
|
archiveThreadSchema,
|
|
@@ -165,6 +181,7 @@ export {
|
|
|
165
181
|
reviewTargetSchema,
|
|
166
182
|
saveModelDefaultsSchema,
|
|
167
183
|
settingsSchema,
|
|
184
|
+
skillsQuerySchema,
|
|
168
185
|
socketMessageSchema,
|
|
169
186
|
startReviewSchema,
|
|
170
187
|
startTurnSchema,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shared/validation.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod';\nimport { imageDataBytes, MAX_IMAGE_BYTES, MAX_IMAGES } from './images.js';\nimport type { TaskMessage } from './types.js';\nimport { threadNameError } from './thread-name.js';\nexport const cursorSchema = z.string().min(1).max(4096);\nexport const idSchema = z.string().min(1).max(256);\nconst projectNameSchema = z.string().trim().min(1).max(100);\nexport const createProjectSchema = z\n .object({ path: z.string().trim().min(1).max(4096), name: projectNameSchema.optional() })\n .strict();\nexport const renameProjectSchema = z.object({ name: projectNameSchema }).strict();\nexport const cloneProjectSchema = createProjectSchema.extend({\n clientOperationId: z.string().uuid(),\n repository: z.string().trim().min(1).max(4096),\n});\nexport const removeProjectSchema = z.object({}).strict();\nexport const reorderProjectsSchema = z\n .object({ projectIds: z.array(idSchema).refine((ids) => new Set(ids).size === ids.length) })\n .strict();\nexport const settingsSchema = z\n .object({\n model: z.string().min(1).max(200).optional(),\n collaborationMode: z.enum(['plan', 'default']).optional(),\n reasoningEffort: z.string().min(1).max(40).optional(),\n serviceTier: z.literal('fast').nullable().optional(),\n permissionMode: z.enum(['ask', 'auto-review', 'full-access', 'read-only']).optional(),\n approvalPolicy: z.enum(['untrusted', 'on-request', 'never']).optional(),\n approvalReviewer: z.enum(['user', 'auto_review']).optional(),\n sandbox: z.enum(['read-only', 'workspace-write', 'danger-full-access']).optional(),\n })\n .strict()\n .refine(\n (settings) =>\n settings.permissionMode === undefined ||\n (settings.sandbox === undefined &&\n settings.approvalPolicy === undefined &&\n settings.approvalReviewer === undefined),\n '\u6743\u9650\u6A21\u5F0F\u4E0D\u80FD\u4E0E\u72EC\u7ACB\u7684\u6743\u9650\u3001\u5BA1\u6279\u7B56\u7565\u6216\u5BA1\u6838\u65B9\u540C\u65F6\u8BBE\u7F6E',\n );\nexport const operationSchema = z.object({ clientOperationId: z.string().uuid() }).strict();\nexport const saveModelDefaultsSchema = operationSchema.extend({\n settings: z\n .object({\n model: z.string().min(1).max(200),\n reasoningEffort: z.string().min(1).max(40).nullable(),\n })\n .strict(),\n});\nexport const reviewTargetSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('uncommittedChanges') }).strict(),\n z\n .object({\n type: z.literal('baseBranch'),\n branch: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .refine(\n (branch) =>\n !branch.startsWith('-') &&\n !/\\s/.test(branch) &&\n [...branch].every((char) => char.codePointAt(0)! >= 32 && char.codePointAt(0) !== 127),\n ),\n })\n .strict(),\n z\n .object({\n type: z.literal('commit'),\n sha: z\n .string()\n .trim()\n .regex(/^[a-fA-F0-9]{7,64}$/),\n })\n .strict(),\n z\n .object({ type: z.literal('custom'), instructions: z.string().trim().min(1).max(100_000) })\n .strict(),\n]);\nexport const startReviewSchema = operationSchema.extend({ target: reviewTargetSchema.optional() });\nexport const confirmCompatibilitySchema = operationSchema.extend({\n codexEpoch: idSchema,\n codexVersion: z.string().min(1).max(200),\n verifiedVersion: z.string().min(1).max(200),\n confirm: z.literal(true),\n});\nexport const createThreadSchema = operationSchema.extend({ settings: settingsSchema.optional() });\nexport const forkThreadSchema = createThreadSchema;\nexport const renameThreadSchema = operationSchema.extend({\n name: z\n .string()\n .superRefine((name, context) => {\n const message = threadNameError(name);\n if (message) context.addIssue({ code: 'custom', message });\n })\n .transform((name) => name.trim()),\n});\nexport const resumeThreadSchema = createThreadSchema.extend({\n confirmExternalStopped: z.boolean().optional(),\n});\nconst taskFields = {\n text: z.string().max(100_000),\n images: z\n .array(z.string().refine((value) => imageDataBytes(value) !== undefined, 'Invalid image'))\n .max(MAX_IMAGES)\n .refine(\n (images) =>\n images.reduce((sum, image) => sum + (imageDataBytes(image) ?? Infinity), 0) <=\n MAX_IMAGE_BYTES,\n 'Images exceed size limit',\n )\n .optional(),\n};\nconst hasContent = (input: TaskMessage) => Boolean(input.text.trim() || input.images?.length);\nexport const startTurnSchema = createThreadSchema\n .extend({\n ...taskFields,\n taskKind: z.literal('init').optional(),\n })\n .refine(hasContent, 'Text or an image is required')\n .refine(\n (input) => input.taskKind !== 'init' || !input.images?.length,\n 'Project initialization cannot include images',\n );\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const goalMutationSchema = z.discriminatedUnion('action', [\n operationSchema.extend({\n action: z.literal('clear'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n }),\n operationSchema\n .extend({\n action: z.literal('set'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n objective: z.string().trim().min(1).max(10000).optional(),\n status: z.enum(['active', 'paused', 'complete']).optional(),\n tokenBudget: z.number().int().positive().max(1000000000).optional(),\n })\n .refine(\n (value) =>\n value.objective !== undefined ||\n value.status !== undefined ||\n value.tokenBudget !== undefined,\n 'Goal update is empty',\n ),\n]);\nexport const recapSchema = operationSchema.extend({\n language: z.enum(['en', 'zh-Hans', 'ja', 'ko']),\n});\nexport const approveDenialSchema = operationSchema.extend({\n denialId: idSchema,\n confirm: z.literal(true),\n});\nexport const interruptSchema = operationSchema.extend({ expectedTurnId: idSchema });\nexport const retryTurnSchema = createThreadSchema.extend({ expectedTurnId: idSchema });\nconst elicitationValueSchema = z.union([\n z.string().max(10_000),\n z.number().finite(),\n z.boolean(),\n z.array(z.string().max(10_000)).max(500),\n]);\nexport const resolveActionSchema = operationSchema.extend({\n resolution: z.union([\n z\n .object({\n decision: z.string().min(1).max(200),\n content: z.record(z.string().max(1000), elicitationValueSchema).optional(),\n persist: z.literal('session').optional(),\n })\n .strict(),\n z.object({ answers: z.record(z.string(), z.array(z.string().max(10_000)).max(50)) }).strict(),\n ]),\n});\nexport const reconcileSchema = operationSchema.extend({ confirmEnded: z.literal(true) });\nexport const subscribeSchema = z\n .object({\n type: z.literal('subscribe'),\n threadId: idSchema,\n incremental: z.boolean().optional(),\n after: z\n .object({ serverEpoch: idSchema, seq: z.number().int().nonnegative() })\n .strict()\n .optional(),\n })\n .strict();\nexport const socketMessageSchema = z.discriminatedUnion('type', [\n subscribeSchema,\n z.object({ type: z.literal('unsubscribe') }).strict(),\n]);\n\nexport const archiveThreadSchema = operationSchema.extend({ archived: z.boolean() });\nexport const archivedQuerySchema = z\n .enum(['true', 'false'])\n .optional()\n .transform((value) => value === 'true');\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod';\nimport { imageDataBytes, MAX_IMAGE_BYTES, MAX_IMAGES } from './images.js';\nimport type { TaskMessage } from './types.js';\nimport { threadNameError } from './thread-name.js';\nexport const cursorSchema = z.string().min(1).max(4096);\nexport const idSchema = z.string().min(1).max(256);\nconst projectNameSchema = z.string().trim().min(1).max(100);\nexport const createProjectSchema = z\n .object({ path: z.string().trim().min(1).max(4096), name: projectNameSchema.optional() })\n .strict();\nexport const renameProjectSchema = z.object({ name: projectNameSchema }).strict();\nexport const cloneProjectSchema = createProjectSchema.extend({\n clientOperationId: z.string().uuid(),\n repository: z.string().trim().min(1).max(4096),\n});\nexport const removeProjectSchema = z.object({}).strict();\nexport const reorderProjectsSchema = z\n .object({ projectIds: z.array(idSchema).refine((ids) => new Set(ids).size === ids.length) })\n .strict();\nexport const settingsSchema = z\n .object({\n model: z.string().min(1).max(200).optional(),\n collaborationMode: z.enum(['plan', 'default']).optional(),\n reasoningEffort: z.string().min(1).max(40).optional(),\n serviceTier: z.literal('fast').nullable().optional(),\n permissionMode: z.enum(['ask', 'auto-review', 'full-access', 'read-only']).optional(),\n approvalPolicy: z.enum(['untrusted', 'on-request', 'never']).optional(),\n approvalReviewer: z.enum(['user', 'auto_review']).optional(),\n sandbox: z.enum(['read-only', 'workspace-write', 'danger-full-access']).optional(),\n })\n .strict()\n .refine(\n (settings) =>\n settings.permissionMode === undefined ||\n (settings.sandbox === undefined &&\n settings.approvalPolicy === undefined &&\n settings.approvalReviewer === undefined),\n '\u6743\u9650\u6A21\u5F0F\u4E0D\u80FD\u4E0E\u72EC\u7ACB\u7684\u6743\u9650\u3001\u5BA1\u6279\u7B56\u7565\u6216\u5BA1\u6838\u65B9\u540C\u65F6\u8BBE\u7F6E',\n );\nexport const operationSchema = z.object({ clientOperationId: z.string().uuid() }).strict();\nexport const saveModelDefaultsSchema = operationSchema.extend({\n settings: z\n .object({\n model: z.string().min(1).max(200),\n reasoningEffort: z.string().min(1).max(40).nullable(),\n })\n .strict(),\n});\nexport const reviewTargetSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('uncommittedChanges') }).strict(),\n z\n .object({\n type: z.literal('baseBranch'),\n branch: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .refine(\n (branch) =>\n !branch.startsWith('-') &&\n !/\\s/.test(branch) &&\n [...branch].every((char) => char.codePointAt(0)! >= 32 && char.codePointAt(0) !== 127),\n ),\n })\n .strict(),\n z\n .object({\n type: z.literal('commit'),\n sha: z\n .string()\n .trim()\n .regex(/^[a-fA-F0-9]{7,64}$/),\n })\n .strict(),\n z\n .object({ type: z.literal('custom'), instructions: z.string().trim().min(1).max(100_000) })\n .strict(),\n]);\nexport const startReviewSchema = operationSchema.extend({ target: reviewTargetSchema.optional() });\nexport const confirmCompatibilitySchema = operationSchema.extend({\n codexEpoch: idSchema,\n codexVersion: z.string().min(1).max(200),\n verifiedVersion: z.string().min(1).max(200),\n confirm: z.literal(true),\n});\nexport const createThreadSchema = operationSchema.extend({ settings: settingsSchema.optional() });\nexport const forkThreadSchema = createThreadSchema;\nexport const renameThreadSchema = operationSchema.extend({\n name: z\n .string()\n .superRefine((name, context) => {\n const message = threadNameError(name);\n if (message) context.addIssue({ code: 'custom', message });\n })\n .transform((name) => name.trim()),\n});\nexport const resumeThreadSchema = createThreadSchema.extend({\n confirmExternalStopped: z.boolean().optional(),\n});\nconst taskFields = {\n skills: z\n .array(\n z\n .object({\n name: z.string().min(1).max(256),\n path: z.string().min(1).max(4096),\n cwd: z.string().min(1).max(4096),\n })\n .strict(),\n )\n .max(32)\n .optional(),\n text: z.string().max(100_000),\n images: z\n .array(z.string().refine((value) => imageDataBytes(value) !== undefined, 'Invalid image'))\n .max(MAX_IMAGES)\n .refine(\n (images) =>\n images.reduce((sum, image) => sum + (imageDataBytes(image) ?? Infinity), 0) <=\n MAX_IMAGE_BYTES,\n 'Images exceed size limit',\n )\n .optional(),\n};\nconst hasContent = (input: TaskMessage) => Boolean(input.text.trim() || input.images?.length);\nexport const startTurnSchema = createThreadSchema\n .extend({\n ...taskFields,\n taskKind: z.literal('init').optional(),\n })\n .refine(hasContent, 'Text or an image is required')\n .refine(\n (input) => input.taskKind !== 'init' || (!input.images?.length && !input.skills?.length),\n 'Project initialization cannot include images',\n );\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const goalMutationSchema = z.discriminatedUnion('action', [\n operationSchema.extend({\n action: z.literal('clear'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n }),\n operationSchema\n .extend({\n action: z.literal('set'),\n confirm: z.literal(true),\n expectedVersion: z.string().regex(/^[a-f0-9]{64}$/),\n objective: z.string().trim().min(1).max(10000).optional(),\n status: z.enum(['active', 'paused', 'complete']).optional(),\n tokenBudget: z.number().int().positive().max(1000000000).optional(),\n })\n .refine(\n (value) =>\n value.objective !== undefined ||\n value.status !== undefined ||\n value.tokenBudget !== undefined,\n 'Goal update is empty',\n ),\n]);\nexport const recapSchema = operationSchema.extend({\n language: z.enum(['en', 'zh-Hans', 'ja', 'ko']),\n});\nexport const approveDenialSchema = operationSchema.extend({\n denialId: idSchema,\n confirm: z.literal(true),\n});\nexport const interruptSchema = operationSchema.extend({ expectedTurnId: idSchema });\nexport const retryTurnSchema = createThreadSchema.extend({ expectedTurnId: idSchema });\nconst elicitationValueSchema = z.union([\n z.string().max(10_000),\n z.number().finite(),\n z.boolean(),\n z.array(z.string().max(10_000)).max(500),\n]);\nexport const resolveActionSchema = operationSchema.extend({\n resolution: z.union([\n z\n .object({\n decision: z.string().min(1).max(200),\n content: z.record(z.string().max(1000), elicitationValueSchema).optional(),\n persist: z.literal('session').optional(),\n })\n .strict(),\n z.object({ answers: z.record(z.string(), z.array(z.string().max(10_000)).max(50)) }).strict(),\n ]),\n});\nexport const reconcileSchema = operationSchema.extend({ confirmEnded: z.literal(true) });\nexport const subscribeSchema = z\n .object({\n type: z.literal('subscribe'),\n threadId: idSchema,\n incremental: z.boolean().optional(),\n after: z\n .object({ serverEpoch: idSchema, seq: z.number().int().nonnegative() })\n .strict()\n .optional(),\n })\n .strict();\nexport const socketMessageSchema = z.discriminatedUnion('type', [\n subscribeSchema,\n z.object({ type: z.literal('unsubscribe') }).strict(),\n]);\n\nexport const archiveThreadSchema = operationSchema.extend({ archived: z.boolean() });\nexport const archivedQuerySchema = z\n .enum(['true', 'false'])\n .optional()\n .transform((value) => value === 'true');\n\nexport const skillsQuerySchema = z\n .object({\n projectId: idSchema.nullable(),\n threadId: idSchema.optional(),\n draftId: z.string().uuid().optional(),\n forceReload: z.boolean().optional(),\n })\n .strict()\n .refine(\n (value) => value.projectId !== null || value.threadId || value.draftId,\n 'A session or draft is required',\n );\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAClB,SAAS,gBAAgB,iBAAiB,kBAAkB;AAE5D,SAAS,uBAAuB;AACzB,MAAM,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAC/C,MAAM,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACjD,MAAM,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACnD,MAAM,sBAAsB,EAChC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,MAAM,kBAAkB,SAAS,EAAE,CAAC,EACvF,OAAO;AACH,MAAM,sBAAsB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC,EAAE,OAAO;AACzE,MAAM,qBAAqB,oBAAoB,OAAO;AAAA,EAC3D,mBAAmB,EAAE,OAAO,EAAE,KAAK;AAAA,EACnC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAC/C,CAAC;AACM,MAAM,sBAAsB,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO;AAChD,MAAM,wBAAwB,EAClC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,GAAG,EAAE,SAAS,IAAI,MAAM,EAAE,CAAC,EAC1F,OAAO;AACH,MAAM,iBAAiB,EAC3B,OAAO;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC3C,mBAAmB,EAAE,KAAK,CAAC,QAAQ,SAAS,CAAC,EAAE,SAAS;AAAA,EACxD,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACpD,aAAa,EAAE,QAAQ,MAAM,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,gBAAgB,EAAE,KAAK,CAAC,OAAO,eAAe,eAAe,WAAW,CAAC,EAAE,SAAS;AAAA,EACpF,gBAAgB,EAAE,KAAK,CAAC,aAAa,cAAc,OAAO,CAAC,EAAE,SAAS;AAAA,EACtE,kBAAkB,EAAE,KAAK,CAAC,QAAQ,aAAa,CAAC,EAAE,SAAS;AAAA,EAC3D,SAAS,EAAE,KAAK,CAAC,aAAa,mBAAmB,oBAAoB,CAAC,EAAE,SAAS;AACnF,CAAC,EACA,OAAO,EACP;AAAA,EACC,CAAC,aACC,SAAS,mBAAmB,UAC3B,SAAS,YAAY,UACpB,SAAS,mBAAmB,UAC5B,SAAS,qBAAqB;AAAA,EAClC;AACF;AACK,MAAM,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO;AAClF,MAAM,0BAA0B,gBAAgB,OAAO;AAAA,EAC5D,UAAU,EACP,OAAO;AAAA,IACN,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IAChC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACtD,CAAC,EACA,OAAO;AACZ,CAAC;AACM,MAAM,qBAAqB,EAAE,mBAAmB,QAAQ;AAAA,EAC7D,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,oBAAoB,EAAE,CAAC,EAAE,OAAO;AAAA,EAC3D,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,YAAY;AAAA,IAC5B,QAAQ,EACL,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,IAAI,GAAG,EACP;AAAA,MACC,CAAC,WACC,CAAC,OAAO,WAAW,GAAG,KACtB,CAAC,KAAK,KAAK,MAAM,KACjB,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,KAAM,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG;AAAA,IACzF;AAAA,EACJ,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,QAAQ;AAAA,IACxB,KAAK,EACF,OAAO,EACP,KAAK,EACL,MAAM,qBAAqB;AAAA,EAChC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO,EAAE,MAAM,EAAE,QAAQ,QAAQ,GAAG,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAO,EAAE,CAAC,EACzF,OAAO;AACZ,CAAC;AACM,MAAM,oBAAoB,gBAAgB,OAAO,EAAE,QAAQ,mBAAmB,SAAS,EAAE,CAAC;AAC1F,MAAM,6BAA6B,gBAAgB,OAAO;AAAA,EAC/D,YAAY;AAAA,EACZ,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACvC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC1C,SAAS,EAAE,QAAQ,IAAI;AACzB,CAAC;AACM,MAAM,qBAAqB,gBAAgB,OAAO,EAAE,UAAU,eAAe,SAAS,EAAE,CAAC;AACzF,MAAM,mBAAmB;AACzB,MAAM,qBAAqB,gBAAgB,OAAO;AAAA,EACvD,MAAM,EACH,OAAO,EACP,YAAY,CAAC,MAAM,YAAY;AAC9B,UAAM,UAAU,gBAAgB,IAAI;AACpC,QAAI,QAAS,SAAQ,SAAS,EAAE,MAAM,UAAU,QAAQ,CAAC;AAAA,EAC3D,CAAC,EACA,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC;AACpC,CAAC;AACM,MAAM,qBAAqB,mBAAmB,OAAO;AAAA,EAC1D,wBAAwB,EAAE,QAAQ,EAAE,SAAS;AAC/C,CAAC;AACD,MAAM,aAAa;AAAA,EACjB,QAAQ,EACL;AAAA,IACC,EACG,OAAO;AAAA,MACN,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MAC/B,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,MAChC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAAA,IACjC,CAAC,EACA,OAAO;AAAA,EACZ,EACC,IAAI,EAAE,EACN,SAAS;AAAA,EACZ,MAAM,EAAE,OAAO,EAAE,IAAI,GAAO;AAAA,EAC5B,QAAQ,EACL,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,eAAe,KAAK,MAAM,QAAW,eAAe,CAAC,EACxF,IAAI,UAAU,EACd;AAAA,IACC,CAAC,WACC,OAAO,OAAO,CAAC,KAAK,UAAU,OAAO,eAAe,KAAK,KAAK,WAAW,CAAC,KAC1E;AAAA,IACF;AAAA,EACF,EACC,SAAS;AACd;AACA,MAAM,aAAa,CAAC,UAAuB,QAAQ,MAAM,KAAK,KAAK,KAAK,MAAM,QAAQ,MAAM;AACrF,MAAM,kBAAkB,mBAC5B,OAAO;AAAA,EACN,GAAG;AAAA,EACH,UAAU,EAAE,QAAQ,MAAM,EAAE,SAAS;AACvC,CAAC,EACA,OAAO,YAAY,8BAA8B,EACjD;AAAA,EACC,CAAC,UAAU,MAAM,aAAa,UAAW,CAAC,MAAM,QAAQ,UAAU,CAAC,MAAM,QAAQ;AAAA,EACjF;AACF;AACK,MAAM,cAAc,gBACxB,OAAO;AAAA,EACN,gBAAgB;AAAA,EAChB,GAAG;AACL,CAAC,EACA,OAAO,YAAY,8BAA8B;AAC7C,MAAM,qBAAqB,EAAE,mBAAmB,UAAU;AAAA,EAC/D,gBAAgB,OAAO;AAAA,IACrB,QAAQ,EAAE,QAAQ,OAAO;AAAA,IACzB,SAAS,EAAE,QAAQ,IAAI;AAAA,IACvB,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,EACpD,CAAC;AAAA,EACD,gBACG,OAAO;AAAA,IACN,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACvB,SAAS,EAAE,QAAQ,IAAI;AAAA,IACvB,iBAAiB,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,IAClD,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,IACxD,QAAQ,EAAE,KAAK,CAAC,UAAU,UAAU,UAAU,CAAC,EAAE,SAAS;AAAA,IAC1D,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAU,EAAE,SAAS;AAAA,EACpE,CAAC,EACA;AAAA,IACC,CAAC,UACC,MAAM,cAAc,UACpB,MAAM,WAAW,UACjB,MAAM,gBAAgB;AAAA,IACxB;AAAA,EACF;AACJ,CAAC;AACM,MAAM,cAAc,gBAAgB,OAAO;AAAA,EAChD,UAAU,EAAE,KAAK,CAAC,MAAM,WAAW,MAAM,IAAI,CAAC;AAChD,CAAC;AACM,MAAM,sBAAsB,gBAAgB,OAAO;AAAA,EACxD,UAAU;AAAA,EACV,SAAS,EAAE,QAAQ,IAAI;AACzB,CAAC;AACM,MAAM,kBAAkB,gBAAgB,OAAO,EAAE,gBAAgB,SAAS,CAAC;AAC3E,MAAM,kBAAkB,mBAAmB,OAAO,EAAE,gBAAgB,SAAS,CAAC;AACrF,MAAM,yBAAyB,EAAE,MAAM;AAAA,EACrC,EAAE,OAAO,EAAE,IAAI,GAAM;AAAA,EACrB,EAAE,OAAO,EAAE,OAAO;AAAA,EAClB,EAAE,QAAQ;AAAA,EACV,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAM,CAAC,EAAE,IAAI,GAAG;AACzC,CAAC;AACM,MAAM,sBAAsB,gBAAgB,OAAO;AAAA,EACxD,YAAY,EAAE,MAAM;AAAA,IAClB,EACG,OAAO;AAAA,MACN,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,MACnC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAI,GAAG,sBAAsB,EAAE,SAAS;AAAA,MACzE,SAAS,EAAE,QAAQ,SAAS,EAAE,SAAS;AAAA,IACzC,CAAC,EACA,OAAO;AAAA,IACV,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO;AAAA,EAC9F,CAAC;AACH,CAAC;AACM,MAAM,kBAAkB,gBAAgB,OAAO,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;AAChF,MAAM,kBAAkB,EAC5B,OAAO;AAAA,EACN,MAAM,EAAE,QAAQ,WAAW;AAAA,EAC3B,UAAU;AAAA,EACV,aAAa,EAAE,QAAQ,EAAE,SAAS;AAAA,EAClC,OAAO,EACJ,OAAO,EAAE,aAAa,UAAU,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EACrE,OAAO,EACP,SAAS;AACd,CAAC,EACA,OAAO;AACH,MAAM,sBAAsB,EAAE,mBAAmB,QAAQ;AAAA,EAC9D;AAAA,EACA,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,aAAa,EAAE,CAAC,EAAE,OAAO;AACtD,CAAC;AAEM,MAAM,sBAAsB,gBAAgB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC5E,MAAM,sBAAsB,EAChC,KAAK,CAAC,QAAQ,OAAO,CAAC,EACtB,SAAS,EACT,UAAU,CAAC,UAAU,UAAU,MAAM;AAEjC,MAAM,oBAAoB,EAC9B,OAAO;AAAA,EACN,WAAW,SAAS,SAAS;AAAA,EAC7B,UAAU,SAAS,SAAS;AAAA,EAC5B,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACpC,aAAa,EAAE,QAAQ,EAAE,SAAS;AACpC,CAAC,EACA,OAAO,EACP;AAAA,EACC,CAAC,UAAU,MAAM,cAAc,QAAQ,MAAM,YAAY,MAAM;AAAA,EAC/D;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|