@covro/covro 0.3.1-dev.1 → 0.3.1-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -8
- package/README.zh-CN.md +10 -8
- package/dist/drizzle/0006_project_order.sql +8 -0
- package/dist/drizzle/meta/0006_snapshot.json +488 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/server/db/schema.js +1 -0
- package/dist/server/db/schema.js.map +2 -2
- package/dist/server/http.js +10 -0
- package/dist/server/http.js.map +2 -2
- package/dist/server/projects.js +48 -5
- package/dist/server/projects.js.map +2 -2
- package/dist/server/service.js +5 -0
- package/dist/server/service.js.map +2 -2
- package/dist/shared/updates.js.map +2 -2
- package/dist/shared/validation.js +2 -0
- package/dist/shared/validation.js.map +2 -2
- package/dist/update-worker.cjs +4 -3
- package/dist/updates/manager.js +7 -4
- package/dist/updates/manager.js.map +2 -2
- package/dist/updates/registry.js +21 -9
- package/dist/updates/registry.js.map +3 -3
- package/dist/updates/worker.js +3 -3
- package/dist/updates/worker.js.map +2 -2
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-DLvlob5t.js → abnfDiagram-WEYOIA3C-BFmMm05x.js} +1 -1
- package/dist/web/assets/{arc-DgauwgFe.js → arc-lnrGH4K4.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DvjLv0QN.js → architecture-WOLXFQ4H-CDbpw3av.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-BAyZGlzu.js → architectureDiagram-ZHVYKT53-Br4uXjzV.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-BVfkmjlt.js → blockDiagram-RJAE7QA3-2cto1XrH.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-rTsfyMoB.js → c4Diagram-XDPPPE54-pPOONSo8.js} +1 -1
- package/dist/web/assets/channel-D_YOL9S0.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-CQ_N_vLS.js → chunk-2E7WHVMD-CqOBPcBj.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-wBy_gyo6.js → chunk-4EMNKR2T-BvMm1kcN.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-DYiwIhmI.js → chunk-55XCU76K-CojzCeCA.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-CRGtfVHg.js → chunk-7S6XSTFO-wa76hIsr.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-1G2Za6bm.js → chunk-AQDTSKZB-tD5bFGjM.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-B1LLoYuG.js → chunk-DSNLSHJZ-ByVh88M0.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-78h1RpHh.js → chunk-HAGFOTED-BhOQL-iG.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-DmR5B27Q.js → chunk-HNE4Q36P-BZiD7Dq0.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-D7WSEPzg.js → chunk-NQOKRVIF-DhSSkcDm.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-gl7a5V-l.js → chunk-UHW7PFBP-BONg0JLM.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-KaBXxBre.js → chunk-VQ5W62QI-CehpDQpX.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-DDczFoOr.js → chunk-WQQL4CDK-C4Cm0U7u.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-3ug4Qhxg.js → chunk-XXDRQBXY-Ddcg44F2.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-BpWOuCXP.js → chunk-YZO67HFG-CJYc1t5Y.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-1ojPb1if.js → chunk-ZAUX2LTX-BeF7PiBe.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-D2kK2cPj.js → chunk-ZCHMQSOR-BzxdttZQ.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-B7eMvxAO.js → classDiagram-v2-4MYWR3UA-XeRozDII.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BtB8mbt8.js → cose-bilkent-JH36ORCC-zvgm5h82.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-CIctqxlE.js → cynefin-EF2NZ3EQ-DffawypB.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-qat2GD9P.js → cynefinDiagram-WF24UDRP-e2kk_Xg4.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-OJamzzID.js → dagre-NK4GIZVX-DPTt7HIR.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-C7cX2tqO.js → diagram-CBK3MWTC-CKQPukdf.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-DsMfKVN7.js → diagram-I5XIIV2D-CBI_lUfl.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-Cz66FxdJ.js → diagram-ODIL2UCW-DXuDuOob.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-CwhPuwKj.js → diagram-PFBEJUXE-C9Y1lchY.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-C52IGiFJ.js → diagram-RJA3I4VV-CbcN7pHo.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-C2LZVLKY.js → diagram-TYUNFSNR-D_MmDJKc.js} +1 -1
- package/dist/web/assets/{dist-Bxu8YbZb.js → dist-C-d_G2FS.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-eQKKlMli.js → ebnfDiagram-V4P3TTPT-CIlDI7Ps.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-C5kIOZTA.js → elk-QONTBCTQ-BrywoKK7.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CMTowz5P.js → erDiagram-KYQIGQAA-CKg6BT7V.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-C5v-UF8X.js → eventmodeling-K75KTNOO-BkwvMA16.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-DTkRetsK.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-B0viiC-b.js → ganttDiagram-R7GPNTJY-DR_AlXXn.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-tEjFmPhN.js → gitGraph-VSP46ZUC-Cv1cefI5.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-CsOwt7jz.js → gitGraphDiagram-PDYL7XHY-D_prlvP9.js} +1 -1
- package/dist/web/assets/index-Br54jmas.js +147 -0
- package/dist/web/assets/index-Crq1cgK9.css +1 -0
- package/dist/web/assets/{info-OHQRW6UA-DnFGu4Ew.js → info-OHQRW6UA--i-b1e1W.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-B6WiNaDF.js → infoDiagram-MVDRKAX5-D5xGvRSb.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-Dn70fI1r.js → ishikawaDiagram-HPEHV2GE-CdDzjaNo.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-BUjYzV2f.js → journeyDiagram-BOSHW7O7-DYXkvOgG.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-BDMfWbtB.js → kanban-definition-FNSA4HC5-DMRrVeRI.js} +1 -1
- package/dist/web/assets/{line-DNSRZHBK.js → line-IKuSdaT6.js} +1 -1
- package/dist/web/assets/{linear-CrS49q6J.js → linear-DG-Bn7df.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DXuyO8Px.js → mermaid-parser.core-Cr4hqI31.js} +3 -3
- package/dist/web/assets/{mermaid.core-DUTnbQkq.js → mermaid.core-Ch6ggfwZ.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CqZTtItJ.js → mindmap-definition-6OY57UG3-BLIFHye9.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-DXEZgY0a.js → packet-JDAUHWVQ-BaBw3Vck.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-D6CCPNem.js → pegDiagram-ECIUJNBX-BgFAs43s.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-AXRFjZ4G.js → pie-XZMESJXO-Dr-clP68.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-B9Ss8_5s.js → pieDiagram-GNMPY74T-bQ1SwzEf.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-JrlylCtz.js → quadrantDiagram-D57K4MC3-suHq6vLw.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-ChFm4hZg.js → radar-ABXABTNO-Cd4Nn-aB.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-DaXXzqhZ.js → railroad-I3PHUGI6-BEUNjieA.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-DGE67q11.js → railroad-abnf-LNEFI6M7-DosoD9le.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-Cq9S3q72.js → railroad-ebnf-DWYD2UWJ-CNykm4Du.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-D2Gth3eY.js → railroad-peg-JR7BVNR7-C97ZuCXG.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-BpkXX59H.js → railroadDiagram-Y72NRBL7-B1BnvTWP.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-oNp3DMM4.js → requirementDiagram-EQYSW5RA-CrlURwLY.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-bHfheSKO.js → sankeyDiagram-SY24JHO5-CEYWGGec.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-CEM2XfNF.js → sequenceDiagram-BLEHNHQU-CbUEnXPs.js} +1 -1
- package/dist/web/assets/{src-KjMctvzy.js → src-Dy1r7Mij.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-D_TaR_ix.js → stateDiagram-v2-A6IESKWZ-DkxgX1jY.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-BUYl2fsg.js → swimlanes-B3ENRKFQ-B7RmFqNN.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-C0XU1o_x.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-CpKsGN6d.js → timeline-definition-JXYKGLGB-DdaRshUD.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-Dioaagqt.js → treeView-D4JQ5SDB-UjtdDBri.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-B8NLQ14o.js → treemap-SAJKECNS-CfFPhlAU.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-CfwdxcsG.js → usecaseDiagram-WPOLBNNX-DpibMf1h.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-DQoKGtXo.js → vennDiagram-Q3Y3IDCW-DB_R8qT1.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-DQHLHmeZ.js → wardley-7MLQ67FV-Bhatoa5s.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-DV-lq7zb.js → wardleyDiagram-IVAIDKWA-DBhy_JBR.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-wV4ueoGC.js → xychartDiagram-4URNHDU4-C2oV2jkE.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +4 -4
- package/dist/web/assets/channel-GGfPocHk.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-C-jE8afx.js +0 -1
- package/dist/web/assets/index-COSho7m2.css +0 -1
- package/dist/web/assets/index-D7GZPtTj.js +0 -147
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-DDLmyR4x.js +0 -8
|
@@ -11,6 +11,7 @@ const cloneProjectSchema = createProjectSchema.extend({
|
|
|
11
11
|
repository: z.string().trim().min(1).max(4096)
|
|
12
12
|
});
|
|
13
13
|
const removeProjectSchema = z.object({}).strict();
|
|
14
|
+
const reorderProjectsSchema = z.object({ projectIds: z.array(idSchema).refine((ids) => new Set(ids).size === ids.length) }).strict();
|
|
14
15
|
const settingsSchema = z.object({
|
|
15
16
|
model: z.string().min(1).max(200).optional(),
|
|
16
17
|
reasoningEffort: z.string().min(1).max(40).optional(),
|
|
@@ -108,6 +109,7 @@ export {
|
|
|
108
109
|
removeProjectSchema,
|
|
109
110
|
renameProjectSchema,
|
|
110
111
|
renameThreadSchema,
|
|
112
|
+
reorderProjectsSchema,
|
|
111
113
|
resolveActionSchema,
|
|
112
114
|
resumeThreadSchema,
|
|
113
115
|
saveModelDefaultsSchema,
|
|
@@ -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 settingsSchema = z\n .object({\n model: z.string().min(1).max(200).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 startReviewSchema = operationSchema;\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 })\n .refine(hasContent, 'Text or an image is required');\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const interruptSchema = operationSchema.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 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 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 startReviewSchema = operationSchema;\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 })\n .refine(hasContent, 'Text or an image is required');\nexport const steerSchema = operationSchema\n .extend({\n expectedTurnId: idSchema,\n ...taskFields,\n })\n .refine(hasContent, 'Text or an image is required');\nexport const interruptSchema = operationSchema.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 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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/update-worker.cjs
CHANGED
|
@@ -22421,6 +22421,7 @@ var releaseSchema = external_exports.object({
|
|
|
22421
22421
|
name: external_exports.literal(npmPackageName),
|
|
22422
22422
|
version: external_exports.string().refine(validVersion),
|
|
22423
22423
|
gitHead: external_exports.string().optional(),
|
|
22424
|
+
covroCommit: external_exports.string().optional(),
|
|
22424
22425
|
covroCodex: external_exports.unknown().optional()
|
|
22425
22426
|
});
|
|
22426
22427
|
async function inspectInstallation(root) {
|
|
@@ -22648,11 +22649,11 @@ async function worker(directory) {
|
|
|
22648
22649
|
],
|
|
22649
22650
|
{ timeout: 10 * 6e4, maxBuffer: 2 * 1024 * 1024 }
|
|
22650
22651
|
);
|
|
22651
|
-
const candidate = await readJson(
|
|
22652
|
-
(0, import_node_path11.join)(paths.candidate, "package.json")
|
|
22653
|
-
);
|
|
22652
|
+
const candidate = await readJson((0, import_node_path11.join)(paths.candidate, "package.json"));
|
|
22654
22653
|
if (candidate?.name !== npmPackageName || candidate.version !== record2.target)
|
|
22655
22654
|
throw new Error("\u5019\u9009\u5305\u8EAB\u4EFD\u6216\u7248\u672C\u4E0D\u5339\u914D");
|
|
22655
|
+
if (record2.commit && (candidate.covroCommit ?? candidate.gitHead) !== record2.commit)
|
|
22656
|
+
throw new Error("\u5019\u9009\u5305\u6E90\u7801\u63D0\u4EA4\u4E0E\u68C0\u67E5\u65F6\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u5207\u6362");
|
|
22656
22657
|
if (!record2.codex) throw new Error("\u7F3A\u5C11 Codex \u5347\u7EA7\u6821\u9A8C\u8BB0\u5F55\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0");
|
|
22657
22658
|
const manifest = codexCompatibilitySchema.parse(candidate.covroCodex);
|
|
22658
22659
|
if (JSON.stringify(manifest) !== JSON.stringify(record2.codex.manifest))
|
package/dist/updates/manager.js
CHANGED
|
@@ -87,8 +87,9 @@ class UpdateManager {
|
|
|
87
87
|
const release = await lookupRelease(channel, this.network.signal);
|
|
88
88
|
this.available = {
|
|
89
89
|
version: release.version,
|
|
90
|
-
channel,
|
|
91
|
-
|
|
90
|
+
requestedChannel: channel,
|
|
91
|
+
channel: release.channel,
|
|
92
|
+
commit: release.covroCommit ?? release.gitHead,
|
|
92
93
|
downgrade: compareVersions(release.version, packageInfo.version) < 0,
|
|
93
94
|
codex: assessCodexCompatibility(release.covroCodex, this.codexVersion())
|
|
94
95
|
};
|
|
@@ -183,7 +184,7 @@ class UpdateManager {
|
|
|
183
184
|
"\u76EE\u6807\u7248\u672C\u8F83\u65E7\uFF0C\u9700\u8981\u660E\u786E\u5141\u8BB8\u964D\u7EA7\uFF1B\u4ECD\u5C06\u68C0\u67E5\u6570\u636E\u5E93\u517C\u5BB9\u6027\u3002",
|
|
184
185
|
409
|
|
185
186
|
);
|
|
186
|
-
if (checked.available.version
|
|
187
|
+
if (compareVersions(checked.available.version, packageInfo.version) === 0) {
|
|
187
188
|
return this.configure({ ...this.settings, channel });
|
|
188
189
|
}
|
|
189
190
|
const confirmation = request.codexConfirmation;
|
|
@@ -207,6 +208,8 @@ class UpdateManager {
|
|
|
207
208
|
from: packageInfo.version,
|
|
208
209
|
target: checked.available.version,
|
|
209
210
|
channel,
|
|
211
|
+
sourceChannel: checked.available.channel,
|
|
212
|
+
commit: checked.available.commit,
|
|
210
213
|
codex: { version: codex.version, manifest: codex.manifest, confirmedUnverified },
|
|
211
214
|
phase: "installing",
|
|
212
215
|
message: "\u6B63\u5728\u5B89\u88C5\u5019\u9009 npm \u5305",
|
|
@@ -292,7 +295,7 @@ class UpdateManager {
|
|
|
292
295
|
if (!this.context || this.reason || this.checking) return;
|
|
293
296
|
this.checking = (async () => {
|
|
294
297
|
const result = await this.check();
|
|
295
|
-
if (this.settings.automatic && result.available && result.available.codex.status === "verified" && !result.available.downgrade && result.available.version
|
|
298
|
+
if (this.settings.automatic && result.available && result.available.codex.status === "verified" && !result.available.downgrade && compareVersions(result.available.version, packageInfo.version) > 0 && result.run?.target !== result.available.version && !updateActive(result.run))
|
|
296
299
|
return this.start({ clientOperationId: crypto.randomUUID() });
|
|
297
300
|
return result;
|
|
298
301
|
})();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/updates/manager.ts"],
|
|
4
|
-
"sourcesContent": ["import { CODEX_COMPATIBILITY } from '../codex/compatibility.js';\nimport {\n assessCodexCompatibility,\n requireCodexCompatibility,\n} from '../shared/codex-compatibility.js';\nimport { createHash } from 'node:crypto';\nimport { spawn } from 'node:child_process';\nimport { copyFile, mkdir, open } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport lockfile from 'proper-lockfile';\nimport { z } from 'zod';\nimport { AppError } from '../shared/errors.js';\nimport {\n releaseChannels,\n updateActive,\n type UpdateController,\n type UpdateSettings,\n type UpdateRun,\n type UpdateStatus,\n type ReleaseChannel,\n} from '../shared/updates.js';\nimport { packageInfo, packageRoot, type CovroPaths } from '../cli/paths.js';\nimport { readJson, saveJson } from './files.js';\nimport { compareVersions, inspectInstallation, lookupRelease } from './registry.js';\n\nexport const settingsSchema = z\n .object({ channel: z.enum(releaseChannels), automatic: z.boolean() })\n .strict();\nexport const updateRequestSchema = z\n .object({\n clientOperationId: z.uuid(),\n channel: z.enum(releaseChannels).optional(),\n allowDowngrade: z.boolean().optional(),\n codexConfirmation: z\n .object({ version: z.string().max(128), target: z.string().max(128) })\n .strict()\n .optional(),\n })\n .strict();\nexport interface UpdateContext {\n location: CovroPaths;\n dataDir: string;\n root: string;\n directory: string;\n}\nexport class UpdateManager implements UpdateController {\n private settings: UpdateSettings = {\n channel:\n packageInfo.covroChannel ??\n (packageInfo.version?.includes('-dev.')\n ? 'dev'\n : packageInfo.version?.includes('-beta.')\n ? 'beta'\n : 'stable'),\n automatic: false,\n };\n private available?: UpdateStatus['available'];\n private checkedAt?: number;\n private checkError?: string;\n private reason = '\u5F53\u524D\u670D\u52A1\u672A\u901A\u8FC7 covro \u542F\u52A8\uFF0C\u7F51\u9875\u4EC5\u652F\u6301\u7248\u672C\u68C0\u6D4B\uFF1B\u5347\u7EA7\u8BF7\u4F7F\u7528\u539F\u90E8\u7F72\u65B9\u5F0F\u3002';\n private timer?: ReturnType<typeof setInterval>;\n private checking?: Promise<UpdateStatus>;\n private readonly network = new AbortController();\n readonly context?: UpdateContext;\n constructor(\n location?: CovroPaths,\n dataDir?: string,\n private readonly codexVersion: () => string | null = () => null,\n ) {\n if (location && dataDir)\n this.context = {\n location,\n dataDir,\n root: packageRoot,\n directory: join(\n location.home,\n 'updates',\n createHash('sha256').update(packageRoot).digest('hex').slice(0, 16),\n ),\n };\n }\n async initialize() {\n if (!this.context) return;\n const saved = await readJson<unknown>(join(this.context.directory, 'settings.json'));\n if (saved !== undefined) this.settings = settingsSchema.parse(saved);\n this.reason =\n process.platform === 'win32'\n ? 'Windows \u6682\u4E0D\u652F\u6301\u53D7\u7BA1\u81EA\u52A8\u5347\u7EA7\uFF0C\u8BF7\u4F7F\u7528 npm \u66F4\u65B0\u5E76\u91CD\u542F\u3002'\n : ((await inspectInstallation(this.context.root)) ?? '');\n this.timer = setInterval(() => void this.automatic().catch(() => {}), 30 * 60_000);\n this.timer.unref();\n // No network request in the startup critical path.\n void this.automatic().catch(() => {});\n }\n async status(): Promise<UpdateStatus> {\n const run = this.context\n ? await readJson<UpdateRun>(join(this.context.directory, 'run.json'))\n : undefined;\n return {\n version: packageInfo.version ?? 'unknown',\n commit: packageInfo.covroCommit,\n source: 'npm',\n codex: assessCodexCompatibility(CODEX_COMPATIBILITY, this.codexVersion()),\n settings: this.settings,\n supported: !this.reason,\n unsupportedReason: this.reason || undefined,\n available: this.available\n ? {\n ...this.available,\n codex: assessCodexCompatibility(this.available.codex.manifest, this.codexVersion()),\n }\n : undefined,\n checkedAt: this.checkedAt,\n checkError: this.checkError,\n run,\n };\n }\n async check(channel: ReleaseChannel = this.settings.channel) {\n try {\n const release = await lookupRelease(channel, this.network.signal);\n this.available = {\n version: release.version,\n channel,\n commit: release.gitHead,\n downgrade: compareVersions(release.version, packageInfo.version) < 0,\n codex: assessCodexCompatibility(release.covroCodex, this.codexVersion()),\n };\n this.checkError = undefined;\n } catch (error) {\n this.available = undefined;\n this.checkError = error instanceof Error ? error.message : '\u65E0\u6CD5\u68C0\u67E5\u66F4\u65B0';\n }\n this.checkedAt = Date.now();\n return this.status();\n }\n async configure(input: UpdateSettings) {\n if (!this.context || this.reason) throw new AppError('UPDATE_UNSUPPORTED', this.reason, 409);\n this.settings = settingsSchema.parse(input);\n await saveJson(join(this.context.directory, 'settings.json'), this.settings);\n return this.status();\n }\n async activationPending() {\n const run = (await this.status()).run;\n if (run && !run.committed && run.phase === 'failed' && run.from !== packageInfo.version)\n throw new Error(\n '\u4E0A\u6B21\u5347\u7EA7\u5C1A\u672A\u5B8C\u6210\u6062\u590D\uFF1B\u8BF7\u8FD0\u884C covro update repair \u540E\u518D\u542F\u52A8\uFF0C\u907F\u514D\u5199\u5165\u672A\u6FC0\u6D3B\u7248\u672C\u3002',\n );\n if (run && !run.committed && run.phase === 'stopping')\n throw new Error('\u5347\u7EA7\u6B63\u5728\u5207\u6362\u5B89\u88C5\uFF0C\u8BF7\u7B49\u5F85\u5347\u7EA7\u5B8C\u6210\uFF1B\u4E0D\u8981\u5E76\u884C\u542F\u52A8\u670D\u52A1\u3002');\n if (run && !run.committed && run.phase === 'verifying') {\n if (run.target !== packageInfo.version)\n throw new Error('\u5347\u7EA7\u5019\u9009\u8EAB\u4EFD\u4E0D\u5339\u914D\uFF0C\u8BF7\u8FD0\u884C covro update repair');\n return true;\n }\n return false;\n }\n async commitActivation(id: string) {\n if (!this.context) throw new Error('\u5F53\u524D\u4E0D\u662F\u53D7\u7BA1\u5B89\u88C5');\n const run = (await this.status()).run;\n if (!run || run.id !== id || run.phase !== 'verifying' || run.target !== packageInfo.version)\n throw new Error('\u5347\u7EA7\u8BB0\u5F55\u3001\u7248\u672C\u6216\u8FD0\u884C\u72B6\u6001\u4E0D\u5339\u914D');\n if (!run.codex || run.codex.version !== this.codexVersion())\n throw new Error('Codex \u7248\u672C\u5728\u5347\u7EA7\u671F\u95F4\u53D1\u751F\u53D8\u5316\u6216\u7F3A\u5C11\u6821\u9A8C\u8BB0\u5F55\uFF0C\u62D2\u7EDD\u6FC0\u6D3B');\n requireCodexCompatibility(\n CODEX_COMPATIBILITY,\n this.codexVersion(),\n run.codex.confirmedUnverified,\n );\n this.settings = { ...this.settings, channel: run.channel };\n await saveJson(join(this.context.directory, 'settings.json'), this.settings);\n await saveJson(join(this.context.directory, 'run.json'), {\n ...run,\n committed: true,\n phase: 'succeeded',\n message: '\u5347\u7EA7\u6210\u529F\uFF0C\u670D\u52A1\u5DF2\u6062\u590D',\n updatedAt: Date.now(),\n });\n }\n async start(input: z.infer<typeof updateRequestSchema>) {\n const request = updateRequestSchema.parse(input);\n if (!this.context || this.reason) throw new AppError('UPDATE_UNSUPPORTED', this.reason, 409);\n await mkdir(this.context.directory, { recursive: true, mode: 0o700 });\n let releaseLock: () => Promise<void>;\n try {\n releaseLock = await lockfile.lock(this.context.directory, {\n retries: 0,\n stale: 10_000,\n update: 2_000,\n });\n } catch {\n return this.status();\n }\n try {\n const before = await this.status();\n if (\n await readJson(\n join(this.context.directory, 'requests', `${request.clientOperationId}.json`),\n )\n )\n return before;\n if (before.run?.id === request.clientOperationId) return before;\n if (updateActive(before.run)) {\n if (Date.now() - before.run!.updatedAt > 120_000)\n throw new AppError(\n 'UPDATE_INTERRUPTED',\n '\u4E0A\u6B21\u5347\u7EA7\u8FDB\u7A0B\u5DF2\u5931\u8054\u3002\u8BF7\u4F7F\u7528 covro update repair \u6062\u590D\uFF0C\u4FDD\u7559\u5F53\u524D\u5B89\u88C5\u548C\u5907\u4EFD\u3002',\n 409,\n );\n return before;\n }\n const channel = request.channel ?? this.settings.channel;\n const checked = await this.check(channel);\n if (!checked.available)\n throw new AppError('UPDATE_CHECK_FAILED', checked.checkError ?? '\u672A\u627E\u5230\u53EF\u7528\u7248\u672C', 502);\n if (checked.available.downgrade && !request.allowDowngrade)\n throw new AppError(\n 'UPDATE_DOWNGRADE',\n '\u76EE\u6807\u7248\u672C\u8F83\u65E7\uFF0C\u9700\u8981\u660E\u786E\u5141\u8BB8\u964D\u7EA7\uFF1B\u4ECD\u5C06\u68C0\u67E5\u6570\u636E\u5E93\u517C\u5BB9\u6027\u3002',\n 409,\n );\n if (checked.available.version === packageInfo.version) {\n return this.configure({ ...this.settings, channel });\n }\n const confirmation = request.codexConfirmation;\n const codex = checked.available.codex;\n const confirmedUnverified = Boolean(\n confirmation &&\n confirmation.target === checked.available.version &&\n confirmation.version === codex.version,\n );\n if (confirmation && !confirmedUnverified)\n throw new AppError(\n 'UPDATE_CODEX_CHANGED',\n '\u76EE\u6807\u7248\u672C\u6216 Codex \u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u5E76\u786E\u8BA4\u3002',\n 409,\n );\n try {\n requireCodexCompatibility(codex.manifest, codex.version, confirmedUnverified);\n } catch (error) {\n throw new AppError('UPDATE_CODEX_INCOMPATIBLE', (error as Error).message, 409);\n }\n const run: UpdateRun = {\n id: request.clientOperationId,\n from: packageInfo.version,\n target: checked.available.version,\n channel,\n codex: { version: codex.version!, manifest: codex.manifest!, confirmedUnverified },\n phase: 'installing',\n message: '\u6B63\u5728\u5B89\u88C5\u5019\u9009 npm \u5305',\n startedAt: Date.now(),\n updatedAt: Date.now(),\n };\n await saveJson(join(this.context.directory, 'context.json'), this.context);\n const worker = join(this.context.directory, 'worker.cjs');\n await copyFile(join(packageRoot, 'dist/update-worker.cjs'), worker);\n const log = await open(join(this.context.directory, 'update.log'), 'a', 0o600);\n try {\n await saveJson(join(this.context.directory, 'run.json'), run);\n await saveJson(\n join(this.context.directory, 'requests', `${request.clientOperationId}.json`),\n { target: run.target, channel: run.channel },\n );\n const child = spawn(process.execPath, [worker, this.context.directory], {\n detached: true,\n stdio: ['ignore', log.fd, log.fd],\n windowsHide: true,\n });\n await new Promise<void>((done, reject) => {\n child.once('spawn', done);\n child.once('error', reject);\n });\n child.unref();\n } catch (error) {\n await saveJson(join(this.context.directory, 'run.json'), {\n ...run,\n phase: 'failed',\n message: String(error),\n updatedAt: Date.now(),\n });\n throw error;\n } finally {\n await log.close();\n }\n return this.status();\n } finally {\n await releaseLock();\n }\n }\n async repair() {\n if (!this.context) throw new Error('\u6CA1\u6709\u53EF\u6062\u590D\u7684\u53D7\u7BA1\u5B89\u88C5');\n const directory = this.context.directory;\n let releaseLock: () => Promise<void>;\n try {\n releaseLock = await lockfile.lock(directory, { retries: 0, stale: 10_000, update: 2_000 });\n } catch {\n throw new Error('\u5347\u7EA7\u8FDB\u7A0B\u4ECD\u6301\u6709\u9501\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210\u540E\u518D\u6062\u590D');\n }\n try {\n const run = (await this.status()).run;\n if (!run) throw new Error('\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5347\u7EA7\u8BB0\u5F55');\n if (run.committed || run.phase === 'succeeded') return this.status();\n if (updateActive(run) && Date.now() - run.updatedAt < 30_000)\n throw new Error('\u5347\u7EA7\u521A\u5F00\u59CB\uFF0C\u8BF7\u7B49\u5F85\u81F3\u5C11 30 \u79D2\u540E\u518D\u6062\u590D\u5931\u8054\u8FDB\u7A0B');\n const log = await open(join(directory, 'update.log'), 'a', 0o600);\n try {\n const child = spawn(\n process.execPath,\n [join(directory, 'worker.cjs'), directory, '--repair'],\n {\n detached: true,\n stdio: ['ignore', log.fd, log.fd],\n windowsHide: true,\n },\n );\n await new Promise<void>((done, reject) => {\n child.once('spawn', done);\n child.once('error', reject);\n });\n child.unref();\n } finally {\n await log.close();\n }\n return this.status();\n } finally {\n await releaseLock();\n }\n }\n private async automatic() {\n if (!this.context || this.reason || this.checking) return;\n this.checking = (async () => {\n const result = await this.check();\n if (\n this.settings.automatic &&\n result.available &&\n result.available.codex.status === 'verified' &&\n !result.available.downgrade &&\n result.available.version !== packageInfo.version &&\n result.run?.target !== result.available.version &&\n !updateActive(result.run)\n )\n return this.start({ clientOperationId: crypto.randomUUID() });\n return result;\n })();\n try {\n await this.checking;\n } finally {\n this.checking = undefined;\n }\n }\n close() {\n this.network.abort();\n clearInterval(this.timer);\n }\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { CODEX_COMPATIBILITY } from '../codex/compatibility.js';\nimport {\n assessCodexCompatibility,\n requireCodexCompatibility,\n} from '../shared/codex-compatibility.js';\nimport { createHash } from 'node:crypto';\nimport { spawn } from 'node:child_process';\nimport { copyFile, mkdir, open } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport lockfile from 'proper-lockfile';\nimport { z } from 'zod';\nimport { AppError } from '../shared/errors.js';\nimport {\n releaseChannels,\n updateActive,\n type UpdateController,\n type UpdateSettings,\n type UpdateRun,\n type UpdateStatus,\n type ReleaseChannel,\n} from '../shared/updates.js';\nimport { packageInfo, packageRoot, type CovroPaths } from '../cli/paths.js';\nimport { readJson, saveJson } from './files.js';\nimport { compareVersions, inspectInstallation, lookupRelease } from './registry.js';\n\nexport const settingsSchema = z\n .object({ channel: z.enum(releaseChannels), automatic: z.boolean() })\n .strict();\nexport const updateRequestSchema = z\n .object({\n clientOperationId: z.uuid(),\n channel: z.enum(releaseChannels).optional(),\n allowDowngrade: z.boolean().optional(),\n codexConfirmation: z\n .object({ version: z.string().max(128), target: z.string().max(128) })\n .strict()\n .optional(),\n })\n .strict();\nexport interface UpdateContext {\n location: CovroPaths;\n dataDir: string;\n root: string;\n directory: string;\n}\nexport class UpdateManager implements UpdateController {\n private settings: UpdateSettings = {\n channel:\n packageInfo.covroChannel ??\n (packageInfo.version?.includes('-dev.')\n ? 'dev'\n : packageInfo.version?.includes('-beta.')\n ? 'beta'\n : 'stable'),\n automatic: false,\n };\n private available?: UpdateStatus['available'];\n private checkedAt?: number;\n private checkError?: string;\n private reason = '\u5F53\u524D\u670D\u52A1\u672A\u901A\u8FC7 covro \u542F\u52A8\uFF0C\u7F51\u9875\u4EC5\u652F\u6301\u7248\u672C\u68C0\u6D4B\uFF1B\u5347\u7EA7\u8BF7\u4F7F\u7528\u539F\u90E8\u7F72\u65B9\u5F0F\u3002';\n private timer?: ReturnType<typeof setInterval>;\n private checking?: Promise<UpdateStatus>;\n private readonly network = new AbortController();\n readonly context?: UpdateContext;\n constructor(\n location?: CovroPaths,\n dataDir?: string,\n private readonly codexVersion: () => string | null = () => null,\n ) {\n if (location && dataDir)\n this.context = {\n location,\n dataDir,\n root: packageRoot,\n directory: join(\n location.home,\n 'updates',\n createHash('sha256').update(packageRoot).digest('hex').slice(0, 16),\n ),\n };\n }\n async initialize() {\n if (!this.context) return;\n const saved = await readJson<unknown>(join(this.context.directory, 'settings.json'));\n if (saved !== undefined) this.settings = settingsSchema.parse(saved);\n this.reason =\n process.platform === 'win32'\n ? 'Windows \u6682\u4E0D\u652F\u6301\u53D7\u7BA1\u81EA\u52A8\u5347\u7EA7\uFF0C\u8BF7\u4F7F\u7528 npm \u66F4\u65B0\u5E76\u91CD\u542F\u3002'\n : ((await inspectInstallation(this.context.root)) ?? '');\n this.timer = setInterval(() => void this.automatic().catch(() => {}), 30 * 60_000);\n this.timer.unref();\n // No network request in the startup critical path.\n void this.automatic().catch(() => {});\n }\n async status(): Promise<UpdateStatus> {\n const run = this.context\n ? await readJson<UpdateRun>(join(this.context.directory, 'run.json'))\n : undefined;\n return {\n version: packageInfo.version ?? 'unknown',\n commit: packageInfo.covroCommit,\n source: 'npm',\n codex: assessCodexCompatibility(CODEX_COMPATIBILITY, this.codexVersion()),\n settings: this.settings,\n supported: !this.reason,\n unsupportedReason: this.reason || undefined,\n available: this.available\n ? {\n ...this.available,\n codex: assessCodexCompatibility(this.available.codex.manifest, this.codexVersion()),\n }\n : undefined,\n checkedAt: this.checkedAt,\n checkError: this.checkError,\n run,\n };\n }\n async check(channel: ReleaseChannel = this.settings.channel) {\n try {\n const release = await lookupRelease(channel, this.network.signal);\n this.available = {\n version: release.version,\n requestedChannel: channel,\n channel: release.channel,\n commit: release.covroCommit ?? release.gitHead,\n downgrade: compareVersions(release.version, packageInfo.version) < 0,\n codex: assessCodexCompatibility(release.covroCodex, this.codexVersion()),\n };\n this.checkError = undefined;\n } catch (error) {\n this.available = undefined;\n this.checkError = error instanceof Error ? error.message : '\u65E0\u6CD5\u68C0\u67E5\u66F4\u65B0';\n }\n this.checkedAt = Date.now();\n return this.status();\n }\n async configure(input: UpdateSettings) {\n if (!this.context || this.reason) throw new AppError('UPDATE_UNSUPPORTED', this.reason, 409);\n this.settings = settingsSchema.parse(input);\n await saveJson(join(this.context.directory, 'settings.json'), this.settings);\n return this.status();\n }\n async activationPending() {\n const run = (await this.status()).run;\n if (run && !run.committed && run.phase === 'failed' && run.from !== packageInfo.version)\n throw new Error(\n '\u4E0A\u6B21\u5347\u7EA7\u5C1A\u672A\u5B8C\u6210\u6062\u590D\uFF1B\u8BF7\u8FD0\u884C covro update repair \u540E\u518D\u542F\u52A8\uFF0C\u907F\u514D\u5199\u5165\u672A\u6FC0\u6D3B\u7248\u672C\u3002',\n );\n if (run && !run.committed && run.phase === 'stopping')\n throw new Error('\u5347\u7EA7\u6B63\u5728\u5207\u6362\u5B89\u88C5\uFF0C\u8BF7\u7B49\u5F85\u5347\u7EA7\u5B8C\u6210\uFF1B\u4E0D\u8981\u5E76\u884C\u542F\u52A8\u670D\u52A1\u3002');\n if (run && !run.committed && run.phase === 'verifying') {\n if (run.target !== packageInfo.version)\n throw new Error('\u5347\u7EA7\u5019\u9009\u8EAB\u4EFD\u4E0D\u5339\u914D\uFF0C\u8BF7\u8FD0\u884C covro update repair');\n return true;\n }\n return false;\n }\n async commitActivation(id: string) {\n if (!this.context) throw new Error('\u5F53\u524D\u4E0D\u662F\u53D7\u7BA1\u5B89\u88C5');\n const run = (await this.status()).run;\n if (!run || run.id !== id || run.phase !== 'verifying' || run.target !== packageInfo.version)\n throw new Error('\u5347\u7EA7\u8BB0\u5F55\u3001\u7248\u672C\u6216\u8FD0\u884C\u72B6\u6001\u4E0D\u5339\u914D');\n if (!run.codex || run.codex.version !== this.codexVersion())\n throw new Error('Codex \u7248\u672C\u5728\u5347\u7EA7\u671F\u95F4\u53D1\u751F\u53D8\u5316\u6216\u7F3A\u5C11\u6821\u9A8C\u8BB0\u5F55\uFF0C\u62D2\u7EDD\u6FC0\u6D3B');\n requireCodexCompatibility(\n CODEX_COMPATIBILITY,\n this.codexVersion(),\n run.codex.confirmedUnverified,\n );\n this.settings = { ...this.settings, channel: run.channel };\n await saveJson(join(this.context.directory, 'settings.json'), this.settings);\n await saveJson(join(this.context.directory, 'run.json'), {\n ...run,\n committed: true,\n phase: 'succeeded',\n message: '\u5347\u7EA7\u6210\u529F\uFF0C\u670D\u52A1\u5DF2\u6062\u590D',\n updatedAt: Date.now(),\n });\n }\n async start(input: z.infer<typeof updateRequestSchema>) {\n const request = updateRequestSchema.parse(input);\n if (!this.context || this.reason) throw new AppError('UPDATE_UNSUPPORTED', this.reason, 409);\n await mkdir(this.context.directory, { recursive: true, mode: 0o700 });\n let releaseLock: () => Promise<void>;\n try {\n releaseLock = await lockfile.lock(this.context.directory, {\n retries: 0,\n stale: 10_000,\n update: 2_000,\n });\n } catch {\n return this.status();\n }\n try {\n const before = await this.status();\n if (\n await readJson(\n join(this.context.directory, 'requests', `${request.clientOperationId}.json`),\n )\n )\n return before;\n if (before.run?.id === request.clientOperationId) return before;\n if (updateActive(before.run)) {\n if (Date.now() - before.run!.updatedAt > 120_000)\n throw new AppError(\n 'UPDATE_INTERRUPTED',\n '\u4E0A\u6B21\u5347\u7EA7\u8FDB\u7A0B\u5DF2\u5931\u8054\u3002\u8BF7\u4F7F\u7528 covro update repair \u6062\u590D\uFF0C\u4FDD\u7559\u5F53\u524D\u5B89\u88C5\u548C\u5907\u4EFD\u3002',\n 409,\n );\n return before;\n }\n const channel = request.channel ?? this.settings.channel;\n const checked = await this.check(channel);\n if (!checked.available)\n throw new AppError('UPDATE_CHECK_FAILED', checked.checkError ?? '\u672A\u627E\u5230\u53EF\u7528\u7248\u672C', 502);\n if (checked.available.downgrade && !request.allowDowngrade)\n throw new AppError(\n 'UPDATE_DOWNGRADE',\n '\u76EE\u6807\u7248\u672C\u8F83\u65E7\uFF0C\u9700\u8981\u660E\u786E\u5141\u8BB8\u964D\u7EA7\uFF1B\u4ECD\u5C06\u68C0\u67E5\u6570\u636E\u5E93\u517C\u5BB9\u6027\u3002',\n 409,\n );\n if (compareVersions(checked.available.version, packageInfo.version) === 0) {\n return this.configure({ ...this.settings, channel });\n }\n const confirmation = request.codexConfirmation;\n const codex = checked.available.codex;\n const confirmedUnverified = Boolean(\n confirmation &&\n confirmation.target === checked.available.version &&\n confirmation.version === codex.version,\n );\n if (confirmation && !confirmedUnverified)\n throw new AppError(\n 'UPDATE_CODEX_CHANGED',\n '\u76EE\u6807\u7248\u672C\u6216 Codex \u5DF2\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u5E76\u786E\u8BA4\u3002',\n 409,\n );\n try {\n requireCodexCompatibility(codex.manifest, codex.version, confirmedUnverified);\n } catch (error) {\n throw new AppError('UPDATE_CODEX_INCOMPATIBLE', (error as Error).message, 409);\n }\n const run: UpdateRun = {\n id: request.clientOperationId,\n from: packageInfo.version,\n target: checked.available.version,\n channel,\n sourceChannel: checked.available.channel,\n commit: checked.available.commit,\n codex: { version: codex.version!, manifest: codex.manifest!, confirmedUnverified },\n phase: 'installing',\n message: '\u6B63\u5728\u5B89\u88C5\u5019\u9009 npm \u5305',\n startedAt: Date.now(),\n updatedAt: Date.now(),\n };\n await saveJson(join(this.context.directory, 'context.json'), this.context);\n const worker = join(this.context.directory, 'worker.cjs');\n await copyFile(join(packageRoot, 'dist/update-worker.cjs'), worker);\n const log = await open(join(this.context.directory, 'update.log'), 'a', 0o600);\n try {\n await saveJson(join(this.context.directory, 'run.json'), run);\n await saveJson(\n join(this.context.directory, 'requests', `${request.clientOperationId}.json`),\n { target: run.target, channel: run.channel },\n );\n const child = spawn(process.execPath, [worker, this.context.directory], {\n detached: true,\n stdio: ['ignore', log.fd, log.fd],\n windowsHide: true,\n });\n await new Promise<void>((done, reject) => {\n child.once('spawn', done);\n child.once('error', reject);\n });\n child.unref();\n } catch (error) {\n await saveJson(join(this.context.directory, 'run.json'), {\n ...run,\n phase: 'failed',\n message: String(error),\n updatedAt: Date.now(),\n });\n throw error;\n } finally {\n await log.close();\n }\n return this.status();\n } finally {\n await releaseLock();\n }\n }\n async repair() {\n if (!this.context) throw new Error('\u6CA1\u6709\u53EF\u6062\u590D\u7684\u53D7\u7BA1\u5B89\u88C5');\n const directory = this.context.directory;\n let releaseLock: () => Promise<void>;\n try {\n releaseLock = await lockfile.lock(directory, { retries: 0, stale: 10_000, update: 2_000 });\n } catch {\n throw new Error('\u5347\u7EA7\u8FDB\u7A0B\u4ECD\u6301\u6709\u9501\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210\u540E\u518D\u6062\u590D');\n }\n try {\n const run = (await this.status()).run;\n if (!run) throw new Error('\u6CA1\u6709\u53EF\u6062\u590D\u7684\u5347\u7EA7\u8BB0\u5F55');\n if (run.committed || run.phase === 'succeeded') return this.status();\n if (updateActive(run) && Date.now() - run.updatedAt < 30_000)\n throw new Error('\u5347\u7EA7\u521A\u5F00\u59CB\uFF0C\u8BF7\u7B49\u5F85\u81F3\u5C11 30 \u79D2\u540E\u518D\u6062\u590D\u5931\u8054\u8FDB\u7A0B');\n const log = await open(join(directory, 'update.log'), 'a', 0o600);\n try {\n const child = spawn(\n process.execPath,\n [join(directory, 'worker.cjs'), directory, '--repair'],\n {\n detached: true,\n stdio: ['ignore', log.fd, log.fd],\n windowsHide: true,\n },\n );\n await new Promise<void>((done, reject) => {\n child.once('spawn', done);\n child.once('error', reject);\n });\n child.unref();\n } finally {\n await log.close();\n }\n return this.status();\n } finally {\n await releaseLock();\n }\n }\n private async automatic() {\n if (!this.context || this.reason || this.checking) return;\n this.checking = (async () => {\n const result = await this.check();\n if (\n this.settings.automatic &&\n result.available &&\n result.available.codex.status === 'verified' &&\n !result.available.downgrade &&\n compareVersions(result.available.version, packageInfo.version) > 0 &&\n result.run?.target !== result.available.version &&\n !updateActive(result.run)\n )\n return this.start({ clientOperationId: crypto.randomUUID() });\n return result;\n })();\n try {\n await this.checking;\n } finally {\n this.checking = undefined;\n }\n }\n close() {\n this.network.abort();\n clearInterval(this.timer);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/updates/registry.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { npmPackageName } from "../shared/package.js";
|
|
2
|
-
import { validVersion } from "../shared/versions.js";
|
|
3
|
-
import { validVersion as validVersion2, compareVersions } from "../shared/versions.js";
|
|
2
|
+
import { validVersion, compareVersions } from "../shared/versions.js";
|
|
3
|
+
import { validVersion as validVersion2, compareVersions as compareVersions2 } from "../shared/versions.js";
|
|
4
4
|
import { execFile } from "node:child_process";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
6
|
import { realpath, access, lstat } from "node:fs/promises";
|
|
@@ -18,24 +18,36 @@ const releaseSchema = z.object({
|
|
|
18
18
|
name: z.literal(npmPackageName),
|
|
19
19
|
version: z.string().refine(validVersion),
|
|
20
20
|
gitHead: z.string().optional(),
|
|
21
|
+
covroCommit: z.string().optional(),
|
|
21
22
|
covroCodex: z.unknown().optional()
|
|
22
23
|
});
|
|
23
24
|
function packageMetadataUrl(selector) {
|
|
24
25
|
const url = `${registry}/${encodeURIComponent(npmPackageName)}`;
|
|
25
26
|
return selector === void 0 ? url : `${url}/${encodeURIComponent(selector)}`;
|
|
26
27
|
}
|
|
27
|
-
async function
|
|
28
|
+
async function lookupTag(channel, signal) {
|
|
28
29
|
const response = await fetch(packageMetadataUrl(npmTags[channel]), {
|
|
29
30
|
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3),
|
|
30
31
|
headers: { accept: "application/json" }
|
|
31
32
|
});
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
response.status === 404 ? `npm \u5C1A\u672A\u53D1\u5E03 Covro \u7684 ${channel} \u6E20\u9053` : `npm \u67E5\u8BE2\u5931\u8D25\uFF08${response.status}\uFF09`
|
|
35
|
-
);
|
|
33
|
+
if (response.status === 404) return void 0;
|
|
34
|
+
if (!response.ok) throw new Error(`npm ${npmTags[channel]} \u67E5\u8BE2\u5931\u8D25\uFF08${response.status}\uFF09`);
|
|
36
35
|
const body = await response.text();
|
|
37
36
|
if (body.length > 2 * 1024 * 1024) throw new Error("npm \u5143\u6570\u636E\u8FC7\u5927");
|
|
38
|
-
return releaseSchema.parse(JSON.parse(body));
|
|
37
|
+
return { ...releaseSchema.parse(JSON.parse(body)), channel };
|
|
38
|
+
}
|
|
39
|
+
async function lookupRelease(channel, signal) {
|
|
40
|
+
const sources = channel === "stable" ? ["stable"] : ["stable", channel];
|
|
41
|
+
const releases = await Promise.all(sources.map((source) => lookupTag(source, signal)));
|
|
42
|
+
let selected;
|
|
43
|
+
for (const release of releases)
|
|
44
|
+
if (release && (!selected || compareVersions(release.version, selected.version) > 0))
|
|
45
|
+
selected = release;
|
|
46
|
+
if (!selected)
|
|
47
|
+
throw new Error(
|
|
48
|
+
`npm \u5C1A\u672A\u53D1\u5E03 Covro \u7684\u53EF\u7528\u7248\u672C\uFF08${sources.map((source) => npmTags[source]).join("\u3001")}\uFF09`
|
|
49
|
+
);
|
|
50
|
+
return selected;
|
|
39
51
|
}
|
|
40
52
|
async function inspectInstallation(root) {
|
|
41
53
|
try {
|
|
@@ -59,7 +71,7 @@ async function inspectPackageDirectory(root, globalRoot) {
|
|
|
59
71
|
return void 0;
|
|
60
72
|
}
|
|
61
73
|
export {
|
|
62
|
-
compareVersions,
|
|
74
|
+
compareVersions2 as compareVersions,
|
|
63
75
|
inspectInstallation,
|
|
64
76
|
inspectPackageDirectory,
|
|
65
77
|
lookupRelease,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/updates/registry.ts"],
|
|
4
|
-
"sourcesContent": ["import { npmPackageName } from '../shared/package.js';\nimport { validVersion } from '../shared/versions.js';\nexport { validVersion, compareVersions } from '../shared/versions.js';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { realpath, access, lstat } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { join } from 'node:path';\nimport { z } from 'zod';\nimport type { ReleaseChannel } from '../shared/updates.js';\n\nconst run = promisify(execFile);\nexport const registry = 'https://registry.npmjs.org';\nexport const npmTags: Record<ReleaseChannel, string> = {\n stable: 'latest',\n beta: 'beta',\n dev: 'dev',\n};\nexport const releaseSchema = z.object({\n name: z.literal(npmPackageName),\n version: z.string().refine(validVersion),\n gitHead: z.string().optional(),\n covroCodex: z.unknown().optional(),\n});\nexport function packageMetadataUrl(selector?: string) {\n const url = `${registry}/${encodeURIComponent(npmPackageName)}`;\n return selector === undefined ? url : `${url}/${encodeURIComponent(selector)}`;\n}\
|
|
5
|
-
"mappings": "AAAA,SAAS,sBAAsB;AAC/B,SAAS,
|
|
6
|
-
"names": ["validVersion"]
|
|
4
|
+
"sourcesContent": ["import { npmPackageName } from '../shared/package.js';\nimport { validVersion, compareVersions } from '../shared/versions.js';\nexport { validVersion, compareVersions } from '../shared/versions.js';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { realpath, access, lstat } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { join } from 'node:path';\nimport { z } from 'zod';\nimport type { ReleaseChannel } from '../shared/updates.js';\n\nconst run = promisify(execFile);\nexport const registry = 'https://registry.npmjs.org';\nexport const npmTags: Record<ReleaseChannel, string> = {\n stable: 'latest',\n beta: 'beta',\n dev: 'dev',\n};\nexport const releaseSchema = z.object({\n name: z.literal(npmPackageName),\n version: z.string().refine(validVersion),\n gitHead: z.string().optional(),\n covroCommit: z.string().optional(),\n covroCodex: z.unknown().optional(),\n});\nexport function packageMetadataUrl(selector?: string) {\n const url = `${registry}/${encodeURIComponent(npmPackageName)}`;\n return selector === undefined ? url : `${url}/${encodeURIComponent(selector)}`;\n}\nasync function lookupTag(channel: ReleaseChannel, signal?: AbortSignal) {\n const response = await fetch(packageMetadataUrl(npmTags[channel]), {\n signal: signal\n ? AbortSignal.any([signal, AbortSignal.timeout(15_000)])\n : AbortSignal.timeout(15_000),\n headers: { accept: 'application/json' },\n });\n if (response.status === 404) return undefined;\n if (!response.ok) throw new Error(`npm ${npmTags[channel]} \u67E5\u8BE2\u5931\u8D25\uFF08${response.status}\uFF09`);\n const body = await response.text();\n if (body.length > 2 * 1024 * 1024) throw new Error('npm \u5143\u6570\u636E\u8FC7\u5927');\n return { ...releaseSchema.parse(JSON.parse(body)), channel };\n}\nexport async function lookupRelease(channel: ReleaseChannel, signal?: AbortSignal) {\n // Resolve every allowed source once, then bind the chosen version and its metadata.\n // Stable wins equal precedence; a newer prerelease still wins over an older stable.\n const sources: ReleaseChannel[] = channel === 'stable' ? ['stable'] : ['stable', channel];\n const releases = await Promise.all(sources.map((source) => lookupTag(source, signal)));\n let selected: Awaited<ReturnType<typeof lookupTag>>;\n for (const release of releases)\n if (release && (!selected || compareVersions(release.version, selected.version) > 0))\n selected = release;\n if (!selected)\n throw new Error(\n `npm \u5C1A\u672A\u53D1\u5E03 Covro \u7684\u53EF\u7528\u7248\u672C\uFF08${sources.map((source) => npmTags[source]).join('\u3001')}\uFF09`,\n );\n return selected;\n}\nexport async function inspectInstallation(root: string): Promise<string | undefined> {\n try {\n const { stdout } = await run('npm', ['root', '--global'], { timeout: 15_000 });\n return await inspectPackageDirectory(root, stdout.trim());\n } catch {\n return '\u65E0\u6CD5\u786E\u8BA4\u53EF\u5199\u7684 npm \u5168\u5C40\u5B89\u88C5\uFF1B\u8BF7\u68C0\u67E5 npm\u3001\u5B89\u88C5\u76EE\u5F55\u6743\u9650\u53CA\u540E\u53F0 PATH\u3002';\n }\n}\n\nexport async function inspectPackageDirectory(root: string, globalRoot: string) {\n const expected = join(await realpath(globalRoot), npmPackageName);\n // npm link and pnpm global point outside the package directory. Following\n // that link would let the worker rename a developer's source checkout.\n if ((await lstat(expected)).isSymbolicLink() || (await realpath(root)) !== expected)\n return '\u5F53\u524D\u4E3A\u6E90\u7801\u3001\u94FE\u63A5\u6216\u975E npm \u5168\u5C40\u5B89\u88C5\uFF1B\u8BF7\u4F7F\u7528\u539F\u90E8\u7F72\u65B9\u5F0F\u66F4\u65B0\u3002';\n try {\n await lstat(join(expected, '.git'));\n return '\u5F53\u524D\u5B89\u88C5\u5305\u542B Git \u5DE5\u4F5C\u533A\uFF1B\u8BF7\u4F7F\u7528\u539F\u90E8\u7F72\u65B9\u5F0F\u66F4\u65B0\u3002';\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n await access(root, constants.W_OK);\n return undefined;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["validVersion", "compareVersions"]
|
|
7
7
|
}
|
package/dist/updates/worker.js
CHANGED
|
@@ -223,11 +223,11 @@ async function worker(directory) {
|
|
|
223
223
|
],
|
|
224
224
|
{ timeout: 10 * 6e4, maxBuffer: 2 * 1024 * 1024 }
|
|
225
225
|
);
|
|
226
|
-
const candidate = await readJson(
|
|
227
|
-
join(paths.candidate, "package.json")
|
|
228
|
-
);
|
|
226
|
+
const candidate = await readJson(join(paths.candidate, "package.json"));
|
|
229
227
|
if (candidate?.name !== npmPackageName || candidate.version !== record.target)
|
|
230
228
|
throw new Error("\u5019\u9009\u5305\u8EAB\u4EFD\u6216\u7248\u672C\u4E0D\u5339\u914D");
|
|
229
|
+
if (record.commit && (candidate.covroCommit ?? candidate.gitHead) !== record.commit)
|
|
230
|
+
throw new Error("\u5019\u9009\u5305\u6E90\u7801\u63D0\u4EA4\u4E0E\u68C0\u67E5\u65F6\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u5207\u6362");
|
|
231
231
|
if (!record.codex) throw new Error("\u7F3A\u5C11 Codex \u5347\u7EA7\u6821\u9A8C\u8BB0\u5F55\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0");
|
|
232
232
|
const manifest = codexCompatibilitySchema.parse(candidate.covroCodex);
|
|
233
233
|
if (JSON.stringify(manifest) !== JSON.stringify(record.codex.manifest))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/updates/worker.ts"],
|
|
4
|
-
"sourcesContent": ["import { BackupStore, backupDirectory, verifyLegacySnapshot } from '../backups/store.js';\nimport { acquireMaintenanceLock } from '../backups/lock.js';\nimport { acquireInstanceLock } from '../server/instance-lock.js';\nimport { inspectDatabase, readMigrations } from '../server/db/history.js';\nimport { databaseCompatibilitySchema } from '../shared/database.js';\nimport { npmPackageName } from '../shared/package.js';\nimport {\n codexCompatibilitySchema,\n requireCodexCompatibility,\n} from '../shared/codex-compatibility.js';\n// Bundled with its pure JavaScript dependencies and copied outside the installation before launch.\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { createRequire } from 'node:module';\nimport { access, mkdir, readdir, rm, rename } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { setTimeout } from 'node:timers/promises';\nimport lockfile from 'proper-lockfile';\nimport type Database from 'better-sqlite3';\nimport type { UpdateRun } from '../shared/updates.js';\nimport type { UpdateContext } from './manager.js';\nimport { control, isNotRunning } from '../cli/control.js';\nimport { startBackground, stopBackground } from '../cli/background.js';\nimport { copyDurable, readJson, saveJson } from './files.js';\nimport { activateUpdate, transactionPaths } from './transaction.js';\nimport { inspectInstallation, registry } from './registry.js';\n\nconst exec = promisify(execFile);\nconst message = (error: unknown) => (error instanceof Error ? error.message : String(error));\ntype DaemonStatus = {\n version: string;\n pid: number;\n maintenance?: boolean;\n codexVersion?: string | null;\n codexReady?: boolean;\n};\n\nasync function startService(context: UpdateContext) {\n // Shared with `covro start`: never inherit a Background security session on macOS.\n // Activation is checked from the durable update record by the daemon.\n await startBackground(context.location, join(context.root, 'bin/covro.mjs'));\n}\nasync function stopService(context: UpdateContext) {\n await stopBackground(context.location);\n}\n\nasync function verifyRestoredService(context: UpdateContext, version: string) {\n for (let attempt = 0; attempt < 240; attempt++) {\n try {\n const restored = await control<DaemonStatus>(context.location, 'status');\n if (restored.version !== version || restored.maintenance)\n throw new Error('\u65E7\u7248\u6062\u590D\u8EAB\u4EFD\u4E0D\u5339\u914D');\n return;\n } catch (error) {\n if (attempt === 239) throw error;\n }\n await setTimeout(250);\n }\n}\n\nasync function verifyMigrations(context: UpdateContext, candidate: string) {\n // Loading the existing native addon happens before any package path is replaced.\n const require = createRequire(join(context.root, 'package.json'));\n const Sqlite = require('better-sqlite3') as typeof Database;\n const filename = join(context.dataDir, 'app.sqlite');\n try {\n await access(filename);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return;\n throw error;\n }\n const db = new Sqlite(filename, { readonly: true, fileMustExist: true });\n try {\n const migrations = readMigrations(join(candidate, 'dist/drizzle'));\n const metadata = await readJson<{ covroDatabase?: unknown }>(join(candidate, 'package.json'));\n if (metadata?.covroDatabase) {\n const contract = databaseCompatibilitySchema.parse(metadata.covroDatabase);\n if (contract.schemaVersion !== migrations.length)\n throw new Error('\u76EE\u6807\u7248\u672C\u7684 Schema \u58F0\u660E\u4E0E\u8FC1\u79FB\u4E0D\u4E00\u81F4');\n }\n inspectDatabase(db, migrations);\n } finally {\n db.close();\n }\n}\n\nasync function worker(directory: string) {\n await mkdir(directory, { recursive: true, mode: 0o700 });\n const release = await lockfile.lock(directory, {\n stale: 10_000,\n update: 2_000,\n retries: { retries: 30, minTimeout: 100, maxTimeout: 500 },\n });\n let record = await readJson<UpdateRun>(join(directory, 'run.json'));\n const context = await readJson<UpdateContext>(join(directory, 'context.json'));\n if (!record || !context) {\n await release();\n throw new Error('\u7F3A\u5C11\u5347\u7EA7\u8BB0\u5F55');\n }\n const update = async (phase: UpdateRun['phase'], detail: string) => {\n record = { ...record!, phase, message: detail, updatedAt: Date.now() };\n await saveJson(join(directory, 'run.json'), record);\n };\n const paths = transactionPaths(\n context.root,\n record.id,\n context.dataDir,\n context.location.config,\n join(backupDirectory(context.location.home, context.dataDir), record.id),\n );\n let releaseMaintenance: (() => Promise<void>) | undefined;\n let releaseData: (() => Promise<void>) | undefined;\n const previousMetadata = await readJson<{ version: string }>(\n join(paths.previous, 'package.json'),\n );\n const originalRoot = previousMetadata?.version === record.from ? paths.previous : context.root;\n const originalMetadata = await readJson<{\n version: string;\n covroCommit?: string;\n covroDatabase?: unknown;\n }>(join(originalRoot, 'package.json'));\n const Sqlite = createRequire(join(originalRoot, 'package.json'))(\n 'better-sqlite3',\n ) as typeof Database;\n const migrations = readMigrations(join(originalRoot, 'dist/drizzle'));\n const backups = new BackupStore({\n directory: backupDirectory(context.location.home, context.dataDir),\n config: paths.config,\n dataDir: paths.dataDir,\n appVersion: record.from,\n commit: originalMetadata?.covroCommit,\n contract: databaseCompatibilitySchema.parse(\n originalMetadata?.covroDatabase ?? {\n schemaVersion: migrations.length,\n minRestorableSchemaVersion: 1,\n backupFormatVersion: 1,\n },\n ),\n Sqlite,\n migrations,\n });\n try {\n if (process.argv[3] === '--repair') {\n releaseMaintenance = await acquireMaintenanceLock(context.dataDir);\n if (!(await readJson(join(paths.backup, 'snapshot.json'))))\n paths.backup = join(directory, `backup-${record.id}`);\n const active = await control<DaemonStatus>(context.location, 'status').catch(\n (error: unknown) => {\n if (isNotRunning(error)) return undefined;\n throw error;\n },\n );\n if (record.committed) return;\n if (active && !active.maintenance && active.version !== record.from)\n throw new Error('\u5F53\u524D\u670D\u52A1\u53EF\u80FD\u5DF2\u63A5\u53D7\u65B0\u7248\u4E1A\u52A1\u6570\u636E\uFF1B\u62D2\u7EDD\u6062\u590D\u65E7\u5FEB\u7167\uFF0C\u8BF7\u4F7F\u7528\u517C\u5BB9\u7248\u672C\u68C0\u67E5\u3002');\n const previous = await readJson<{ version: string; name: string }>(\n join(paths.previous, 'package.json'),\n );\n if (previous) {\n if (active && !active.maintenance)\n throw new Error('\u65E7\u670D\u52A1\u5DF2\u6062\u590D\u4E1A\u52A1\u5199\u5165\uFF1B\u62D2\u7EDD\u7528\u5347\u7EA7\u524D\u5FEB\u7167\u8986\u76D6\u73B0\u6709\u6570\u636E\uFF0C\u8BF7\u4FDD\u7559\u73B0\u573A\u68C0\u67E5\u3002');\n if (previous.name !== npmPackageName || previous.version !== record.from)\n throw new Error('\u65E7\u7248\u5907\u4EFD\u8EAB\u4EFD\u4E0D\u5339\u914D');\n const snapshot = await readJson<{ complete: boolean; formatVersion?: number }>(\n join(paths.backup, 'snapshot.json'),\n );\n if (snapshot?.formatVersion === 1) {\n const verified = await backups.verify(record.id);\n if (\n verified.appVersion !== record.from ||\n verified.protectedBy !== record.id ||\n verified.configPath !== paths.config ||\n verified.dataDir !== paths.dataDir\n )\n throw new Error('\u5907\u4EFD\u8EAB\u4EFD\u4E0D\u5339\u914D');\n } else await verifyLegacySnapshot(paths.backup, Sqlite, join(originalRoot, 'dist/drizzle'));\n } else {\n const original = await readJson<{ name: string; version: string }>(\n join(paths.root, 'package.json'),\n );\n if (original?.name !== npmPackageName || original.version !== record.from)\n throw new Error('\u672A\u627E\u5230\u5B8C\u6574\u7684\u4E0A\u4E00\u7248\u672C\u5B89\u88C5');\n }\n if (active && !active.maintenance) {\n const admission = await control<{ ready: boolean }>(context.location, 'prepare-update');\n if (!admission.ready) throw new Error('\u4ECD\u6709\u4EFB\u52A1\u3001\u5BA1\u6279\u6216\u5F85\u6838\u5BF9\u64CD\u4F5C\uFF0C\u4E0D\u80FD\u6062\u590D\u65E7\u5B89\u88C5');\n }\n await stopService(context);\n releaseData = await acquireInstanceLock(context.dataDir);\n if (previous) {\n await rm(paths.root, { recursive: true, force: true });\n await rename(paths.previous, paths.root);\n for (const name of ['app.sqlite', 'app.sqlite-wal', 'app.sqlite-shm']) {\n await rm(join(paths.dataDir, name), { force: true });\n try {\n await copyDurable(join(paths.backup, name), join(paths.dataDir, name));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n }\n await copyDurable(join(paths.backup, 'config.json'), paths.config);\n }\n const restored = await readJson<{ name: string; version: string }>(\n join(paths.root, 'package.json'),\n );\n if (restored?.name !== npmPackageName || restored.version !== record.from)\n throw new Error('\u672A\u627E\u5230\u5B8C\u6574\u7684\u4E0A\u4E00\u7248\u672C\u5B89\u88C5');\n await update('rolledBack', '\u5DF2\u6062\u590D\u4E0A\u6B21\u672A\u5B8C\u6210\u7684\u5347\u7EA7\uFF0C\u6B63\u5728\u542F\u52A8\u4E0A\u4E00\u7248\u672C');\n try {\n await releaseData?.();\n releaseData = undefined;\n await startService(context);\n await verifyRestoredService(context, record.from);\n await update('rolledBack', '\u5DF2\u6062\u590D\u4E0A\u6B21\u672A\u5B8C\u6210\u7684\u5347\u7EA7\uFF0C\u4E0A\u4E00\u7248\u672C\u5DF2\u5C31\u7EEA');\n } catch (error) {\n await update('failed', `\u65E7\u7248\u6062\u590D\u542F\u52A8\u5931\u8D25\uFF0C\u4FDD\u7559\u5907\u4EFD\uFF1A${message(error)}`);\n throw error;\n }\n return;\n }\n const reason = await inspectInstallation(context.root);\n if (reason) throw new Error(reason);\n // A second managed configuration must be stopped before replacing their shared npm package.\n for (const key of await readdir(join(context.location.home, 'instances'))) {\n if (key === context.location.key) continue;\n const instance = await readJson<{ root: string; config: string; socket: string }>(\n join(context.location.home, 'instances', key, 'instance.json'),\n );\n if (instance?.root !== context.root) continue;\n try {\n await control({ ...context.location, socket: instance.socket }, 'status');\n throw new Error('\u540C\u4E00 npm \u5B89\u88C5\u8FD8\u6709\u5176\u4ED6 Covro \u5B9E\u4F8B\uFF0C\u8BF7\u5148\u505C\u6B62\u5176\u4ED6\u5B9E\u4F8B\u518D\u5347\u7EA7\u3002');\n } catch (error) {\n if (!isNotRunning(error)) throw error;\n }\n }\n await access(dirname(context.root), constants.W_OK);\n // npm global layout keeps production dependencies nested in the package being swapped.\n await exec(\n 'npm',\n [\n 'install',\n '--global',\n '--prefix',\n paths.prefix,\n '--omit=dev',\n '--no-audit',\n '--no-fund',\n `--registry=${registry}`,\n '--allow-scripts=better-sqlite3',\n `${npmPackageName}@${record.target}`,\n ],\n { timeout: 10 * 60_000, maxBuffer: 2 * 1024 * 1024 },\n );\n const candidate = await readJson<{ name: string; version: string; covroCodex?: unknown }>(\n join(paths.candidate, 'package.json'),\n );\n if (candidate?.name !== npmPackageName || candidate.version !== record.target)\n throw new Error('\u5019\u9009\u5305\u8EAB\u4EFD\u6216\u7248\u672C\u4E0D\u5339\u914D');\n if (!record.codex) throw new Error('\u7F3A\u5C11 Codex \u5347\u7EA7\u6821\u9A8C\u8BB0\u5F55\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0');\n const manifest = codexCompatibilitySchema.parse(candidate.covroCodex);\n if (JSON.stringify(manifest) !== JSON.stringify(record.codex.manifest))\n throw new Error('\u5019\u9009\u5305\u7684 Codex \u517C\u5BB9\u58F0\u660E\u4E0E\u68C0\u67E5\u65F6\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u5207\u6362');\n const checkCodex = async (current?: DaemonStatus) => {\n const state = current ?? (await control<DaemonStatus>(context.location, 'status'));\n if (state.codexVersion !== record!.codex!.version)\n throw new Error('Codex \u7248\u672C\u5728\u7B49\u5F85\u5347\u7EA7\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0');\n requireCodexCompatibility(\n manifest,\n state.codexVersion ?? null,\n record!.codex!.confirmedUnverified,\n );\n };\n await checkCodex();\n await exec(process.execPath, [join(paths.candidate, 'bin/covro.mjs'), '--version'], {\n timeout: 30_000,\n });\n const nativeProbe =\n 'const {createRequire}=await import(\"node:module\"); const r=createRequire(process.argv[1]); const DB=r(\"better-sqlite3\"); const db=new DB(\":memory:\"); db.close();';\n await exec(\n process.execPath,\n ['--input-type=module', '-e', nativeProbe, join(paths.candidate, 'package.json')],\n { timeout: 30_000 },\n );\n await verifyMigrations(context, paths.candidate);\n releaseMaintenance = await acquireMaintenanceLock(context.dataDir);\n await activateUpdate(paths, {\n backup: async () => {\n releaseData = await acquireInstanceLock(context.dataDir);\n await backups.create({ id: record!.id, trigger: 'preUpgrade', protectedBy: record!.id });\n },\n restore: async () => {\n releaseData ??= await acquireInstanceLock(context.dataDir);\n await backups.restoreFiles(record!.id);\n },\n phase: update,\n waitForIdle: async () => {\n // Queue without blocking normal work; admission closes atomically only after all blockers clear.\n for (;;) {\n await checkCodex();\n const result = await control<{ ready: boolean; reason?: string }>(\n context.location,\n 'prepare-update',\n );\n if (result.ready) {\n await checkCodex();\n return;\n }\n await update('waiting', result.reason ?? '\u7B49\u5F85\u6240\u6709\u4EFB\u52A1\u7ED3\u675F');\n await setTimeout(2_000);\n }\n },\n stop: () => stopService(context),\n start: async (candidate) => {\n await releaseData?.();\n releaseData = undefined;\n await startService(context);\n if (!candidate) await verifyRestoredService(context, record!.from);\n },\n verify: async () => {\n for (let attempt = 0; attempt < 240; attempt++) {\n const current = await control<DaemonStatus>(context.location, 'status').catch(\n () => undefined,\n );\n if (current) {\n if (current.version !== record!.target || !current.maintenance)\n throw new Error('\u65B0\u7248\u670D\u52A1\u8EAB\u4EFD\u6216\u7EF4\u62A4\u72B6\u6001\u4E0D\u5339\u914D');\n await checkCodex(current);\n if (current.codexReady) return;\n }\n await setTimeout(250);\n }\n throw new Error('\u65B0\u7248\u670D\u52A1\u6216 Codex \u8FDE\u63A5\u672A\u5C31\u7EEA\uFF0C\u62D2\u7EDD\u6FC0\u6D3B');\n },\n commit: async () => {\n // Gateway commits the durable result before reopening task admission.\n await control(context.location, 'activate-update', {\n id: record!.id,\n channel: record!.channel,\n });\n const final = await readJson<UpdateRun>(join(directory, 'run.json'));\n if (!final?.committed) throw new Error('\u65B0\u7248\u5C1A\u672A\u786E\u8BA4\u5347\u7EA7\u63D0\u4EA4');\n record = final;\n },\n hasCommitted: async () =>\n Boolean((await readJson<UpdateRun>(join(directory, 'run.json')))?.committed),\n resume: async () => {\n await control(context.location, 'cancel-update').catch(() => {});\n },\n });\n } catch (error) {\n const latest = await readJson<UpdateRun>(join(directory, 'run.json'));\n if (latest?.committed) {\n // A lost commit response cannot authorize restoring older data.\n record = latest;\n } else if (!['rolledBack', 'failed'].includes(record.phase))\n await update('failed', message(error));\n console.error(message(error));\n process.exitCode = record.committed || record.phase === 'rolledBack' ? 0 : 1;\n } finally {\n await releaseData?.();\n await releaseMaintenance?.();\n await release();\n // Keep the last good installation and database backup for explicit recovery.\n if (record.phase === 'succeeded' || record.phase === 'rolledBack') {\n await rm(paths.prefix, { recursive: true, force: true });\n }\n }\n}\n\nif (process.argv[2])\n void worker(process.argv[2]).catch((error: unknown) => {\n console.error(message(error));\n process.exitCode = 1;\n });\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,aAAa,iBAAiB,4BAA4B;AACnE,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,sBAAsB;AAChD,SAAS,mCAAmC;AAC5C,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,QAAQ,OAAO,SAAS,IAAI,cAAc;AACnD,SAAS,iBAAiB;AAC1B,SAAS,SAAS,YAAY;AAC9B,SAAS,kBAAkB;AAC3B,OAAO,cAAc;AAIrB,SAAS,SAAS,oBAAoB;AACtC,SAAS,iBAAiB,sBAAsB;AAChD,SAAS,aAAa,UAAU,gBAAgB;AAChD,SAAS,gBAAgB,wBAAwB;AACjD,SAAS,qBAAqB,gBAAgB;AAE9C,MAAM,OAAO,UAAU,QAAQ;AAC/B,MAAM,UAAU,CAAC,UAAoB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAS1F,eAAe,aAAa,SAAwB;AAGlD,QAAM,gBAAgB,QAAQ,UAAU,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC7E;AACA,eAAe,YAAY,SAAwB;AACjD,QAAM,eAAe,QAAQ,QAAQ;AACvC;AAEA,eAAe,sBAAsB,SAAwB,SAAiB;AAC5E,WAAS,UAAU,GAAG,UAAU,KAAK,WAAW;AAC9C,QAAI;AACF,YAAM,WAAW,MAAM,QAAsB,QAAQ,UAAU,QAAQ;AACvE,UAAI,SAAS,YAAY,WAAW,SAAS;AAC3C,cAAM,IAAI,MAAM,wDAAW;AAC7B;AAAA,IACF,SAAS,OAAO;AACd,UAAI,YAAY,IAAK,OAAM;AAAA,IAC7B;AACA,UAAM,WAAW,GAAG;AAAA,EACtB;AACF;AAEA,eAAe,iBAAiB,SAAwB,WAAmB;AAEzE,QAAMA,WAAU,cAAc,KAAK,QAAQ,MAAM,cAAc,CAAC;AAChE,QAAM,SAASA,SAAQ,gBAAgB;AACvC,QAAM,WAAW,KAAK,QAAQ,SAAS,YAAY;AACnD,MAAI;AACF,UAAM,OAAO,QAAQ;AAAA,EACvB,SAAS,OAAO;AACd,QAAK,MAAgC,SAAS,SAAU;AACxD,UAAM;AAAA,EACR;AACA,QAAM,KAAK,IAAI,OAAO,UAAU,EAAE,UAAU,MAAM,eAAe,KAAK,CAAC;AACvE,MAAI;AACF,UAAM,aAAa,eAAe,KAAK,WAAW,cAAc,CAAC;AACjE,UAAM,WAAW,MAAM,SAAsC,KAAK,WAAW,cAAc,CAAC;AAC5F,QAAI,UAAU,eAAe;AAC3B,YAAM,WAAW,4BAA4B,MAAM,SAAS,aAAa;AACzE,UAAI,SAAS,kBAAkB,WAAW;AACxC,cAAM,IAAI,MAAM,wFAAuB;AAAA,IAC3C;AACA,oBAAgB,IAAI,UAAU;AAAA,EAChC,UAAE;AACA,OAAG,MAAM;AAAA,EACX;AACF;AAEA,eAAe,OAAO,WAAmB;AACvC,QAAM,MAAM,WAAW,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACvD,QAAM,UAAU,MAAM,SAAS,KAAK,WAAW;AAAA,IAC7C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS,EAAE,SAAS,IAAI,YAAY,KAAK,YAAY,IAAI;AAAA,EAC3D,CAAC;AACD,MAAI,SAAS,MAAM,SAAoB,KAAK,WAAW,UAAU,CAAC;AAClE,QAAM,UAAU,MAAM,SAAwB,KAAK,WAAW,cAAc,CAAC;AAC7E,MAAI,CAAC,UAAU,CAAC,SAAS;AACvB,UAAM,QAAQ;AACd,UAAM,IAAI,MAAM,sCAAQ;AAAA,EAC1B;AACA,QAAM,SAAS,OAAO,OAA2B,WAAmB;AAClE,aAAS,EAAE,GAAG,QAAS,OAAO,SAAS,QAAQ,WAAW,KAAK,IAAI,EAAE;AACrE,UAAM,SAAS,KAAK,WAAW,UAAU,GAAG,MAAM;AAAA,EACpD;AACA,QAAM,QAAQ;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ,SAAS;AAAA,IACjB,KAAK,gBAAgB,QAAQ,SAAS,MAAM,QAAQ,OAAO,GAAG,OAAO,EAAE;AAAA,EACzE;AACA,MAAI;AACJ,MAAI;AACJ,QAAM,mBAAmB,MAAM;AAAA,IAC7B,KAAK,MAAM,UAAU,cAAc;AAAA,EACrC;AACA,QAAM,eAAe,kBAAkB,YAAY,OAAO,OAAO,MAAM,WAAW,QAAQ;AAC1F,QAAM,mBAAmB,MAAM,SAI5B,KAAK,cAAc,cAAc,CAAC;AACrC,QAAM,SAAS,cAAc,KAAK,cAAc,cAAc,CAAC;AAAA,IAC7D;AAAA,EACF;AACA,QAAM,aAAa,eAAe,KAAK,cAAc,cAAc,CAAC;AACpE,QAAM,UAAU,IAAI,YAAY;AAAA,IAC9B,WAAW,gBAAgB,QAAQ,SAAS,MAAM,QAAQ,OAAO;AAAA,IACjE,QAAQ,MAAM;AAAA,IACd,SAAS,MAAM;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,QAAQ,kBAAkB;AAAA,IAC1B,UAAU,4BAA4B;AAAA,MACpC,kBAAkB,iBAAiB;AAAA,QACjC,eAAe,WAAW;AAAA,QAC1B,4BAA4B;AAAA,QAC5B,qBAAqB;AAAA,MACvB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,MAAI;AACF,QAAI,QAAQ,KAAK,CAAC,MAAM,YAAY;AAClC,2BAAqB,MAAM,uBAAuB,QAAQ,OAAO;AACjE,UAAI,CAAE,MAAM,SAAS,KAAK,MAAM,QAAQ,eAAe,CAAC;AACtD,cAAM,SAAS,KAAK,WAAW,UAAU,OAAO,EAAE,EAAE;AACtD,YAAM,SAAS,MAAM,QAAsB,QAAQ,UAAU,QAAQ,EAAE;AAAA,QACrE,CAAC,UAAmB;AAClB,cAAI,aAAa,KAAK,EAAG,QAAO;AAChC,gBAAM;AAAA,QACR;AAAA,MACF;AACA,UAAI,OAAO,UAAW;AACtB,UAAI,UAAU,CAAC,OAAO,eAAe,OAAO,YAAY,OAAO;AAC7D,cAAM,IAAI,MAAM,8MAAoC;AACtD,YAAM,WAAW,MAAM;AAAA,QACrB,KAAK,MAAM,UAAU,cAAc;AAAA,MACrC;AACA,UAAI,UAAU;AACZ,YAAI,UAAU,CAAC,OAAO;AACpB,gBAAM,IAAI,MAAM,8MAAoC;AACtD,YAAI,SAAS,SAAS,kBAAkB,SAAS,YAAY,OAAO;AAClE,gBAAM,IAAI,MAAM,wDAAW;AAC7B,cAAM,WAAW,MAAM;AAAA,UACrB,KAAK,MAAM,QAAQ,eAAe;AAAA,QACpC;AACA,YAAI,UAAU,kBAAkB,GAAG;AACjC,gBAAM,WAAW,MAAM,QAAQ,OAAO,OAAO,EAAE;AAC/C,cACE,SAAS,eAAe,OAAO,QAC/B,SAAS,gBAAgB,OAAO,MAChC,SAAS,eAAe,MAAM,UAC9B,SAAS,YAAY,MAAM;AAE3B,kBAAM,IAAI,MAAM,4CAAS;AAAA,QAC7B,MAAO,OAAM,qBAAqB,MAAM,QAAQ,QAAQ,KAAK,cAAc,cAAc,CAAC;AAAA,MAC5F,OAAO;AACL,cAAM,WAAW,MAAM;AAAA,UACrB,KAAK,MAAM,MAAM,cAAc;AAAA,QACjC;AACA,YAAI,UAAU,SAAS,kBAAkB,SAAS,YAAY,OAAO;AACnE,gBAAM,IAAI,MAAM,0EAAc;AAAA,MAClC;AACA,UAAI,UAAU,CAAC,OAAO,aAAa;AACjC,cAAM,YAAY,MAAM,QAA4B,QAAQ,UAAU,gBAAgB;AACtF,YAAI,CAAC,UAAU,MAAO,OAAM,IAAI,MAAM,gIAAuB;AAAA,MAC/D;AACA,YAAM,YAAY,OAAO;AACzB,oBAAc,MAAM,oBAAoB,QAAQ,OAAO;AACvD,UAAI,UAAU;AACZ,cAAM,GAAG,MAAM,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACrD,cAAM,OAAO,MAAM,UAAU,MAAM,IAAI;AACvC,mBAAW,QAAQ,CAAC,cAAc,kBAAkB,gBAAgB,GAAG;AACrE,gBAAM,GAAG,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;AACnD,cAAI;AACF,kBAAM,YAAY,KAAK,MAAM,QAAQ,IAAI,GAAG,KAAK,MAAM,SAAS,IAAI,CAAC;AAAA,UACvE,SAAS,OAAO;AACd,gBAAK,MAAgC,SAAS,SAAU,OAAM;AAAA,UAChE;AAAA,QACF;AACA,cAAM,YAAY,KAAK,MAAM,QAAQ,aAAa,GAAG,MAAM,MAAM;AAAA,MACnE;AACA,YAAM,WAAW,MAAM;AAAA,QACrB,KAAK,MAAM,MAAM,cAAc;AAAA,MACjC;AACA,UAAI,UAAU,SAAS,kBAAkB,SAAS,YAAY,OAAO;AACnE,cAAM,IAAI,MAAM,0EAAc;AAChC,YAAM,OAAO,cAAc,0HAAsB;AACjD,UAAI;AACF,cAAM,cAAc;AACpB,sBAAc;AACd,cAAM,aAAa,OAAO;AAC1B,cAAM,sBAAsB,SAAS,OAAO,IAAI;AAChD,cAAM,OAAO,cAAc,oHAAqB;AAAA,MAClD,SAAS,OAAO;AACd,cAAM,OAAO,UAAU,uFAAiB,QAAQ,KAAK,CAAC,EAAE;AACxD,cAAM;AAAA,MACR;AACA;AAAA,IACF;AACA,UAAM,SAAS,MAAM,oBAAoB,QAAQ,IAAI;AACrD,QAAI,OAAQ,OAAM,IAAI,MAAM,MAAM;AAElC,eAAW,OAAO,MAAM,QAAQ,KAAK,QAAQ,SAAS,MAAM,WAAW,CAAC,GAAG;AACzE,UAAI,QAAQ,QAAQ,SAAS,IAAK;AAClC,YAAM,WAAW,MAAM;AAAA,QACrB,KAAK,QAAQ,SAAS,MAAM,aAAa,KAAK,eAAe;AAAA,MAC/D;AACA,UAAI,UAAU,SAAS,QAAQ,KAAM;AACrC,UAAI;AACF,cAAM,QAAQ,EAAE,GAAG,QAAQ,UAAU,QAAQ,SAAS,OAAO,GAAG,QAAQ;AACxE,cAAM,IAAI,MAAM,wJAAqC;AAAA,MACvD,SAAS,OAAO;AACd,YAAI,CAAC,aAAa,KAAK,EAAG,OAAM;AAAA,MAClC;AAAA,IACF;AACA,UAAM,OAAO,QAAQ,QAAQ,IAAI,GAAG,UAAU,IAAI;AAElD,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc,QAAQ;AAAA,QACtB;AAAA,QACA,GAAG,cAAc,IAAI,OAAO,MAAM;AAAA,MACpC;AAAA,MACA,EAAE,SAAS,KAAK,KAAQ,WAAW,IAAI,OAAO,KAAK;AAAA,IACrD;AACA,UAAM,YAAY,MAAM
|
|
4
|
+
"sourcesContent": ["import { BackupStore, backupDirectory, verifyLegacySnapshot } from '../backups/store.js';\nimport { acquireMaintenanceLock } from '../backups/lock.js';\nimport { acquireInstanceLock } from '../server/instance-lock.js';\nimport { inspectDatabase, readMigrations } from '../server/db/history.js';\nimport { databaseCompatibilitySchema } from '../shared/database.js';\nimport { npmPackageName } from '../shared/package.js';\nimport {\n codexCompatibilitySchema,\n requireCodexCompatibility,\n} from '../shared/codex-compatibility.js';\n// Bundled with its pure JavaScript dependencies and copied outside the installation before launch.\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { createRequire } from 'node:module';\nimport { access, mkdir, readdir, rm, rename } from 'node:fs/promises';\nimport { constants } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { setTimeout } from 'node:timers/promises';\nimport lockfile from 'proper-lockfile';\nimport type Database from 'better-sqlite3';\nimport type { UpdateRun } from '../shared/updates.js';\nimport type { UpdateContext } from './manager.js';\nimport { control, isNotRunning } from '../cli/control.js';\nimport { startBackground, stopBackground } from '../cli/background.js';\nimport { copyDurable, readJson, saveJson } from './files.js';\nimport { activateUpdate, transactionPaths } from './transaction.js';\nimport { inspectInstallation, registry } from './registry.js';\n\nconst exec = promisify(execFile);\nconst message = (error: unknown) => (error instanceof Error ? error.message : String(error));\ntype DaemonStatus = {\n version: string;\n pid: number;\n maintenance?: boolean;\n codexVersion?: string | null;\n codexReady?: boolean;\n};\n\nasync function startService(context: UpdateContext) {\n // Shared with `covro start`: never inherit a Background security session on macOS.\n // Activation is checked from the durable update record by the daemon.\n await startBackground(context.location, join(context.root, 'bin/covro.mjs'));\n}\nasync function stopService(context: UpdateContext) {\n await stopBackground(context.location);\n}\n\nasync function verifyRestoredService(context: UpdateContext, version: string) {\n for (let attempt = 0; attempt < 240; attempt++) {\n try {\n const restored = await control<DaemonStatus>(context.location, 'status');\n if (restored.version !== version || restored.maintenance)\n throw new Error('\u65E7\u7248\u6062\u590D\u8EAB\u4EFD\u4E0D\u5339\u914D');\n return;\n } catch (error) {\n if (attempt === 239) throw error;\n }\n await setTimeout(250);\n }\n}\n\nasync function verifyMigrations(context: UpdateContext, candidate: string) {\n // Loading the existing native addon happens before any package path is replaced.\n const require = createRequire(join(context.root, 'package.json'));\n const Sqlite = require('better-sqlite3') as typeof Database;\n const filename = join(context.dataDir, 'app.sqlite');\n try {\n await access(filename);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return;\n throw error;\n }\n const db = new Sqlite(filename, { readonly: true, fileMustExist: true });\n try {\n const migrations = readMigrations(join(candidate, 'dist/drizzle'));\n const metadata = await readJson<{ covroDatabase?: unknown }>(join(candidate, 'package.json'));\n if (metadata?.covroDatabase) {\n const contract = databaseCompatibilitySchema.parse(metadata.covroDatabase);\n if (contract.schemaVersion !== migrations.length)\n throw new Error('\u76EE\u6807\u7248\u672C\u7684 Schema \u58F0\u660E\u4E0E\u8FC1\u79FB\u4E0D\u4E00\u81F4');\n }\n inspectDatabase(db, migrations);\n } finally {\n db.close();\n }\n}\n\nasync function worker(directory: string) {\n await mkdir(directory, { recursive: true, mode: 0o700 });\n const release = await lockfile.lock(directory, {\n stale: 10_000,\n update: 2_000,\n retries: { retries: 30, minTimeout: 100, maxTimeout: 500 },\n });\n let record = await readJson<UpdateRun>(join(directory, 'run.json'));\n const context = await readJson<UpdateContext>(join(directory, 'context.json'));\n if (!record || !context) {\n await release();\n throw new Error('\u7F3A\u5C11\u5347\u7EA7\u8BB0\u5F55');\n }\n const update = async (phase: UpdateRun['phase'], detail: string) => {\n record = { ...record!, phase, message: detail, updatedAt: Date.now() };\n await saveJson(join(directory, 'run.json'), record);\n };\n const paths = transactionPaths(\n context.root,\n record.id,\n context.dataDir,\n context.location.config,\n join(backupDirectory(context.location.home, context.dataDir), record.id),\n );\n let releaseMaintenance: (() => Promise<void>) | undefined;\n let releaseData: (() => Promise<void>) | undefined;\n const previousMetadata = await readJson<{ version: string }>(\n join(paths.previous, 'package.json'),\n );\n const originalRoot = previousMetadata?.version === record.from ? paths.previous : context.root;\n const originalMetadata = await readJson<{\n version: string;\n covroCommit?: string;\n covroDatabase?: unknown;\n }>(join(originalRoot, 'package.json'));\n const Sqlite = createRequire(join(originalRoot, 'package.json'))(\n 'better-sqlite3',\n ) as typeof Database;\n const migrations = readMigrations(join(originalRoot, 'dist/drizzle'));\n const backups = new BackupStore({\n directory: backupDirectory(context.location.home, context.dataDir),\n config: paths.config,\n dataDir: paths.dataDir,\n appVersion: record.from,\n commit: originalMetadata?.covroCommit,\n contract: databaseCompatibilitySchema.parse(\n originalMetadata?.covroDatabase ?? {\n schemaVersion: migrations.length,\n minRestorableSchemaVersion: 1,\n backupFormatVersion: 1,\n },\n ),\n Sqlite,\n migrations,\n });\n try {\n if (process.argv[3] === '--repair') {\n releaseMaintenance = await acquireMaintenanceLock(context.dataDir);\n if (!(await readJson(join(paths.backup, 'snapshot.json'))))\n paths.backup = join(directory, `backup-${record.id}`);\n const active = await control<DaemonStatus>(context.location, 'status').catch(\n (error: unknown) => {\n if (isNotRunning(error)) return undefined;\n throw error;\n },\n );\n if (record.committed) return;\n if (active && !active.maintenance && active.version !== record.from)\n throw new Error('\u5F53\u524D\u670D\u52A1\u53EF\u80FD\u5DF2\u63A5\u53D7\u65B0\u7248\u4E1A\u52A1\u6570\u636E\uFF1B\u62D2\u7EDD\u6062\u590D\u65E7\u5FEB\u7167\uFF0C\u8BF7\u4F7F\u7528\u517C\u5BB9\u7248\u672C\u68C0\u67E5\u3002');\n const previous = await readJson<{ version: string; name: string }>(\n join(paths.previous, 'package.json'),\n );\n if (previous) {\n if (active && !active.maintenance)\n throw new Error('\u65E7\u670D\u52A1\u5DF2\u6062\u590D\u4E1A\u52A1\u5199\u5165\uFF1B\u62D2\u7EDD\u7528\u5347\u7EA7\u524D\u5FEB\u7167\u8986\u76D6\u73B0\u6709\u6570\u636E\uFF0C\u8BF7\u4FDD\u7559\u73B0\u573A\u68C0\u67E5\u3002');\n if (previous.name !== npmPackageName || previous.version !== record.from)\n throw new Error('\u65E7\u7248\u5907\u4EFD\u8EAB\u4EFD\u4E0D\u5339\u914D');\n const snapshot = await readJson<{ complete: boolean; formatVersion?: number }>(\n join(paths.backup, 'snapshot.json'),\n );\n if (snapshot?.formatVersion === 1) {\n const verified = await backups.verify(record.id);\n if (\n verified.appVersion !== record.from ||\n verified.protectedBy !== record.id ||\n verified.configPath !== paths.config ||\n verified.dataDir !== paths.dataDir\n )\n throw new Error('\u5907\u4EFD\u8EAB\u4EFD\u4E0D\u5339\u914D');\n } else await verifyLegacySnapshot(paths.backup, Sqlite, join(originalRoot, 'dist/drizzle'));\n } else {\n const original = await readJson<{ name: string; version: string }>(\n join(paths.root, 'package.json'),\n );\n if (original?.name !== npmPackageName || original.version !== record.from)\n throw new Error('\u672A\u627E\u5230\u5B8C\u6574\u7684\u4E0A\u4E00\u7248\u672C\u5B89\u88C5');\n }\n if (active && !active.maintenance) {\n const admission = await control<{ ready: boolean }>(context.location, 'prepare-update');\n if (!admission.ready) throw new Error('\u4ECD\u6709\u4EFB\u52A1\u3001\u5BA1\u6279\u6216\u5F85\u6838\u5BF9\u64CD\u4F5C\uFF0C\u4E0D\u80FD\u6062\u590D\u65E7\u5B89\u88C5');\n }\n await stopService(context);\n releaseData = await acquireInstanceLock(context.dataDir);\n if (previous) {\n await rm(paths.root, { recursive: true, force: true });\n await rename(paths.previous, paths.root);\n for (const name of ['app.sqlite', 'app.sqlite-wal', 'app.sqlite-shm']) {\n await rm(join(paths.dataDir, name), { force: true });\n try {\n await copyDurable(join(paths.backup, name), join(paths.dataDir, name));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n }\n await copyDurable(join(paths.backup, 'config.json'), paths.config);\n }\n const restored = await readJson<{ name: string; version: string }>(\n join(paths.root, 'package.json'),\n );\n if (restored?.name !== npmPackageName || restored.version !== record.from)\n throw new Error('\u672A\u627E\u5230\u5B8C\u6574\u7684\u4E0A\u4E00\u7248\u672C\u5B89\u88C5');\n await update('rolledBack', '\u5DF2\u6062\u590D\u4E0A\u6B21\u672A\u5B8C\u6210\u7684\u5347\u7EA7\uFF0C\u6B63\u5728\u542F\u52A8\u4E0A\u4E00\u7248\u672C');\n try {\n await releaseData?.();\n releaseData = undefined;\n await startService(context);\n await verifyRestoredService(context, record.from);\n await update('rolledBack', '\u5DF2\u6062\u590D\u4E0A\u6B21\u672A\u5B8C\u6210\u7684\u5347\u7EA7\uFF0C\u4E0A\u4E00\u7248\u672C\u5DF2\u5C31\u7EEA');\n } catch (error) {\n await update('failed', `\u65E7\u7248\u6062\u590D\u542F\u52A8\u5931\u8D25\uFF0C\u4FDD\u7559\u5907\u4EFD\uFF1A${message(error)}`);\n throw error;\n }\n return;\n }\n const reason = await inspectInstallation(context.root);\n if (reason) throw new Error(reason);\n // A second managed configuration must be stopped before replacing their shared npm package.\n for (const key of await readdir(join(context.location.home, 'instances'))) {\n if (key === context.location.key) continue;\n const instance = await readJson<{ root: string; config: string; socket: string }>(\n join(context.location.home, 'instances', key, 'instance.json'),\n );\n if (instance?.root !== context.root) continue;\n try {\n await control({ ...context.location, socket: instance.socket }, 'status');\n throw new Error('\u540C\u4E00 npm \u5B89\u88C5\u8FD8\u6709\u5176\u4ED6 Covro \u5B9E\u4F8B\uFF0C\u8BF7\u5148\u505C\u6B62\u5176\u4ED6\u5B9E\u4F8B\u518D\u5347\u7EA7\u3002');\n } catch (error) {\n if (!isNotRunning(error)) throw error;\n }\n }\n await access(dirname(context.root), constants.W_OK);\n // npm global layout keeps production dependencies nested in the package being swapped.\n await exec(\n 'npm',\n [\n 'install',\n '--global',\n '--prefix',\n paths.prefix,\n '--omit=dev',\n '--no-audit',\n '--no-fund',\n `--registry=${registry}`,\n '--allow-scripts=better-sqlite3',\n `${npmPackageName}@${record.target}`,\n ],\n { timeout: 10 * 60_000, maxBuffer: 2 * 1024 * 1024 },\n );\n const candidate = await readJson<{\n name: string;\n version: string;\n covroCodex?: unknown;\n covroCommit?: string;\n gitHead?: string;\n }>(join(paths.candidate, 'package.json'));\n if (candidate?.name !== npmPackageName || candidate.version !== record.target)\n throw new Error('\u5019\u9009\u5305\u8EAB\u4EFD\u6216\u7248\u672C\u4E0D\u5339\u914D');\n if (record.commit && (candidate.covroCommit ?? candidate.gitHead) !== record.commit)\n throw new Error('\u5019\u9009\u5305\u6E90\u7801\u63D0\u4EA4\u4E0E\u68C0\u67E5\u65F6\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u5207\u6362');\n if (!record.codex) throw new Error('\u7F3A\u5C11 Codex \u5347\u7EA7\u6821\u9A8C\u8BB0\u5F55\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0');\n const manifest = codexCompatibilitySchema.parse(candidate.covroCodex);\n if (JSON.stringify(manifest) !== JSON.stringify(record.codex.manifest))\n throw new Error('\u5019\u9009\u5305\u7684 Codex \u517C\u5BB9\u58F0\u660E\u4E0E\u68C0\u67E5\u65F6\u4E0D\u4E00\u81F4\uFF0C\u62D2\u7EDD\u5207\u6362');\n const checkCodex = async (current?: DaemonStatus) => {\n const state = current ?? (await control<DaemonStatus>(context.location, 'status'));\n if (state.codexVersion !== record!.codex!.version)\n throw new Error('Codex \u7248\u672C\u5728\u7B49\u5F85\u5347\u7EA7\u671F\u95F4\u53D1\u751F\u53D8\u5316\uFF0C\u8BF7\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0');\n requireCodexCompatibility(\n manifest,\n state.codexVersion ?? null,\n record!.codex!.confirmedUnverified,\n );\n };\n await checkCodex();\n await exec(process.execPath, [join(paths.candidate, 'bin/covro.mjs'), '--version'], {\n timeout: 30_000,\n });\n const nativeProbe =\n 'const {createRequire}=await import(\"node:module\"); const r=createRequire(process.argv[1]); const DB=r(\"better-sqlite3\"); const db=new DB(\":memory:\"); db.close();';\n await exec(\n process.execPath,\n ['--input-type=module', '-e', nativeProbe, join(paths.candidate, 'package.json')],\n { timeout: 30_000 },\n );\n await verifyMigrations(context, paths.candidate);\n releaseMaintenance = await acquireMaintenanceLock(context.dataDir);\n await activateUpdate(paths, {\n backup: async () => {\n releaseData = await acquireInstanceLock(context.dataDir);\n await backups.create({ id: record!.id, trigger: 'preUpgrade', protectedBy: record!.id });\n },\n restore: async () => {\n releaseData ??= await acquireInstanceLock(context.dataDir);\n await backups.restoreFiles(record!.id);\n },\n phase: update,\n waitForIdle: async () => {\n // Queue without blocking normal work; admission closes atomically only after all blockers clear.\n for (;;) {\n await checkCodex();\n const result = await control<{ ready: boolean; reason?: string }>(\n context.location,\n 'prepare-update',\n );\n if (result.ready) {\n await checkCodex();\n return;\n }\n await update('waiting', result.reason ?? '\u7B49\u5F85\u6240\u6709\u4EFB\u52A1\u7ED3\u675F');\n await setTimeout(2_000);\n }\n },\n stop: () => stopService(context),\n start: async (candidate) => {\n await releaseData?.();\n releaseData = undefined;\n await startService(context);\n if (!candidate) await verifyRestoredService(context, record!.from);\n },\n verify: async () => {\n for (let attempt = 0; attempt < 240; attempt++) {\n const current = await control<DaemonStatus>(context.location, 'status').catch(\n () => undefined,\n );\n if (current) {\n if (current.version !== record!.target || !current.maintenance)\n throw new Error('\u65B0\u7248\u670D\u52A1\u8EAB\u4EFD\u6216\u7EF4\u62A4\u72B6\u6001\u4E0D\u5339\u914D');\n await checkCodex(current);\n if (current.codexReady) return;\n }\n await setTimeout(250);\n }\n throw new Error('\u65B0\u7248\u670D\u52A1\u6216 Codex \u8FDE\u63A5\u672A\u5C31\u7EEA\uFF0C\u62D2\u7EDD\u6FC0\u6D3B');\n },\n commit: async () => {\n // Gateway commits the durable result before reopening task admission.\n await control(context.location, 'activate-update', {\n id: record!.id,\n channel: record!.channel,\n });\n const final = await readJson<UpdateRun>(join(directory, 'run.json'));\n if (!final?.committed) throw new Error('\u65B0\u7248\u5C1A\u672A\u786E\u8BA4\u5347\u7EA7\u63D0\u4EA4');\n record = final;\n },\n hasCommitted: async () =>\n Boolean((await readJson<UpdateRun>(join(directory, 'run.json')))?.committed),\n resume: async () => {\n await control(context.location, 'cancel-update').catch(() => {});\n },\n });\n } catch (error) {\n const latest = await readJson<UpdateRun>(join(directory, 'run.json'));\n if (latest?.committed) {\n // A lost commit response cannot authorize restoring older data.\n record = latest;\n } else if (!['rolledBack', 'failed'].includes(record.phase))\n await update('failed', message(error));\n console.error(message(error));\n process.exitCode = record.committed || record.phase === 'rolledBack' ? 0 : 1;\n } finally {\n await releaseData?.();\n await releaseMaintenance?.();\n await release();\n // Keep the last good installation and database backup for explicit recovery.\n if (record.phase === 'succeeded' || record.phase === 'rolledBack') {\n await rm(paths.prefix, { recursive: true, force: true });\n }\n }\n}\n\nif (process.argv[2])\n void worker(process.argv[2]).catch((error: unknown) => {\n console.error(message(error));\n process.exitCode = 1;\n });\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["require", "candidate"]
|
|
7
7
|
}
|
package/dist/web/assets/{abnfDiagram-WEYOIA3C-DLvlob5t.js → abnfDiagram-WEYOIA3C-BFmMm05x.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-Cr4hqI31.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-Dy1r7Mij.js";import"./chunk-DSNLSHJZ-ByVh88M0.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-CqOBPcBj.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-Ch6ggfwZ.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-
|
|
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-C-d_G2FS.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};
|
package/dist/web/assets/{architecture-WOLXFQ4H-DvjLv0QN.js → architecture-WOLXFQ4H-CDbpw3av.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-
|
|
1
|
+
import"./chunk-NGNAAXSQ-C2Wy9Xmz.js";export{M as createArchitectureServices}from"./mermaid-parser.core-Cr4hqI31.js";
|