flavor-code 1.2.8 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +47 -0
  2. package/README.zh-CN.md +42 -0
  3. package/dist/agent/loop.d.ts +4 -0
  4. package/dist/agent/types.d.ts +10 -0
  5. package/dist/{app-NL2O75LQ.js → app-USAFQVSX.js} +379 -12
  6. package/dist/{chunk-NVLYFU6P.js → chunk-F2HMO5Q2.js} +28 -11
  7. package/dist/{chunk-6X5PHLZI.js → chunk-G32MCAZA.js} +1 -1
  8. package/dist/{chunk-N2S7USST.js → chunk-RQTYHUMK.js} +2 -1
  9. package/dist/{chunk-ED4R7ZCP.js → chunk-WGYNTR4Q.js} +1820 -492
  10. package/dist/{chunk-MBLAXTUP.js → chunk-XFCJXRJ2.js} +15 -5
  11. package/dist/{claude-ink-WPWPEL5A.js → claude-ink-ORUA7GWG.js} +2 -2
  12. package/dist/cli.js +9 -8
  13. package/dist/config/protected-file.d.ts +6 -0
  14. package/dist/context/manager.d.ts +2 -0
  15. package/dist/context/workspace-instructions.d.ts +10 -0
  16. package/dist/desktop/main.js +10528 -2912
  17. package/dist/desktop/pixel-worker.js +73 -0
  18. package/dist/desktop/preload.cjs +80 -2
  19. package/dist/desktop-renderer/assets/index-BVxdOZFW.js +151 -0
  20. package/dist/desktop-renderer/assets/index-CPxt3vFY.css +1 -0
  21. package/dist/desktop-renderer/index.html +3 -4
  22. package/dist/harness/local.d.ts +4 -1
  23. package/dist/jobs/registry.d.ts +48 -0
  24. package/dist/{load-RN3WBX4C.js → load-6ZMEBHSG.js} +1 -1
  25. package/dist/permissions/engine.d.ts +7 -0
  26. package/dist/production.d.ts +13 -1
  27. package/dist/sdk/index.js +4 -4
  28. package/dist/terminal/service.d.ts +57 -0
  29. package/dist/tools/files.d.ts +10 -0
  30. package/dist/tools/jobs.d.ts +4 -0
  31. package/dist/tools/runtime.d.ts +2 -0
  32. package/dist/tools/shell.d.ts +13 -3
  33. package/dist/tools/terminal.d.ts +3 -0
  34. package/dist/tools/types.d.ts +76 -4
  35. package/dist/tools/web.d.ts +53 -0
  36. package/package.json +13 -2
  37. package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +752 -1
  38. package/dist/desktop-renderer/assets/index-57tXtXhI.js +0 -143
  39. package/dist/desktop-renderer/assets/index-Cm_ktmXm.css +0 -1
