@su-record/vibe 2.9.25 → 2.9.33
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/CLAUDE.md +7 -4
- package/commands/vibe.figma.md +16 -0
- package/commands/vibe.run.md +6 -0
- package/commands/vibe.verify.md +22 -0
- package/dist/cli/auth.d.ts +7 -1
- package/dist/cli/auth.d.ts.map +1 -1
- package/dist/cli/auth.js +51 -11
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.d.ts +5 -1
- package/dist/cli/collaborator.d.ts.map +1 -1
- package/dist/cli/collaborator.js +10 -5
- package/dist/cli/collaborator.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +5 -21
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts +13 -5
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +73 -32
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +21 -8
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +14 -8
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/postinstall/global-config.d.ts.map +1 -1
- package/dist/cli/postinstall/global-config.js +8 -4
- package/dist/cli/postinstall/global-config.js.map +1 -1
- package/dist/cli/postinstall/main.d.ts.map +1 -1
- package/dist/cli/postinstall/main.js +11 -0
- package/dist/cli/postinstall/main.js.map +1 -1
- package/dist/cli/setup/LegacyMigration.d.ts +14 -0
- package/dist/cli/setup/LegacyMigration.d.ts.map +1 -1
- package/dist/cli/setup/LegacyMigration.js +61 -0
- package/dist/cli/setup/LegacyMigration.js.map +1 -1
- package/dist/cli/setup/ProjectSetup.d.ts +18 -7
- package/dist/cli/setup/ProjectSetup.d.ts.map +1 -1
- package/dist/cli/setup/ProjectSetup.js +144 -104
- package/dist/cli/setup/ProjectSetup.js.map +1 -1
- package/dist/cli/setup/Provisioner.js +2 -2
- package/dist/cli/setup/Provisioner.js.map +1 -1
- package/dist/cli/setup.d.ts +2 -2
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +2 -2
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/utils/cli-detector.d.ts +9 -6
- package/dist/cli/utils/cli-detector.d.ts.map +1 -1
- package/dist/cli/utils/cli-detector.js +127 -8
- package/dist/cli/utils/cli-detector.js.map +1 -1
- package/dist/infra/lib/browser/compare.d.ts +27 -0
- package/dist/infra/lib/browser/compare.d.ts.map +1 -1
- package/dist/infra/lib/browser/compare.js +55 -0
- package/dist/infra/lib/browser/compare.js.map +1 -1
- package/dist/infra/lib/browser/index.d.ts +2 -1
- package/dist/infra/lib/browser/index.d.ts.map +1 -1
- package/dist/infra/lib/browser/index.js +1 -1
- package/dist/infra/lib/browser/index.js.map +1 -1
- package/dist/infra/lib/figma/audit.d.ts +37 -0
- package/dist/infra/lib/figma/audit.d.ts.map +1 -0
- package/dist/infra/lib/figma/audit.js +130 -0
- package/dist/infra/lib/figma/audit.js.map +1 -0
- package/dist/infra/lib/figma/extract.d.ts +21 -1
- package/dist/infra/lib/figma/extract.d.ts.map +1 -1
- package/dist/infra/lib/figma/extract.js +84 -12
- package/dist/infra/lib/figma/extract.js.map +1 -1
- package/dist/infra/lib/figma/index.d.ts +4 -2
- package/dist/infra/lib/figma/index.d.ts.map +1 -1
- package/dist/infra/lib/figma/index.js +2 -1
- package/dist/infra/lib/figma/index.js.map +1 -1
- package/dist/infra/lib/figma/types.d.ts +31 -0
- package/dist/infra/lib/figma/types.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.d.ts +5 -0
- package/dist/infra/lib/memory/MemoryStorage.d.ts.map +1 -1
- package/dist/infra/lib/memory/MemoryStorage.js +21 -2
- package/dist/infra/lib/memory/MemoryStorage.js.map +1 -1
- package/hooks/hooks.json +8 -0
- package/hooks/scripts/command-log.js +3 -3
- package/hooks/scripts/context-save.js +3 -3
- package/hooks/scripts/evolution-engine.js +2 -2
- package/hooks/scripts/figma-extract.js +134 -1
- package/hooks/scripts/lib/dispatcher.js +9 -5
- package/hooks/scripts/lib/scope-from-spec.js +20 -5
- package/hooks/scripts/prompt-dispatcher.js +5 -3
- package/hooks/scripts/scope-guard.js +3 -3
- package/hooks/scripts/session-start.js +3 -3
- package/hooks/scripts/step-counter.js +45 -0
- package/hooks/scripts/stop-notify.js +2 -2
- package/hooks/scripts/utils.js +62 -4
- package/package.json +1 -1
- package/skills/vibe-figma-extract/SKILL.md +22 -0
- package/vibe/templates/claudemd-template.md +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Figma Node Audit — pre-implementation gate that flags properties which
|
|
3
|
+
* Figma's native renderer supports but the browser CSS engine does not
|
|
4
|
+
* (or translates differently). Designer fixes these BEFORE AI reads the
|
|
5
|
+
* file, so the MCP / REST pipeline never sees them.
|
|
6
|
+
*
|
|
7
|
+
* Three failure classes from the Figma↔CSS gap analysis:
|
|
8
|
+
* 1. Mistranslation — caught by compareRaw (step 4)
|
|
9
|
+
* 2. Unsupported property — THIS MODULE (step 0)
|
|
10
|
+
* 3. Silent drop — extract.ts now warns instead of dropping
|
|
11
|
+
*/
|
|
12
|
+
export type AuditSeverity = 'P1' | 'P2';
|
|
13
|
+
export interface AuditFinding {
|
|
14
|
+
nodeId: string;
|
|
15
|
+
/** "Frame / Card / Title" — dot-joined name trail for designer navigation. */
|
|
16
|
+
path: string;
|
|
17
|
+
name: string;
|
|
18
|
+
type: string;
|
|
19
|
+
property: string;
|
|
20
|
+
value: string;
|
|
21
|
+
severity: AuditSeverity;
|
|
22
|
+
/** What breaks in the browser. */
|
|
23
|
+
note: string;
|
|
24
|
+
/** Designer-facing remediation. */
|
|
25
|
+
action: string;
|
|
26
|
+
}
|
|
27
|
+
export interface AuditReport {
|
|
28
|
+
fileKey: string;
|
|
29
|
+
nodeId: string;
|
|
30
|
+
scannedNodes: number;
|
|
31
|
+
findings: AuditFinding[];
|
|
32
|
+
p1Count: number;
|
|
33
|
+
p2Count: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function auditNode(fileKey: string, nodeId: string, depth?: number): Promise<AuditReport>;
|
|
36
|
+
export declare function formatAuditReport(report: AuditReport): string;
|
|
37
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2FD,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBrG;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAiB7D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Figma Node Audit — pre-implementation gate that flags properties which
|
|
3
|
+
* Figma's native renderer supports but the browser CSS engine does not
|
|
4
|
+
* (or translates differently). Designer fixes these BEFORE AI reads the
|
|
5
|
+
* file, so the MCP / REST pipeline never sees them.
|
|
6
|
+
*
|
|
7
|
+
* Three failure classes from the Figma↔CSS gap analysis:
|
|
8
|
+
* 1. Mistranslation — caught by compareRaw (step 4)
|
|
9
|
+
* 2. Unsupported property — THIS MODULE (step 0)
|
|
10
|
+
* 3. Silent drop — extract.ts now warns instead of dropping
|
|
11
|
+
*/
|
|
12
|
+
import { figmaFetch, loadToken } from './api.js';
|
|
13
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
14
|
+
const UNSUPPORTED_BLEND_MODES = new Set([
|
|
15
|
+
'LINEAR_BURN',
|
|
16
|
+
'LINEAR_DODGE',
|
|
17
|
+
'PLUS_DARKER',
|
|
18
|
+
'PLUS_LIGHTER',
|
|
19
|
+
]);
|
|
20
|
+
function pushFrom(node, trail, findings) {
|
|
21
|
+
const path = trail.join(' / ') || node.name || node.id;
|
|
22
|
+
const base = { nodeId: node.id, path, name: node.name ?? '', type: node.type };
|
|
23
|
+
// 1. stroke alignment — CSS border is always centered; INSIDE/OUTSIDE
|
|
24
|
+
// shift layout box vs. visual box and have no direct equivalent.
|
|
25
|
+
if (node.strokes?.length && node.strokeAlign && node.strokeAlign !== 'CENTER') {
|
|
26
|
+
findings.push({
|
|
27
|
+
...base,
|
|
28
|
+
property: 'strokeAlign',
|
|
29
|
+
value: String(node.strokeAlign),
|
|
30
|
+
severity: 'P1',
|
|
31
|
+
note: 'CSS border is always drawn centered on the path — INSIDE/OUTSIDE shifts do not translate.',
|
|
32
|
+
action: `Change stroke alignment to CENTER in Figma (current: ${node.strokeAlign}).`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// 2. blend modes without a CSS mix-blend-mode equivalent.
|
|
36
|
+
if (node.blendMode && UNSUPPORTED_BLEND_MODES.has(node.blendMode)) {
|
|
37
|
+
findings.push({
|
|
38
|
+
...base,
|
|
39
|
+
property: 'blendMode',
|
|
40
|
+
value: String(node.blendMode),
|
|
41
|
+
severity: 'P1',
|
|
42
|
+
note: 'CSS mix-blend-mode has no equivalent — Figma renderer only.',
|
|
43
|
+
action: `Replace with a supported blend mode (MULTIPLY / SCREEN / OVERLAY / …) or bake into the asset.`,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// 3. vertical trim / leading-trim → text-box-trim, Firefox unsupported as of 2026-04.
|
|
47
|
+
if (node.style && (node.style.leadingTrim || node.style.textBoxTrim)) {
|
|
48
|
+
findings.push({
|
|
49
|
+
...base,
|
|
50
|
+
property: 'style.leadingTrim',
|
|
51
|
+
value: String(node.style.leadingTrim ?? node.style.textBoxTrim),
|
|
52
|
+
severity: 'P2',
|
|
53
|
+
note: 'Maps to CSS text-box-trim — not supported in Firefox yet, inconsistent across engines.',
|
|
54
|
+
action: 'Disable vertical trim in Figma, rely on explicit line-height instead.',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
// 4. Constraints set to SCALE or CENTER — semantics differ from CSS position:absolute fixed offsets.
|
|
58
|
+
for (const axis of ['horizontal', 'vertical']) {
|
|
59
|
+
const v = node.constraints?.[axis];
|
|
60
|
+
if (v === 'SCALE' || v === 'CENTER') {
|
|
61
|
+
findings.push({
|
|
62
|
+
...base,
|
|
63
|
+
property: `constraints.${axis}`,
|
|
64
|
+
value: String(v),
|
|
65
|
+
severity: 'P2',
|
|
66
|
+
note: `Constraints.${axis}=${v} scales/centers relative to parent — CSS position: absolute uses fixed offsets, behaviour diverges on resize.`,
|
|
67
|
+
action: `Switch to LEFT / RIGHT / TOP / BOTTOM / LEFT_RIGHT / TOP_BOTTOM, or use Auto Layout instead.`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// 5. individualStrokeWeights with non-CENTER align compounds problem 1.
|
|
72
|
+
if (node.individualStrokeWeights && node.strokeAlign && node.strokeAlign !== 'CENTER') {
|
|
73
|
+
findings.push({
|
|
74
|
+
...base,
|
|
75
|
+
property: 'individualStrokeWeights',
|
|
76
|
+
value: 'set with non-center alignment',
|
|
77
|
+
severity: 'P2',
|
|
78
|
+
note: 'Per-side stroke widths + INSIDE/OUTSIDE alignment compounds — CSS border-width per-side is centered only.',
|
|
79
|
+
action: 'Keep per-side widths but set strokeAlign=CENTER.',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function walkAudit(node, trail, findings, counter) {
|
|
84
|
+
counter.n += 1;
|
|
85
|
+
const nextTrail = [...trail, node.name ?? node.id];
|
|
86
|
+
pushFrom(node, nextTrail, findings);
|
|
87
|
+
if (node.children?.length) {
|
|
88
|
+
for (const child of node.children)
|
|
89
|
+
walkAudit(child, nextTrail, findings, counter);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
93
|
+
export async function auditNode(fileKey, nodeId, depth) {
|
|
94
|
+
const token = loadToken();
|
|
95
|
+
const depthParam = depth ? `&depth=${depth}` : '';
|
|
96
|
+
const data = await figmaFetch(`/files/${fileKey}/nodes?ids=${nodeId}${depthParam}`, token);
|
|
97
|
+
const doc = data.nodes?.[nodeId]?.document;
|
|
98
|
+
if (!doc)
|
|
99
|
+
throw new Error(`Node ${nodeId} not found in file ${fileKey}`);
|
|
100
|
+
const findings = [];
|
|
101
|
+
const counter = { n: 0 };
|
|
102
|
+
walkAudit(doc, [], findings, counter);
|
|
103
|
+
return {
|
|
104
|
+
fileKey,
|
|
105
|
+
nodeId,
|
|
106
|
+
scannedNodes: counter.n,
|
|
107
|
+
findings,
|
|
108
|
+
p1Count: findings.filter((f) => f.severity === 'P1').length,
|
|
109
|
+
p2Count: findings.filter((f) => f.severity === 'P2').length,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export function formatAuditReport(report) {
|
|
113
|
+
const lines = [];
|
|
114
|
+
lines.push(`Figma Audit — ${report.fileKey} / ${report.nodeId}`);
|
|
115
|
+
lines.push(`Scanned ${report.scannedNodes} nodes · P1=${report.p1Count} P2=${report.p2Count}`);
|
|
116
|
+
lines.push('');
|
|
117
|
+
if (report.findings.length === 0) {
|
|
118
|
+
lines.push('✓ No CSS-incompatible properties found.');
|
|
119
|
+
return lines.join('\n');
|
|
120
|
+
}
|
|
121
|
+
for (const f of report.findings) {
|
|
122
|
+
lines.push(`[${f.severity}] ${f.path}`);
|
|
123
|
+
lines.push(` property: ${f.property} = ${f.value}`);
|
|
124
|
+
lines.push(` reason: ${f.note}`);
|
|
125
|
+
lines.push(` action: ${f.action}`);
|
|
126
|
+
lines.push('');
|
|
127
|
+
}
|
|
128
|
+
return lines.join('\n');
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/infra/lib/figma/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Figma 노드 → CSS 추출 + 트리 워커
|
|
3
3
|
*/
|
|
4
|
-
import type { FigmaNode, FigmaImageMap, FigmaTreeOptions, FigmaImageOptions, FigmaScreenshotOptions } from './types.js';
|
|
4
|
+
import type { FigmaNode, FigmaRawProps, FigmaWarning, FigmaImageMap, FigmaTreeOptions, FigmaImageOptions, FigmaScreenshotOptions } from './types.js';
|
|
5
5
|
export declare function getTree(options: FigmaTreeOptions): Promise<FigmaNode>;
|
|
6
6
|
export declare function collectImageRefs(node: FigmaNode, refs?: Set<string>): Set<string>;
|
|
7
|
+
/** Flat list of nodes with their raw numeric values — input for compareRaw. */
|
|
8
|
+
export declare function collectRawNodes(node: FigmaNode, out?: Array<{
|
|
9
|
+
nodeId: string;
|
|
10
|
+
name: string;
|
|
11
|
+
raw: FigmaRawProps;
|
|
12
|
+
}>): Array<{
|
|
13
|
+
nodeId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
raw: FigmaRawProps;
|
|
16
|
+
}>;
|
|
17
|
+
/** Flat list of every extraction warning in the tree (silent-drop replacement). */
|
|
18
|
+
export declare function collectWarnings(node: FigmaNode, out?: Array<{
|
|
19
|
+
nodeId: string;
|
|
20
|
+
name: string;
|
|
21
|
+
warning: FigmaWarning;
|
|
22
|
+
}>): Array<{
|
|
23
|
+
nodeId: string;
|
|
24
|
+
name: string;
|
|
25
|
+
warning: FigmaWarning;
|
|
26
|
+
}>;
|
|
7
27
|
export declare function getImages(options: FigmaImageOptions): Promise<FigmaImageMap>;
|
|
8
28
|
export declare function getScreenshot(options: FigmaScreenshotOptions): Promise<{
|
|
9
29
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/extract.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAwPpB,wBAAsB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAc3E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAI5F;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,GAAG,GAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,CAAM,GACpE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,aAAa,CAAA;CAAE,CAAC,CAM7D;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,EACf,GAAG,GAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAM,GACvE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,CAIhE;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CA2DlF;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB5G"}
|
|
@@ -15,10 +15,11 @@ function figmaColorToCSS(color) {
|
|
|
15
15
|
}
|
|
16
16
|
return `rgba(${r}, ${g}, ${b}, ${Number(a.toFixed(2))})`;
|
|
17
17
|
}
|
|
18
|
-
// ─── Node → CSS ─────────────────────────────────────────────────────
|
|
19
18
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
20
19
|
function extractCSS(node) {
|
|
21
20
|
const css = {};
|
|
21
|
+
const raw = {};
|
|
22
|
+
const warnings = [];
|
|
22
23
|
// Layout
|
|
23
24
|
if (node.layoutMode === 'VERTICAL') {
|
|
24
25
|
css.display = 'flex';
|
|
@@ -42,6 +43,7 @@ function extractCSS(node) {
|
|
|
42
43
|
}
|
|
43
44
|
if (node.itemSpacing != null && node.itemSpacing > 0) {
|
|
44
45
|
css.gap = `${node.itemSpacing}px`;
|
|
46
|
+
raw.itemSpacing = node.itemSpacing;
|
|
45
47
|
}
|
|
46
48
|
// Padding
|
|
47
49
|
const pt = node.paddingTop || 0;
|
|
@@ -50,6 +52,10 @@ function extractCSS(node) {
|
|
|
50
52
|
const pl = node.paddingLeft || 0;
|
|
51
53
|
if (pt || pr || pb || pl) {
|
|
52
54
|
css.padding = `${pt}px ${pr}px ${pb}px ${pl}px`;
|
|
55
|
+
raw.paddingTop = pt;
|
|
56
|
+
raw.paddingRight = pr;
|
|
57
|
+
raw.paddingBottom = pb;
|
|
58
|
+
raw.paddingLeft = pl;
|
|
53
59
|
}
|
|
54
60
|
// Size
|
|
55
61
|
if (node.absoluteBoundingBox) {
|
|
@@ -67,8 +73,12 @@ function extractCSS(node) {
|
|
|
67
73
|
// Opacity
|
|
68
74
|
if (node.opacity != null && node.opacity < 1) {
|
|
69
75
|
css.opacity = node.opacity.toFixed(2);
|
|
76
|
+
raw.opacity = node.opacity;
|
|
70
77
|
}
|
|
71
|
-
// Blend mode
|
|
78
|
+
// Blend mode — supported CSS values get mapped, everything else is
|
|
79
|
+
// recorded as a warning instead of silently dropped (which was the
|
|
80
|
+
// behaviour that let LINEAR_BURN / LINEAR_DODGE disappear without
|
|
81
|
+
// the implementer noticing).
|
|
72
82
|
const blendMap = {
|
|
73
83
|
MULTIPLY: 'multiply', SCREEN: 'screen', OVERLAY: 'overlay',
|
|
74
84
|
DARKEN: 'darken', LIGHTEN: 'lighten', COLOR_DODGE: 'color-dodge',
|
|
@@ -77,16 +87,27 @@ function extractCSS(node) {
|
|
|
77
87
|
SATURATION: 'saturation', COLOR: 'color', LUMINOSITY: 'luminosity',
|
|
78
88
|
};
|
|
79
89
|
if (node.blendMode && node.blendMode !== 'NORMAL' && node.blendMode !== 'PASS_THROUGH') {
|
|
80
|
-
|
|
90
|
+
raw.blendMode = node.blendMode;
|
|
91
|
+
if (blendMap[node.blendMode]) {
|
|
81
92
|
css.mixBlendMode = blendMap[node.blendMode];
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
warnings.push({
|
|
96
|
+
property: 'blendMode',
|
|
97
|
+
value: node.blendMode,
|
|
98
|
+
reason: 'no CSS mix-blend-mode equivalent — bake into asset or replace in Figma',
|
|
99
|
+
});
|
|
100
|
+
}
|
|
82
101
|
}
|
|
83
102
|
// Corner radius
|
|
84
103
|
if (node.cornerRadius != null && node.cornerRadius > 0) {
|
|
85
104
|
css.borderRadius = `${node.cornerRadius}px`;
|
|
105
|
+
raw.cornerRadius = node.cornerRadius;
|
|
86
106
|
}
|
|
87
107
|
else if (node.rectangleCornerRadii) {
|
|
88
108
|
const [tl, tr, br, bl] = node.rectangleCornerRadii;
|
|
89
109
|
css.borderRadius = `${tl}px ${tr}px ${br}px ${bl}px`;
|
|
110
|
+
raw.rectangleCornerRadii = [tl, tr, br, bl];
|
|
90
111
|
}
|
|
91
112
|
// Fills
|
|
92
113
|
let imageRef;
|
|
@@ -103,11 +124,24 @@ function extractCSS(node) {
|
|
|
103
124
|
}
|
|
104
125
|
}
|
|
105
126
|
}
|
|
106
|
-
// Strokes
|
|
127
|
+
// Strokes — CSS border is always centered on the edge. If Figma uses
|
|
128
|
+
// INSIDE/OUTSIDE, recording a warning lets the audit pipeline flag
|
|
129
|
+
// the visual shift rather than pretending the border matches.
|
|
107
130
|
if (node.strokes?.length && node.strokeWeight) {
|
|
108
131
|
const stroke = node.strokes.find((s) => s.visible !== false && s.type === 'SOLID');
|
|
109
132
|
if (stroke) {
|
|
110
133
|
css.border = `${node.strokeWeight}px solid ${figmaColorToCSS(stroke.color)}`;
|
|
134
|
+
raw.strokeWeight = node.strokeWeight;
|
|
135
|
+
if (node.strokeAlign) {
|
|
136
|
+
raw.strokeAlign = node.strokeAlign;
|
|
137
|
+
if (node.strokeAlign !== 'CENTER') {
|
|
138
|
+
warnings.push({
|
|
139
|
+
property: 'strokeAlign',
|
|
140
|
+
value: node.strokeAlign,
|
|
141
|
+
reason: 'CSS border is always centered — INSIDE/OUTSIDE shifts the visual box',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
111
145
|
}
|
|
112
146
|
}
|
|
113
147
|
// Effects
|
|
@@ -139,31 +173,50 @@ function extractCSS(node) {
|
|
|
139
173
|
const s = node.style;
|
|
140
174
|
if (s.fontFamily)
|
|
141
175
|
css.fontFamily = `'${s.fontFamily}', sans-serif`;
|
|
142
|
-
if (s.fontSize)
|
|
176
|
+
if (s.fontSize) {
|
|
143
177
|
css.fontSize = `${s.fontSize}px`;
|
|
144
|
-
|
|
178
|
+
raw.fontSize = s.fontSize;
|
|
179
|
+
}
|
|
180
|
+
if (s.fontWeight) {
|
|
145
181
|
css.fontWeight = String(s.fontWeight);
|
|
146
|
-
|
|
182
|
+
raw.fontWeight = s.fontWeight;
|
|
183
|
+
}
|
|
184
|
+
if (s.lineHeightPx) {
|
|
147
185
|
css.lineHeight = `${s.lineHeightPx}px`;
|
|
148
|
-
|
|
186
|
+
raw.lineHeightPx = s.lineHeightPx;
|
|
187
|
+
}
|
|
188
|
+
if (s.letterSpacing) {
|
|
149
189
|
css.letterSpacing = `${s.letterSpacing}px`;
|
|
190
|
+
raw.letterSpacing = s.letterSpacing;
|
|
191
|
+
}
|
|
150
192
|
const textAlignMap = {
|
|
151
193
|
LEFT: 'left', CENTER: 'center', RIGHT: 'right', JUSTIFIED: 'justify',
|
|
152
194
|
};
|
|
153
195
|
if (s.textAlignHorizontal && textAlignMap[s.textAlignHorizontal]) {
|
|
154
196
|
css.textAlign = textAlignMap[s.textAlignHorizontal];
|
|
155
197
|
}
|
|
198
|
+
// leadingTrim / textBoxTrim → CSS text-box-trim. Firefox unsupported
|
|
199
|
+
// as of 2026-04, so record a warning rather than emit a rule that
|
|
200
|
+
// will behave inconsistently across browsers.
|
|
201
|
+
if (s.leadingTrim || s.textBoxTrim) {
|
|
202
|
+
warnings.push({
|
|
203
|
+
property: 'style.leadingTrim',
|
|
204
|
+
value: String(s.leadingTrim ?? s.textBoxTrim),
|
|
205
|
+
reason: 'maps to text-box-trim — inconsistent browser support, rely on explicit line-height instead',
|
|
206
|
+
});
|
|
207
|
+
}
|
|
156
208
|
if (node.fills?.length) {
|
|
157
209
|
const textFill = node.fills.find((f) => f.visible !== false && f.type === 'SOLID');
|
|
158
210
|
if (textFill)
|
|
159
211
|
css.color = figmaColorToCSS(textFill.color);
|
|
160
212
|
}
|
|
161
213
|
}
|
|
162
|
-
|
|
214
|
+
const cssOut = imageRef ? { ...css, _imageRef: imageRef } : css;
|
|
215
|
+
return { css: cssOut, raw, warnings };
|
|
163
216
|
}
|
|
164
217
|
// ─── Tree Walker ────────────────────────────────────────────────────
|
|
165
218
|
function walkNode(node) {
|
|
166
|
-
const css = extractCSS(node);
|
|
219
|
+
const { css, raw, warnings } = extractCSS(node);
|
|
167
220
|
const result = {
|
|
168
221
|
nodeId: node.id,
|
|
169
222
|
name: node.name || '',
|
|
@@ -172,13 +225,15 @@ function walkNode(node) {
|
|
|
172
225
|
? { width: Math.round(node.absoluteBoundingBox.width), height: Math.round(node.absoluteBoundingBox.height) }
|
|
173
226
|
: null,
|
|
174
227
|
css: { ...css },
|
|
228
|
+
raw,
|
|
229
|
+
warnings,
|
|
175
230
|
children: [],
|
|
176
231
|
};
|
|
177
232
|
if (node.type === 'TEXT' && node.characters) {
|
|
178
233
|
result.text = node.characters;
|
|
179
234
|
}
|
|
180
|
-
if (css._imageRef) {
|
|
181
|
-
result.imageRef = css._imageRef;
|
|
235
|
+
if (result.css._imageRef) {
|
|
236
|
+
result.imageRef = result.css._imageRef;
|
|
182
237
|
delete result.css._imageRef;
|
|
183
238
|
}
|
|
184
239
|
if (node.children?.length) {
|
|
@@ -205,6 +260,23 @@ export function collectImageRefs(node, refs = new Set()) {
|
|
|
205
260
|
collectImageRefs(child, refs);
|
|
206
261
|
return refs;
|
|
207
262
|
}
|
|
263
|
+
/** Flat list of nodes with their raw numeric values — input for compareRaw. */
|
|
264
|
+
export function collectRawNodes(node, out = []) {
|
|
265
|
+
if (Object.keys(node.raw).length > 0) {
|
|
266
|
+
out.push({ nodeId: node.nodeId, name: node.name, raw: node.raw });
|
|
267
|
+
}
|
|
268
|
+
for (const child of node.children)
|
|
269
|
+
collectRawNodes(child, out);
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
/** Flat list of every extraction warning in the tree (silent-drop replacement). */
|
|
273
|
+
export function collectWarnings(node, out = []) {
|
|
274
|
+
for (const w of node.warnings)
|
|
275
|
+
out.push({ nodeId: node.nodeId, name: node.name, warning: w });
|
|
276
|
+
for (const child of node.children)
|
|
277
|
+
collectWarnings(child, out);
|
|
278
|
+
return out;
|
|
279
|
+
}
|
|
208
280
|
export async function getImages(options) {
|
|
209
281
|
const token = loadToken();
|
|
210
282
|
if (!fs.existsSync(options.outDir)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../src/infra/lib/figma/extract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../../src/infra/lib/figma/extract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { loadToken, maskToken, figmaFetch } from './api.js';
|
|
2
|
-
export { getTree, getImages, getScreenshot, collectImageRefs } from './extract.js';
|
|
3
|
-
export
|
|
2
|
+
export { getTree, getImages, getScreenshot, collectImageRefs, collectRawNodes, collectWarnings, } from './extract.js';
|
|
3
|
+
export { auditNode, formatAuditReport } from './audit.js';
|
|
4
|
+
export type { FigmaNode, FigmaRawProps, FigmaWarning, FigmaImageMap, FigmaTreeOptions, FigmaImageOptions, FigmaScreenshotOptions, } from './types.js';
|
|
5
|
+
export type { AuditFinding, AuditReport, AuditSeverity } from './audit.js';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC1D,YAAY,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { loadToken, maskToken, figmaFetch } from './api.js';
|
|
2
|
-
export { getTree, getImages, getScreenshot, collectImageRefs } from './extract.js';
|
|
2
|
+
export { getTree, getImages, getScreenshot, collectImageRefs, collectRawNodes, collectWarnings, } from './extract.js';
|
|
3
|
+
export { auditNode, formatAuditReport } from './audit.js';
|
|
3
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infra/lib/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EACL,OAAO,EACP,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,6 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Figma REST API 타입 정의
|
|
3
3
|
*/
|
|
4
|
+
/** Untranslated numeric values from Figma, kept alongside derived CSS so
|
|
5
|
+
* the compare step can diff against getComputedStyle without going through
|
|
6
|
+
* the CSS translation black box twice. */
|
|
7
|
+
export interface FigmaRawProps {
|
|
8
|
+
itemSpacing?: number;
|
|
9
|
+
paddingTop?: number;
|
|
10
|
+
paddingRight?: number;
|
|
11
|
+
paddingBottom?: number;
|
|
12
|
+
paddingLeft?: number;
|
|
13
|
+
cornerRadius?: number;
|
|
14
|
+
rectangleCornerRadii?: number[];
|
|
15
|
+
strokeWeight?: number;
|
|
16
|
+
strokeAlign?: string;
|
|
17
|
+
blendMode?: string;
|
|
18
|
+
opacity?: number;
|
|
19
|
+
fontSize?: number;
|
|
20
|
+
lineHeightPx?: number;
|
|
21
|
+
letterSpacing?: number;
|
|
22
|
+
fontWeight?: number;
|
|
23
|
+
}
|
|
24
|
+
/** Extraction warning — property was present in Figma but could not be
|
|
25
|
+
* translated to CSS (would have been silently dropped before). */
|
|
26
|
+
export interface FigmaWarning {
|
|
27
|
+
property: string;
|
|
28
|
+
value: string;
|
|
29
|
+
reason: string;
|
|
30
|
+
}
|
|
4
31
|
export interface FigmaNode {
|
|
5
32
|
nodeId: string;
|
|
6
33
|
name: string;
|
|
@@ -10,6 +37,10 @@ export interface FigmaNode {
|
|
|
10
37
|
height: number;
|
|
11
38
|
} | null;
|
|
12
39
|
css: Record<string, string>;
|
|
40
|
+
/** Untranslated numeric values — use these for reconciliation against getComputedStyle. */
|
|
41
|
+
raw: FigmaRawProps;
|
|
42
|
+
/** Properties that existed on the node but had no CSS equivalent. */
|
|
43
|
+
warnings: FigmaWarning[];
|
|
13
44
|
text?: string;
|
|
14
45
|
imageRef?: string;
|
|
15
46
|
children: FigmaNode[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CAChC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/figma/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;2CAE2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;mEACmE;AACnE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,2FAA2F;IAC3F,GAAG,EAAE,aAAa,CAAC;IACnB,qEAAqE;IACrE,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CAChC"}
|
|
@@ -21,6 +21,11 @@ export declare class MemoryStorage implements IMemoryStorage {
|
|
|
21
21
|
private fts5Available;
|
|
22
22
|
private vectorStore;
|
|
23
23
|
private embeddingProvider;
|
|
24
|
+
/**
|
|
25
|
+
* 프로젝트 메모리 디렉토리 해석 — `utils.js:projectMemoryDir` 와 동일한 규칙.
|
|
26
|
+
* `.vibe/memories/` (SSOT) 우선, legacy `.claude/memories/`, `.coco/memories/` fallback.
|
|
27
|
+
*/
|
|
28
|
+
private static resolveMemoryDir;
|
|
24
29
|
constructor(projectPath: string, embeddingPriority?: EmbeddingProviderType[]);
|
|
25
30
|
private initializeDatabase;
|
|
26
31
|
private initializeFTS5;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryStorage.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/memory/MemoryStorage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,YAAW,cAAc;IAClD,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,gBAAgB,CAAmC;IAC3D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,iBAAiB,CAAkC;
|
|
1
|
+
{"version":3,"file":"MemoryStorage.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/memory/MemoryStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,11 +15,30 @@ export class MemoryStorage {
|
|
|
15
15
|
fts5Available = false;
|
|
16
16
|
vectorStore = null;
|
|
17
17
|
embeddingProvider = null;
|
|
18
|
+
/**
|
|
19
|
+
* 프로젝트 메모리 디렉토리 해석 — `utils.js:projectMemoryDir` 와 동일한 규칙.
|
|
20
|
+
* `.vibe/memories/` (SSOT) 우선, legacy `.claude/memories/`, `.coco/memories/` fallback.
|
|
21
|
+
*/
|
|
22
|
+
static resolveMemoryDir(projectPath) {
|
|
23
|
+
try {
|
|
24
|
+
const candidates = [
|
|
25
|
+
path.join(projectPath, '.vibe', 'memories'),
|
|
26
|
+
path.join(projectPath, '.claude', 'memories'),
|
|
27
|
+
path.join(projectPath, '.coco', 'memories'),
|
|
28
|
+
];
|
|
29
|
+
for (const c of candidates)
|
|
30
|
+
if (existsSync(c))
|
|
31
|
+
return c;
|
|
32
|
+
}
|
|
33
|
+
catch { /* ignore */ }
|
|
34
|
+
return path.join(projectPath, '.vibe', 'memories');
|
|
35
|
+
}
|
|
18
36
|
constructor(projectPath, embeddingPriority) {
|
|
19
37
|
// Normalize path
|
|
20
38
|
const resolvedPath = path.resolve(projectPath);
|
|
21
|
-
// Project-based memory:
|
|
22
|
-
|
|
39
|
+
// Project-based memory: `.vibe/memories/` (새 SSOT) 를 기본으로,
|
|
40
|
+
// 기존 `.claude/memories/` 또는 `.coco/memories/` 가 있으면 거기에 기록.
|
|
41
|
+
const memoryDir = MemoryStorage.resolveMemoryDir(resolvedPath);
|
|
23
42
|
this.dbPath = path.join(memoryDir, 'memories.db');
|
|
24
43
|
try {
|
|
25
44
|
mkdirSync(memoryDir, { recursive: true });
|