@covro/covro 0.4.1-dev.4 → 0.4.1-dev.5

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 (92) hide show
  1. package/README.md +1 -1
  2. package/README.zh-CN.md +1 -1
  3. package/dist/codex/adapter.js.map +1 -1
  4. package/dist/codex/mapping.js.map +1 -1
  5. package/dist/codex/permissions.js.map +1 -1
  6. package/dist/codex/thread-title-policy.js.map +1 -1
  7. package/dist/codex/thread-titles.js.map +1 -1
  8. package/dist/web/assets/{abnfDiagram-WEYOIA3C-BYp4_gb_.js → abnfDiagram-WEYOIA3C-DHDQMgtn.js} +1 -1
  9. package/dist/web/assets/{arc-CtTBV9Vr.js → arc-DBsjx_Bn.js} +1 -1
  10. package/dist/web/assets/{architecture-WOLXFQ4H-B91ILQYE.js → architecture-WOLXFQ4H-DboXGiPf.js} +1 -1
  11. package/dist/web/assets/{architectureDiagram-ZHVYKT53-1a7IV5q-.js → architectureDiagram-ZHVYKT53-6zaTZR00.js} +1 -1
  12. package/dist/web/assets/{blockDiagram-RJAE7QA3-BYnI-Zq2.js → blockDiagram-RJAE7QA3-DJpVBTJP.js} +1 -1
  13. package/dist/web/assets/{c4Diagram-XDPPPE54-1SKG8xs0.js → c4Diagram-XDPPPE54-D5LqlgQv.js} +1 -1
  14. package/dist/web/assets/channel-orSWAKpM.js +1 -0
  15. package/dist/web/assets/{chunk-2E7WHVMD-DKJ1wh2S.js → chunk-2E7WHVMD-B3IGJNdw.js} +1 -1
  16. package/dist/web/assets/{chunk-4EMNKR2T-PBKuRxmO.js → chunk-4EMNKR2T-BgjUgjkP.js} +1 -1
  17. package/dist/web/assets/{chunk-55XCU76K-BN5ycMls.js → chunk-55XCU76K-CHhQ4xeY.js} +1 -1
  18. package/dist/web/assets/{chunk-7S6XSTFO-BnE9BV3z.js → chunk-7S6XSTFO-DEDigQhX.js} +1 -1
  19. package/dist/web/assets/{chunk-AQDTSKZB-CXxMu7od.js → chunk-AQDTSKZB-BwuU2cDy.js} +1 -1
  20. package/dist/web/assets/{chunk-DSNLSHJZ-DSyUCblo.js → chunk-DSNLSHJZ-DB7XInhk.js} +1 -1
  21. package/dist/web/assets/{chunk-HAGFOTED-vEUQMC1F.js → chunk-HAGFOTED-2Cr41Af7.js} +1 -1
  22. package/dist/web/assets/{chunk-HNE4Q36P-CA7WjVdM.js → chunk-HNE4Q36P-CvzyvtoB.js} +1 -1
  23. package/dist/web/assets/{chunk-NQOKRVIF-DJPo3Gf9.js → chunk-NQOKRVIF-CGQ1-ATq.js} +1 -1
  24. package/dist/web/assets/{chunk-UHW7PFBP-Cy4zklj0.js → chunk-UHW7PFBP-CoG6Kb83.js} +1 -1
  25. package/dist/web/assets/{chunk-VQ5W62QI-D3m_vRaB.js → chunk-VQ5W62QI-BNOV4R-O.js} +1 -1
  26. package/dist/web/assets/{chunk-WQQL4CDK-Ba7IKsOw.js → chunk-WQQL4CDK-CtxTw3mr.js} +1 -1
  27. package/dist/web/assets/{chunk-XXDRQBXY-CVDcSxTL.js → chunk-XXDRQBXY-EWt6CctM.js} +1 -1
  28. package/dist/web/assets/{chunk-YZO67HFG-epW0JVAg.js → chunk-YZO67HFG-CQ8iDSEo.js} +1 -1
  29. package/dist/web/assets/{chunk-ZAUX2LTX-D30rtT7T.js → chunk-ZAUX2LTX-CPEAUGD-.js} +1 -1
  30. package/dist/web/assets/{chunk-ZCHMQSOR-HWIWA24S.js → chunk-ZCHMQSOR-19krpltl.js} +1 -1
  31. package/dist/web/assets/{classDiagram-v2-4MYWR3UA-BSy018by.js → classDiagram-v2-4MYWR3UA-uIMIqNSn.js} +1 -1
  32. package/dist/web/assets/{cose-bilkent-JH36ORCC-oAI4jl3a.js → cose-bilkent-JH36ORCC-CBKC8uDS.js} +1 -1
  33. package/dist/web/assets/{cynefin-EF2NZ3EQ-CxRSSRgg.js → cynefin-EF2NZ3EQ-oaKF32Qm.js} +1 -1
  34. package/dist/web/assets/{cynefinDiagram-WF24UDRP-Cr3mbgtw.js → cynefinDiagram-WF24UDRP-DikhEODc.js} +1 -1
  35. package/dist/web/assets/{dagre-NK4GIZVX-DJh31dWL.js → dagre-NK4GIZVX-Dewaf2C2.js} +1 -1
  36. package/dist/web/assets/{diagram-CBK3MWTC-D_JKFL9J.js → diagram-CBK3MWTC-BjVtFJGq.js} +1 -1
  37. package/dist/web/assets/{diagram-I5XIIV2D-CXycn2p8.js → diagram-I5XIIV2D-DhAVVwn3.js} +1 -1
  38. package/dist/web/assets/{diagram-ODIL2UCW-pqzQvFsm.js → diagram-ODIL2UCW-Bkq6qdoF.js} +1 -1
  39. package/dist/web/assets/{diagram-PFBEJUXE-DKN78iIK.js → diagram-PFBEJUXE-D6zn-7Q5.js} +1 -1
  40. package/dist/web/assets/{diagram-RJA3I4VV-BktMEEqe.js → diagram-RJA3I4VV-DxhiuTXT.js} +1 -1
  41. package/dist/web/assets/{diagram-TYUNFSNR-CvZunAf5.js → diagram-TYUNFSNR-usUcGTk1.js} +1 -1
  42. package/dist/web/assets/{dist-BEsdoHQ6.js → dist-DmllBUmo.js} +1 -1
  43. package/dist/web/assets/{ebnfDiagram-V4P3TTPT-DN1Yx3_r.js → ebnfDiagram-V4P3TTPT-DkWP0CoH.js} +1 -1
  44. package/dist/web/assets/{elk-QONTBCTQ-BWZvBf2H.js → elk-QONTBCTQ-CtqZSgXk.js} +1 -1
  45. package/dist/web/assets/{erDiagram-KYQIGQAA-DgYnNron.js → erDiagram-KYQIGQAA-B6Gb27sC.js} +1 -1
  46. package/dist/web/assets/{eventmodeling-K75KTNOO-DiSp2xwj.js → eventmodeling-K75KTNOO-uVzgkY_P.js} +1 -1
  47. package/dist/web/assets/flowDiagram-IUGLLWBU-BdBVZhFW.js +1 -0
  48. package/dist/web/assets/{ganttDiagram-R7GPNTJY-D4CDbMTV.js → ganttDiagram-R7GPNTJY-CjjSaj_8.js} +1 -1
  49. package/dist/web/assets/{gitGraph-VSP46ZUC-BQVYCzIA.js → gitGraph-VSP46ZUC-C9_56PZI.js} +1 -1
  50. package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-BsOtIJTW.js → gitGraphDiagram-PDYL7XHY-BAoozuuI.js} +1 -1
  51. package/dist/web/assets/{index-SIecJyHZ.js → index-nALUOGLw.js} +3 -3
  52. package/dist/web/assets/{info-OHQRW6UA-CUGXJ1CV.js → info-OHQRW6UA-Cpmq_I2I.js} +1 -1
  53. package/dist/web/assets/{infoDiagram-MVDRKAX5-tieklKje.js → infoDiagram-MVDRKAX5-B0ltS8y6.js} +1 -1
  54. package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-COOWQVRz.js → ishikawaDiagram-HPEHV2GE-BLd6uzyw.js} +1 -1
  55. package/dist/web/assets/{journeyDiagram-BOSHW7O7-L_T7-U3t.js → journeyDiagram-BOSHW7O7-BW8TLGd2.js} +1 -1
  56. package/dist/web/assets/{kanban-definition-FNSA4HC5-CbRpCFvY.js → kanban-definition-FNSA4HC5-CMP4hD9I.js} +1 -1
  57. package/dist/web/assets/{line-Bb42pdM5.js → line-GU6Y0sVQ.js} +1 -1
  58. package/dist/web/assets/{linear-9DYoMZiB.js → linear-sJWCfLK9.js} +1 -1
  59. package/dist/web/assets/{mermaid-parser.core-B5_29lQW.js → mermaid-parser.core-B1hkQTG_.js} +3 -3
  60. package/dist/web/assets/{mermaid.core-CdQcLg-t.js → mermaid.core-CfGoqGMS.js} +4 -4
  61. package/dist/web/assets/{mindmap-definition-6OY57UG3-BpcR6YO8.js → mindmap-definition-6OY57UG3-CqZBW-e4.js} +1 -1
  62. package/dist/web/assets/{packet-JDAUHWVQ-BpkQGwHI.js → packet-JDAUHWVQ-C__ugQog.js} +1 -1
  63. package/dist/web/assets/{pegDiagram-ECIUJNBX-Xbxo4Jaj.js → pegDiagram-ECIUJNBX-CweRsMeQ.js} +1 -1
  64. package/dist/web/assets/{pie-XZMESJXO-BZmxceSr.js → pie-XZMESJXO-uG4onBei.js} +1 -1
  65. package/dist/web/assets/{pieDiagram-GNMPY74T-B-xctNcc.js → pieDiagram-GNMPY74T-wxPHT7V2.js} +1 -1
  66. package/dist/web/assets/{quadrantDiagram-D57K4MC3-C39GtX72.js → quadrantDiagram-D57K4MC3-B_OXXhgG.js} +1 -1
  67. package/dist/web/assets/{radar-ABXABTNO-BbdWjPQ_.js → radar-ABXABTNO-xD7Zm3YV.js} +1 -1
  68. package/dist/web/assets/{railroad-I3PHUGI6--DN_ZyKJ.js → railroad-I3PHUGI6-BlQbtB7w.js} +1 -1
  69. package/dist/web/assets/{railroad-abnf-LNEFI6M7-C7gVrKMy.js → railroad-abnf-LNEFI6M7-Jo8sYA0L.js} +1 -1
  70. package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-Cv-hyBOo.js → railroad-ebnf-DWYD2UWJ-DM45xslI.js} +1 -1
  71. package/dist/web/assets/{railroad-peg-JR7BVNR7-BCO9cgQQ.js → railroad-peg-JR7BVNR7-ByjPCS62.js} +1 -1
  72. package/dist/web/assets/{railroadDiagram-Y72NRBL7-vQnD14qF.js → railroadDiagram-Y72NRBL7-70L-z2Rp.js} +1 -1
  73. package/dist/web/assets/{requirementDiagram-EQYSW5RA-D_xvw1eO.js → requirementDiagram-EQYSW5RA-DS2ZSobv.js} +1 -1
  74. package/dist/web/assets/{sankeyDiagram-SY24JHO5-CVIjzUnH.js → sankeyDiagram-SY24JHO5-D45kBwmB.js} +1 -1
  75. package/dist/web/assets/{sequenceDiagram-BLEHNHQU-CUs4kHaJ.js → sequenceDiagram-BLEHNHQU-GcUSbwA3.js} +1 -1
  76. package/dist/web/assets/{src-CKlf5KwZ.js → src-DngSB9yt.js} +1 -1
  77. package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-DX_PUu5f.js → stateDiagram-v2-A6IESKWZ-nE9gEmGS.js} +1 -1
  78. package/dist/web/assets/{swimlanes-B3ENRKFQ-CY004jip.js → swimlanes-B3ENRKFQ-DI8yBa_2.js} +1 -1
  79. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-B0WPcCve.js +8 -0
  80. package/dist/web/assets/{timeline-definition-JXYKGLGB-BksNOGsI.js → timeline-definition-JXYKGLGB-vp4cb0bp.js} +1 -1
  81. package/dist/web/assets/{treeView-D4JQ5SDB-BtJCdW64.js → treeView-D4JQ5SDB-CjvXaBJ6.js} +1 -1
  82. package/dist/web/assets/{treemap-SAJKECNS-B4itgRCL.js → treemap-SAJKECNS-BtoPti-I.js} +1 -1
  83. package/dist/web/assets/{usecaseDiagram-WPOLBNNX-BBkZbYaT.js → usecaseDiagram-WPOLBNNX-CIksWRVE.js} +1 -1
  84. package/dist/web/assets/{vennDiagram-Q3Y3IDCW-_Jh_DtZv.js → vennDiagram-Q3Y3IDCW-BAYP4OrS.js} +1 -1
  85. package/dist/web/assets/{wardley-7MLQ67FV-BuFq0mXU.js → wardley-7MLQ67FV-4crbdNDq.js} +1 -1
  86. package/dist/web/assets/{wardleyDiagram-IVAIDKWA-zeNw8ZG-.js → wardleyDiagram-IVAIDKWA-BeWIvnug.js} +1 -1
  87. package/dist/web/assets/{xychartDiagram-4URNHDU4-BVhi1fUU.js → xychartDiagram-4URNHDU4-KshyMIqI.js} +1 -1
  88. package/dist/web/index.html +1 -1
  89. package/package.json +5 -5
  90. package/dist/web/assets/channel-DslwvvtO.js +0 -1
  91. package/dist/web/assets/flowDiagram-IUGLLWBU-wWAmHaAF.js +0 -1
  92. package/dist/web/assets/swimlanesDiagram-AYQRV4AK-DrqNUlds.js +0 -8
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/codex/thread-titles.ts"],
4
- "sourcesContent": ["import type { ClientRequest } from './generated/ClientRequest.js';\nimport type { ServerNotification } from './generated/ServerNotification.js';\nimport type { ConfigReadResponse } from './generated/v2/ConfigReadResponse.js';\nimport type { ThreadReadResponse } from './generated/v2/ThreadReadResponse.js';\nimport type { ThreadStartResponse } from './generated/v2/ThreadStartResponse.js';\nimport type { TurnStartResponse } from './generated/v2/TurnStartResponse.js';\nimport type { Turn } from './generated/v2/Turn.js';\nimport type { JsonValue } from './generated/serde_json/JsonValue.js';\nimport type { ThreadStartParams } from './generated/v2/ThreadStartParams.js';\nimport {\n parseTitle,\n selectTitleModel,\n titlePrompt,\n titleOutputSchema,\n TITLE_MODEL,\n TITLE_RESPONSE_MAX_BYTES,\n} from './thread-title-policy.js';\nimport { CodexError, isRecord, type RpcNotification, type RpcTransport } from './transport.js';\n\n// These experimental fields are omitted by the stable protocol generator.\n// Their shapes match the verified CLI 0.163.0 app-server protocol.\ntype TitleSource = ThreadStartResponse & {\n activePermissionProfile?: { id: string } | null;\n};\ntype TemporaryThreadParams = ThreadStartParams & {\n permissions?: string;\n runtimeWorkspaceRoots: [];\n environments: [];\n dynamicTools: [];\n selectedCapabilityRoots: [];\n};\ntype Job = {\n cancelled: boolean;\n threadId?: string;\n turnId?: string;\n terminal: boolean;\n output?: string;\n timer?: NodeJS.Timeout;\n finish: (turn: Turn | null) => void;\n};\ntype Responses = {\n 'config/read': ConfigReadResponse;\n 'thread/read': ThreadReadResponse;\n 'thread/start': TitleSource;\n 'turn/start': TurnStartResponse;\n 'thread/name/set': unknown;\n 'thread/unsubscribe': unknown;\n 'turn/interrupt': unknown;\n};\n\n/** Optional naming work, scoped to one transport lifetime and never exposed as a user task. */\nexport class ThreadTitles {\n private readonly candidates = new Map<string, TitleSource>();\n private readonly jobs = new Map<string, Job>();\n private readonly internal = new Map<string, Job | undefined>();\n private readonly manualNames = new Set<string>();\n private readonly nameWrites = new Map<string, Promise<unknown>>();\n private closed = false;\n private hasChatgptAccount = false;\n private models: string[] = [];\n\n constructor(\n private readonly rpc: RpcTransport,\n private readonly timeoutMs = 30_000,\n ) {\n rpc.once('failure', () => {\n this.closed = true;\n this.candidates.clear();\n for (const job of this.jobs.values()) this.cancel(job);\n this.internal.clear();\n });\n }\n\n configure(hasChatgptAccount: boolean, models: string[]): void {\n this.hasChatgptAccount = hasChatgptAccount;\n this.models = models;\n }\n\n register(result: TitleSource): void {\n if (\n !this.closed &&\n !this.manualNames.has(result.thread.id) &&\n !result.thread.name &&\n !result.thread.ephemeral\n )\n this.candidates.set(result.thread.id, { ...result, thread: { ...result.thread, turns: [] } });\n else this.candidates.delete(result.thread.id);\n }\n\n async prepareManualName(id: string): Promise<void> {\n this.manualNames.add(id);\n this.candidates.delete(id);\n const job = this.jobs.get(id);\n if (job) this.cancel(job);\n // A timeout does not cancel the upstream write. Retain that failure until a new\n // transport lifetime, rather than let a late generated title overwrite a manual name.\n await this.nameWrites.get(id);\n }\n\n private start(id: string, text: string): void {\n const candidate = this.candidates.get(id);\n // Retry only on a later user-message event, never while another attempt is pending.\n if (!candidate || this.closed || !text.trim() || this.jobs.has(id) || this.nameWrites.has(id))\n return;\n let finish!: Job['finish'];\n const completed = new Promise<Turn | null>((resolve) => {\n finish = resolve;\n });\n const job: Job = { cancelled: false, terminal: false, finish };\n this.jobs.set(id, job);\n this.armTimeout(job);\n void this.generate(id, text, candidate, job, completed)\n .catch(() => {\n /* Keep the upstream preview; naming must never fail the user's task. */\n })\n .finally(() => {\n clearTimeout(job.timer);\n this.jobs.delete(id);\n });\n }\n\n /** Called before ordinary event mapping, including notifications preceding RPC receipts. */\n notification(message: RpcNotification): boolean {\n const event = message as ServerNotification;\n if (event.method === 'thread/started' && event.params.thread.ephemeral) {\n // The notification can arrive before OR after thread/start's response.\n if (!this.internal.has(event.params.thread.id))\n this.internal.set(event.params.thread.id, undefined);\n return true;\n }\n const params = message.params;\n if (!isRecord(params) || typeof params.threadId !== 'string') return false;\n const id = params.threadId;\n if (this.internal.has(id)) {\n const job = this.internal.get(id);\n if (job && event.method === 'item/completed' && event.params.item.type === 'agentMessage') {\n if (Buffer.byteLength(event.params.item.text) > TITLE_RESPONSE_MAX_BYTES) this.cancel(job);\n else job.output = event.params.item.text;\n }\n if (job && (event.method === 'turn/started' || event.method === 'turn/completed')) {\n job.turnId = event.params.turn.id;\n if (event.method === 'turn/completed') {\n job.terminal = true;\n job.finish(event.params.turn);\n }\n }\n if (job && event.method === 'error' && !event.params.willRetry) this.cancel(job);\n if (event.method === 'thread/closed') this.internal.delete(id);\n return true;\n }\n if (event.method === 'thread/name/updated') {\n const source = this.candidates.get(id);\n if (source) source.thread.name = event.params.threadName ?? null;\n if (event.params.threadName) this.candidates.delete(id);\n const job = this.jobs.get(id);\n if (job) this.cancel(job);\n }\n if (event.method === 'thread/closed') this.candidates.delete(id);\n if (event.method === 'item/completed' && event.params.item.type === 'userMessage') {\n const text = event.params.item.content\n .flatMap((input) => {\n if (input.type !== 'text') return [];\n // CLI removes its IDE context wrapper before constructing the title prompt.\n return input.text.split('## My request for Codex:').at(-1)!.trim();\n })\n .join(' ');\n this.start(id, text);\n }\n return false;\n }\n\n isInternal(threadId: unknown): boolean {\n return typeof threadId === 'string' && this.internal.has(threadId);\n }\n\n private cancel(job: Job): void {\n job.cancelled = true;\n job.finish(null);\n }\n\n private armTimeout(job: Job): void {\n clearTimeout(job.timer);\n job.timer = setTimeout(() => this.cancel(job), this.timeoutMs);\n job.timer.unref();\n }\n\n private call<M extends keyof Responses>(\n method: M,\n params: Extract<ClientRequest, { method: M }>['params'],\n ): Promise<Responses[M]> {\n return this.rpc.request<Responses[M]>(method, params);\n }\n\n private async generate(\n id: string,\n text: string,\n source: TitleSource,\n job: Job,\n completed: Promise<Turn | null>,\n ): Promise<void> {\n try {\n const before = await this.call('thread/read', { threadId: id, includeTurns: false });\n if (job.cancelled || before.thread.id !== id) return;\n if (before.thread.name) {\n this.candidates.delete(id);\n return;\n }\n const model = selectTitleModel(\n before.thread.model ?? source.model,\n before.thread.modelProvider,\n this.hasChatgptAccount,\n this.models,\n );\n const profile = source.activePermissionProfile?.id;\n const permissions = profile && !profile.startsWith(':') ? profile : undefined;\n // Config reads may redact values to empty strings. Override only enabled flags,\n // never round-trip the returned server definitions (timeouts/credentials/etc.).\n // The filesystem sandbox does not constrain MCP tools.\n const { config } = await this.call('config/read', {\n cwd: before.thread.cwd,\n includeLayers: false,\n });\n if (job.cancelled) return;\n const overrides: Record<string, JsonValue> = {\n web_search: 'disabled',\n 'cloud.skills.enabled': false,\n 'skills.include_instructions': false,\n 'tools.experimental_request_user_input.enabled': false,\n 'tools.update_plan.enabled': false,\n mcp_servers: Object.fromEntries(\n Object.keys(isRecord(config.mcp_servers) ? config.mcp_servers : {}).map((name) => [\n name,\n { enabled: false },\n ]),\n ) as JsonValue,\n };\n for (const feature of [\n 'shell_tool',\n 'shell_snapshot',\n 'apps',\n 'plugins',\n 'hooks',\n 'multi_agent',\n 'goals',\n 'memories',\n 'browser_use',\n 'browser_use_external',\n 'computer_use',\n 'image_generation',\n 'code_mode',\n 'code_mode_only',\n 'context_management',\n 'current_time_reminder',\n 'deferred_executor',\n 'enable_fanout',\n 'multi_agent_v2',\n 'request_permissions_tool',\n 'standalone_web_search',\n 'token_budget',\n 'tool_suggest',\n 'unified_exec',\n 'view_image',\n ])\n overrides[`features.${feature}`] = false;\n if (!permissions) overrides.default_permissions = ':read-only';\n const params: TemporaryThreadParams = {\n cwd: before.thread.cwd,\n model,\n modelProvider: before.thread.modelProvider,\n ephemeral: true,\n threadSource: 'thread_title',\n ...(permissions ? { permissions } : { sandbox: 'read-only' }),\n runtimeWorkspaceRoots: [],\n environments: [],\n dynamicTools: [],\n selectedCapabilityRoots: [],\n config: overrides,\n };\n const generated = await this.call('thread/start', params);\n job.threadId = generated.thread.id;\n this.internal.set(job.threadId, job);\n if (job.cancelled) return;\n if (\n permissions\n ? generated.activePermissionProfile?.id !== permissions\n : generated.sandbox.type !== 'readOnly'\n )\n return;\n this.armTimeout(job);\n const { turn } = await this.call('turn/start', {\n threadId: job.threadId,\n input: [\n {\n type: 'text',\n text: titlePrompt(text),\n text_elements: [],\n },\n ],\n ...(model === TITLE_MODEL ? { effort: 'low' } : {}),\n outputSchema: titleOutputSchema,\n });\n job.turnId = turn.id;\n if (turn.status !== 'inProgress') {\n job.terminal = true;\n job.finish(turn);\n }\n const result = await completed;\n clearTimeout(job.timer);\n if (job.cancelled || result?.status !== 'completed') return;\n const output =\n result.items.filter((item) => item.type === 'agentMessage').at(-1)?.text ?? job.output;\n const title = output ? parseTitle(output) : undefined;\n if (!title) return;\n // An explicit name always wins, including one set while inference was running.\n const latest = await this.call('thread/read', { threadId: id, includeTurns: false });\n if (job.cancelled || latest.thread.id !== id || latest.thread.name) return;\n const write = this.call('thread/name/set', { threadId: id, name: title });\n this.nameWrites.set(id, write);\n void write.then(\n () => this.nameWrites.delete(id),\n (error: unknown) => {\n if (error instanceof CodexError && !error.uncertain) this.nameWrites.delete(id);\n },\n );\n await write;\n this.candidates.delete(id);\n } finally {\n if (job.threadId && !this.closed) {\n if (job.turnId && !job.terminal)\n await this.call('turn/interrupt', { threadId: job.threadId, turnId: job.turnId }).catch(\n () => {},\n );\n await this.call('thread/unsubscribe', { threadId: job.threadId }).catch(() => {});\n // Retain the ID until thread/closed so late notifications cannot leak into the UI.\n if (this.internal.has(job.threadId)) this.internal.set(job.threadId, undefined);\n }\n }\n }\n}\n"],
4
+ "sourcesContent": ["import type { ClientRequest } from './generated/ClientRequest.js';\nimport type { ServerNotification } from './generated/ServerNotification.js';\nimport type { ConfigReadResponse } from './generated/v2/ConfigReadResponse.js';\nimport type { ThreadReadResponse } from './generated/v2/ThreadReadResponse.js';\nimport type { ThreadStartResponse } from './generated/v2/ThreadStartResponse.js';\nimport type { TurnStartResponse } from './generated/v2/TurnStartResponse.js';\nimport type { Turn } from './generated/v2/Turn.js';\nimport type { JsonValue } from './generated/serde_json/JsonValue.js';\nimport type { ThreadStartParams } from './generated/v2/ThreadStartParams.js';\nimport {\n parseTitle,\n selectTitleModel,\n titlePrompt,\n titleOutputSchema,\n TITLE_MODEL,\n TITLE_RESPONSE_MAX_BYTES,\n} from './thread-title-policy.js';\nimport { CodexError, isRecord, type RpcNotification, type RpcTransport } from './transport.js';\n\n// These experimental fields are omitted by the stable protocol generator.\n// Their shapes match the verified CLI 0.164.0 app-server protocol.\ntype TitleSource = ThreadStartResponse & {\n activePermissionProfile?: { id: string } | null;\n};\ntype TemporaryThreadParams = ThreadStartParams & {\n permissions?: string;\n runtimeWorkspaceRoots: [];\n environments: [];\n dynamicTools: [];\n selectedCapabilityRoots: [];\n};\ntype Job = {\n cancelled: boolean;\n threadId?: string;\n turnId?: string;\n terminal: boolean;\n output?: string;\n timer?: NodeJS.Timeout;\n finish: (turn: Turn | null) => void;\n};\ntype Responses = {\n 'config/read': ConfigReadResponse;\n 'thread/read': ThreadReadResponse;\n 'thread/start': TitleSource;\n 'turn/start': TurnStartResponse;\n 'thread/name/set': unknown;\n 'thread/unsubscribe': unknown;\n 'turn/interrupt': unknown;\n};\n\n/** Optional naming work, scoped to one transport lifetime and never exposed as a user task. */\nexport class ThreadTitles {\n private readonly candidates = new Map<string, TitleSource>();\n private readonly jobs = new Map<string, Job>();\n private readonly internal = new Map<string, Job | undefined>();\n private readonly manualNames = new Set<string>();\n private readonly nameWrites = new Map<string, Promise<unknown>>();\n private closed = false;\n private hasChatgptAccount = false;\n private models: string[] = [];\n\n constructor(\n private readonly rpc: RpcTransport,\n private readonly timeoutMs = 30_000,\n ) {\n rpc.once('failure', () => {\n this.closed = true;\n this.candidates.clear();\n for (const job of this.jobs.values()) this.cancel(job);\n this.internal.clear();\n });\n }\n\n configure(hasChatgptAccount: boolean, models: string[]): void {\n this.hasChatgptAccount = hasChatgptAccount;\n this.models = models;\n }\n\n register(result: TitleSource): void {\n if (\n !this.closed &&\n !this.manualNames.has(result.thread.id) &&\n !result.thread.name &&\n !result.thread.ephemeral\n )\n this.candidates.set(result.thread.id, { ...result, thread: { ...result.thread, turns: [] } });\n else this.candidates.delete(result.thread.id);\n }\n\n async prepareManualName(id: string): Promise<void> {\n this.manualNames.add(id);\n this.candidates.delete(id);\n const job = this.jobs.get(id);\n if (job) this.cancel(job);\n // A timeout does not cancel the upstream write. Retain that failure until a new\n // transport lifetime, rather than let a late generated title overwrite a manual name.\n await this.nameWrites.get(id);\n }\n\n private start(id: string, text: string): void {\n const candidate = this.candidates.get(id);\n // Retry only on a later user-message event, never while another attempt is pending.\n if (!candidate || this.closed || !text.trim() || this.jobs.has(id) || this.nameWrites.has(id))\n return;\n let finish!: Job['finish'];\n const completed = new Promise<Turn | null>((resolve) => {\n finish = resolve;\n });\n const job: Job = { cancelled: false, terminal: false, finish };\n this.jobs.set(id, job);\n this.armTimeout(job);\n void this.generate(id, text, candidate, job, completed)\n .catch(() => {\n /* Keep the upstream preview; naming must never fail the user's task. */\n })\n .finally(() => {\n clearTimeout(job.timer);\n this.jobs.delete(id);\n });\n }\n\n /** Called before ordinary event mapping, including notifications preceding RPC receipts. */\n notification(message: RpcNotification): boolean {\n const event = message as ServerNotification;\n if (event.method === 'thread/started' && event.params.thread.ephemeral) {\n // The notification can arrive before OR after thread/start's response.\n if (!this.internal.has(event.params.thread.id))\n this.internal.set(event.params.thread.id, undefined);\n return true;\n }\n const params = message.params;\n if (!isRecord(params) || typeof params.threadId !== 'string') return false;\n const id = params.threadId;\n if (this.internal.has(id)) {\n const job = this.internal.get(id);\n if (job && event.method === 'item/completed' && event.params.item.type === 'agentMessage') {\n if (Buffer.byteLength(event.params.item.text) > TITLE_RESPONSE_MAX_BYTES) this.cancel(job);\n else job.output = event.params.item.text;\n }\n if (job && (event.method === 'turn/started' || event.method === 'turn/completed')) {\n job.turnId = event.params.turn.id;\n if (event.method === 'turn/completed') {\n job.terminal = true;\n job.finish(event.params.turn);\n }\n }\n if (job && event.method === 'error' && !event.params.willRetry) this.cancel(job);\n if (event.method === 'thread/closed') this.internal.delete(id);\n return true;\n }\n if (event.method === 'thread/name/updated') {\n const source = this.candidates.get(id);\n if (source) source.thread.name = event.params.threadName ?? null;\n if (event.params.threadName) this.candidates.delete(id);\n const job = this.jobs.get(id);\n if (job) this.cancel(job);\n }\n if (event.method === 'thread/closed') this.candidates.delete(id);\n if (event.method === 'item/completed' && event.params.item.type === 'userMessage') {\n const text = event.params.item.content\n .flatMap((input) => {\n if (input.type !== 'text') return [];\n // CLI removes its IDE context wrapper before constructing the title prompt.\n return input.text.split('## My request for Codex:').at(-1)!.trim();\n })\n .join(' ');\n this.start(id, text);\n }\n return false;\n }\n\n isInternal(threadId: unknown): boolean {\n return typeof threadId === 'string' && this.internal.has(threadId);\n }\n\n private cancel(job: Job): void {\n job.cancelled = true;\n job.finish(null);\n }\n\n private armTimeout(job: Job): void {\n clearTimeout(job.timer);\n job.timer = setTimeout(() => this.cancel(job), this.timeoutMs);\n job.timer.unref();\n }\n\n private call<M extends keyof Responses>(\n method: M,\n params: Extract<ClientRequest, { method: M }>['params'],\n ): Promise<Responses[M]> {\n return this.rpc.request<Responses[M]>(method, params);\n }\n\n private async generate(\n id: string,\n text: string,\n source: TitleSource,\n job: Job,\n completed: Promise<Turn | null>,\n ): Promise<void> {\n try {\n const before = await this.call('thread/read', { threadId: id, includeTurns: false });\n if (job.cancelled || before.thread.id !== id) return;\n if (before.thread.name) {\n this.candidates.delete(id);\n return;\n }\n const model = selectTitleModel(\n before.thread.model ?? source.model,\n before.thread.modelProvider,\n this.hasChatgptAccount,\n this.models,\n );\n const profile = source.activePermissionProfile?.id;\n const permissions = profile && !profile.startsWith(':') ? profile : undefined;\n // Config reads may redact values to empty strings. Override only enabled flags,\n // never round-trip the returned server definitions (timeouts/credentials/etc.).\n // The filesystem sandbox does not constrain MCP tools.\n const { config } = await this.call('config/read', {\n cwd: before.thread.cwd,\n includeLayers: false,\n });\n if (job.cancelled) return;\n const overrides: Record<string, JsonValue> = {\n web_search: 'disabled',\n 'cloud.skills.enabled': false,\n 'skills.include_instructions': false,\n 'tools.experimental_request_user_input.enabled': false,\n 'tools.update_plan.enabled': false,\n mcp_servers: Object.fromEntries(\n Object.keys(isRecord(config.mcp_servers) ? config.mcp_servers : {}).map((name) => [\n name,\n { enabled: false },\n ]),\n ) as JsonValue,\n };\n for (const feature of [\n 'shell_tool',\n 'shell_snapshot',\n 'apps',\n 'plugins',\n 'hooks',\n 'multi_agent',\n 'goals',\n 'memories',\n 'browser_use',\n 'browser_use_external',\n 'computer_use',\n 'image_generation',\n 'code_mode',\n 'code_mode_only',\n 'context_management',\n 'current_time_reminder',\n 'deferred_executor',\n 'enable_fanout',\n 'multi_agent_v2',\n 'request_permissions_tool',\n 'standalone_web_search',\n 'token_budget',\n 'tool_suggest',\n 'unified_exec',\n 'view_image',\n ])\n overrides[`features.${feature}`] = false;\n if (!permissions) overrides.default_permissions = ':read-only';\n const params: TemporaryThreadParams = {\n cwd: before.thread.cwd,\n model,\n modelProvider: before.thread.modelProvider,\n ephemeral: true,\n threadSource: 'thread_title',\n ...(permissions ? { permissions } : { sandbox: 'read-only' }),\n runtimeWorkspaceRoots: [],\n environments: [],\n dynamicTools: [],\n selectedCapabilityRoots: [],\n config: overrides,\n };\n const generated = await this.call('thread/start', params);\n job.threadId = generated.thread.id;\n this.internal.set(job.threadId, job);\n if (job.cancelled) return;\n if (\n permissions\n ? generated.activePermissionProfile?.id !== permissions\n : generated.sandbox.type !== 'readOnly'\n )\n return;\n this.armTimeout(job);\n const { turn } = await this.call('turn/start', {\n threadId: job.threadId,\n input: [\n {\n type: 'text',\n text: titlePrompt(text),\n text_elements: [],\n },\n ],\n ...(model === TITLE_MODEL ? { effort: 'low' } : {}),\n outputSchema: titleOutputSchema,\n });\n job.turnId = turn.id;\n if (turn.status !== 'inProgress') {\n job.terminal = true;\n job.finish(turn);\n }\n const result = await completed;\n clearTimeout(job.timer);\n if (job.cancelled || result?.status !== 'completed') return;\n const output =\n result.items.filter((item) => item.type === 'agentMessage').at(-1)?.text ?? job.output;\n const title = output ? parseTitle(output) : undefined;\n if (!title) return;\n // An explicit name always wins, including one set while inference was running.\n const latest = await this.call('thread/read', { threadId: id, includeTurns: false });\n if (job.cancelled || latest.thread.id !== id || latest.thread.name) return;\n const write = this.call('thread/name/set', { threadId: id, name: title });\n this.nameWrites.set(id, write);\n void write.then(\n () => this.nameWrites.delete(id),\n (error: unknown) => {\n if (error instanceof CodexError && !error.uncertain) this.nameWrites.delete(id);\n },\n );\n await write;\n this.candidates.delete(id);\n } finally {\n if (job.threadId && !this.closed) {\n if (job.turnId && !job.terminal)\n await this.call('turn/interrupt', { threadId: job.threadId, turnId: job.turnId }).catch(\n () => {},\n );\n await this.call('thread/unsubscribe', { threadId: job.threadId }).catch(() => {});\n // Retain the ID until thread/closed so late notifications cannot leak into the UI.\n if (this.internal.has(job.threadId)) this.internal.set(job.threadId, undefined);\n }\n }\n }\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- import{m as e,t}from"./mermaid-parser.core-B5_29lQW.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-CKlf5KwZ.js";import"./chunk-DSNLSHJZ-DSyUCblo.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-DKJ1wh2S.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-CdQcLg-t.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-B1hkQTG_.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DngSB9yt.js";import"./chunk-DSNLSHJZ-DB7XInhk.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-B3IGJNdw.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-CfGoqGMS.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-BEsdoHQ6.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-DmllBUmo.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-B5_29lQW.js";
1
+ import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-B1hkQTG_.js";