@@ -0,0 +1,73 @@
1
+ // src/d2c/pixel-worker.ts
2
+ import { parentPort } from "worker_threads";
3
+
4
+ // src/d2c/pixel.ts
5
+ import { Buffer as Buffer2 } from "buffer";
6
+ import pixelmatch from "pixelmatch";
7
+ import { PNG } from "pngjs";
8
+ var D2C_MAX_PNG_BYTES = 32 * 1024 * 1024;
9
+ var D2C_MAX_PIXELS = 8388608;
10
+ var PNG_SIGNATURE = Buffer2.from([137, 80, 78, 71, 13, 10, 26, 10]);
11
+ function assertPngDimensions(png) {
12
+ if (png.byteLength > D2C_MAX_PNG_BYTES) throw new Error("PNG buffer exceeds the supported size");
13
+ if (png.byteLength < 24 || !png.subarray(0, PNG_SIGNATURE.length).equals(PNG_SIGNATURE) || png.toString("ascii", 12, 16) !== "IHDR") {
14
+ throw new Error("Invalid PNG header");
15
+ }
16
+ const width = png.readUInt32BE(16);
17
+ const height = png.readUInt32BE(20);
18
+ if (width === 0 || height === 0 || width * height > D2C_MAX_PIXELS) {
19
+ throw new Error(`PNG dimensions exceed the supported pixel limit: ${width}x${height}`);
20
+ }
21
+ return { width, height };
22
+ }
23
+ function padToCanvas(image, width, height) {
24
+ if (image.width === width && image.height === height) return image;
25
+ const canvas = new PNG({ width, height });
26
+ canvas.data.fill(255);
27
+ for (let y = 0; y < Math.min(image.height, height); y += 1) {
28
+ const sourceStart = y * image.width * 4;
29
+ const targetStart = y * width * 4;
30
+ image.data.copy(canvas.data, targetStart, sourceStart, sourceStart + Math.min(image.width, width) * 4);
31
+ }
32
+ return canvas;
33
+ }
34
+ function comparePngs(leftPng, rightPng) {
35
+ if (leftPng.byteLength === 0 || rightPng.byteLength === 0) throw new Error("Empty PNG buffer");
36
+ if (leftPng.byteLength > D2C_MAX_PNG_BYTES || rightPng.byteLength > D2C_MAX_PNG_BYTES) {
37
+ throw new Error("PNG buffer exceeds the supported size");
38
+ }
39
+ assertPngDimensions(leftPng);
40
+ assertPngDimensions(rightPng);
41
+ const left = PNG.sync.read(leftPng);
42
+ const right = PNG.sync.read(rightPng);
43
+ const width = Math.max(left.width, right.width);
44
+ const height = Math.max(left.height, right.height);
45
+ if (width * height > D2C_MAX_PIXELS) throw new Error("Unified PNG canvas exceeds the supported pixel limit");
46
+ const canvasLeft = padToCanvas(left, width, height);
47
+ const canvasRight = padToCanvas(right, width, height);
48
+ const heatmap = new PNG({ width, height });
49
+ const mismatches = pixelmatch(canvasLeft.data, canvasRight.data, heatmap.data, width, height, { threshold: 0.1 });
50
+ return {
51
+ width,
52
+ height,
53
+ mismatchRate: mismatches / (width * height),
54
+ heatmapPng: PNG.sync.write(heatmap)
55
+ };
56
+ }
57
+
58
+ // src/d2c/pixel-worker.ts
59
+ if (parentPort === null) throw new Error("D2C pixel worker must run in a worker thread");
60
+ parentPort.on("message", (message) => {
61
+ try {
62
+ const result = comparePngs(Buffer.from(message.left), Buffer.from(message.right));
63
+ parentPort.postMessage({
64
+ ok: true,
65
+ result: { ...result, heatmapPng: new Uint8Array(result.heatmapPng) }
66
+ });
67
+ } catch (cause) {
68
+ parentPort.postMessage({
69
+ ok: false,
70
+ error: cause instanceof Error ? cause.message : String(cause)
71
+ });
72
+ }
73
+ });
@@ -35,6 +35,36 @@ var DESKTOP_CHANNELS = {
35
35
  deleteMemory: "desktop:delete-memory",
36
36
  switchModel: "desktop:switch-model",
37
37
  addModel: "desktop:add-model",
38
+ d2cImport: "desktop:d2c-import",
39
+ d2cCreateProduct: "desktop:d2c-create-product",
40
+ d2cGetProduct: "desktop:d2c-get-product",
41
+ d2cRegeneratePrd: "desktop:d2c-regenerate-prd",
42
+ d2cUpdatePrdSection: "desktop:d2c-update-prd-section",
43
+ d2cDecideProduct: "desktop:d2c-decide-product",
44
+ d2cStartProductPreview: "desktop:d2c-start-product-preview",
45
+ d2cStopProductPreview: "desktop:d2c-stop-product-preview",
46
+ d2cGetProductPreviewStatus: "desktop:d2c-get-product-preview-status",
47
+ d2cOpenProductPreview: "desktop:d2c-open-product-preview",
48
+ d2cListReports: "desktop:d2c-list-reports",
49
+ d2cGetReport: "desktop:d2c-get-report",
50
+ d2cUpdateReview: "desktop:d2c-update-review",
51
+ d2cImportOpenApi: "desktop:d2c-import-openapi",
52
+ d2cGetIntegration: "desktop:d2c-get-integration",
53
+ d2cConfirmMapping: "desktop:d2c-confirm-mapping",
54
+ d2cGenerateIntegration: "desktop:d2c-generate-integration",
55
+ d2cStartMock: "desktop:d2c-start-mock",
56
+ d2cStopMock: "desktop:d2c-stop-mock",
57
+ d2cGetMockStatus: "desktop:d2c-get-mock-status",
58
+ d2cStartPreview: "desktop:d2c-start-preview",
59
+ d2cStopPreview: "desktop:d2c-stop-preview",
60
+ d2cGetPreviewStatus: "desktop:d2c-get-preview-status",
61
+ d2cOpenPreview: "desktop:d2c-open-preview",
62
+ d2cRunInteractionTests: "desktop:d2c-run-interaction-tests",
63
+ d2cGetJudgeConfig: "desktop:d2c-get-judge-config",
64
+ d2cSaveJudgeConfig: "desktop:d2c-save-judge-config",
65
+ d2cRunQualityJudge: "desktop:d2c-run-quality-judge",
66
+ d2cResolveQualityIssue: "desktop:d2c-resolve-quality-issue",
67
+ d2cSetManualAcceptance: "desktop:d2c-set-manual-acceptance",
38
68
  event: "desktop:event"
39
69
  };
