flavor-code 1.2.7 → 1.2.9
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 +405 -369
- package/README.zh-CN.md +387 -356
- package/dist/agent/loop.d.ts +4 -0
- package/dist/agent/types.d.ts +10 -0
- package/dist/{app-R3SDG2OH.js → app-USAFQVSX.js} +379 -12
- package/dist/{chunk-NVLYFU6P.js → chunk-F2HMO5Q2.js} +28 -11
- package/dist/{chunk-WN2EZV3Y.js → chunk-G32MCAZA.js} +1 -1
- package/dist/{chunk-N2S7USST.js → chunk-RQTYHUMK.js} +2 -1
- package/dist/{chunk-5RHJ3PQN.js → chunk-WGYNTR4Q.js} +1834 -495
- package/dist/{chunk-HFR2WS6T.js → chunk-XFCJXRJ2.js} +18 -5
- package/dist/{claude-ink-WPWPEL5A.js → claude-ink-ORUA7GWG.js} +2 -2
- package/dist/cli.js +9 -8
- package/dist/config/protected-file.d.ts +6 -0
- package/dist/config/schema.d.ts +2 -0
- package/dist/context/manager.d.ts +2 -0
- package/dist/context/workspace-instructions.d.ts +10 -0
- package/dist/desktop/main.js +12736 -5178
- package/dist/desktop/pixel-worker.js +73 -0
- package/dist/desktop/preload.cjs +80 -2
- package/dist/desktop-renderer/assets/index-D-s27J39.js +151 -0
- package/dist/desktop-renderer/assets/index-DMZBSGrp.css +1 -0
- package/dist/desktop-renderer/index.html +3 -4
- package/dist/harness/local.d.ts +4 -1
- package/dist/jobs/registry.d.ts +48 -0
- package/dist/{load-XC5JYYBQ.js → load-6ZMEBHSG.js} +1 -1
- package/dist/models/anthropic.d.ts +4 -0
- package/dist/permissions/engine.d.ts +7 -0
- package/dist/production.d.ts +13 -1
- package/dist/sdk/index.js +4 -4
- package/dist/terminal/service.d.ts +57 -0
- package/dist/tools/files.d.ts +10 -0
- package/dist/tools/jobs.d.ts +4 -0
- package/dist/tools/runtime.d.ts +2 -0
- package/dist/tools/shell.d.ts +13 -3
- package/dist/tools/terminal.d.ts +3 -0
- package/dist/tools/types.d.ts +76 -4
- package/dist/tools/web.d.ts +53 -0
- package/package.json +13 -2
- package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +752 -1
- package/dist/desktop-renderer/assets/index-CLrVaR9H.js +0 -143
- 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
|
+
});
|
package/dist/desktop/preload.cjs
CHANGED
|
@@ -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);
|