@covro/covro 0.6.1-dev.4 → 0.6.1-dev.6

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.
Files changed (106) hide show
  1. package/README.md +7 -7
  2. package/README.zh-CN.md +7 -7
  3. package/dist/codex/adapter.js +14 -2
  4. package/dist/codex/adapter.js.map +2 -2
  5. package/dist/codex/mapping.js +3 -2
  6. package/dist/codex/mapping.js.map +2 -2
  7. package/dist/server/http.js +4 -0
  8. package/dist/server/http.js.map +2 -2
  9. package/dist/server/service.js +60 -1
  10. package/dist/server/service.js.map +2 -2
  11. package/dist/server/workspaces.js +6 -0
  12. package/dist/server/workspaces.js.map +2 -2
  13. package/dist/shared/skills.js +25 -0
  14. package/dist/shared/skills.js.map +7 -0
  15. package/dist/shared/thread-summary.js +4 -0
  16. package/dist/shared/thread-summary.js.map +2 -2
  17. package/dist/shared/validation.js +18 -1
  18. package/dist/shared/validation.js.map +2 -2
  19. package/dist/web/assets/{abnfDiagram-WEYOIA3C--q3UKu-m.js → abnfDiagram-WEYOIA3C-DUvD43fo.js} +1 -1
  20. package/dist/web/assets/{arc-CsDLrA4o.js → arc-CLgeXQbg.js} +1 -1
  21. package/dist/web/assets/{architecture-WOLXFQ4H-6TbwoUek.js → architecture-WOLXFQ4H-B90TkT-f.js} +1 -1
  22. package/dist/web/assets/{architectureDiagram-ZHVYKT53-GNeotXgT.js → architectureDiagram-ZHVYKT53-D6moZJYA.js} +1 -1
  23. package/dist/web/assets/{blockDiagram-RJAE7QA3-Ric8Njom.js → blockDiagram-RJAE7QA3-De2nAyYr.js} +1 -1
  24. package/dist/web/assets/{c4Diagram-XDPPPE54-CSFzq9_N.js → c4Diagram-XDPPPE54-c1uWYYz-.js} +1 -1
  25. package/dist/web/assets/channel-DS87HGNS.js +1 -0
  26. package/dist/web/assets/{chunk-2E7WHVMD-BwjaS8bo.js → chunk-2E7WHVMD-el4rmxCT.js} +1 -1
  27. package/dist/web/assets/{chunk-4EMNKR2T-V38rR2JO.js → chunk-4EMNKR2T-DULF_gee.js} +1 -1
  28. package/dist/web/assets/{chunk-55XCU76K-DjF4oGX1.js → chunk-55XCU76K-rE8V2Plf.js} +1 -1
  29. package/dist/web/assets/{chunk-7S6XSTFO-5YHKdb3u.js → chunk-7S6XSTFO-ndoiVQNk.js} +1 -1
  30. package/dist/web/assets/{chunk-AQDTSKZB-BGqebfJY.js → chunk-AQDTSKZB-CnaoYrc0.js} +1 -1
  31. package/dist/web/assets/{chunk-DSNLSHJZ-DoWMycRk.js → chunk-DSNLSHJZ-BInBA_8_.js} +1 -1
  32. package/dist/web/assets/{chunk-HAGFOTED-D23fXc2S.js → chunk-HAGFOTED-Cr2VLp3g.js} +1 -1
  33. package/dist/web/assets/{chunk-HNE4Q36P-BIJsRvPs.js → chunk-HNE4Q36P-Dy7jy4ZJ.js} +1 -1
  34. package/dist/web/assets/{chunk-NQOKRVIF-C54OjZSl.js → chunk-NQOKRVIF-BvdIlnZx.js} +1 -1
  35. package/dist/web/assets/{chunk-UHW7PFBP-C0X5au9W.js → chunk-UHW7PFBP-Dw8xAsNE.js} +1 -1
  36. package/dist/web/assets/{chunk-VQ5W62QI-C2vDy1Kl.js → chunk-VQ5W62QI-BANpclwq.js} +1 -1
  37. package/dist/web/assets/{chunk-WQQL4CDK-CcesvmQO.js → chunk-WQQL4CDK-B6J8I_Fa.js} +1 -1
  38. package/dist/web/assets/{chunk-XXDRQBXY-EiI0PYcn.js → chunk-XXDRQBXY-CSFKkf6j.js} +1 -1
  39. package/dist/web/assets/{chunk-YZO67HFG-BqeaVf9n.js → chunk-YZO67HFG-Dfya4W2y.js} +1 -1
  40. package/dist/web/assets/{chunk-ZAUX2LTX-DW6sEeTI.js → chunk-ZAUX2LTX-g9yoPx1I.js} +1 -1
  41. package/dist/web/assets/{chunk-ZCHMQSOR-BrlOBygH.js → chunk-ZCHMQSOR-D0Mf3eaR.js} +1 -1
  42. package/dist/web/assets/{classDiagram-v2-4MYWR3UA-DFpCrr_A.js → classDiagram-v2-4MYWR3UA-i1XA8729.js} +1 -1
  43. package/dist/web/assets/{cose-bilkent-JH36ORCC-CAWPSnN6.js → cose-bilkent-JH36ORCC-BNfJX6fP.js} +1 -1
  44. package/dist/web/assets/{cynefin-EF2NZ3EQ-DMeYqL7r.js → cynefin-EF2NZ3EQ-ULA3lIKQ.js} +1 -1
  45. package/dist/web/assets/{cynefinDiagram-WF24UDRP-DI-bFsxF.js → cynefinDiagram-WF24UDRP-DJHdCutz.js} +1 -1
  46. package/dist/web/assets/{dagre-NK4GIZVX-CdoitF7O.js → dagre-NK4GIZVX-Cn5Mj5b8.js} +1 -1
  47. package/dist/web/assets/{diagram-CBK3MWTC-DVTPnBLF.js → diagram-CBK3MWTC-DhY_JPrM.js} +1 -1
  48. package/dist/web/assets/{diagram-I5XIIV2D-3eS1TE4r.js → diagram-I5XIIV2D-CZcbV1Wj.js} +1 -1
  49. package/dist/web/assets/{diagram-ODIL2UCW-cLU1ehlH.js → diagram-ODIL2UCW-Bo1gEj9Z.js} +1 -1
  50. package/dist/web/assets/{diagram-PFBEJUXE-Bd1TAqaL.js → diagram-PFBEJUXE-DPyNgwPB.js} +1 -1
  51. package/dist/web/assets/{diagram-RJA3I4VV-CQqVlBOF.js → diagram-RJA3I4VV-aMyFNoq5.js} +1 -1
  52. package/dist/web/assets/{diagram-TYUNFSNR-CCGCiVOv.js → diagram-TYUNFSNR-CtihEAd8.js} +1 -1
  53. package/dist/web/assets/{dist-BE4VEq-n.js → dist-Bexp5vwd.js} +1 -1
  54. package/dist/web/assets/{ebnfDiagram-V4P3TTPT-BGOHdBAS.js → ebnfDiagram-V4P3TTPT-DaU_PhVl.js} +1 -1
  55. package/dist/web/assets/{elk-QONTBCTQ-D5OlAFYO.js → elk-QONTBCTQ-CF_9QETV.js} +1 -1
  56. package/dist/web/assets/{erDiagram-KYQIGQAA-DUtlMKNi.js → erDiagram-KYQIGQAA-Ca7IBIJG.js} +1 -1
  57. package/dist/web/assets/{eventmodeling-K75KTNOO-DXK-D1Z0.js → eventmodeling-K75KTNOO-BFMkpHur.js} +1 -1
  58. package/dist/web/assets/flowDiagram-IUGLLWBU-BRY-KOOc.js +1 -0
  59. package/dist/web/assets/{ganttDiagram-R7GPNTJY-BVGsal-Q.js → ganttDiagram-R7GPNTJY-BgNFnE6k.js} +1 -1
  60. package/dist/web/assets/{gitGraph-VSP46ZUC-DV6-WqhO.js → gitGraph-VSP46ZUC-NlGqHH7K.js} +1 -1
  61. package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-0QK_COI_.js → gitGraphDiagram-PDYL7XHY-CDYBE9E6.js} +1 -1
  62. package/dist/web/assets/index-2ms-LtOu.css +1 -0
  63. package/dist/web/assets/index-nW1EsYZ9.js +158 -0
  64. package/dist/web/assets/{info-OHQRW6UA-BZipuOqr.js → info-OHQRW6UA-CWxTOLNQ.js} +1 -1
  65. package/dist/web/assets/{infoDiagram-MVDRKAX5-1db4SZ4k.js → infoDiagram-MVDRKAX5-B11nL5jP.js} +1 -1
  66. package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-DTrI4oTY.js → ishikawaDiagram-HPEHV2GE-umotwCnr.js} +1 -1
  67. package/dist/web/assets/{journeyDiagram-BOSHW7O7-Bk5sPpaD.js → journeyDiagram-BOSHW7O7-DsvCfSWh.js} +1 -1
  68. package/dist/web/assets/{kanban-definition-FNSA4HC5-smf99L9V.js → kanban-definition-FNSA4HC5-B_HNzTSV.js} +1 -1
  69. package/dist/web/assets/{line-9F_GFNcI.js → line-DIAkTsRJ.js} +1 -1
  70. package/dist/web/assets/{linear-B80ozVj0.js → linear-Ds2HnZZG.js} +1 -1
  71. package/dist/web/assets/{mermaid-parser.core-DldmXGom.js → mermaid-parser.core-C9tMN8pK.js} +3 -3
  72. package/dist/web/assets/{mermaid.core-DIZvVrdE.js → mermaid.core-DtclJD8L.js} +4 -4
  73. package/dist/web/assets/{mindmap-definition-6OY57UG3-CLhpt9eO.js → mindmap-definition-6OY57UG3-BrZRJ2OE.js} +1 -1
  74. package/dist/web/assets/{packet-JDAUHWVQ-CL3Q6msP.js → packet-JDAUHWVQ-LZBwPmD1.js} +1 -1
  75. package/dist/web/assets/{pegDiagram-ECIUJNBX-BeBvMY1a.js → pegDiagram-ECIUJNBX-B4a4aYv1.js} +1 -1
  76. package/dist/web/assets/{pie-XZMESJXO-D_fdN7qT.js → pie-XZMESJXO-DyezbRHB.js} +1 -1
  77. package/dist/web/assets/{pieDiagram-GNMPY74T-DROrBz0o.js → pieDiagram-GNMPY74T-1MzhQyHf.js} +1 -1
  78. package/dist/web/assets/{quadrantDiagram-D57K4MC3-C57SBgx7.js → quadrantDiagram-D57K4MC3-B0y5R5kv.js} +1 -1
  79. package/dist/web/assets/{radar-ABXABTNO-B0-FyoLn.js → radar-ABXABTNO-8alr2zsV.js} +1 -1
  80. package/dist/web/assets/{railroad-I3PHUGI6-_ocCyblF.js → railroad-I3PHUGI6-BQ220EL5.js} +1 -1
  81. package/dist/web/assets/{railroad-abnf-LNEFI6M7-Ct1oCv45.js → railroad-abnf-LNEFI6M7-_rNFM21z.js} +1 -1
  82. package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-Dz3MdcvL.js → railroad-ebnf-DWYD2UWJ-tvl_XyTe.js} +1 -1
  83. package/dist/web/assets/{railroad-peg-JR7BVNR7-Ds4ONRXC.js → railroad-peg-JR7BVNR7-DPEanDNr.js} +1 -1
  84. package/dist/web/assets/{railroadDiagram-Y72NRBL7-DqS1adHB.js → railroadDiagram-Y72NRBL7-J5K9UDDN.js} +1 -1
  85. package/dist/web/assets/{requirementDiagram-EQYSW5RA-BReuC0TK.js → requirementDiagram-EQYSW5RA-C77NxUuW.js} +1 -1
  86. package/dist/web/assets/{sankeyDiagram-SY24JHO5-DDjUr4b9.js → sankeyDiagram-SY24JHO5-CwLVl6rc.js} +1 -1
  87. package/dist/web/assets/{sequenceDiagram-BLEHNHQU-D71Uv16-.js → sequenceDiagram-BLEHNHQU-Brb7JGsV.js} +1 -1
  88. package/dist/web/assets/{src-DiejhDC1.js → src-DyBL2lYL.js} +1 -1
  89. package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-B8w400YH.js → stateDiagram-v2-A6IESKWZ-CVfkPKeZ.js} +1 -1
  90. package/dist/web/assets/{swimlanes-B3ENRKFQ-Cx8dbIra.js → swimlanes-B3ENRKFQ-iWzXnIsT.js} +1 -1
  91. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-B4qFdQ9k.js +8 -0
  92. package/dist/web/assets/{timeline-definition-JXYKGLGB-wEhTG9mn.js → timeline-definition-JXYKGLGB-CKp5HuJh.js} +1 -1
  93. package/dist/web/assets/{treeView-D4JQ5SDB-J1xTBv_o.js → treeView-D4JQ5SDB-JQtgzSgT.js} +1 -1
  94. package/dist/web/assets/{treemap-SAJKECNS-B-HfL4ut.js → treemap-SAJKECNS-DBBZskm9.js} +1 -1
  95. package/dist/web/assets/{usecaseDiagram-WPOLBNNX-Bqvh0bcu.js → usecaseDiagram-WPOLBNNX-DjMTgZoc.js} +1 -1
  96. package/dist/web/assets/{vennDiagram-Q3Y3IDCW-B2TB6cEs.js → vennDiagram-Q3Y3IDCW-DdK5v2h8.js} +1 -1
  97. package/dist/web/assets/{wardley-7MLQ67FV-BF1eXS8d.js → wardley-7MLQ67FV-DW-bAjmx.js} +1 -1
  98. package/dist/web/assets/{wardleyDiagram-IVAIDKWA-BZzFLzrU.js → wardleyDiagram-IVAIDKWA-C3HOWBnq.js} +1 -1
  99. package/dist/web/assets/{xychartDiagram-4URNHDU4-Dh0JpuLV.js → xychartDiagram-4URNHDU4-BjzQo148.js} +1 -1
  100. package/dist/web/index.html +2 -2
  101. package/package.json +3 -3
  102. package/dist/web/assets/channel-M3Agpi7p.js +0 -1
  103. package/dist/web/assets/flowDiagram-IUGLLWBU-4EVBAMrs.js +0 -1
  104. package/dist/web/assets/index-BBPzwzxe.js +0 -158
  105. package/dist/web/assets/index-CSpioreu.css +0 -1
  106. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-DLuNBE0x.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,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": "AAGO,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,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,YAAY,SAAS,IAAI,gBAAgB,SAAS,OAAO;AAAA,EAC/F;AACF;",
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
  }
@@ -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": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-DldmXGom.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DiejhDC1.js";import"./chunk-DSNLSHJZ-DoWMycRk.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-BwjaS8bo.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-DIZvVrdE.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
1
+ import{m as e,t}from"./mermaid-parser.core-C9tMN8pK.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DyBL2lYL.js";import"./chunk-DSNLSHJZ-BInBA_8_.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-el4rmxCT.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-DtclJD8L.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -1 +1 @@
1
- import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-BE4VEq-n.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-Bexp5vwd.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -1 +1 @@
1
- import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-DldmXGom.js";
1
+ import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-C9tMN8pK.js";