40
70
 
@@ -50,10 +80,11 @@ var api = {
50
80
  ),
51
81
  deleteSession: (sessionId) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.deleteSession, { sessionId }),
52
82
  showAppMenu: (menu, x, y) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.showAppMenu, { menu, x, y }),
53
- submit: (prompt, delivery = "prompt", attachments = []) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.submit, {
83
+ submit: (prompt, delivery = "prompt", attachments = [], permissionProfile) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.submit, {
54
84
  prompt,
55
85
  delivery,
56
- ...attachments.length === 0 ? {} : { attachments }
86
+ ...attachments.length === 0 ? {} : { attachments },
87
+ ...permissionProfile === void 0 ? {} : { permissionProfile }
57
88
  }),
58
89
  finishTask: () => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.finishTask),
59
90
  interrupt: () => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.interrupt),
@@ -80,6 +111,53 @@ var api = {
80
111
  deleteMemory: (id) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.deleteMemory, { id }),
81
112
  switchModel: (modelId) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.switchModel, { modelId }),
82
113
  addModel: (input) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.addModel, input),
114
+ listD2cReports: () => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cListReports),
115
+ getD2cReport: (task, reportId) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetReport, {
116
+ task,
117
+ ...reportId === void 0 ? {} : { reportId }
118
+ }),
119
+ importD2cDesign: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cImport, { task }),
120
+ createD2cProduct: (input) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cCreateProduct, input),
121
+ getD2cProduct: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetProduct, { task }),
122
+ regenerateD2cPrd: (task, query) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cRegeneratePrd, { task, query }),
123
+ updateD2cPrdSection: (task, sectionId, body, expectedHash) => import_electron.ipcRenderer.invoke(
124
+ DESKTOP_CHANNELS.d2cUpdatePrdSection,
125
+ { task, sectionId, body, expectedHash }
126
+ ),
127
+ decideD2cProduct: (task, stage, accepted, feedback) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cDecideProduct, {
128
+ task,
129
+ stage,
130
+ accepted,
131
+ ...feedback === void 0 ? {} : { feedback }
132
+ }),
133
+ startD2cProductPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStartProductPreview, { task }),
134
+ stopD2cProductPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStopProductPreview, { task }),
135
+ getD2cProductPreviewStatus: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetProductPreviewStatus, { task }),
136
+ openD2cProductPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cOpenProductPreview, { task }),
137
+ updateD2cReview: (task, reportId, fingerprints, decision, instruction) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cUpdateReview, {
138
+ task,
139
+ reportId,
140
+ fingerprints,
141
+ decision,
142
+ ...instruction === void 0 ? {} : { instruction }
143
+ }),
144
+ importD2cOpenApi: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cImportOpenApi, { task }),
145
+ getD2cIntegration: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetIntegration, { task }),
146
+ confirmD2cMapping: (task, moduleId, operationKey) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cConfirmMapping, { task, moduleId, operationKey }),
147
+ generateD2cIntegration: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGenerateIntegration, { task }),
148
+ startD2cMock: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStartMock, { task }),
149
+ stopD2cMock: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStopMock, { task }),
150
+ getD2cMockStatus: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetMockStatus, { task }),
151
+ startD2cPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStartPreview, { task }),
152
+ stopD2cPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cStopPreview, { task }),
153
+ getD2cPreviewStatus: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetPreviewStatus, { task }),
154
+ openD2cPreview: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cOpenPreview, { task }),
155
+ runD2cInteractionTests: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cRunInteractionTests, { task }),
156
+ setD2cManualAcceptance: (task, accepted) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cSetManualAcceptance, { task, accepted }),
157
+ getD2cJudgeConfig: () => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cGetJudgeConfig),
158
+ saveD2cJudgeConfig: (input) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cSaveJudgeConfig, input),
159
+ runD2cQualityJudge: (task) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cRunQualityJudge, { task }),
160
+ resolveD2cQualityIssue: (task, issueId, decision) => import_electron.ipcRenderer.invoke(DESKTOP_CHANNELS.d2cResolveQualityIssue, { task, issueId, decision }),
83
161
  onEvent(listener) {
84
162
  const handler = (_event, value) => listener(value);
85
163
  import_electron.ipcRenderer.on(DESKTOP_CHANNELS.event, handler);